> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hubtalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Ноды сценария

> Девять типов нод: что делает каждая и какие у неё поля.

# Ноды сценария

Используйте ноды, чтобы выстроить сценарий разговора. Каждая нода отвечает за отдельный шаг диалога или действие агента.

<img src="https://mintcdn.com/hubtalk/cKl-cjuDGhk4sToG/images/v4_agents_canvas_overview.png?fit=max&auto=format&n=cKl-cjuDGhk4sToG&q=85&s=86c73fcaaf3d4dc611bf0436d4618341" alt="Общий вид канваса с несколькими типами нод и связями между ними" width="1440" height="900" data-path="images/v4_agents_canvas_overview.png" />

<img src="https://mintcdn.com/hubtalk/cKl-cjuDGhk4sToG/images/v4_agent.png?fit=max&auto=format&n=cKl-cjuDGhk4sToG&q=85&s=7369ba79a89f64bbf15966dd22b8ec20" alt="Выбор компонентов в конструкторе агента" width="1904" height="916" data-path="images/v4_agent.png" />

* **Conversation** — позволяет агенту разговаривать с абонентом, задавать вопросы, предоставлять информацию и продолжать диалог.
* **Function** — запускает внешнее действие, например проверку данных или отправку запроса в другую систему.
* **Code** — выполняет пользовательскую логику, когда стандартных нод недостаточно.
* **Logic Split** — направляет разговор по разным сценариям в зависимости от ответа абонента или заданного условия.
* **Extract Variables** — извлекает важные данные из разговора и сохраняет их для следующих шагов.
* **Transfer** — переводит звонок на оператора или другого агента.
* **Component** — объединяет повторно используемую часть сценария, чтобы применять её в нескольких местах.
* **MCP Tool** — подключает MCP-инструмент, который выполняет определённое действие.
* **End** — завершает разговор финальным сообщением.

## Нода Conversation

Нода **Conversation** используется для разговора с абонентом. Она задаёт вопросы, объясняет информацию, собирает данные и передаёт разговор на следующий шаг сценария.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_conversation.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=c3021cbce729137d46e39f10284f1aed" alt="Открытая панель ноды Conversation" width="1440" height="900" data-path="images/v4_node_conversation.png" />

* **Название ноды** — задаёт понятное имя шага, чтобы его было легко найти в сценарии.
* **«Промпт» / «Фраза»** — две вкладки: генерировать реплику по инструкции или произнести фиксированный текст.
* **«Инструкция (LLM генерирует реплику)»** — что агент должен сказать или сделать на этом шаге. В инструкции можно использовать переменные, например `{{transfer_status}}` или `{{transfer_success}}`.
* **«Не ждать ответа — произнести реплику и сразу перейти дальше»** — единственный переход узла при этом становится **Always**.
* **«Переопределения для узла»** — выключенный тумблер означает, что узел наследует дефолты агента. Переопределить можно **«Перебивание»**, модель генерации и **«Голос»** — другой голос TTS, пока говорит этот узел.
* **Базы знаний** — позволяет выбрать для этой ноды отдельную базу знаний вместо стандартной базы агента и её настроек поиска.
* **«Примеры для дообучения (транскрипт → ожидаемый переход)»** — пары, которые показывают классификатору, куда уводить разговор.
* **«Инструменты (модель вызывает сама)»** — необязательный список. С инструментами модель вызывает их сама, и ход диалога занимает больше времени.
* **«Переходы»** — куда разговор пойдёт дальше. Порядок проверки: **Always (безусловный переход)** → **Equation (условие-формула по переменным)** → **Prompt (условие проверяет модель)** → **Default (запасной переход)**. Always в узле может быть только один, и других переходов при нём быть не должно.
* **Global node** — подпись в кабинете латиницей; делает узел достижимым из любой точки сценария.
* **Удалить ноду** — удаляет ноду из сценария агента.

## Нода Function

Нода **Function** запускает внешнее действие: например, проверяет данные клиента или отправляет информацию в другую систему. Для разработки и тестирования можно использовать предсказуемый mock-ответ, а для рабочей интеграции — реальный HTTP-запрос.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_function.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=364c90dab1e99912c0331fdbf8c28978" alt="Открытая панель ноды Function с заполненными Params и Mock-ответом" width="1440" height="900" data-path="images/v4_node_function.png" />

