База знаний GetMyBot

Действия

Полный список действий реакции – сообщения, метки, данные, HTTP, ИИ, логика и интеграции, и бюджет одного события.

На этой странице

Действия определяют, что бот делает при срабатывании реакции. У реакции может быть несколько действий; бот выполняет их по порядку сверху вниз. Чтобы добавить действие, нажмите Добавить действие в разделе Действия редактора. Действия обмениваются данными через контекст выполнения (ctx) и параметры пользователя. См. Подстановки и формулы.

Сообщения и ответы

  • Отправить сообщение: главное действие: собирает ответ из блоков (текст, фото, файл, задержка, ИИ, вызов реакции), добавляет inline-кнопки, меню и шаги диалога. Подробно: Сообщения и кнопки.
  • Сохранить сообщение: записывает текст входящего сообщения в параметр пользователя.
  • Переслать: пересылает входящее сообщение в указанные чаты (с опциональным ID топика).
  • Уведомление: отправляет уведомление в служебные чаты с данными о пользователе, чате и тексте.
  • Кнопка меню: меняет кнопку меню Telegram (setChatMenuButton) без перезапуска бота: стандартная, список команд или Mini App с текстом и URL (подстановки работают). Область «этот чат» работает только в личной переписке с подписчиком, вызвавшим реакцию, — в группе или другом типе чата действие завершится ошибкой; область «все чаты» меняет общую кнопку бота для всех, у кого нет своей, и не может стоять внутри цикла. На каналах, отличных от Telegram, действие тихо пропускается.

Пользователь: метки и параметры

  • Изменить метки: добавляет и/или удаляет метки подписчика. Поле «Срок, дней» (ttl_days) делает добавляемые метки временными: по истечении срока метка снимается автоматически, а бот получает системное событие «Метка истекла» (см. триггеры). Так строится доступ по подписке: «оплатил → метка на 30 дней → по истечении кик из закрытого чата».
  • Изменить параметры: задаёт, удаляет или увеличивает значения параметров пользователя.

Модерация

  • Удалить полученное: удаляет входящее сообщение (опционально: все сообщения пользователя, с задержкой).
  • Удалить отправленные: удаляет сообщения бота (этой реакции или все в чате, с задержкой).
  • Изменить права: заглушить / снять заглушку / забанить / разбанить / ограничить права / исключить / одобрить заявку / отклонить заявку участника, на срок или навсегда; для ограничения выбираются конкретные права. Исключить (kick) убирает участника из чата без чёрного списка: в Telegram это бан и сразу разбан, в VK – только через чёрный список сообщества (groups.ban), иначе VK исключать не умеет. Одобрить заявку (approve) принимает уже поданную заявку подписчика на вступление в закрытый чат или сообщество – так выдаётся доступ в клуб. Отклонить заявку (decline) отвечает на ту же уже поданную заявку отказом. Это ответ на существующую заявку, а не бан и не исключение: заявка снимается, человек не попадает в чёрный список и может подать её снова, поэтому у действия нет ни срока, ни набора прав. Если заявки нет, отклонять нечего. В Telegram боту нужно право can_invite_users – оно же управляет заявками на вступление. VK эту операцию не поддерживает: одобрить заявку в сообщество он умеет, отклонить – нет, поэтому узел кампании завершится ошибкой, а обычная реакция будет отклонена рендерером при отправке. Заявитель берётся из самого события – это подавший заявку пользователь, а не user_chat_id. user_chat_id Telegram присылает рядом с заявкой: это временный личный диалог, открытый для того, чтобы бот мог написать заявителю, и он не идентификатор для модерации и не id заявителя – модерация по нему не отклонила бы ничего и адресовала бы личную переписку. Поле «Чат» (chat_id) задаёт целевой чат явно; пустое значение берёт чат события, но только если реакция сработала в группе или канале. Для события «Метка истекла», расписания, узлов кампании и любого другого запуска из личного диалога чат нужно указать явно, иначе действие пропускается.
  • Важная реакция (цвет): помечает диалог цветом для оператора.

