Документация › Старт › Как бот думает
Как бот думает
Обновлено 24 октября 2026 г.
Понять за 8 минут, что происходит между сообщением клиента и ответом бота: тогда станет ясно, почему бот отвечает так, и где это чинить.
⏱ 8 мин · 👤 для всех · 🟢 live
За 30 секунд:
- На каждое сообщение бот собирает: твой промпт (правила) + факты о бизнесе (поле «Информация о компании» и база знаний) + функции (действия).
- Дальше он решает: просто ответить словами или вызвать функцию (записать, посчитать, выставить счёт).
- Бот не помнит ничего, кроме истории текущего диалога. Что не написано в промпте/знаниях: он не знает. Исключение: ссылку, которую прислал клиент, бот открывает и читает.
- После ответа платформа сверяет слова бота с его действиями: написал «выставил счёт», а функцию не вызвал, получает круг на исправление.
- Одинаково работает в тест-чате, WhatsApp, Telegram и Instagram.
Что происходит на каждое сообщение
Когда клиент пишет, бот проходит такой путь (обычно ответ приходит через 10-40 секунд):
Сообщение клиента
│
▼
0. Сработало правило с точным ответом? → ответ уходит без модели
│ нет
▼
1. Собрать контекст: системный промпт (характер + правила)
+ история этого диалога
+ подходящие куски базы знаний (RAG)
+ текст страниц по ссылкам из сообщения клиента
+ меню включённых функций
│
▼
2. Решить: «ответить словами» ИЛИ «вызвать функцию»
│ │
│ ▼
│ выполнить действие
│ (календарь / таблица / счёт …)
│ │
│ ▼
│ получить результат, подумать снова
▼ │
3. Сформулировать ответ клиенту ◄────────┘
│
▼
4. Сверить слова с делами: «выставил», «записал», «передал»
без вызова функции → один круг на исправление
│
▼
Ответ уходит в WhatsApp / Telegram / InstagramШаг 0 это правила: точный ответ по ключевому слову уходит сразу и не стоит модели. Правило может и не отвечать само, а подсказать боту, что сказать на этот ход.
Ссылки на шаге 1. Клиент прислал ссылку на сайт, Instagram или объявление: бот открывает до двух ссылок из сообщения, читает заголовок, описание и начало текста страницы и отвечает по сути, а не гадает по словам в адресе. На одну ссылку не больше восьми секунд, закрытые и внутренние адреса не открываются; не открылось, бот знает причину и не выдумывает, что там было. Выключается в настройках бота: «Расширенные настройки» → «Читать ссылки из сообщений».
Проверка на шаге 4. Модель иногда пишет «счёт отправил» или «передала менеджеру», не вызвав функцию. Платформа после каждого ответа сверяет такие заявления (на русском, казахском и английском) с журналом вызовов этого хода. Расхождение есть, бот получает один круг на исправление: вызвать функцию или ответить честно. Не исправился, в рабочем чате клиенту уходит нейтральный ответ, а диалог получает пометку «ответьте руками» и запись action_claim_unbacked в логах. В тест-чате бот ещё и прямо говорит, что здесь счёт, бронь или сделка не выставляются, и что получил бы клиент в рабочем чате.
Ключевое: различать два вида знаний. Общие вещи о мире бот уже знает из обучения, что такое кариес, как вежливо общаться, базовую логику и счёт: это объяснять не нужно. А вот факты про твой бизнес, услуги, цены, расписание, адрес, он не знает, пока ты не дашь их в промпте, поле «Информация о компании» или базе знаний. Плюс бот не ищет в интернете и не знает, что происходит прямо сейчас за пределами диалога. Правило простое: общему учить не надо: давай ему только то, что специфично для тебя.
Источники, из которых бот берёт ответ
| Источник | Что это | Когда использовать |
|---|---|---|
| 🧠 Системный промпт | Поведение: характер, тон, правила, что запрещено | Всё «как себя вести» → Промпт |
| 🏢 Информация о компании | Короткие базовые факты: услуги, цены, адрес, часы, вшиваются в каждый ответ целиком | Компактные факты «о тебе» → Промпт |
| 📚 База знаний (RAG) | Объёмные/меняющиеся документы: большой прайс, условия, FAQ, подмешиваются по кускам | Много фактов / документы → База знаний |
| 🛠️ Функции | Реальные действия во внешнем мире | Записать, посчитать, оплатить → Функции |
💡 Правило большого пальца: как общаться в промпт; коротко о бизнесе в «Информацию о компании»; много фактов / документы в базу знаний; что делать в функции.
Что значит «бот вызвал функцию»
Сам по себе ИИ умеет только писать текст. Функции дают ему «руки». Ты не прописываешь сценарий «если X то Y», ты описываешь каждую функцию словами, и бот сам решает в нужный момент её вызвать.
📌 Пример. Подключены функции «проверить свободное время» и «записать клиента». Клиент: «хочу завтра после обеда». Бот сам: проверяет слоты → предлагает время → после согласия записывает → подтверждает. Никто этот сценарий по шагам не программировал.
За один ход бот может вызвать несколько функций подряд (проверил → записал), но не больше 15 раз. Подробно в гайде по функциям.
Решение «вызвать функцию» бот принимает по смыслу сообщения, а не по языку и точным словам: «напишу в четверг», «кейін жазамын» и «I'll text you later» одинаково ставят напоминания на паузу. У необратимых действий (счёт, запись, подтверждение оплаты) можно поставить предохранитель: платформа сама проверит факт в диалоге (есть ли чек, телефон, прошла ли оплата) и не даст функции сработать раньше времени.
Где бот работает одинаково
Один и тот же «мозг» (промпт, факты, функции, модель) отвечает:
- в тестовом чате кабинета (песочница: без реальных клиентов, но ответы бота списываются с баланса проекта, как обычные) → Тест-чат;
- в боевых WhatsApp и Instagram → Подключить WhatsApp · Подключить Instagram;
- в боевом Telegram → Подключить Telegram;
- в ответе после оплаты: клиент оплатил счёт Kaspi, и бот сам продолжает разговор.
Два места устроены иначе. Дожимы бот пишет по тому же промпту и той же переписке, но функций в них не вызывает: дожим это только текст (Дожимы). Чат на главной странице сайта это наш консультант DOS AI, а не твой бот: твои настройки на него не влияют.
⚠️ Важно. Если что-то работает в тест-чате, так же сработает в бою. Поэтому всегда проверяй изменения в тест-чате перед тем, как выпускать к клиентам.
Почему бот иногда «тупит», и где чинить
| Симптом | Обычно причина | Куда смотреть |
|---|---|---|
| Отвечает не по делу / выдумывает | Факта нет в промпте/знаниях, бот «додумал» | Добавь факт в Базу знаний |
| Не записывает / не считает | Функция выключена или плохое описание | Функции |
| Отвечает слишком формально/сухо | Тон не задан в промпте | Промпт |
| Молчит совсем | Кончился баланс / триал | Бот не отвечает |
| Отвечает общими фразами, «уточню у администратора» | Промпт пустой | «Составить за меня» |
| Говорит «записал», а записи нет | Функция не вызвана: плохое описание или она выключена; платформа уже дала боту круг на исправление и пометила диалог | Функции · Логи |
| Один конкретный ответ не нравится | Правило не записано | В тест-чате ссылка «Поправить ответ словами» под ответом: фраза встанет правилом в промпт → Тест-чат |
💡 Запомни: плохой ответ бота это почти всегда не «глупый ИИ», а неполный промпт или знания. Бот честно работает с тем, что ты ему дал. Что именно он делал на каждом шаге, видно в логах событий. Какие защиты от выдуманных ответов стоят у всех ботов и как поправить ошибку в живом диалоге: Почему бот не выдумывает.
Под капотом (для разработчиков)
- Каждый ответ, non-streaming вызов модели (в DOS AI streaming запрещён: ломает авторитетный подсчёт токенов, refund при обрывах, round-trip функций). «Постепенный» эффект печати: клиентский, через паузы между частями ответа.
- Функции отдаются модели как OpenAI
tools; вызов функции → выполнение → результат возвращается модели → она формулирует финальный текст (tool-call round-trip). - База знаний подмешивается через RAG (семантический поиск релевантных кусков), а не «весь документ в каждый запрос».
- Ответ модели, структурированный JSON (текст для клиента + служебные поля: статус лида, стадия диалога, флаги). Формат в статье JSON-ответ бота.
- Тест-чат, вебхуки каналов (WhatsApp, Instagram, Telegram) и ответ после оплаты зовут один пайплайн (
executeAIPipeline), поэтому поведение одинаковое. Дожим зовёт модель отдельным вызовом без функций (drip-followup.ts), демо-чат сайта живёт своим маршрутом (/api/demo-chat). Память диалога = история сообщений из БД, а не «глобальная память». - Ссылки из сообщения читаются до хода модели (
inbound-links.ts: до 2 ссылок, 8 секунд, 3 переадресации, защита от внутренних адресов), событиеinbound_link_read. Сторож заявлений (action-claim-guard.ts) сверяет глаголы действия в ответе с журналом вызовов хода: один исправляющий круг с функциями, второй отказ в бою даёт нейтральную строку и пометку «ответьте руками», событиеaction_claim_unbacked. В тест-чате функции кассы, CRM, iiko, АльфаCRM и лид-функции отвечают холостым результатом сperformed: falseи словами для собеседника. - Повторный текст промпта и информации о компании кешируется у OpenAI на каждом ходу: второй и следующий ответы в том же проекте обходятся дешевле первого.
Простыми словами
Представь бота как нового толкового сотрудника: общие вещи (язык, вежливость, что такое кариес) он уже знает, а вот про твой бизнес, только то, что ты ему рассказал. Перед каждым ответом он быстро «вспоминает»: твои инструкции (как себя вести), справочник про твой бизнес (цены, услуги, адрес) и список действий, которые ему разрешено делать (записать, посчитать, выставить счёт). Потом он либо отвечает словами, либо делает действие, и пишет клиенту результат.
Поэтому если бот ответил неправильно, почти всегда дело не в том, что «ИИ тупой», а в том, что ему чего-то не рассказали. Добавишь нужный факт или правило, и он сразу станет умнее. И всегда сначала проверяй бота в тестовом чате: там он думает точно так же, как в реальном WhatsApp, но без последствий.
Дальше: → Быстрый старт: первый бот за 30 минут
Связано: Системный промпт · Функции · База знаний · Тест-чат
Не получилось? → Бот не отвечает