Перейти к основному содержимому

⚡ Триггеры

Триггер определяет, когда запускается сценарий. Он задаётся в стартовом блоке «Старт», в поле «Тип триггера»: «Событие», «Webhook», «Ручной запуск», «По расписанию». Набор доступных событий зависит от типа сценария.

Событие

Сценарий запускается, когда в проекте что-то произошло. В блоке «Старт» задаются:

ПолеЧто делает
СобытиеТип события, на которое запускается сценарий
КаналыЗапускать сценарий только для выбранных каналов проекта
Дополнительные условияДерево условий по полям события
Событие должно подходить типу сценария

Если выбрать событие, не относящееся к типу сценария, редактор покажет: «Это событие не относится к выбранному типу флоу — флоу не запустится. Выберите подходящее событие». Событие тикета не запустит сценарий «Поддержка», и наоборот — такие пары сервис отсекает.

События поддержки

Сценарии типа «Поддержка». В правой колонке — техническое имя события: под ним оно приходит в сервис сценариев.

СобытиеКогда срабатываетИмя события
Сообщение от клиентапришло входящее сообщение или клиент нажал кнопкуsupport.message, support.message.created
Обращение созданосоздано новое обращениеsupport.created
Сменился статус обращенияизменился статусsupport.status.changed
Сменился приоритетизменился приоритетsupport.priority.changed
Назначен операторсменился ответственныйsupport.assigned
Обращение закрытообращение переведено в «Решён» или «Отменён»support.closed
Действие оператораоператор запустил сценарий вручную из чатаsupport.operator.action
Два события не приходят

«Назначен оператор» не срабатывает никогда: у обращения нет поля ответственного, назначить его можно только на группу, и событие support.assigned никто не отправляет.

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

События тикетов

Сценарии типа «Тикеты».

СобытиеКогда срабатываетИмя события
Тикет создансоздан тикет, в том числе из чатаticket.created
Комментарий клиентаклиент написал по тикетуticket.message
Сменился статусизменился статус тикетаticket.status.changed
Сменился приоритетизменился приоритетticket.priority.changed
Действие оператораоператор запустил сценарий вручную из тикетаticket.operator.action
Три события не приходят

В списке событий редактора есть ещё «Сменился исполнитель» (ticket.assigned), «Другие изменения» (ticket.updated) и «Тикет закрыт» (ticket.closed), но система тикетов их никогда не отправляет — сценарий на них не запустится. Смена исполнителя и смена типа тикета вообще не порождают событий.

Глобальные события

Сценарии типа «Глобальный». В селекте события сгруппированы:

  • Биллинг / Квоты — «Подписка оформлена», «Подписка отменена», «Платёж прошёл», «Платёж не прошёл», «Заканчивается триал», «Превышен AI-лимит», «Превышен HTTP-лимит».
  • Пользователи — «Новый пользователь», «Добавлен тег», «Снят тег», «Изменилось CRM-поле», «Пользователь отписался».
  • Система — «Упал флоу (для алертинга)».

Кроме готового списка в это поле можно вписать свой topic — подсказка в поле: «Свой topic, например my.custom.event». Тогда сценарий будет стартовать по событию с этим именем.

Раздела биллинга в интерфейсе нет

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

Каналы

Поле «Каналы» — это мультиселект конкретных каналов проекта: ботов и виджетов, которые заведены на странице «Каналы». Это не выбор платформы: если у проекта два Telegram-бота, можно запускать сценарий только для одного из них. Если ничего не выбрано, сценарий срабатывает по всем каналам.

Когда каналов у проекта ещё нет, поле показывает подсказку: «У проекта пока нет каналов — добавьте бота или виджет на странице „Каналы“».

Дополнительные условия

Раздел «Дополнительные условия» ограничивает запуск: «Условий нет — сценарий стартует на каждое подходящее событие».

Условия собираются в дерево из групп «ВСЕ из (AND)», «ЛЮБОЕ из (OR)» и «НЕ (NOT)»; клик по заголовку группы переключает AND ↔ OR. Максимальная глубина вложенности — 5, дальше редактор пишет: «Достигнута максимальная глубина дерева (5). Глубже добавить не получится».

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

Поля в выпадающем списке сгруппированы:

ГруппаПримеры полей
Метаданные события«Тип события», «ID проекта», «ID пользователя»
Поля события (payload)«Канал», «Статус», «Приоритет», «Текст сообщения», «Payload кнопки», «Вложения», «Прошлый статус», «Прошлый приоритет», «ID чата», «ID тикета», «Изменённые поля»
Пользователь«ID», «Username», «Email», «Телефон», «Имя», «Фамилия», «Язык»
Проект«Название проекта»
Не все поля работают до старта

Условие проверяется по «сырому» событию, до того как сценарий начал работу. Надёжно резолвятся только «Тип события», «ID проекта», «ID пользователя» и поля события (payload). Условия по данным, которых в событии нет, — теги, ответственный, линия, последнее сообщение, время открытия и закрытия, заголовок и описание тикета — бэкенд отклоняет при публикации: иначе сценарий молча никогда бы не сработал.

Если такое условие осталось в старом сценарии, редактор показывает предупреждение «Найдены недопустимые условия фильтра запуска» с кнопками «Перенести в CONDITION» и «Удалить условия». Перенос кладёт проверку в блок «Условие» после старта — там уже доступны {{chat.*}} и {{ticket.*}}. Учтите: условия из OR-групп при переносе становятся «И».