Данные и коллекции

  • Создать запись: добавляет строку в коллекцию; со «ключом дедупликации» работает как upsert (без дублей).
  • Обновить записи: меняет строки, подходящие под фильтр.
  • Найти записи: читает строки в контекст как массив (для перебора).
  • Удалить записи: удаляет строки по фильтру.
  • Цикл по списку: перебирает массив из ctx и выполняет вложенные действия для каждого элемента: посчитать сумму заказов, записать каждый элемент в коллекцию, дёрнуть внешний сервис по каждой строке.

Цикл не подходит для рассылки: одно событие может отправить не больше 50 сообщений, а цикл берёт до 500 элементов. Массовая отправка: это Рассылки и Кампании, у них своя скорость и свой учёт. Подробности: ниже, «Бюджет одного события».

Подробнее о коллекциях: Коллекции и данные.

Внешние запросы

  • Веб-запрос: HTTP-запрос (GET/POST/PUT/DELETE) с заголовками, телом, кодами успеха, таймаутом и повторами; ответ сохраняется в параметр или ctx по JSONPath; можно выполнять асинхронно и запускать реакции при успехе/ошибке. Заголовок Idempotency-Key платформа проставляет сама и при повторе того же шага присылает то же значение (свой заголовок с таким именем будет заменён): принимающая сторона может по нему отбрасывать дубли.
  • Загрузить URL: скачивает страницу и сохраняет её читаемый текст в ctx (для последующей обработки или ИИ).
  • Запрос к источнику: читает данные из подключённого коннектора (REST / OzmaDB) в ctx.
  • Запись в источник: пишет данные в коннектор (POST/PUT/DELETE).

Об источниках и ключах: Источники и ключи.

ИИ и вычисления

  • ИИ: обращается к языковой модели: промпт, сохранение ответа в параметр/ctx, опциональная JSON-схема для извлечения структуры, отправка ответа пользователю. См. ИИ-ответы.
  • Вычисление: считает значение в одном из трёх режимов, в действии выбирается ровно один: «Формула» (короткое выражение, expr), «Таблица решений» (правила «когда → тогда», первое истинное побеждает, rules) или «Расширенная формула» (полный язык со списками, JSON и хэшами, formula). Результат сохраняется в ctx и/или параметр. См. Формулы.

Логика и сценарии

  • Цепная реакция: запускает другую реакцию по её имени.
  • Следующая реакция: передаёт управление следующей подходящей реакции в списке.
  • Запустить сценарий: стартует пошаговый визард (flow). См. Сценарии.
  • Запросить подтверждение: отправляет карточку аппруверу; кнопки «подтвердить»/«отклонить» запускают заданные реакции.
  • Передать оператору: переводит диалог в инбокс оператора. См. Чаты и операторы.

Платежи

  • Выставить счёт: создаёт счёт в кассе бота и отдаёт ссылку на оплату в подстановке {payment:url}. Оплата обрабатывается отдельной реакцией с триггером Платёж. См. Платежи и баланс.

Интеграции

Действия GetCourse, Google Таблица и Google Диск подключаются через одноимённые интеграции (см. Интеграции). Универсальная отправка во внешний сервис доступна через Вебхук-интеграцию и действие Веб-запрос.

Google Таблица поддерживает три операции:

  • Добавить строку – колонки строки задаются парами «заголовок → значение» (с подстановками), порядок колонок – по алфавиту ключей.
  • Прочитать последнюю строку – последняя непустая строка листа после заголовка.
  • Найти строку по значению колонки – первая строка, где колонка (заголовок без учёта регистра или буква A, B, …) равна искомому значению; значение поддерживает подстановки ({{param.email}}).

