🔢 Переменные
Сценарии работают с переменными — данными, которые передаются между блоками. В тексты, условия и поля блоков переменные подставляются синтаксисом {{...}}, вложенные поля — через точку: {{trigger.payload.order_id}}, {{chat.status}}.
Пробелы внутри скобок допустимы ({{ flow.name }} работает), внутри самого пути — нет. Имя переменной — латиница, цифры, подчёркивание и точка, начинается с буквы или подчёркивания, до 256 символов.
Источники переменных
Источников ровно пять — они отличаются тем, где значение живёт и кто его пишет.
| Источник | Префикс | Как живёт |
|---|---|---|
| Система | {{system.*}} | вычисляется в момент чтения, только чтение |
| Сценарий | {{flow.*}} | живёт в пределах одного запуска, пишется блоками |
| Пользователь | {{user.*}} | сохраняется для конкретного клиента и переживает запуски |
| Проект | {{project.*}} (то же, что {{tenant.*}}) | общее для всего проекта значение |
| Триггер | {{trigger.*}} | данные события, которым запустился сценарий, только чтение |
Отдельно стоят данные обращения и тикета — {{chat.*}} и {{ticket.*}}. Они не хранятся в запуске: сценарий подтягивает их из других сервисов по требованию, при первом обращении к переменной.
Системные переменные
Доступны всегда и только для чтения. Первые четыре пересчитываются при каждом обращении.
| Переменная | Пример | Что это |
|---|---|---|
{{system.now}} | 2026-05-16T15:30:00Z | Текущее время (UTC) в момент выполнения блока |
{{system.today}} | 2026-05-16 | Сегодняшняя дата (UTC) |
{{system.weekday}} | Saturday | День недели по-английски |
{{system.utc_offset}} | +00:00 | Смещение часов сервера от UTC |
{{system.run_id}} | UUID | Идентификатор этого запуска |
{{system.flow_id}} | UUID | Идентификатор сценария |
{{system.flow_name}} | Обработка возвратов | Название сценария, может быть пустым |
{{system.flow_type}} | SUPPORT | Тип сценария |
{{system.project_id}} | UUID | Идентификатор проекта |
{{system.project_name}} | Acme Bakery | Название проекта, может быть пустым |
Переменные клиента
| Переменная | Что это |
|---|---|
{{user.id}} | UUID клиента — заполнен, если запуск идёт от имени клиента |
{{user.first_name}}, {{user.last_name}}, {{user.username}} | Имя, фамилия, ник |
{{user.email}}, {{user.phone}} | Контакты |
{{user.locale}}, {{user.timezone}} | Язык и часовой пояс |
{{user.created_at}} | Когда появилась запись о клиенте |
Всё, что вы сами записали блоком «Переменная» с областью «Пользователь», тоже доступно как {{user.<имя>}}.
Профильные поля (first_name, last_name, username, email, phone, locale, timezone, created_at) сейчас не заполняются и подставляются пустой строкой — интеграция с сервисом пользователей ещё не подключена. Реально заполнен только {{user.id}}. В панели переменных такие поля помечены бейджем «может быть пустым».
Переменные проекта
{{project.<ключ>}} — значения, записанные блоком «Переменная» с областью «Тенант». Они общие для всего проекта и живут между запусками. Префикс {{tenant.*}} — синоним, работает так же.
Обычно сюда кладут то, что не должно лежать в графе открытым текстом: ключ внешнего API, идентификатор кабинета, адрес эндпоинта. В блоке «HTTP запрос» такое значение подставляется в поле авторизации как {{project.api_token}}.
Блоку «AI-агент» переменные {{project.*}} и {{tenant.*}} не выдаются намеренно — компилятор отклонит попытку добавить их в контекст агента. Но текст инструкции агента подставляется как обычный шаблон: если написать {{project.api_token}} прямо в инструкции, значение уедет в промпт модели. Не пишите секреты в инструкцию.
Данные обращения
Доступны в сценариях «Поддержка». Первая группа задумана как подтягиваемая по запросу: при первом обращении к переменной сценарий идёт за актуальным состоянием обращения.
| Переменная | Что это |
|---|---|
{{chat.id}} | UUID обращения |
{{chat.channel}} | Канал: vk, telegram, discord, website |
{{chat.status}} | Текущий статус |
{{chat.priority}} | Текущий приоритет |
{{chat.line}} | Линия поддержки; пусто, если не назначена |
{{chat.assignee_id}} | Ответственный; пусто, если не назначен |
{{chat.platform_user_id}} | ID клиента на платформе (например, Telegram) |
{{chat.opened_at}} | Когда обращение открыли |
{{chat.tags}} | Теги обращения (список) |
{{chat.thread_id}} | ID треда, если канал их поддерживает |
Читать эти поля пока нечем: система поддержки не отдаёт эндпоинт, из которого сценарий подтягивал бы состояние обращения. Поэтому любое обращение к {{chat.*}} в сценарии вернёт пустое значение — включая условия в блоке «Условие».
Что делать, пока это так: берите данные из события. Текст сообщения — {{trigger.text}}, нажатую кнопку — {{trigger.button}}, канал — {{trigger.channel}}, прошлый и новый статус — из полей события. Всё, что сценарий записал сам (например, ответ клиента из блока «Вопрос»), доступно как обычно через {{flow.*}}.
Вторая группа приходит вместе с событием и доступна только на своём событии:
| Переменная | На каком событии |
|---|---|
{{chat.last_message}} | «Сообщение от клиента» |
{{chat.closed_at}}, {{chat.close_reason}} | «Обращение закрыто» |
{{chat.previous_status}} | «Сменился статус обращения» |
{{chat.previous_priority}} | «Сменился приоритет» |
{{chat.previous_assignee_id}} | «Назначен оператор» |
Оно никогда не срабатывает, поэтому {{chat.previous_assignee_id}} в реальном запуске не встретится — см. Триггеры.
Данные тикета
Доступны в сценариях «Тикеты». Подтягиваются по запросу:
| Переменная | Что это |
|---|---|
{{ticket.id}} | UUID тикета |
{{ticket.title}} | Заголовок |
{{ticket.description}} | Описание; может быть пустым |
{{ticket.status}}, {{ticket.priority}} | Текущий статус и приоритет |
{{ticket.assignee_id}} | Исполнитель; пусто, если не назначен |
{{ticket.author_id}} | Кто создал тикет |
{{ticket.category}} | Категория; может быть пустой |
{{ticket.tags}} | Теги (список) |
{{ticket.created_at}}, {{ticket.modified_at}}, {{ticket.modified_by}} | Когда создан, когда и кем изменён |
Событийные переменные:
| Переменная | На каком событии |
|---|---|
{{ticket.previous_status}} | «Сменился статус» |
{{ticket.previous_priority}} | «Сменился приоритет» |
В событиях тикета поле исполнителя заполняется автором тикета, а не тем, на кого тикет назначен. Не стройте на нём маршрутизацию.
Данные триггера
Набор {{trigger.*}} зависит от того, чем запустился сценарий.
| Триггер / событие | Доступные переменные |
|---|---|
| Любое событие | event_type |
| «Сообщение от клиента», «Комментарий клиента» | text, button, channel, attachments, location_lat, location_lng, contact_phone, contact_name |
| «Другие изменения» (тикет) | changed_fields |
| По расписанию | fired_at, cron |
| Вебхук | payload.<ключ>, headers.<заголовок> |
| Биллинг | plan, subscription_id, invoice_id, amount, currency, days_left, ends_at, reason |
| Квоты | period, current_usage, limit |
| Пользователи | id, email, phone, name, source, tag, field, value, previous_value |
| «Упал флоу» | run_id, flow_id, flow_name, flow_type, error, failed_block_id, failed_at |
{{trigger.text}} — текст того сообщения, которым запуск начался. Ответ клиента на блок «Вопрос» лежит в {{flow.<имя>.text}}. Пока {{chat.last_message}} пуст, свежий текст в сценарии есть только в этих двух местах.
Области видимости
У переменных, которые вы создаёте блоками «Переменная», «Очистить переменную», «Изменить число» и «Переключить флаг», есть поле «Область»:
| Значение в интерфейсе | Как живёт |
|---|---|
| Сценарий | только в текущем запуске, по завершении исчезает |
| Пользователь | сохраняется для конкретного клиента между запусками, читается как {{user.<имя>}} |
| Тенант | общая на весь проект, читается как {{project.<имя>}} |
Область «Пользователь» недоступна, если запуск идёт без клиента (например, по расписанию) — блок остановится с ошибкой. Используйте «Сценарий» или «Тенант».
Типы значений
Переменные бывают строкой, числом, логическим значением (да/нет), объектом (JSON), списком и датой/временем. Тип выводится из значения; в панели переменных он показан рядом с именем.
Входные переменные
Для триггеров «Ручной запуск» и «Webhook» в блоке «Старт» есть поле «Входные переменные»: «Доступны в шаблонах блоков как {{flow.<имя>}}». Если переменных нет — «Сценарий запускается без аргументов. Добавьте переменные если они нужны».
У каждой переменной задаются:
| Поле | Обязательно | Описание |
|---|---|---|
| Имя | да | Только snake_case и уникальное в рамках сценария |
| Тип | да | string, number, boolean или json |
| Обязательное | нет | Значение придётся указать при запуске |
| Значение по умолчанию | нет | Подставится, если значение не передали |
| Описание | нет | Пояснение для того, кто запускает сценарий |
| Допустимые значения (enum) | нет | Список разрешённых значений |
Проверки, которые показывает редактор:
- «Имя обязательно»;
- «Только snake_case: lowercase, цифры, нижние подчёркивания»;
- «Имя уже используется в этом сценарии»;
- «Для обязательного поля default игнорируется — уберите одно из двух»;
- «Значение по умолчанию не подходит по типу»;
- «Значение по умолчанию должно быть из списка enum»;
- «Добавьте хотя бы одно значение или выключите enum».
При ручном запуске значения проверяются ещё раз: «Обязательное поле», «Значение не подходит по типу», «Должно быть одним из: …».
Где посмотреть доступные переменные
В редакторе есть панель «Переменные» и шпаргалка «Доступные переменные» — список того, что реально доступно в этом сценарии с учётом его типа, триггера, события и того, какие блоки стоят выше по графу. Клик по переменной копирует её в буфер («Клик — скопировать в буфер»).
Бейджи в списке:
| Что видно | Что означает |
|---|---|
| может быть пустым | значение бывает не заполнено |
| live | пересчитывается при каждом обращении |
| по запросу | подтягивается из другого сервиса при первом обращении |
| приоритетная для этого блока | обычно именно её сюда и подставляют |
Подсказки об ошибках прямо в поле: «переменная не найдена», «переменная ещё не записана к этому шагу», «это объект — укажите конкретное поле через точку».
Ограничения
| Что | Лимит |
|---|---|
| Значение одной переменной | 64 КиБ |
| Все переменные одного запуска | 256 КиБ |
Тело вебхука ({{trigger.payload}}) | 64 КиБ |
| Размер графа сценария | 1 МиБ |
| Длина имени переменной | 256 символов |
→ Блоки · Триггеры · Версии и запуски