* **Название ноды** — определяет имя шага в сценарии.
* **«Имя»** и **«Описание»** в блоке **«Функция»** — как функция называется и что она делает.
* **«Режим заглушки (постоянный ответ, без HTTP-вызова)»** — тумблер между предсказуемой заглушкой для разработки и настоящим HTTP-вызовом.
* **«Параметры (значения поддерживают `{{example}}`)»** — входные значения функции; в них подставляются переменные звонка.
* **«LLM-аргументы (parameters: имя ← описание)»** — аргументы, которые модель извлекает из диалога и добавляет к параметрам. Пустое поле означает «только подстановка `{{example}}`».
* **«Переменные из ответа (переменная ← JSONPath)»** — сохраняют значения из ответа функции в переменные звонка. Эти переменные можно использовать в следующих нодах и переходах, включая ветки успеха, ошибки и тайм-аута.
* **«Реплика во время вызова (необязательно)»** — что агент скажет, пока функция выполняется.
* **«Ответ-заглушка (JSON, поддерживает `{{example}}`)»** и сценарии — статус и тело ответа заглушки, а также именованные сценарии успеха, ошибки или тайм-аута. Такие сценарии помогают тестировать поток без обращения к реальным endpoint'ам.
* **«Переопределения для узла»** — своя **«Модель извлечения аргументов для этого узла»**. Переопределение действует только на LLM-построение аргументов: чистая подстановка `{{example}}` модель не использует, там переопределять нечего.
* **Переходы** — задают следующую ноду после результата функции. Переменные ответа можно использовать для ветвления по успеху и ошибке.
* **Global node** — делает узел достижимым из любой точки сценария.
* **Удалить ноду** — удаляет функцию из сценария агента.

## Нода Code