Результат чтения сохраняется в параметр или контекст как JSON {"found":true,"row_number":12,"cells":[…],"values":{"Email":"…","Plan":"…"}}. При сохранении в контекст lead доступны {{ctx.lead.found}}, {{ctx.lead.row_number}} и {{ctx.lead.<заголовок>}} – например, {{ctx.lead.Plan}}. Если строка не найдена, found = false и ячейки пустые; ошибок реакция не получает. Читаются первые 5000 строк листа (см. Лимиты платформы).

Бюджет одного события

Одно входящее событие: сообщение подписчика, нажатие кнопки, срабатывание триггера: расходует бюджет события. Он общий на всю работу, которую это событие вызвало: на саму реакцию, на цепные реакции, на вложенные циклы и на асинхронные веб-запросы, которые продолжают выполняться после ответа. Бюджет существует, чтобы одна ошибка в реакции (или один вредный ввод) не заняла общие для всех ботов воркеры.

Три границы:

Что ограниченоСколькоЧто происходит на границе
Действий на событие5000, включая вложенныеДействие не выполняется, шаг помечен ошибкой
Исходящих сообщений на событие50Сообщение не ставится в очередь, шаг помечен ошибкой
Время события5 минутСобытие прекращается, незавершённые внешние вызовы отменяются

Отдельно ограничен один цикл: до 500 элементов за проход. Если в массиве больше, лишние элементы просто не обрабатываются, и в карточке реакции этого не видно: поэтому не полагайтесь на цикл там, где важно обработать список целиком.

Почему сообщений именно 50, а элементов 500

Это не опечатка и не забытая настройка, а граница между двумя разными вещами.

Реакция: это ответ конкретному человеку на его действие. Пятьдесят исходящих сообщений на одно входящее: это уже с большим запасом.

Рассылка: это доставка многим. У неё своя скорость, свои паузы, свой учёт отправленного и возможность поставить на паузу. См. Рассылки и Кампании.

Поэтому цикл по 500 элементам с отправкой сообщения внутри: не рассылка, а обрезанная рассылка: первые 50 сообщений уйдут, остальные 450 будут отказаны. Это задуманное поведение, а не сбой. Если вам нужно отправить по списку: используйте рассылку.

Считаются именно исходящие сообщения, а не действия. Ответ из нескольких блоков (текст, фото, файл) расходует бюджет по одному на блок. Если очередной ответ не помещается в остаток бюджета, он не отправляется целиком: лучше не отправить сообщение, чем отправить его половину.

Как понять, что упёрлись в бюджет

Отказ виден в карточке реакции внутри диалога подписчика (раздел Люди → диалог): среди шагов появляется шаг с ошибкой «Превышен бюджет события», и в нём написано, какой именно бюджет кончился: actions, sends или deadline.

Чего в отказе нет: он не приходит в ответе API и не приходит подписчику. Если реакция вызвана через API или веб-запрос, ответ будет обычным: сам вызов принят, это внутри него часть работы отказана. Единственный способ увидеть: карточка реакции.

После отказа цикл не прерывается: он продолжает перебирать оставшиеся элементы, и каждый следующий получает такой же отказ. Поэтому в карточке будет не один шаг с ошибкой, а много: по одному на каждый непоместившийся элемент. Сама реакция при этом завершается с ошибкой.

Что делать вместо

  • Нужно отправить многим: Рассылки или Кампании. У них бюджета события нет: это отдельный, размеренный процесс с собственным учётом.
  • Нужно обработать большой список без отправки (записать, посчитать, синхронизировать): цикл подходит, но помните про 500 элементов за проход: разбивайте выборку фильтром или лимитом коллекции.
  • Нужны вложенные циклы: считайте произведение: внешние 100 × внутренние 100: это уже 10 000 действий, вдвое больше бюджета.
  • Реакция упирается в 5 минут: почти всегда дело во внешних вызовах. Сделайте Веб-запрос асинхронным и продолжите работу отдельной реакцией по успеху или ошибке.

Что дальше