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

🔢 Переменные

Сценарии работают с переменными — данными, которые передаются между блоками. В тексты, условия и поля блоков переменные подставляются синтаксисом {{...}}, вложенные поля — через точку: {{trigger.payload.order_id}}, {{chat.status}}.

Пробелы внутри скобок допустимы ({{ flow.name }} работает), внутри самого пути — нет. Имя переменной — латиница, цифры, подчёркивание и точка, начинается с буквы или подчёркивания, до 256 символов.

Источники переменных​

Источников ровно пять — они отличаются тем, где значение живёт и кто его пишет. В панели переменных редактора они показаны группами с такими подписями:

Группа в панелиПрефиксКак живёт
Системные{{system.*}}вычисляется в момент чтения, только чтение
Этого сценария{{flow.*}}живёт в пределах одного запуска, пишется блоками
Пользователь{{user.*}}сохраняется для конкретного клиента и переживает запуски
Проект{{project.*}} (то же, что {{tenant.*}}), {{dict.*}}общие для всего проекта значения и справочники
Триггер{{trigger.*}}, {{chat.*}}, {{ticket.*}}данные события, которым запустился сценарий, и данные обращения или тикета; только чтение

Данные обращения и тикета — {{chat.*}} и {{ticket.*}} — не хранятся в запуске. Сначала значение берётся из данных события; если его там нет — запрашивается в сервисе один раз за запуск, при первом обращении к переменной. Так же, по запросу, работают {{user.tickets}} и {{dict.ticket_types}}.

Системные переменные​

Доступны всегда и только для чтения. Первые четыре пересчитываются при каждом обращении.

ПеременнаяПримерЧто это
{{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}}—Название проекта — пока не заполняется, подставляется пустая строка

Переменные клиента​

ПеременнаяЧто это
{{user.id}}UUID клиента — заполнен, если запуск идёт от имени клиента
{{user.first_name}}, {{user.last_name}}, {{user.username}}Имя, фамилия, ник
{{user.email}}, {{user.phone}}Контакты
{{user.locale}}, {{user.timezone}}Язык и часовой пояс
{{user.tickets}}Тикеты, заведённые этим клиентом (id, number, title, description, status, priority, typeId, assigneeId, createdAt, closedAt). Подтягивается по запросу; пустой список, если тикетов нет или запуск идёт без клиента

Всё, что вы сами записали блоком «Переменная» с областью «Пользователь», тоже доступно как {{user.<имя>}}.

Профиль клиента заполняет сценарий

Поля first_name, last_name, username, email, phone, locale, timezone автоматически не заполняются. Это атрибуты клиента, которые сценарий записывает сам — блоком «Переменная» с областью «Пользователь» (например, после того как бот спросил email). До записи они пустые и помечены в панели переменных бейджем «может быть пустым». Всегда заполнен только {{user.id}} (если запуск идёт от имени клиента).

Переменные проекта​

{{project.<ключ>}} — общие значения проекта. Их заводят вручную на странице «Настройки» → вкладка «Переменные» или записывает блок «Переменная» с областью «Тенант» — это одно хранилище. Значения живут между запусками. Префикс {{tenant.*}} — синоним, работает так же.

Обычно сюда кладут то, что не должно лежать в графе открытым текстом и нужно в нескольких сценариях: токен бота, ID дежурного чата, ключ внешнего API, адрес эндпоинта. В блоке «HTTP запрос» такое значение подставляется в поле авторизации как {{project.api_token}}. При смене токена достаточно поправить одну строку в настройках, а не каждый блок.

Вкладка «Переменные» в настройках проекта​

На вкладке «Переменные» в настройках проекта — таблица «Ключ», «Значение», «Изменена», «Действия». Кнопка «Добавить переменную» открывает форму «Новая переменная»; ключ — строчные латинские буквы, цифры и _, начинается с буквы, до 64 символов. Кнопка «Скопировать ссылку для сценария» копирует готовую подстановку {{project.<ключ>}}.

