Фиксированные и динамические переменные, функция memorize и куда значение уходит дальше: в вебхук, фоллоу-ап, рассылку или уведомление.
Переменная — это ячейка, куда агент кладёт одно значение из диалога: имя, дату, номер заказа. Фиксированные переменные проверяют тип и формат и годятся для передачи во внешние сервисы. Динамические сохраняют произвольную строку через функцию memorize, когда важнее смысл, чем формат. Готовое значение подставляется в аргументы действий и вебхуков, в фоллоу-апы, в условия рассылок и в шаблоны уведомлений.
Агент за диалог узнаёт десяток вещей: как зовут собеседника, что он ищет, на какую сумму рассчитывает, когда ему удобно приехать. Без переменной каждая из них живёт ровно один ответ и исчезает. С переменной — сохраняется и переезжает туда, где нужна: в следующую реплику, в вызов функции, в карточку CRM.
Переменная хранит одно значение, которое агент получил из канала или узнал у собеседника сам. Записывается она в фигурных скобках, например {имя_переменной}, а заполняется автоматически в момент ответа: вы пишете в инструкции current_datetime, модель получает уже готовую строку с датой и временем.
Все переменные делятся на три группы по тому, кто их заполняет: платформа подставляет системные, подключённый канал приносит канальные, а агент сам записывает пользовательские в ходе разговора. Первые две группы разберём короче, они пришли готовыми, вся сложность в третьей.
Фиксированная переменная создаётся заранее с указанным типом: строка, целое число, целое или дробное, булево значение. Она нужна там, где известно, какого рода ответ ждать, и где этот ответ потом уйдёт дальше по цепочке — в CRM, в таблицу, в платёжный сервис.
В инструкции указывается, что именно запросить и в каком формате сохранить, а сохранение идёт через функцию set_fields_values. Если клиент присылает дату рождения без разделителей или имя вместо ожидаемого числа, значение не проходит проверку, и агент, следуя инструкции, уточняет формат и просит повторить. Только корректный по типу ответ попадает в переменную — на другом конце маршрута гарантированно не окажется строки там, где ждут число.
Если фиксированная переменная дальше идёт в аргумент вебхука или в поле CRM, проверка формата защищает от ошибки на приёме. Внешний сервис, получивший вместо даты произвольный текст, чаще всего просто откажет в запросе.
memorizeДинамическая переменная не имеет типа и всегда хранится как строка. Решение, что именно запомнить, модель принимает сама — по инструкции можно только направить её внимание: «сохрани финансовую цель клиента через memorize». Сохранённое значение годится для генерации ответа и для контекста. Для прямой передачи во внешний сервис, где нужна гарантированная структура, работают фиксированные переменные.
Разница между двумя режимами — это разница между анкетой и заметкой на полях. Анкета не примет неверный формат и требует уточнения. Заметка на полях запишет мысль своими словами и не станет её проверять.
| Фиксированная переменная | Динамическая переменная | |
|---|---|---|
| Тип данных | строка, число, целое/дробное, булево | всегда строка |
| Кто решает, что сохранить | заранее заданное поле в инструкции | модель по ходу диалога |
| Проверка формата | есть, неверный ответ агент переспрашивает | нет |
| Функция сохранения | set_fields_values | memorize |
| Куда годится | вебхуки, CRM, внешние сервисы | контекст ответа, память диалога |
Проверьте на своих диалогах.Регистрация без карты, 500 ₽ на тест по промокоду BLOG500
Собрать агентаЧасть переменных агенту не нужно запрашивать вообще — они уже известны платформе или пришли вместе с обращением. Системные доступны в любом агенте: current_datetime и current_datetime_iso для даты и времени, current_year для года, chat_link для ссылки на диалог в кабинете, channel_name для кодового имени канала, instance_max_answer_tokens для лимита токенов на ответ.
Канальные переменные приносит подключённый канал: имя собеседника, его логин, а из CRM ещё и идентификатор сделки, этап воронки, сумму. Набор зависит от канала и не совпадает даже между похожими системами: entity_id в Битрикс24 и lead_id в amoCRM про одно и то же, но называются и выглядят по-разному. Устройство самих каналов раскрывают действия ИИ-агента; здесь достаточно помнить, что переменная, которой канал не передал значение, подставится пустой, и это стоит предусмотреть в инструкции отдельной фразой на случай пустоты.
Переменная подставляется в аргументы действий и вебхуков, причём прямо в строку URL запроса: идентификатор сделки из CRM превращается в часть адреса, по которому внешний сервис узнаёт, о какой именно сделке речь. Значение подставляется в текст фоллоу-апов, поэтому напоминание обращается к клиенту по имени и упоминает то, что он уже назвал. Оно участвует в условиях отбора диалогов для рассылок и в шаблонах уведомлений, так менеджер получает сообщение со ссылкой на конкретный чат вместо общего «кто-то написал».
Один раз узнанное значение переезжает во все эти места без повторного вопроса. Отдельно: движок шаблонов, который собирает инструкцию по условиям вроде дня недели или канала, пока в бета-тестировании — перед боевым запуском такую инструкцию стоит прогнать на тестовом диалоге.
Есть простой способ увидеть, как переменные работают на практике, не читая руководство до конца: открыть тестовый диалог, назвать в нём имя, а через пару реплик спросить у агента то же самое, что он уже слышал. Если инструкция и переменные настроены верно, агент ответит по сохранённому значению без повторного вопроса: повторный вопрос означает, что значение никуда не записалось, и стоит проверить, какой функцией оно должно сохраняться.
Ровно так и начался один разбор: имя спросили дважды за один диалог, потому что фиксированная переменная стояла с типом «целое число» вместо «строка», и ни один ответ не проходил проверку формата. Правка одного поля убрала повторный вопрос полностью.
После проверки на тестовом диалоге откройте экспорт любого живого разговора: в шапке видно, какие переменные передал канал и что из них агент записал сам. По этому же экспорту удобно свериться, если следующий шаг — квалификация лида: там переменные читаются уже как ответы клиента, без привязки к технической стороне настройки.
Место, куда агент кладёт одно значение, узнанное в диалоге или полученное из канала, чтобы использовать его позже — в инструкции, в вызове функции или в вебхуке. Хранится строкой, числом или логическим значением в зависимости от того, как переменная создана.
Фиксированная имеет тип и проверку формата: агент переспросит клиента, если ответ не подходит по виду. Динамическая хранит любую строку, которую сама модель сочтёт важной сохранить, без проверки формата.
Фиксированная переменная с типом не примет значение, и агент, следуя инструкции, попросит назвать дату ещё раз в нужном виде. Так на другом конце не окажется значения, которое сломает приём в CRM или внешнем сервисе.
Да, значения подставляются в аргументы действий и вебхуков, включая саму строку URL запроса. Для этого подходят фиксированные и системные переменные — у них известен тип и формат.
В текст фоллоу-апов, в условия отбора диалогов для рассылок и в шаблоны уведомлений. Один и тот же набор данных работает во всех этих местах без повторного запроса у клиента.
Записывает информацию в динамическую переменную по решению модели, без заранее заданного типа. Используется, когда важен смысл сказанного, а строгий формат значения не нужен.