Где хранятся данные
Переменные принадлежат конкретному чату. Значение, сохраненное для одного клиента, не появляется в диалогах других клиентов.
Они сохраняются между сообщениями и перезаписываются, когда сценарий записывает новое значение с тем же именем.
Готовые переменные
| Имя | Значение |
|---|---|
| last_message | Последнее сообщение клиента или выбранное значение кнопки. |
| last_button | Текст последней нажатой сценарной кнопки. |
| last_agent_message | Последний текстовый ответ Agent-слота. |
| last_external_response | Полный последний ответ внешнего запроса. |
| last_external_status | HTTP-статус последнего внешнего запроса. |
| last_external_error | Техническая ошибка последнего внешнего запроса, если запрос не удалось выполнить. |
| channel_source | Канал текущего чата: например telegram, max, vk, widget или debug. |
| external_id | Идентификатор пользователя внутри конечного канала. В Telegram — Telegram ID, в других каналах — их внутренний ID пользователя. |
| external_name | Имя пользователя, полученное из канала. |
| external_surname | Фамилия пользователя, если канал её передал. |
| external_username | Никнейм пользователя в конечном канале. |
| contact_phone | Телефон, которым пользователь поделился через кнопку Telegram. |
| contact_name | Полное имя из отправленного контакта. |
| contact_first_name | Имя из отправленного контакта. |
| contact_last_name | Фамилия из отправленного контакта. |
| contact_user_id | Telegram ID владельца контакта, если Telegram его передал. |
| last_router_topic | Тема, выбранная слотом распознавания. |
| last_router_slot_id | Идентификатор выбранной тематической ветки. |
| last_router_confidence | Уверенность распознавания от 0 до 1. |
| last_router_reason | Короткое объяснение результата распознавания. |
| last_router_fallback | Признак перехода в ветку «Не распознано». |
Шаблоны {{ }}
Шаблоны работают в текстах, названиях кнопок, промптах Agent-слота и настройках внешнего запроса.
Здравствуйте, {{ name }}!
Ваш город: {{ city }}.
Заказ №{{ order_id }} находится в статусе «{{ order_status }}».
Слот памяти может сохранить простое значение или взять его из другой переменной:
name = {{ last_message }}
age = {{ last_message | integer }}
confirmed = true
tags = ["lead", "telegram"]
Вложенные поля объекта читаются через точку. Например, сообщение из JSON-ответа можно вывести как {{ last_external_response.message }}, если поле message находится в корне ответа. Для стабильной схемы API удобнее настроить извлечение нужного поля в отдельную переменную ресурса.
Если внешний сервис возвращает объект с вложенным телом, путь должен повторять реальную структуру ответа. Самый надежный способ — сначала вывести или проверить ответ в тесте ресурса, затем сохранить нужное поле в отдельную переменную.
Условия
В ветке условия пишется только выражение. Не добавляйте {{ }} и конструкцию {% if %}.
"ии" in last_message
city == "Москва"
age >= 18
(tariff == "pro" and confirmed) or "поддержка" in last_message
last_message is match("^\+?[0-9]{11}$")
true
Условия проверяются сверху вниз. Размещайте более точные варианты выше, а fallback true — последним.
Частые ошибки
| Проблема | Как исправить |
|---|---|
| В тексте видно пустое место | Проверьте, была ли переменная сохранена до использования. |
| Условие всегда пропускается | Уберите {{ }} и проверьте кавычки вокруг текста. |
| Старое значение осталось | Запишите новое значение или используйте другое имя для нового состояния. |
| Внешний ответ не появился | Проверьте путь ответа и имя переменной в ресурсе внешнего запроса. |