Пустая OR-группа

«Пустая OR-группа — сценарий никогда не сматчится. Добавьте хотя бы одно условие». Пустая AND-группа, наоборот, ничего не ограничивает.

Какой сценарий сработает, если подходит несколько

Под одно событие могут подойти сразу несколько сценариев проекта. Правило такое:

Тип сценарияЧто происходит
Поддержка, Тикетызапускается ровно один сценарий — с наибольшим приоритетом, а при равном приоритете более старый
Глобальныйзапускаются все подходящие сценарии сразу

Приоритет задаётся при создании сценария (по умолчанию 0). Кроме того, на одно обращение или тикет одновременно идёт только один запуск: новый вытесняет предыдущий — см. Версии и запуски.

Расписание

Сценарий запускается по времени. Расписание задаётся конструктором, а не сырым cron: в поле «Расписание» выбирается частота — «Каждую минуту», «Каждые N минут», «Каждый час», «Каждый день», «Каждую неделю», «Каждый месяц», «Своё выражение». В зависимости от частоты появляются поля «Во время», «По дням» и «Число месяца», а под ними — человекочитаемое превью вида «По пн, ср в 09:00».

Режим «Своё выражение» принимает cron-строку из шести полей: секунды, минуты, часы, день месяца, месяц, день недели. Пример из подсказки: 0 0 9 * * MON-FRI — будни в 9:00.

Поле «Часовой пояс» — поиск по списку IANA с группой «Часто используемые», по умолчанию «UTC (по умолчанию)». Часовой пояс влияет на интерпретацию расписания.

В сценарии доступны {{trigger.fired_at}} (момент срабатывания) и {{trigger.cron}} (выражение, которое сработало).

Запуск идёт без клиента

У сценария по расписанию нет ни клиента, ни обращения, поэтому переменные {{user.*}}, {{chat.*}} и {{ticket.*}} в нём пусты, а блоки с областью «Пользователь» остановятся с ошибкой.

Вебхук

Внешняя система запускает сценарий HTTP-запросом. Подсказка в редакторе: «URL вебхука для этого flow будет доступен после публикации». Отдельной страницы управления вебхуками в дашборде нет.

POST /api/v1/projects/{projectId}/triggers/{flowId}/webhook

В теле запроса передаются:

ПолеОбязательноОписание
payloadнетПроизвольный JSON — в сценарии доступен как {{trigger.payload.<ключ>}}
headersнетЗаголовки (ключи в нижнем регистре) — {{trigger.headers.<заголовок>}}
userIdнетОт чьего имени идёт запуск
scopeIdнетUUID объекта (обращение, тикет), к которому относится запуск

Ограничения и правила безопасности:

  • эндпоинт закрыт авторизацией — нужен токен пользователя с ролью «Администратор» в проекте; открытым URL он не является;
  • чувствительные заголовки Authorization и Cookie сервер вырезает до того, как их увидит сценарий;
  • тело payload — не больше 64 КиБ;
  • на проект — не больше 600 вебхуков в минуту.

→ См. также Входящие вебхуки.

Ручной запуск

Сценарий с триггером «Ручной запуск» стартует из чата, из тикета или через API. Право — «Администратор».

Из чата и из тикета. В поле ввода сообщения есть кнопка «Запустить сценарий». Открывается попап «Запуск сценария»:

  1. Поиск по сценариям проекта.
  2. Группа «Рекомендовано AI» — сценарии, которые ИИ подобрал по контексту переписки; ниже — раздел «Все сценарии».
  3. Если сценарий объявил входные переменные, их значения заполняются парами ключ/значение. Подсказка: «Если сценарий ожидает переменные — добавьте их парами ключ/значение. {{flow.<ключ>}} в блоках вернёт значение». Если переменных нет — «Сценарий не требует входных переменных. Нажмите „Запустить“».
  4. Кнопка «Запустить». Значения проверяются: «Обязательное поле», «Значение не подходит по типу», «Должно быть одним из: …».

В списке показываются только опубликованные сценарии с триггером «Ручной запуск» и подходящим типом: из чата — «Поддержка», из тикета — «Тикеты».

После запуска в чате появляется системная запись «Сценарий „X“ запущен оператором», а поле ввода блокируется на время выполнения.

Входные переменные объявляются в стартовом блоке в поле «Входные переменные» — правила именования и типы описаны в разделе Переменные.

Переменные триггера

У каждого триггера свой набор данных в {{trigger.*}}: для входящего сообщения это {{trigger.text}}, {{trigger.channel}}, {{trigger.button}}, для расписания — {{trigger.fired_at}}, для вебхука — {{trigger.payload.*}}. Полные таблицы — в разделе Переменные.

Ограничения

ЧтоЛимит
Глубина дерева дополнительных условий5 уровней
Тело вебхука (payload)64 КиБ
Вебхуков в минуту на проект600
Ручных запусков в минуту на пользователя60

Кто что может

ДействиеМинимальная роль
Смотреть настройки запускаПо умолчанию
Менять тип триггера, событие, условия и расписаниеРедактор
Публиковать сценарий, чтобы триггер заработалАдминистратор
Запускать вручную и вызывать вебхук-триггерАдминистратор

Блоки · Переменные · Версии и запуски