Если в ключе есть token, key, secret, password, auth или apikey, переменная считается секретом: у неё бейдж «Секрет», и после сохранения значение больше не показывается нигде — его можно только «Заменить значение». При удалении переменной сценарии, которые на неё ссылаются, перестают получать значение.

Список видит любой участник проекта, добавлять, менять и удалять переменные может роль «Редактор» и выше.

Если переменная не заведена

Незаведённая переменная подставляется пустой строкой. Если обязательное поле блока задано шаблоном вроде {{project.x}}, а переменной нет, блок уходит по выходу «Ошибка» (если он разведён); без разведённой «Ошибки» запуск падает.

Секреты проекта и агент

Блоку «AI-агент» переменные {{project.*}} и {{tenant.*}} не выдаются намеренно — компилятор отклонит попытку добавить их в контекст агента. Но текст инструкции агента подставляется как обычный шаблон: если написать {{project.api_token}} прямо в инструкции, значение уедет в промпт модели. Не пишите секреты в инструкцию. Редактор подсветит такую ссылку под полем инструкции («Здесь нельзя использовать …: инструкция интерполируется, и значение уедет в промпт на каждом ходу»), но публикацию не запретит.

Справочники​

{{dict.ticket_types}} — справочник типов тикетов проекта: список с полями id, name, description, isDefault. Доступен в любом сценарии, подтягивается по запросу; в панели переменных — в группе «Проект». Удобен, чтобы подставить ID типа тикета без отдельного блока «Типы тикетов».

Данные обращения​

Доступны в сценариях «Поддержка» (и на событии, и при ручном запуске из чата), в глобальных сценариях на событиях support.* и в сценариях, в которые разговор передал блок «Перевести в сценарий». Без обращения (по расписанию, по вебхуку) значения пусты.

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

ПеременнаяЧто это
{{chat.id}}UUID обращения
{{chat.channel}}Канал: telegram, vk, discord, website, client_widget
{{chat.channel_id}}ID конкретного подключения канала
{{chat.status}}Статус (new, in_progress, clarification, resolved, cancelled) на момент события
{{chat.priority}}Приоритет (low…critical) на момент события
{{chat.line}}Линия поддержки числом; 0 — линия не назначена
{{chat.group_id}}Группа, на которую назначено обращение; пусто, если группы нет
{{chat.author_id}}ID клиента, открывшего обращение
{{chat.conversation_id}}ID переписки
{{chat.created_time}}, {{chat.closed_time}}Когда открыто и закрыто
{{chat.unread_count}}Сколько сообщений оператор ещё не прочитал

Вторая группа приходит вместе с событием и доступна только на своём событии:

ПеременнаяНа каком событии
{{chat.last_message}}«Сообщение от клиента»
{{chat.closed_by}}«Обращение закрыто» — кто закрыл: ID оператора или customer
{{chat.previous_status}}«Сменился статус обращения»
{{chat.previous_priority}}«Сменился приоритет»
{{chat.previous_line}}«Перевод на другую линию»
{{chat.previous_group_id}}смена группы обращения (support.group.changed, только в глобальном сценарии — см. Триггеры)

Данные тикета​

Доступны в сценариях «Тикеты». Подтягиваются по запросу:

