---
title: "Узлы сценария"
id: "1957"
type: "page"
slug: "nodes"
published_at: "2026-09-20T14:56:52+00:00"
modified_at: "2026-09-21T00:00:47+00:00"
url: "https://pastukhov.com/agents/chatbot/docs/nodes"
markdown_url: "https://pastukhov.com/agents/chatbot/docs/nodes.md"
excerpt: "Сценарий диалога состоит из шагов — узлов. Каждый узел что-то делает: показывает сообщение, задаёт вопрос,…"
---

# Узлы сценария

[https://pastukhov.com/agents/chatbot/docs/nodes.md](https://pastukhov.com/agents/chatbot/docs/nodes.md)

Сценарий диалога состоит из шагов — узлов. Каждый узел что-то делает: показывает сообщение, задаёт вопрос, проверяет условие, обращается к ИИ или передаёт разговор человеку. Узлы соединяются стрелками-переходами, и каждый из них сам решает, куда идти дальше: напрямую, по результату («получилось» или «нет») или по каждой кнопке отдельно.

Всего есть 18 типов узлов. Меню узла меняется в зависимости от типа, а рядом на холсте сразу видно, как он будет выглядеть.

## Сообщения

- **Сообщение** — текст клиенту с подстановкой переменных и кнопками. Если текста слишком много, он делится на несколько сообщений сам, по границам строк. Можно приложить картинку или файл — тогда текст станет подписью к нему.
- **Медиа** — картинка, видео или документ из медиатеки бота (или ссылка на файл в интернете). Удобно показывать товар, схему, прайс или инструкцию.

## Ввод и логика

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

## ИИ

- **ИИ-диалог** — ответ модели в свободной форме. Можно «приземлить» ответ на документы: тогда ИИ отвечает только по вашей базе знаний и прикладывает источники, а если ответа в базе нет — уходит по ветке «нет ответа» и не выдумывает. Есть запасной вариант: если первый ответ не удался, отвечает модель из запасного списка.
- **ИИ-задача** — вытащить из ответа клиента нужные данные и разложить их по переменным. Вы задаёте поля (имя, телефон, город), их тип и обязательность — ИИ возвращает готовые значения, а не свободный текст.
- **ИИ-агент** — модель с набором инструментов и инструкций под конкретную задачу. Агент сам решает, когда отправить сообщение, поискать в базе знаний, изменить переменную, перейти к другому узлу или позвать оператора. Так разговор становится гибче, а вы задаёте рамки и пределы.

## Данные и внешние системы

- **Поиск по базе знаний** — найти подходящий кусок в ваших документах. Ветка «нет ответа» здесь обязательна: вы всегда решаете, что делать, если ничего не нашлось.
- **HTTP-запрос** — обратиться к внешней системе: вашей CRM, складу, службе доставки. Ответ можно разложить по переменным, а ветки задать по коду ответа (успех, ошибка клиента, ошибка сервера, превышен предел частоты).
- **Скрипт** — выполнить ваш скрипт на Python: посчитать, проверить заказ, обратиться туда, куда обычным запросом не дотянуться. Подробнее — в разделе [Скрипты](/agents/chatbot/docs/scripts) .

## Оператор

- **Передача оператору** — позвать человека. Бот умолкает, а разговор попадает к оператору вместе с кратким описанием и последними репликами — оператору не нужно перечитывать всё с начала.
- **Уведомить администратора** — отправить сообщение вам, а не клиенту: о новой заявке, о необычном случае, о сумме заказа. Сообщение приходит в служебный чат.

## Служебные потоки

Кроме основного сценария есть три служебных потока — короткие «что делать, если». Они задаются один раз и работают для всего бота:

- **Поток ошибки** — срабатывает, когда пришёл непонятный или неожиданный ввод. Обычно здесь вежливое «не понял» и кнопка с меню.
- **Поток тайм-аута** — срабатывает, если клиент молчит слишком долго (например, полчаса). Для каждого разговора — один раз.
- **Завершающий поток** — что сделать при закрытии разговора: попрощаться, попросить оценку, отметить клиента.

## Что запускает диалог

- **первый входящий** — обычное начало разговора; команда «/start» начинает всё заново, с чистыми переменными;
- **команды** — короткие слова с косой чертой, как «/start»;
- **ключевые слова целиком** — если сообщение целиком совпадает со словом из списка (без учёта регистра);
- **ссылки с данными** — переход по ссылке вида «/start booking»: разговор начинается с нужного узла, а переданные данные попадают в переменные (удобно для рекламы с разных площадок);
- **расписание** — запуск сценария по дням недели и времени;
- **входящие веб-запросы** — внешняя система отправляет данные на адрес с секретом, и сценарий стартует (например, заявка с сайта);
- **заявки на вступление** — если бот администрирует группу, на заявку можно ответить приветствием.

## Переменные и подстановки

В любом тексте и в любом обращении к ИИ можно подставить значение переменной: пишется имя в двойных фигурных скобках. Сначала подставляются переменные разговора (они могут быть вложенными, тогда имя пишется через точку), затем системные: имя, фамилия, логин, номер чата, язык и текст сообщения клиента.

Если значение пустое, подстановка убирается аккуратно. Например, текст «Здравствуйте, {{first_name}}!» для гостя без имени превратится просто в «Здравствуйте!» — без повисшей запятой и лишних пробелов.

Как отвечать по документам и что делать с пробелами в знаниях — в разделе [База знаний](/agents/chatbot/docs/knowledge)
. Как настраиваются модели и правила общения — в разделе [Модели и промпты](/agents/chatbot/docs/models)
. Собрать узлы в диалог поможет [Студия сценариев](/agents/chatbot/docs/studio)
.

[← Оглавление документации](/agents/chatbot/docs)