Нода **Code** выполняет пользовательский Python-код в sandbox. Используйте её для расчётов, преобразования данных и других небольших действий, которые не покрываются стандартными нодами.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_code.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=5680879df3d32f08066b20d4e4b2a39b" alt="Открытая панель ноды Code: подпись песочницы с vars и now, пример с вызовом now(&#x22;Asia/Almaty&#x22;) и переменные результата" width="1440" height="900" data-path="images/v4_node_code.png" />

* **Название ноды** — определяет имя шага в сценарии.
* **Редактор кода** — содержит Python-код, который должна выполнить нода. В sandbox доступны словарь `vars`, переменная `result`, часы `now` и безопасные встроенные функции; `import`, `open` и `eval` недоступны, сети и файловой системы у песочницы нет.
* **Текущее время** — `now("Asia/Almaty")` возвращает время в зоне IANA словарём: `epoch`, `iso`, `date`, `time` (`ЧЧ:ММ`), `hour`, `minute`, `second`, `dow` (1–7, понедельник первый), `weekday` (0–6, понедельник первый) и `tz`. Зона обязательна: `now()` без аргумента, пустая строка и неизвестная зона дают ошибку, и нода уходит по ветке ошибки. Переходы на летнее время считает база зон, поэтому проверка «который час» не требует обращения через **Function** к внешнему сервису времени.
* **Выходные переменные** — задают через запятую имена значений, которые создаёт код. Эти переменные становятся доступны следующим нодам и переходам. Имена самой песочницы — `vars`, `result`, `now` — в переменные звонка не попадают: валидатор предупреждает о таком имени, потому что переменная всегда осталась бы пустой.
* **Тайм-аут выполнения** — устанавливает максимальное время работы кода. Если лимит превышен, выполнение прерывается.
* **Переходы** — соединяют результат выполнения кода со следующей нодой сценария.
* **Global node** — делает ноду Code доступной для перехода из любой точки сценария.
* **Удалить ноду** — удаляет шаг с кодом из сценария агента.

## Нода Logic Split

Нода **Logic Split** беззвучно направляет сценарий по условиям, заданным через уравнения. Она не отвечает абоненту и не ждёт нового сообщения, а проверяет доступные значения и выбирает первый подходящий переход.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_logic_split.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=b17b15d85f04b6d33c7a70097c22270f" alt="Открытая панель ноды Logic Split с несколькими переходами" width="1440" height="900" data-path="images/v4_node_logic_split.png" />

* **Название ноды** — определяет имя шага ветвления в сценарии.
* **Беззвучное ветвление** — проверяет условия без формирования ответа и ожидания новой реплики абонента.
* **Переходы** — задают возможные направления для каждой ветки. Переход может использовать условие **Always**, **Equation** или **Prompt**.
* **Порядок проверки** — условия проверяются сверху вниз. Порядок такой: Always, Equation, Prompt, затем Default. Срабатывает первое подходящее условие.
* **Always** — направляет сценарий безусловно и прекращает проверку остальных условий.
* **Equation** — проверяет правило по известным значениям, например по переменным из предыдущих нод.
* **Prompt** — использует модель для оценки условия на основе доступного контекста разговора.
* **Default** — служит запасным вариантом, если ни одно другое условие не сработало. Добавьте его, чтобы сценарий не остановился.
* **Изменение порядка переходов** — перетаскивайте карточки переходов, чтобы изменить приоритет проверки.
* **Global node** — делает ветвление доступным для перехода из любой точки сценария.
* **Удалить ноду** — удаляет шаг ветвления из сценария агента.

## Нода Extract Variables

Нода **Extract Variables** беззвучно извлекает структурированные данные из разговора. Используйте её, когда агенту нужно сохранить имя, оценку, статус, дату или другое значение для следующих шагов сценария.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_extract_variables.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=5d14b1531c35fbd41f3d071dd34d5e00" alt="Открытая панель ноды Extract Variables" width="1440" height="900" data-path="images/v4_node_extract_variables.png" />

* **Название ноды** — определяет имя шага извлечения в сценарии.
* **Извлекаемые переменные** — добавляют одно или несколько значений, которые нода должна найти в диалоге.
* **Имя переменной** — задаёт имя извлечённого значения, например `var1`.
* **Тип переменной** — определяет ожидаемый формат значения, например `string`.
* **Описание для LLM** — объясняет смысл переменной и помогает модели найти нужное значение в разговоре.
* **Локальные настройки ноды** — позволяют выбрать другую модель извлечения только для этой ноды. Если настройка не включена, нода использует модель агента.
* **Переходы** — соединяют шаг извлечения со следующей нодой сценария.
* **Global node** — делает ноду извлечения доступной для перехода из любой точки сценария.
* **Удалить ноду** — удаляет шаг извлечения из сценария агента.

## Нода Transfer

Нода **Transfer** переводит звонок на оператора или другого агента. Она поддерживает прямой холодный перевод и тёплый перевод, при котором агент сначала передаёт получателю краткую информацию о разговоре.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_transfer.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=65d468a7d2b41130a479a59947967398" alt="Открытая панель ноды Transfer с секцией «График работы операторов»: тумблер графика, часовой пояс операторов, строки дней и реплика вне графика" width="1440" height="900" data-path="images/v4_node_transfer.png" />

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_transfer_phrase.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=2f02a364716a42967ae848b03f626ee4" alt="Секция «Фраза перед переводом»: тумблер, выбор между фиксированным текстом и промптом, поле реплики и галочка «Не перебивать эту фразу»" width="385" height="619" data-path="images/v4_node_transfer_phrase.png" />

* **Название ноды** — определяет имя шага перевода в сценарии.
* **«Сразу (слепой перевод)» / «С предупреждением (со сводкой)»** — соединить напрямую или сначала дать получателю краткий брифинг. При тёплом переводе абонент ставится на удержание, агент дозванивается назначению, передаёт сводку и уходит.
* **Назначение** — задаёт, куда перевести звонок: на номер телефона, агента или URI. Перевод **на другого агента** работает во всех каналах: телефонный звонок, звонок с сайта, голосовой тест в кабинете, чат и WhatsApp.
* **Переменные перевода** — позволяют использовать значения `{{transfer_status}}` и `{{transfer_success}}` для отслеживания результата.
* **Метод сигнализации** — выбирает **SIP INVITE** или **SIP REFER** для передачи звонка.
* **Длительность ожидания ответа** — задаёт, сколько секунд платформа ждёт ответа назначения. Допустимый диапазон — 1–120 секунд.
* **«Номер перевода»** — какой номер видит принимающий: **«Номер клиента (по умолчанию)»**, **«Номер транка»** или **«Свой номер»**. У своего номера есть отдельное поле — номер или переменная; значение обязано входить в пул исходящих номеров сабгруппы перевода, иначе перевод уйдёт по запасной связи. При методе **SIP REFER** номер уходит подсказкой для SBC в заголовках `P-Asserted-Identity` и `Referred-By` — применит ли её оператор связи к номеру на аппарате принимающего, решает сам оператор.
* **SIP-заголовки** — позволяют добавить пользовательские заголовки `X-*`. В значениях можно использовать переменные и секреты окружения.
* **Transfer-сабгруппа** — выбирает линию транка, по которой уйдёт нога или REFER: её пул номеров, лимиты, разрешённые направления и форму REFER. «По умолчанию» означает прежнее поведение — сабгруппа звонка, иначе дефолт транка. Если выбранный пятизначный префикс не заведён на транке звонка, набор идёт через сабгруппу по умолчанию, а причина видна в Истории. Сами сабгруппы заводятся в [Телефонии](/ru/v4/platform/telephony).
* **Фраза перед переводом** — тумблер **«Говорить фразу перед переводом»**: узел сам произносит «Соединяю вас с оператором…», отдельный узел разговора перед ним не нужен. Текст либо фиксированный, с подстановкой переменных, либо генерируется по вашей инструкции. Перевод стартует только после того, как фраза прозвучала целиком; вне графика операторов она не звучит. Галочка **«Не перебивать эту фразу»** относится ко всем репликам узла, а не только к этой.
* **График работы операторов** — тумблер **«Переводить только в рабочее время»** ограничивает перевод расписанием. Укажите **часовой пояс операторов** (подставляется зона организации; измените, если операторы работают в другой) и хотя бы одну строку с днями и часами: включённый график без строк не публикуется, а интервал через полночь задаётся двумя строками. Галочка **«Не переводить за 5 минут до закрытия»** не даёт отдать абонента, которого уже никто не возьмёт.
* **Что сказать вне графика** — фиксированный текст или инструкция для сгенерированной реплики. Пустое поле означает, что нода промолчит. В реплике доступны `{{transfer_next_open_time}}` и `{{transfer_next_open_date}}`.
* **Запись разговора** — галочка **«Продолжать запись после перевода»**, по умолчанию выключена. По умолчанию запись заканчивается там же, где длительность звонка, — на конце разговора с агентом: при тёплом переводе это удержание, при слепом — начало дозвона. Включите её, чтобы записать и разговор абонента с оператором: тогда запись будет длиннее звонка — учитывайте требования к записи разговоров.
* **Переменные ошибки** — после неудачного перевода `{{transfer_status}}` хранит причину (`no_answer`, `busy`, `rejected`, `transfer_ring_timeout` или `error`), а `{{transfer_success}}` равна `false`. Их можно использовать в условиях резервных переходов.
* **Переходы** — задают резервные направления после неудачного перевода. После успешного перевода они не выполняются, поскольку успешный перевод завершает работу AI.
* **Global node** — делает перевод доступным для перехода из любой точки сценария.
* **Удалить ноду** — удаляет шаг перевода из сценария агента.

Вне графика перевод **не начинается вовсе**: `{{transfer_status}}` принимает значение `out_of_hours`, `{{transfer_success}}` равна `false`, ближайшее открытие попадает в `{{transfer_next_open_time}}`, `{{transfer_next_open_date}}`, `{{transfer_next_open_iso}}` и `{{transfer_next_open_epoch}}`, реплика произносится, если вы её задали, и нода уходит по своим переходам. Дайте такой ноде переход Default или условие `{{transfer_status}} == "out_of_hours"` — иначе валидатор предупредит, что звонку вне окна некуда идти.

В истории звонка событие перевода помечено как пропущенное с причиной **«Вне графика работы»** — то есть закрытое окно не попадает в число переводов, которые не доехали до оператора.

<Info>
  **Перевод на другого агента меняет и голос.** Если адресат перевода — агент, продолжение разговора идёт на настройках **целевого** агента: его голос и модель синтеза, его язык распознавания, его напоминания о тишине и слова поддакивания, его ограничения управления звонком. Таймеры тишины отсчитываются заново, от первой реплики нового агента.
</Info>

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_history_transfer_out_of_hours.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=f823f8b3fdae5340f0965be80bb68374" alt="Звонок в истории: событие перевода со статусом «пропущено» и причиной «Вне графика работы», реплика о графике и переход по умолчанию в ноду End" width="1440" height="900" data-path="images/v4_history_transfer_out_of_hours.png" />

## Нода Component

Нода **Component** добавляет в сценарий повторно используемый блок. Используйте её для типовой части разговора: проверки данных, завершения звонка или часто повторяющегося сценария. После публикации агент разворачивает компонент в обычные ноды.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_component.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=f21d8d0479c79d5fd8e09bb5c01ab15c" alt="Открытая панель ноды Component" width="1440" height="900" data-path="images/v4_node_component.png" />

* **Название ноды** — определяет имя повторно используемого блока в сценарии.
* **Component** — позволяет выбрать существующий компонент для добавления в сценарий.
* **Создать компонент** — если нужного блока в библиотеке ещё нет.
* **Переходы** — соединяют компонент со следующей нодой основного сценария.
* **Global node** — делает компонент доступным для перехода из любой точки сценария.
* **Удалить ноду** — удаляет ссылку на компонент из сценария агента.

## Нода MCP Tool

Нода **MCP Tool** вызывает выбранный инструмент через MCP-сервер без голосового ответа. Используйте её, когда агенту нужно получить данные или выполнить внешнее действие через MCP-интеграцию.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_mcp_tool.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=90d9e65c4680f511ec0e455a03a9a528" alt="Открытая панель ноды MCP Tool" width="1440" height="900" data-path="images/v4_node_mcp_tool.png" />

* **Название ноды** — определяет имя шага MCP в сценарии.
* **«MCP-сервер»** — сервер, который предоставляет инструмент. Если серверов нет, добавьте его в настройках MCP-серверов.
* **Аргументы инструмента** — задают значения, необходимые выбранному инструменту. В аргументах можно использовать переменные, например `{{var}}`.
* **«Ответ → переменные (JSONPath)»** — сохраняют значения из ответа инструмента в переменные звонка. Они доступны следующим нодам и переходам.
* **Переменные результата** — позволяют использовать статус, success, error, result и HTTP status для ветвления после вызова.
* **«Реплика во время вызова»** — что агент скажет, пока инструмент работает.
* **Тайм-аут** — задаёт максимальное время выполнения MCP-вызова.
* **«Требовать подтверждение перед вызовом»** — агент сначала спросит разрешения.
* **Переходы** — соединяют результат работы инструмента со следующей нодой. Переменные ответа можно использовать для веток успеха и ошибки.
* **Global node** — делает MCP-инструмент доступным для перехода из любой точки сценария.
* **Удалить ноду** — удаляет MCP-вызов из сценария агента.

## Нода End

Нода **End** завершает разговор. Используйте её, когда агент выполнил задачу и должен произнести финальное прощание перед завершением звонка.

<img src="https://mintcdn.com/hubtalk/9ArMFeq_K4HZh-Td/images/v4_node_end.png?fit=max&auto=format&n=9ArMFeq_K4HZh-Td&q=85&s=013abf091cdcae6688f6158b174f859d" alt="Открытая панель ноды End" width="1440" height="900" data-path="images/v4_node_end.png" />

* **Название ноды** — определяет финальный шаг сценария.
* **«Промпт» / «Фраза»** — сгенерировать прощание по инструкции или произнести фиксированный текст.
* **Фиксированная фраза** — задаёт сообщение, которое агент произносит при завершении разговора. В него можно включить переменные, например `{{transfer_status}}` или `{{transfer_success}}`.
* **Allow interrupting the farewell phrase** — разрешает абоненту перебить финальное сообщение. Если настройка выключена, фраза будет произнесена полностью, после чего звонок завершится.
* **Удалить ноду** — удаляет финальный шаг из сценария агента.
