Сценарии (Flows)
Блок-схемы разговора: режимы, триггеры, ноды, слоты, переходы, отладка.
Flow — блок-схема разговора. Квадратики (ноды) = шаги. Стрелочки (edges) = переходы. Вы рисуете мышкой в визуальном редакторе. Бот выполняет строго по схеме.
Flow — вторая по важности сущность в платформе после агента. Без flow агент — просто «вольный разговор» — он отвечает на вопросы, но не ведёт клиента к результату. Flow превращает разговор в воронку с предсказуемой конверсией.
Зачем нужен flow
Бизнесу нужно, чтобы разговор заканчивался целевым действием: записью, заказом, оплатой, заявкой, подтверждением. Не просто «поговорили».
Без flow
Клиент: Хочу записаться.
Агент: Конечно! На какую услугу?
Клиент: На чистку.
Агент: Понял.
*(тишина. Разговор кончился. Записи нет. Данные клиента нигде не сохранены.
Клиент уходит.)*С flow
[Старт]
↓
[Спроси: какая услуга?]
↓
[Спроси: когда удобно?]
↓
[Найди свободные слоты] ← лезет в CRM
↓
[Есть слоты?]
├─ да → [Предложи 3 варианта]
│ ↓
│ [Собери имя и телефон]
│ ↓
│ [Запиши в CRM]
│ ↓
│ [Подтверди клиенту]
│ ↓
│ [Отправь SMS-напоминание]
│ ↓
│ [Конец — успех]
│
└─ нет → [Извинись]
↓
[Предложи другой день или перевод на оператора]Агент не может «забыть» шаг — это отдельная нода сценария, и переход к следующему шагу возможен только при выполнении условий текущего.
Преимущества flow для бизнеса
Аналитика воронки
Видно, где клиенты отваливаются: 40% не доходят до подтверждения → вопрос задан неудачно, меняем.
A/B-тесты
Два варианта одной ноды → замерили конверсию за неделю → оставили лучший.
Контроль качества
Записи в CRM делаются одинаково всегда. Нет забытых полей.
Масштабируемость
Один flow обрабатывает тысячи клиентов параллельно с одинаковым качеством.
Compliance
В регулируемых индустриях — phrasing и последовательность вопросов зафиксированы.
Graceful degradation
Нет слотов → предлагаем альтернативу. Клиент рассержен → переводим человека. Всё продумано заранее.
Два режима flow
Разговор. Flow для живого общения — чат, звонок, виджет. Ноды задают ход диалога.
Когда использовать: на другом конце — клиент, и надо с ним поговорить.
Типичные сценарии:
- Запись на приём.
- Оформление заказа.
- Квалификация лида (продажи).
- Техподдержка с решением типовых проблем.
- Оффбординг (отмена подписки с удержанием).
Автоматизация. Flow без клиента. Запускается по триггеру — расписанию, событию, webhook.
Когда использовать: нужно что-то сделать без диалога.
Типичные сценарии:
- Утренняя сводка в Slack («сколько продаж за вчера, сколько заявок»).
- Обработка webhook-событий (пришёл платёж → создать запись → отправить email).
- Cron-обзвон (напомнить клиентам за день до приёма).
- Ежедневная выгрузка отчёта из БД.
- Мониторинг статусов (каждый час проверять, нет ли зависших заказов).
На старте вам нужен conversation. Automation — позже, когда первый разговорный бот уже работает, и вы хотите автоматизировать рутину вокруг.
Триггеры: с чего flow начинается
У каждого flow есть триггер — источник запуска.
- Вручную — клиент открыл чат / нажал «позвонить» / вы кликнули «запустить». Самый частый триггер для conversation-flow.
- По расписанию (cron) — cron-выражение:
0 9 * * *= каждое утро в 9:00. Для automation-flow с периодическими задачами. - Webhook — POST-запрос на ваш специальный URL стартует flow. Для интеграций с внешними системами («новый платёж» → webhook → обработка).
- Событие — внутреннее событие платформы (новая сессия, новое сообщение, клиент попросил оператора).
Cron-выражения — шпаргалка
0 9 * * * каждый день в 09:00
*/15 * * * * каждые 15 минут
0 9-18 * * 1-5 каждый час с 09 до 18 в будни
0 0 1 * * первого числа каждого месяца в полночьИспользуйте crontab.guru для проверки.
Ноды: типы шагов
Flow состоит из нод (квадратиков). Два семейства — conversation и automation. Можно смешивать, если есть смысл.
Conversation-ноды (для разговора)
- entry — точка входа. Первая реплика: «Здравствуйте!». У flow всегда ровно один entry.
- ask-client — агент задаёт клиенту вопрос: «Как вас зовут?». Ждёт ответа, кладёт в слот.
- slot-filler — агент собирает несколько полей сразу (имя, телефон, дату), переспрашивает пока не заполнено всё. Самая мощная нода для сбора данных.
- intent-router — определяет намерение клиента, направляет в нужную ветку. «Запись» → A, «жалоба» → B, «вопрос о цене» → C.
- decision — условное ветвление:
if slot.age >= 18 then A else B. - data-lookup — запрос в вашу внешнюю систему через MCP. Проверить слоты, статус заказа, баланс счёта.
- action — выполняет действие: записать в CRM, отправить SMS, создать заявку в Jira.
- transfer-human — передача живому оператору. Сессия уходит в очередь.
- end-conversation — финальная реплика, завершение: «Записал, до встречи!» или «К сожалению, свободных мест нет».
- subflow — вложенный переиспользуемый flow. Например, «сбор контактов» — один subflow, используется в 10 разных основных flow.
Automation-ноды (для автоматизации)
- trigger — стартовая точка (cron / webhook / event). Аналог entry для automation.
- ai-step — один вызов LLM на данных из контекста (например, «суммаризировать отчёт из БД»).
- integration — HTTP / SQL / API-интеграция. Запросить данные, послать данные.
- transform — преобразование данных внутри контекста (извлечь поле, собрать массив, отфильтровать).
- condition — ветвление (как decision, но без диалога).
- human-gate — пауза: ждать подтверждения человека перед продолжением. Нужна для критичных действий (массовые рассылки, удаление данных).
- output — финальный результат: отправить email, сообщение в Slack, ответ на webhook.
Слоты: память разговора
Слот — именованная переменная, которую агент собирает по ходу диалога. Живёт в контексте сессии.
Примеры слотов
Для записи на приём:
service— какую услугу хочет клиент;date— когда (ISO-дата или относительно — «завтра», «послезавтра»);preferred_time— предпочтительное время («утром», «14:00»);name— имя клиента;phone— телефон для подтверждения.
Для техподдержки:
issue_type— тип проблемы;product_id— какой продукт;severity— критичность;contact_email— куда писать ответ.
Как агент их заполняет
Нода slot-filler смотрит, какие слоты ещё не заполнены, и спрашивает их по очереди. При этом:
- Клиент может ответить на несколько сразу — LLM поймёт и распарсит. «Я Иван, телефон +79161234567, хочу на чистку завтра» → все четыре слота заполнены за одну реплику.
- Если клиент сказал непонятное — агент переспросит, но не бесконечно (обычно 3 попытки, потом передача оператору).
- Клиент может передумать: «Нет, поменяйте на четверг» — slot перезаписывается.
Использование в других нодах
После заполнения слоты доступны через {{ slot.name }} в любой
последующей ноде:
Текст ноды end-conversation:
«{{ slot.name }}, записал вас на {{ slot.date }} в {{ slot.time }}.
До встречи!»Результат: «Алексей, записал вас на 20 апреля в 14:00. До встречи!».
Слоты живут только в контексте сессии — забываются после завершения разговора. Для долговременной памяти (история заказов, предпочтения) используйте CRM и базу знаний.
Переходы (edges)
Стрелка между двумя нодами — переход (edge). Бывает двух типов:
После ноды A всегда иди в B. Используется, когда нет ветвления.
[ask-client: "Как вас зовут?"] ─────▶ [ask-client: "Какой телефон?"]Идёт в B только если выполнено условие. Типичные условия:
slot.service == "чистка"
slot.age >= 18
slot.answer contains "согласен"
slot.answer matches /да|конечно|подтверждаю/i
lookup.available_slots.length > 0
intent == "complaint"Если у ноды несколько выходов — они проверяются сверху вниз. Последний без условия = «иначе» (fallback).
[decision]
├─ slot.age < 18 → [end-conversation: "Только для 18+"]
├─ slot.service == "нет" → [ask-client: "Уточните услугу"]
└─ (без условия — else) → [slot-filler: имя, телефон]Синтаксис условий
Доступны:
==,!=— равенство/неравенство.>,<,>=,<=— сравнения (для чисел и дат).contains— подстрока.matches— регулярное выражение.&&,||— логические операторы.slot.X,lookup.Y,context.Z— доступ к данным.
Частые ошибки
- Регистр имеет значение:
slot.service≠slot.Service. - Типы:
slot.age == "18"(строка) ≠slot.age == 18(число). Если слот заполнен из текста клиента — это строка. - Отсутствие else: если ни одно условие не выполнилось и нет fallback — сессия зависнет. Всегда делайте «else» для страховки.
Пример: полный flow записи на приём
[entry]
«Здравствуйте! Клиника Улыбка, чем помочь?»
↓
[intent-router]
│
┌─────────────────┼─────────────────┐
│ │ │
«запись» «вопрос» «жалоба»
↓ ↓ ↓
[slot-filler] [data-lookup] [transfer-human]
service, date в базу знаний priority=9
↓ ↓
[data-lookup] [ai-step: ответ]
найти слоты
↓
[decision]
│
├─ нет слотов
│ ↓
│ [end-conversation: "Свободных мест нет, запишу на другой день?"]
│
└─ есть
↓
[ask-client: "Есть X, Y, Z. Какое выбираете?"]
↓
[slot-filler]
chosen_time
↓
[slot-filler]
name, phone
↓
[ask-client: "Записываю на {{name}}, {{phone}}, на {{date}} в {{time}}. Подтверждаете?"]
↓
[decision: confirmed]
├─ нет → [end-conversation: "Отменил"]
└─ да → [action: book_appointment(...)]
↓
[action: send_sms_reminder(...)]
↓
[end-conversation: "Готово! Жду вас."]Это не псевдокод — именно так это выглядит в редакторе. Мышкой тянете ноды из палитры, соединяете стрелками, настраиваете условия. За 30–60 минут собирается полноценный сценарий на 10-20 нод.
Как создать flow: пошагово
Откройте «Сценарии → Новый сценарий»
В сайдбаре слева.
Заполните базу
- Имя: человеческое, для команды («Запись на приём в стоматологию»).
- Режим:
conversation(если для диалога) илиautomation(если для фоновых задач). - Триггер: обычно
manual. Cron/webhook/event — для специфичных сценариев.
Откроется холст
Пустой холст с одной нодой entry по центру. Слева — палитра нод, справа — панель настроек выбранной ноды.
Стройте по одной ноде
Перетаскивайте нужные типы из палитры на холст. Соединяйте стрелками (тяните от кружка справа у ноды к другой ноде).
Совет: начните с главного «хребта» сценария — линейной цепочки без ветвлений. Ветвления добавите потом.
Настройте каждую ноду
Клик по ноде → справа открывается панель: текст вопроса, условия переходов, параметры.
Для ask-client и slot-filler — пишите вопросы на человеческом языке,
как говорил бы оператор.
Для data-lookup и action — выбираете MCP-инструмент и маппинг
параметров.
Настройте условия переходов
Кликните по стрелке → в панели справа добавьте условие (если нужно).
Критично: у каждого condition/decision должен быть «else» — случай, когда ни одно условие не сработало. Иначе сессия зависнет.
Сохранить → протестировать в draft
Статус draft — flow не запускается автоматически, но его можно
запустить вручную из интерфейса.
В разделе Чаты → Новый чат выберите агента → запустите этот flow → пройдите разговор «как клиент». Проверьте все ветки.
Опубликовать (draft → active)
Когда всё работает — поменяйте статус. Flow становится доступным в продакшене и работает по триггеру.
Начните с 3–4 нод. Добавлять легче, чем удалять запутанное. Первая версия вашего flow будет «сломана» в 80% случаев — это нормально. Реальные сценарии выявляются на первых 50–100 клиентах.
Статусы flow
- draft — черновик. Не запускается автоматически по триггеру. Можно тестировать вручную.
- active — активный. Триггер работает, flow запускается автоматически.
- paused — на паузе. Триггер отключён временно, но flow не удалён. Удобно для срочной заморозки (нашли баг — ставим на паузу пока чиним).
- archived — в архиве. Не показывается в основном списке, но историю можно посмотреть.
Режим выполнения: deterministic vs agentic
У flow есть важная настройка — execution mode.
Детерминистический. Жёстко следует нарисованной схеме. Переходы — только по условиям на стрелках.
Когда выбирать:
- Регулируемые процессы (банки, медицина, страховка).
- Compliance-требования (фразы должны быть стандартизированы).
- Когда важна 100% предсказуемость.
- Для сценариев, где цена ошибки высока (финансовые транзакции).
Плюсы: полный контроль, предсказуемое поведение. Минусы: менее гибко, бот не умеет «выйти за рамки» в нестандартных случаях.
Агентный. LLM может сам выбирать следующую ноду исходя из контекста, даже если вы не нарисовали явный переход.
Когда выбирать:
- Свободные разговоры (продажи, консультации).
- Когда клиенты часто «перескакивают» между темами.
- Когда нужна гибкость и естественность.
Плюсы: гибко, естественно звучит. Минусы: менее предсказуемо, труднее отлаживать.
Рекомендация на старте: deterministic. Когда привыкнете к
механике, попробуете agentic на отдельных flow и сравните конверсию.
Для большинства кейсов детерминистический даёт лучшие результаты при
меньшей сложности.
Паттерны flow
Решения для типовых задач.
Паттерн 1: защита от бесконечного slot-filling
Проблема: клиент не даёт валидный ответ, slot-filler крутится бесконечно.
Решение:
[slot-filler, max 3 попытки]
↓
[decision: заполнено?]
├─ да → дальше по сценарию
└─ нет → [transfer-human: "Переведу на администратора"]Паттерн 2: подтверждение перед критичным действием
Проблема: бот записывает в CRM неправильные данные, клиент отказывается.
Решение:
[slot-filler: name, phone, date]
↓
[ask-client: "Записываю {{name}}, {{phone}}, {{date}}. Всё верно?"]
↓
[decision]
├─ "да" → [action: book_appointment]
└─ "нет" → [slot-filler] (переспрашиваем)Сокращает ошибочные записи на 95%.
Паттерн 3: fallback на оператора
Проблема: бот застрял в нестандартной ситуации, клиент раздражается.
Решение: в intent-router или decision на каждом шаге добавляем
ветку:
intent matches /жалоба|претензия|оператор|человек/i
↓
[transfer-human, priority=8]А также общий fallback на entry:
[entry] → [intent-router]
│
├─ известное намерение → обычный flow
└─ unknown → [ai-step: "попытайся понять"]
↓
[decision]
├─ понял → flow
└─ не понял → transfer-humanПаттерн 4: проактивная продажа
Проблема: клиент записался — хочется предложить дополнительные услуги.
Решение: после action: book_appointment добавляем:
[action: book_appointment]
↓
[ai-step: "Проанализируй тип услуги и клиента. Если уместно — предложи
доп. услугу."]
↓
[decision: stood_up?]
├─ да → обычное end
└─ предложил → [ask-client: "...как вам такое?"]
↓
[action: add_service]
↓
[end-conversation]Конверсия допродаж: 5-15%.
Паттерн 5: soft-ретеншен
Проблема: клиент хочет отменить заказ / услугу / подписку. Отпустить — потеря дохода. Удержать силой — нельзя.
Решение:
[intent: cancel]
↓
[ask-client: "Жаль расставаться. Скажите, что именно не устраивает?"]
↓
[ai-step: классификация проблемы]
↓
[decision]
├─ цена → [ask-client: "У нас есть скидка 20%, интересно?"]
├─ качество → [transfer-human: "Решим с менеджером"]
├─ не нужно → [action: cancel_gracefully]
└─ другое → [transfer-human]В среднем удерживает 15-30% отмен.
Как отлаживать flow
Когда flow ломается — пошагово.
Шаг 1: повторите сценарий в песочнице
Чаты → Новый чат → ваш агент → запустить ваш flow. Пройдите тот же диалог, что и реальный клиент.
Шаг 2: смотрите flow_runs
Для каждого запуска flow создаётся запись в таблице flow_runs. В
админке: Сценарии → ваш flow → Запуски. Видно:
- куда пошёл разговор на каждом шаге;
- значения слотов в каждый момент;
- результаты MCP-вызовов;
- где flow сломался (если сломался).
Шаг 3: проверьте условия переходов
Самая частая ошибка — регистр или тип данных. slot.Service вместо
slot.service, "18" (строка) вместо 18 (число).
Шаг 4: проверьте MCP-инструменты
data-lookup или action падают с ошибкой? Проверьте:
- отметили ли инструмент в агенте;
- правильные ли параметры передаются;
- жив ли MCP-сервер (Настройки → MCP-серверы → статистика).
Шаг 5: улучшите формулировки нод
Клиент не понял вопрос бота — перепишите формулировку проще. Не знаете как — попросите коллегу без контекста пройти flow «как клиент».
Частые ошибки
Метрики здоровья flow
Смотрите еженедельно. Критичные показатели:
| Метрика | Здоровое значение | Что делать если плохо |
|---|---|---|
| Доля успешных прохождений (дошли до целевой ноды) | 40–70% | <25% — flow слишком сложный или ведёт не туда |
| Средняя длина прохождения (нод) | 5–12 | >20 — слишком запутанный, упростите |
| Где отваливаются (дроп-рейт по нодам) | 5–15% на шаг | >30% на одной ноде — там проблема |
| Доля переходов на оператора | 10–25% | >40% — бот не справляется, нужно усиливать |
| Средняя длительность flow (секунды) | <60 сек для простых | >180 сек — клиенты устают, сокращайте |
Что смотреть в аналитике
В Аналитика → Flows видно для каждого flow:
- Количество запусков за период.
- Воронка: сколько дошло до каждой ноды.
- Где самые большие отвалы.
- Средняя длительность.
- Разбивка по успешно/неуспешно/перевод на оператора.