Skip to main content

Работа в редакторе

Редактор агента — это холст со сценарием, палитра нод слева и инспектор выбранной ноды справа. Здесь собрано то, что помогает собирать и проверять сценарий: поиск по документу, переменные, вкладка ошибок и тест. Что умеет каждая нода — на странице Ноды сценария.

Поиск по документу агента

Кнопка 🔍 Поискпервая во втором ряду шапки редактора, слева от «Выровнять схему»; подсказка «Найти в документе». Она открывает плавающую панель поиска над холстом. То же делает Cmd/Ctrl + F. В редакторе компонента кнопка есть в его собственной шапке. Поиск идёт по именам нод, промптам, условиям переходов, авторским полям нод и функциям конвейера. Словари, выходные переменные и внутренние идентификаторы в индекс намеренно не входят: фрагмент JSON в результатах нечитаем и может показать секрет. Единица навигации — вхождение, а не нода: три совпадения в одной ноде дают три шага. Enter — следующее, Shift+Enter — предыдущее, Esc — закрыть; счётчик сквозной через виды «Диалог» и «Конвейер», и переход через границу сам переключает вид. Потолок — 500 вхождений, дальше панель честно говорит, что показывает первые.
Cmd/Ctrl + F уступает полям ввода. Если курсор стоит в промпте, в текстовом поле или в редакторе кода, сочетание достанется полю — откроется обычный поиск браузера, а не панель. Это сделано нарочно: в длинном промпте автор ждёт поиска именно по промпту. Снимите фокус кликом по холсту или нажмите кнопку в шапке.Поиск браузера холст заменить не может: он видит только короткие превью на карточках и не умеет промотать холст к найденному.

Переменные агента

В агенте можно создавать переменные и использовать их для передачи данных между нодами. Откройте вкладку «Переменные агента», добавьте переменную и укажите её имя, тип и описание. Переменные помогают сохранять данные из разговора и результаты действий агента. Их можно использовать:
  • в инструкциях и промптах нод, например {{customer_name}}
  • в параметрах Function и MCP Tool
  • в выходных данных Code и Extract Variables
  • в условиях переходов Logic Split
  • в сообщениях Conversation и End
  • в webhook-уведомлениях и пост-колл аналитике
Используйте понятные уникальные имена и добавляйте описание, чтобы агент правильно понимал назначение переменной. Значение переменной может появиться после ответа абонента, извлечения данных или выполнения внешнего действия, поэтому проверяйте, что нужная нода выполняется до её использования.

Переменные, которые есть в каждом звонке

Десять переменных заполняются в начале любого звонка, до первого слова агента, поэтому их можно использовать сразу — в промпте, в условии перехода и в параметрах Function. Конструктор условий и подсказки подстановки предлагают их наравне с остальными. Номера приходят только цифрами, без + и разделителей — приводите их к читаемому виду нодой Code, прежде чем агент произнесёт номер абоненту. То, что известно о самом звонке, перекрывает значение по умолчанию с вкладки Variables; данные кампании, Web API и маппинг SIP-заголовка применяются после этого и побеждают оба. За чат-тестом звонка нет, поэтому там эти три сохраняют значения с вкладки Variables.

Дата и время звонка

Ещё семь переменных несут дату и время самого разговора. Их считает платформа, в файл контактов их класть не нужно. В каком поясе считается дата. Платформа берёт первый подходящий: сутки контакта, если кампания звонит по местному времени контакта; иначе пояс, выбранный для отображения; иначе пояс организации; иначе UTC. Пояс, который не удалось разобрать, даёт UTC — и {{call_timezone}} честно покажет UTC, так что промах виден в истории звонка.
Не возите дату колонкой файла. Значение из файла замерзает в момент загрузки, и на повторном наборе агент назовёт дату загрузки, а не сегодняшнюю. Эти семь переменных пересчитываются на каждом звонке, включая повторы.

Проверка ошибок

Во вкладке «Проверка» можно посмотреть возможные ошибки и предупреждения в настройках агента и его сценарии. Нажмите «Проверить снова», чтобы повторно запустить проверку после внесения изменений. Если проблем нет, вкладка покажет сообщение «Проблем не найдено». Ошибки блокируют публикацию, предупреждения — нет. Проверка смотрит не только на граф: при публикации, при запуске кампании и при создании демо-ссылки платформа заодно собирает те же объекты распознавания и синтеза, что и настоящий звонок, и сообщает о сломанных настройках провайдера, ненайденной базе знаний или аудиофайле и неопубликованном агенте-назначении перевода до того, как агент уедет в работу.

Проверка перед запуском

Используйте инструменты тестирования, чтобы убедиться, что агент работает как задумано:
  • прогоняйте примерные диалоги в чате
  • сделайте голосовой тест
  • проверьте, что агент следует ожидаемому пути
  • меняйте промпт и действия, если логика работает неправильно

Запуск теста с выбранной ноды

Выделите ноду на канвасе — и в тест-панели появится кнопка «▶ С ноды <имя>». Сессия начнётся сразу с этой ноды, не проходя путь от Begin; «↺ Заново» перезапускает с неё же. Работает и в чате, и в голосовом тесте, а в записи сессии старт с ноды помечен отдельным событием. Без выделения и на ноде Begin кнопки нет.
Переменные пути при этом не заполняются. Сессия получает только значения по умолчанию из флоу, поэтому нода, читающая переменную с более раннего шага, увидит пустое значение. Синтетической истории разговора тоже нет — транскрипт начинается прямо с выбранной ноды.Поле стартовой ноды принимают только тестовые входы: ни Web API, ни телефония, ни передача звонка другому агенту его не знают. Стартовать внутрь опубликованного компонента нельзя — в черновике нода-компонента разворачивается в свою точку входа.

Когда абонент замолкает на середине фразы

Живые люди делают паузы. «Да…» (пауза) «…нет, не хочу» — это одна реплика, но платформа слышит конец реплики в её середине. От этого сценарий защищают два поведения. Непроизнесённый переход можно откатить. Если ход оборвался до того, как агент издал звук, а абонент затем продолжил содержательной репликой, платформа считает переход несостоявшимся: фрагменты склеиваются, и реплика целиком классифицируется из того узла, где началась, — «да… нет, не хочу» не попадает на классификацию внутрь ветки «Согласие». Решение принимается по тому, что произошло дальше: агент успел заговорить — переход фиксируется; продолжение оказалось шумом или пустым — реплика текущего узла переигрывается. Ход, сделавший внешний вызов в ваши системы, фиксируется всегда, потому что такой вызов откатить нельзя. Склеивается не больше четырёх фрагментов; всё, что выходит за эту рамку, обрабатывается обычным путём. Узел, который произносит фразу и сразу уходит, не уйдёт молча. Узел, чья задача — сказать одну строку и двинуться дальше («Соединяю» перед переводом, например), исполняется на входе и только после этого уходит по своему единственному ребру: перебить его в промежутке между приходом и произнесением фразы нельзя. А фраза считается сказанной только после записи в историю разговора, поэтому отменённый ход не выдаёт непроигранную строку за произнесённую.