Документация › Проект и бот › JSON-ответ бота
JSON-ответ бота (статусы, стадии, флаги)
[для продвинутых]Бот отвечает не просто текстом, а структурированным JSON: текст ответа + что он понял про клиента (имя, телефон, стадия, статус лида). Эта статья — что внутри и зачем.
⏱ 8 мин · 👤 для разработчика и любопытного владельца · 🟢 live
За 30 секунд:
- Бот возвращает JSON, не «голый текст»: поле
answer(ответ) + метаданные диалога.- Из JSON платформа достаёт: имя/телефон/email клиента, стадию воронки, статус лида, нужно ли продолжать диалог.
- Никакого стриминга — ответ приходит целиком; «эффект печатания» делается разбивкой на части на стороне клиента.
- Удалённые поля (
selected_service,services) бот иногда всё ещё шлёт — платформа их молча выкидывает.
Зачем боту JSON, а не текст
Если бы бот возвращал просто текст, платформа не знала бы, что произошло в разговоре: как зовут клиента, на каком он этапе, стоит ли заводить лида. Поэтому модель отвечает структурой — текст для клиента плюс «понятое» про диалог. Это и позволяет автоматически заполнять карточку лида, двигать стадию воронки, решать про дожимы.
Поля ответа
Ответ проверяется по схеме (ai-response-schema.ts). Основные поля:
| Поле | Тип | Что значит |
|---|---|---|
answer | строка (обязательно) | основной текст ответа клиенту |
message_parts | массив строк | ответ, разбитый на части (эффект печатания) |
client_name | строка | имя клиента, если бот его узнал |
phone | строка | телефон, если назвали |
email | строка | email, если назвали |
stage | строка | стадия воронки (greeting…done) |
lead_status | строка | статус лида |
continue_to_talk | yes / no | продолжать ли диалог (влияет на автопаузу) |
summary | строка | краткое резюме разговора для карточки лида |
full_data | объект | произвольные собранные поля (кастомные данные) |
triggered_events | массив строк | какие события/функции инициировать (до 50) |
📌stageиlead_status— обычные строки, а не жёсткий список, потому что проект может задать свой набор стадий/статусов. Платформа проверяет значение по разрешённому набору проекта; если значение «чужое» — пишет предупреждение и оставляет старое, а не ломает диалог. Если воронка у проекта выключена —stage/lead_statusиз ответа игнорируются.
Разбивка на части (эффект печатания)
Бот может прислать message_parts — несколько коротких сообщений вместо одного длинного. Платформа отправляет их по очереди с паузой между ними (по умолчанию ~2 сек), создавая ощущение «человек печатает».
⚠️ Это НЕ стриминг. Ответ модели приходит целиком и сразу; «постепенность» — это клиентская пауза (setTimeout) между уже готовыми частями. Стриминг в платформе не используется (он ломал бы подсчёт токенов и возвраты). Управление разбивкой — в продвинутых настройках (split_*).
Игнорируемые поля
Модель по привычке иногда возвращает selected_service / services — это поля удалённой фичи «Услуги» (убрана 2026-04-22). Схема их принимает и молча отбрасывает, чтобы старый «мусор» от модели не ломал разбор ответа. Это не ошибка.
💬 Простыми словами
Когда бот отвечает, он на самом деле отдаёт не просто фразу, а небольшую «анкету»: вот мой ответ клиенту, а вот что я про него понял — как зовут, какой телефон, на каком мы этапе разговора, считать ли его горячим лидом. Платформа читает эту анкету и сама заполняет карточку клиента, двигает его по воронке, решает, нужно ли потом напомнить о себе.
Тебе как владельцу в это лезть не нужно — всё работает само. Знать про это полезно в одном случае: если хочешь, чтобы бот точнее определял стадии и статусы под твой бизнес, — опиши правила в промпте, и он будет аккуратнее заполнять эту «анкету».
Дальше: → Выбор AI-модели
Связано: Системный промпт · Стадии воронки · Лиды · Продвинутые настройки
Не получилось? → Бот не отвечает