ПеременнаяЧто это
{{ticket.id}}UUID тикета
{{ticket.number}}Номер тикета — тот, что сообщают клиенту
{{ticket.title}}Заголовок
{{ticket.description}}Описание; может быть пустым
{{ticket.status}}, {{ticket.priority}}Текущий статус и приоритет — в нижнем регистре (статус: new, in_progress, approved, resolved, cancelled, closed)
{{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 — события сейчас не приходят
«Упал флоу»failed_run_id, flow_id, flow_type, block_id (ID блока или метка движка engine.start / engine.loop / engine.resume), error_type (тип ошибки)

Текста ошибки и названия сценария в событии «Упал флоу» нет — они в трассе запуска. Падение сценария, запущенного этим событием, повторно не объявляется.

Где взять текст клиента

{{trigger.text}} — текст сообщения, которым запуск начался, он не меняется. {{chat.last_message}} — последнее сообщение клиента: обновляется после каждого ответа на «Вопрос». Ответ на конкретный «Вопрос» лежит в {{flow.<имя>.text}}.

Области видимости​

У переменных, которые вы создаёте блоками «Переменная», «Очистить переменную», «Изменить число» и «Переключить флаг», есть поле «Область»:

Значение в интерфейсеКак живёт
Сценарийтолько в текущем запуске, по завершении исчезает
Пользовательсохраняется для конкретного клиента между запусками, читается как {{user.<имя>}}
Тенантобщая на весь проект, читается как {{project.<имя>}}; видна и на вкладке «Переменные» в настройках проекта
Без клиента область «Пользователь» недоступна

Если запуск идёт без клиента (например, по расписанию), блоки, которые записывают значение с областью «Пользователь» («Переменная», «Изменить число», «Переключить флаг»), остановятся с ошибкой; «Очистить переменную» просто ничего не сделает. Используйте «Сценарий» или «Тенант».

Типы значений​

Переменные бывают строкой, числом, логическим значением (да/нет), объектом (JSON), списком и датой/временем. Тип выводится из значения; в панели переменных он показан рядом с именем.

Входные переменные​

Для триггеров «Ручной запуск» и «Webhook» в блоке «Старт» есть поле «Входные переменные»: «Доступны в шаблонах блоков как {{flow.<имя>}}». Если переменных нет — «Сценарий запускается без аргументов. Добавьте переменные если они нужны».

У каждой переменной задаются:

ПолеОбязательноОписание
ИмядаТолько snake_case и уникальное в рамках сценария
Типдаstring, number, boolean или json
ОбязательноенетЗначение придётся указать при запуске
Значение по умолчаниюнетПодставится, если значение не передали
ОписаниенетПояснение для того, кто запускает сценарий
Допустимые значения (enum)нетТолько для типа string: список разрешённых значений

Проверки, которые показывает редактор:

  • «Имя обязательно»;
  • «Только snake_case: lowercase, цифры, нижние подчёркивания»;
  • «Имя уже используется в этом сценарии»;
  • «Для обязательного поля default игнорируется — уберите одно из двух»;
  • «Значение по умолчанию не подходит по типу»;
  • «Значение по умолчанию должно быть из списка enum»;
  • «Добавьте хотя бы одно значение или выключите enum».

При ручном запуске значения проверяются ещё раз: «Обязательное поле», «Значение не подходит по типу», «Должно быть одним из: …». У вебхука по входным переменным проверяется payload — см. Триггеры.

Входы сценария с ручным запуском заполняет и блок «Перевести в сценарий» — через поле «Аргументы» (форма строится по объявленным входам). Значения проверяются по типу, обязательности и списку допустимых значений до передачи; если проверка не прошла, исходный сценарий уходит по выходу «Ошибка». Ключи, которых нет среди входов, передаются как есть.

Где посмотреть доступные переменные​

В редакторе есть панель «Переменные» и шпаргалка «Доступные переменные» — список того, что реально доступно в этом сценарии с учётом его типа, триггера, события и того, какие блоки стоят выше по графу. Клик по переменной копирует её в буфер («Клик — скопировать в буфер»).

Бейджи в списке:

Что видноЧто означает
может быть пустымзначение бывает не заполнено
liveпересчитывается при каждом обращении
по запросуподтягивается из другого сервиса при первом обращении
приоритетная для этого блокаобычно именно её сюда и подставляют

Подсказки об ошибках прямо в поле: «переменная не найдена», «переменная ещё не записана к этому шагу», «это объект — укажите конкретное поле через точку».

Ограничения​

ЧтоЛимит
Значение одной переменной64 КиБ
Все переменные одного запуска256 КиБ
Тело вебхука ({{trigger.payload}})64 КиБ
Размер графа сценария1 МиБ
Длина имени переменной256 символов
Ключ переменной проекта64 символа

→ Блоки · Триггеры · Версии и запуски