⚡ Триггеры
Триггер определяет, когда запускается сценарий. Он задаётся в стартовом блоке «Старт», в поле «Тип триггера»: «Событие», «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-группа — сценарий никогда не сматчится. Добавьте хотя бы одно условие». Пустая 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. Право — «Администратор».
Из чата и из тикета. В поле ввода сообщения есть кнопка «Запустить сценарий». Открывается попап «Запуск сценария»:
- Поиск по сценариям проекта.
- Группа «Рекомендовано AI» — сценарии, которые ИИ подобрал по контексту переписки; ниже — раздел «Все сценарии».
- Если сценарий объявил входные переменные, их значения заполняются парами ключ/значение. Подсказка: «Если сценарий ожидает переменные — добавьте их парами ключ/значение.
{{flow.<ключ>}}в блоках вернёт значение». Если переменных нет — «Сценарий не требует входных переменных. Нажмите „Запустить“». - Кнопка «Запустить». Значения проверяются: «Обязательное поле», «Значение не подходит по типу», «Должно быть одним из: …».
В списке показываются только опубликованные сценарии с триггером «Ручной запуск» и подходящим типом: из чата — «Поддержка», из тикета — «Тикеты».
После запуска в чате появляется системная запись «Сценарий „X“ запущен оператором», а поле ввода блокируется на время выполнения.
Входные переменные объявляются в стартовом блоке в поле «Входные переменные» — правила именования и типы описаны в разделе Переменные.
Переменные триггера
У каждого триггера свой набор данных в {{trigger.*}}: для входящего сообщения это {{trigger.text}}, {{trigger.channel}}, {{trigger.button}}, для расписания — {{trigger.fired_at}}, для вебхука — {{trigger.payload.*}}. Полные таблицы — в разделе Переменные.
Ограничения
| Что | Лимит |
|---|---|
| Глубина дерева дополнительных условий | 5 уровней |
Тело вебхука (payload) | 64 КиБ |
| Вебхуков в минуту на проект | 600 |
| Ручных запусков в минуту на пользователя | 60 |
Кто что может
| Действие | Минимальная роль |
|---|---|
| Смотреть настройки запуска | По умолчанию |
| Менять тип триггера, событие, условия и расписание | Редактор |
| Публиковать сценарий, чтобы триггер заработал | Администратор |
| Запускать вручную и вызывать вебхук-триггер | Администратор |
→ Блоки · Переменные · Версии и запуски