DOS AI/ Документация
ОтзывыДля когоАгентствамВозможностиЦенаFAQОбучениеДокиВойтиСтарт
DOS AI/ Документация
ОтзывыДля когоАгентствамВозможностиЦенаFAQОбучениеДокиВойтиСтарт
← Руководство по разделам

Всё руководство одной страницей

Здесь собраны все 68 статей руководства подряд. Страница всегда показывает актуальную версию: сохраните её в PDF или распечатайте, когда нужна копия под рукой.

Откроется окно печати, там выберите «Сохранить как PDF».

Содержание

  1. Что такое DOS AI · Старт
  2. Как бот думает · Старт
  3. Быстрый старт: первый бот за 30 минут · Старт
  4. Карта кабинета (навигация) · Старт
  5. Глоссарий · Старт
  6. Как выбрать чат-бота для WhatsApp · Старт
  7. Создание проекта · Проект и бот
  8. Системный промпт (характер бота) · Проект и бот
  9. JSON-ответ бота (статусы, стадии, флаги) · Проект и бот
  10. Выбор AI-модели · Проект и бот
  11. Тестовый чат · Проект и бот
  12. Продвинутые настройки бота · Проект и бот
  13. Загрузить знания о бизнесе в бота (что куда) · Проект и бот
  14. Обзор каналов · Каналы
  15. Подключить WhatsApp (по QR) · Каналы
  16. Подключить Telegram-бота · Каналы
  17. Гигиена и антибан (WhatsApp) · Каналы
  18. Функции (инструменты бота) · Инструменты бота
  19. База знаний (RAG) · Инструменты бота
  20. Медиа-библиотека · Инструменты бота
  21. Дожимы (follow-up) · Инструменты бота
  22. Теги и сегментация · Инструменты бота
  23. Уведомления владельцу (Telegram, WhatsApp и почта) · Инструменты бота
  24. Запись на время (Calendar и движок окошек) · Инструменты бота
  25. Бот выставляет счёт (Kaspi) · Инструменты бота
  26. Письмо клиенту · Инструменты бота
  27. Рассылки по базе контактов · Инструменты бота
  28. Исходящие диалоги (бот пишет первым) · Инструменты бота
  29. Диалоги, лента, перехват, «AI на паузе» · Работа с клиентами
  30. Лиды и их статусы · Работа с клиентами
  31. Стадии диалога (воронка) · Работа с клиентами
  32. Аналитика · Работа с клиентами
  33. Логи событий · Работа с клиентами
  34. Авто-отчёты владельцу (Telegram и почта) · Работа с клиентами
  35. Обзор интеграций + сервисный аккаунт Google · Интеграции
  36. Google Sheets · Интеграции
  37. Google Calendar · Интеграции
  38. Gmail · Интеграции
  39. CRM, Bitrix24 / amoCRM / AlphaCRM · Интеграции
  40. Вебхуки и безопасность (SSRF) · Интеграции
  41. МойСклад: наличие и цены в ответах бота · Интеграции
  42. Биллинг проекта: токены, подписка, пополнение · Деньги
  43. Сколько стоит сообщение · Деньги
  44. Приём оплат от клиентов (Kaspi) · Деньги
  45. Промокоды и партнёрская программа · Деньги
  46. Роли и права (viewer / tester / editor / admin / owner) · Команда и аккаунт
  47. Участники и приглашения · Команда и аккаунт
  48. Профиль, пароль, безопасность · Команда и аккаунт
  49. Уведомления и личные настройки · Команда и аккаунт
  50. Удаление, передача, дублирование проекта · Команда и аккаунт
  51. Публичный API и ключи dos_sk_live_… · Для разработчиков
  52. Кастомные вебхуки (продвинутый режим) · Для разработчиков
  53. Язык выражений (expressions) · Для разработчиков
  54. Формат данных и интеграция фронта · Для разработчиков
  55. Подключить ИИ-агента: Claude Code, Codex, Cursor (MCP) · Для разработчиков
  56. Бот не отвечает, диагностика · Решение проблем
  57. Функция не вызывается / падает · Решение проблем
  58. Канал отвалился / WhatsApp забанили · Решение проблем
  59. Платёж не прошёл · Решение проблем
  60. Частые вопросы (FAQ) · Решение проблем
  61. Лиды из рекламы приходят с задержкой · Решение проблем
  62. Каталог встроенных функций · Справочники
  63. Справочник настроек (agent_config) · Справочники
  64. Коды ошибок и состояния · Справочники
  65. Стадии, статусы лида, типы клиента · Справочники
  66. Лимиты и квоты · Справочники
  67. Переменные и хелперы выражений · Справочники
  68. Типы уведомлений · Справочники

Документация › Старт › Что такое DOS AI

Что такое DOS AI

Платформа, на которой ты собираешь AI-бота для своего бизнеса: он сам отвечает клиентам в WhatsApp и Telegram, собирает заявки и ведёт их в CRM.

⏱ 6 мин · 👤 для всех · 🟢 live

За 30 секунд:
  • DOS AI: конструктор умного бота для WhatsApp/Telegram, без программирования.
  • Бот отвечает клиентам словами (ты задаёшь его «характер» текстом) и умеет действия, записать, посчитать, выставить счёт через функции.
  • Все переписки и заявки складываются в CRM, ты видишь аналитику и можешь вмешаться вручную.
  • Платишь за то, что бот реально работает (токены за сообщения + подписка за канал).

Проблема, которую это решает

Клиенты пишут в WhatsApp круглосуточно: «сколько стоит?», «вы работаете завтра?», «запишите меня». Живой человек не успевает отвечать мгновенно 24/7, а медленный ответ = потерянный клиент. Нанять оператора дорого, и он всё равно спит ночью.

DOS AI ставит между клиентом и тобой умного бота. Он отвечает за секунды, на твоём языке, по твоим правилам, ловит заявку и кладёт её тебе в CRM. Ты подключаешься, только когда это реально нужно.

Из чего состоит платформа

Думай о DOS AI как о конструкторе из нескольких блоков:

БлокЧто делаетГде настраивается
🧠 Бот (промпт)«Характер» и правила: как общаться, что знать, что предлагатьСистемный промпт
💬 КаналыГде бот общается: WhatsApp, TelegramКаналы
🛠️ Функции (инструменты)Действия бота: записать в календарь, посчитать, выставить счёт, уведомить тебяФункции
📚 База знанийДокументы и факты, на которые бот опирается (прайс, услуги, правила)База знаний
🎯 ДожимыАвтонапоминания тем, кто «подумает и пропал»Дожимы
📇 CRM (диалоги и лиды)Все переписки и заявки, статусы, перехват вручнуюРабота с клиентами
📊 АналитикаСколько диалогов, заявок, конверсия, расходАналитика
💳 ДеньгиБаланс токенов, подписка, приём оплат от клиентовДеньги

Один проект = один бот = один бизнес (или одна точка). Если у тебя две стоматологии это два проекта.

Для кого это

  • Малый и средний бизнес в любой стране: стоматологии, барбершопы, салоны, рестораны, автосервисы, школы, магазины: те, кому клиенты пишут в мессенджеры. Платформа облачная и к стране не привязана: нужен только WhatsApp или Telegram. Больше всего клиентов сейчас в Казахстане, поэтому там есть местные удобства вроде оплаты через Kaspi, но это дополнение, а не условие.
  • Не нужны навыки программирования. Бот настраивается обычным текстом: ты описываешь, как он должен себя вести, словами.
  • Разработчикам платформа даёт API и вебхуки: можно интегрировать со своими системами, но это опционально.

Что бот умеет, а что нет

✅ Умеет: отвечать на вопросы по твоим правилам и прайсу, записывать клиентов (Google Календарь/Таблицы), считать стоимость, выставлять счета на оплату (Kaspi), уведомлять тебя о горячих заявках, вести лида по воронке, догонять «потеряшек» напоминаниями, отправлять фото/видео из библиотеки.

🚫 Не умеет (и это правильно): ставить медицинские диагнозы, давать юридические заключения, обещать то, чего ты не разрешал. Бот работает строго в рамках, которые ты задал в промпте.

📌 Пример. Барбершоп: клиент пишет «во сколько завтра свободно к Артуру?» → бот смотрит расписание в Google Календаре → предлагает «12:00 или 15:30» → клиент выбирает → бот записывает и подтверждает. Владелец утром видит заявку в CRM, не нажав ни одной кнопки ночью.


Простыми словами

DOS AI это место, где ты делаешь себе «робота-секретаря» для WhatsApp и Telegram. Ты не программируешь, ты просто описываешь словами, как он должен общаться с клиентами и что про твой бизнес знать. Дальше он сам отвечает людям днём и ночью: подсказывает цены, записывает на приём, принимает оплату и собирает все заявки в одном месте, чтобы ты ничего не потерял. А если нужно, ты в любой момент сам вступаешь в переписку.


Дальше: → Как бот думает
Связано: Карта кабинета · Глоссарий · Быстрый старт

Документация › Старт › Как бот думает

Как бот думает

Понять за 8 минут, что происходит между сообщением клиента и ответом бота: тогда станет ясно, почему бот отвечает так, и где это чинить.

⏱ 8 мин · 👤 для всех · 🟢 live

За 30 секунд:
  • На каждое сообщение бот собирает: твой промпт (правила) + факты о бизнесе (поле «Информация о компании» и база знаний) + функции (действия).
  • Дальше он решает: просто ответить словами или вызвать функцию (записать, посчитать, выставить счёт).
  • Бот не помнит ничего, кроме истории текущего диалога. Что не написано в промпте/знаниях: он не знает.
  • Одинаково работает во всех точках: тест-чат, WhatsApp, Telegram, ручная отправка.

Что происходит на каждое сообщение

Когда клиент пишет, за доли секунды бот проходит такой путь:

Сообщение клиента
      │
      ▼
1. Собрать контекст:  системный промпт (характер + правила)
                    + история этого диалога
                    + подходящие куски базы знаний (RAG)
                    + меню включённых функций
      │
      ▼
2. Решить:  «ответить словами»  ИЛИ  «вызвать функцию»
      │                                  │
      │                                  ▼
      │                         выполнить действие
      │                         (календарь / таблица / счёт …)
      │                                  │
      │                                  ▼
      │                         получить результат, подумать снова
      ▼                                  │
3. Сформулировать ответ клиенту ◄────────┘
      │
      ▼
Ответ уходит в WhatsApp / Telegram

Ключевое: различать два вида знаний. Общие вещи о мире бот уже знает из обучения, что такое кариес, как вежливо общаться, базовую логику и счёт: это объяснять не нужно. А вот факты про твой бизнес, услуги, цены, расписание, адрес, он не знает, пока ты не дашь их в промпте, поле «Информация о компании» или базе знаний. Плюс бот не ищет в интернете и не знает, что происходит прямо сейчас за пределами диалога. Правило простое: общему учить не надо: давай ему только то, что специфично для тебя.

Источники, из которых бот берёт ответ

ИсточникЧто этоКогда использовать
🧠 Системный промптПоведение: характер, тон, правила, что запрещеноВсё «как себя вести» → Промпт
🏢 Информация о компанииКороткие базовые факты: услуги, цены, адрес, часы, вшиваются в каждый ответ целикомКомпактные факты «о тебе» → Промпт
📚 База знаний (RAG)Объёмные/меняющиеся документы: большой прайс, условия, FAQ, подмешиваются по кускамМного фактов / документы → База знаний
🛠️ ФункцииРеальные действия во внешнем миреЗаписать, посчитать, оплатить → Функции

💡 Правило большого пальца: как общаться в промпт; коротко о бизнесе в «Информацию о компании»; много фактов / документы в базу знаний; что делать в функции.

Что значит «бот вызвал функцию»

Сам по себе ИИ умеет только писать текст. Функции дают ему «руки». Ты не прописываешь сценарий «если X то Y», ты описываешь каждую функцию словами, и бот сам решает в нужный момент её вызвать.

📌 Пример. Подключены функции «проверить свободное время» и «записать клиента». Клиент: «хочу завтра после обеда». Бот сам: проверяет слоты → предлагает время → после согласия записывает → подтверждает. Никто этот сценарий по шагам не программировал.

За один ход бот может вызвать несколько функций подряд (проверил → записал). Подробно в гайде по функциям.

Бот работает одинаково везде (5 точек входа)

Один и тот же «мозг» отвечает во всех местах, где есть ИИ:

  1. Тестовый чат в кабинете (песочница: без реальных клиентов, но ответы бота списываются с баланса проекта, как обычные) → Тест-чат;
  2. боевой WhatsApp (подключается по QR-коду, как WhatsApp Web) → Подключить WhatsApp;
  3. боевой Telegram;
  4. демо-чат на главной странице сайта (публичная проба без регистрации);
  5. фоновые задачи: дожимы и авто-возобновление диалога, где бот тоже отвечает сам.

⚠️ Важно. Если что-то работает в тест-чате, так же сработает в бою. Поэтому всегда проверяй изменения в тест-чате перед тем, как выпускать в WhatsApp.

Почему бот иногда «тупит», и где чинить

СимптомОбычно причинаКуда смотреть
Отвечает не по делу / выдумываетФакта нет в промпте/знаниях, бот «додумал»Добавь факт в Базу знаний
Не записывает / не считаетФункция выключена или плохое описаниеФункции
Отвечает слишком формально/сухоТон не задан в промптеПромпт
Молчит совсемКончился баланс / триалБот не отвечает
Отвечает общими фразами, «уточню у администратора»Описание бота пустое«Составить за меня»

💡 Запомни: плохой ответ бота это почти всегда не «глупый ИИ», а неполный промпт или знания. Бот честно работает с тем, что ты ему дал.


Под капотом (для разработчиков)

  • Каждый ответ, non-streaming вызов модели (в DOS AI streaming запрещён: ломает авторитетный подсчёт токенов, refund при обрывах, round-trip функций). «Постепенный» эффект печати: клиентский, через паузы между частями ответа.
  • Функции отдаются модели как OpenAI tools; вызов функции → выполнение → результат возвращается модели → она формулирует финальный текст (tool-call round-trip).
  • База знаний подмешивается через RAG (семантический поиск релевантных кусков), а не «весь документ в каждый запрос».
  • Ответ модели, структурированный JSON (текст для клиента + служебные поля: статус лида, стадия диалога, флаги). Формат в статье JSON-ответ бота.
  • Все 5 точек входа зовут один пайплайн (executeAIPipeline), поэтому поведение консистентно. Память диалога = история сообщений из БД, а не «глобальная память».

Простыми словами

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

Поэтому если бот ответил неправильно, почти всегда дело не в том, что «ИИ тупой», а в том, что ему чего-то не рассказали. Добавишь нужный факт или правило, и он сразу станет умнее. И всегда сначала проверяй бота в тестовом чате: там он думает точно так же, как в реальном WhatsApp, но без последствий.


Дальше: → Быстрый старт: первый бот за 30 минут
Связано: Системный промпт · Функции · База знаний · Тест-чат
Не получилось? → Бот не отвечает

Документация › Старт › Быстрый старт

Быстрый старт: первый бот за 30 минут

Сквозной путь, от пустого кабинета до живого бота, который отвечает тебе в WhatsApp. Делай по шагам: ничего не пропуская.

⏱ 10 мин чтения · ≈30 мин на практике · 👤 для владельца · 🟢 live

За 30 секунд (что будем делать):
  1. Создать проект · 2. Задать «характер» бота · 3. Загрузить факты о бизнесе · 4. Проверить в тест-чате · 5. Подключить WhatsApp · 6. Получить первую заявку.
💡 Перед стартом полезно (но не обязательно) прочесть Что такое DOS AI и Как бот думает, тогда каждый шаг будет очевиден.

Что нужно приготовить заранее

  • ☐ Аккаунт на платформе (регистрация по email или через Google). При регистрации спросим номер WhatsApp: на него напишет наш помощник DOS и поможет собрать первого ассистента;
  • ☐ Телефон с «живым» рабочим WhatsApp (см. какой номер);
  • ☐ Под рукой: твой прайс/услуги, часы работы, адрес, чтобы бот ими оперировал.

⚠️ Бесплатный период WhatsApp: 14 дней, число диалогов не ограничено. Ограничивает только баланс проекта (при создании кладём на него $5), поэтому канал лучше подключать, когда бот уже настроен (шаги 1-4), чтобы пробные дни не ушли на пустого бота.


Шаг 1. Создай проект (3 мин)

Глобальное меню слева → «Мои проекты» → «Создать» (или кнопка на Дашборде).

  • Дай проекту понятное имя (например «Стоматология Смайл»);
  • По желанию укажи сферу бизнеса: под неё конструктор подставит примеры и запреты;
  • Ответь на три вопроса прямо в форме (кто вы, что спрашивают клиенты, что бот должен сделать) и нажми «Собрать бота».

Платформа создаёт проект и сразу собирает описание бота по ответам, за $0.30 с баланса. Отвечай как администратору при приёме на работу, чем подробнее, тем лучше. Вместе с описанием включаются функции остановок и тегов, заводятся теги и выключенный ежедневный отчёт, а настройки бота выставляются под нормальную работу (что именно, в статье Создание проекта). Через полминуты откроется тест-чат. Не хочешь отвечать, нажми «Создать без ответов, опишу бота сам» и переходи к шагу 2 вручную; промпт при создании платформа не заполняет.

Шаг 2. Проверь или допиши характер бота (8 мин)

Если конструктор уже собрал описание, оно лежит здесь: меню проекта → «Бот» → поле «Системный промпт». Прочитай и поправь под себя, это набросок. Если писал сам, тут описывается поведение бота, как он себя ведёт (факты про бизнес, отдельно, шаг 3). Опиши своими словами:

  • Тон: как общаться (вежливо на «вы» / дружелюбно на «ты», с эмодзи или строго);
  • Правила: что можно и чего нельзя (не ставить диагноз, не обещать скидок без согласования);
  • Цель: что считать успехом (записать / взять телефон / довести до оплаты);
  • Как вести диалог: что уточнить у клиента, что предложить, когда позвать живого человека.

📌 Всё это пишется обычным текстом в одно поле: отдельных переключателей «тон» или «услуги» в интерфейсе нет, ты просто формулируешь инструкцию словами, как новому сотруднику.

💡 Совет. «Ты: администратор стоматологии. Общайся вежливо на вы. Уточни, что беспокоит, предложи удобное время, возьми имя и телефон. Диагнозы не ставь, это к врачу». Глубоко: Системный промпт.

🚫 Факты о бизнесе (услуги, цены, адрес, часы) сюда не вписывай, для них есть отдельные места (шаг 3).

Шаг 3. Дай боту факты о бизнесе (5 мин)

Факты живут в двух местах (это не промпт, промпт про поведение, а тут про что бот знает):

1. Поле «Информация о компании»: там же, в разделе «Бот». Сюда коротко и то, что нужно всегда, чем занимаетесь, ключевые услуги, цены, адрес, часы работы. Эта информация целиком добавляется в каждый ответ бота. Лимит до 40 000 символов.

2. «База знаний»: меню проекта → «База знаний». Сюда объёмное и меняющееся: большой прайс на 100 позиций, условия, частые вопросы, документы. Бот сам подмешивает нужные куски в ответ (это RAG, см. Как бот думает).

📌 Правило. Короткий факт (адрес, часы) → «Информация о компании». Большой документ (полный прайс, FAQ) → «База знаний». Тон и правила → системный промпт (шаг 2). Так бот и говорит правильно, и факты не путает.

Шаг 4. Проверь в тест-чате (5 мин). НЕ пропускай

Меню проекта → «Тестовый чат». Это песочница: бот думает точно как в бою, но без реальных клиентов. Ответы при этом оплачиваются с баланса проекта, как настоящие, поэтому на старте достаточно пары десятков реплик.

Прогони реальные сценарии:

  • «Сколько стоит чистка?»: называет цену из базы знаний?
  • «Запишите меня на завтра»: ведёт к записи?
  • «А вы рядом с метро?»: отвечает по фактам, не выдумывает?

⚠️ Если бот ошибается это нормально на старте. Почти всегда лечится так: ответил не по фактам → добавь факт в Базу знаний; ведёт себя не так → поправь промпт. Покрути, пока не понравится. Подробно, Тест-чат.

Шаг 5. Подключи WhatsApp (5 мин)

Теперь, когда бот толковый, выпускаем в эфир. Меню проекта → «Каналы» → «Подключить WhatsApp».

Это отдельная подробная статья (там чек-лист антибана и QR): → Подключить WhatsApp.

Коротко: убедись, что номер «живой» (на нём уже переписывались) → нажми «Подключить свой номер» → отсканируй QR телефоном (WhatsApp → Связанные устройства) → дождись статуса «Подключён». Первые 15 минут бот молчит, это прогрев номера.

Шаг 6. Получи первую заявку (2 мин)

  1. Напиши боту с другого телефона, как клиент;
  2. Бот отвечает, поздравляю, он в эфире;
  3. Открой меню проекта → «Диалоги»: там твоя переписка;
  4. Если бот собрал имя/телефон/запрос в «Лиды» появится заявка.

🎉 Готово. Дальше бот работает сам круглосуточно.


Что делать дальше

Хочешь…Иди в статью
Научить бота записывать/считать/выставлять счётФункции
Догонять клиентов, которые «подумают и пропадут»Дожимы
Подключить ещё и TelegramTelegram
Понять расход и пополнить балансБиллинг
Дать доступ сотрудникуУчастники и роли

Если что-то пошло не так

СимптомКуда
Бот не отвечает в WhatsAppБот не отвечает
WhatsApp не подключается / QR истёкПодключить WhatsApp → Частые ошибки
Бот отвечает неправильноШаг 4: допиши промпт/знания

Простыми словами

Запустить бота это полчаса по шагам. Сначала ты создаёшь «проект» (это твой бот) и пишешь обычным текстом инструкцию, как общаться, как себя вести. Потом отдельно даёшь ему факты про бизнес: короткое (услуги, цены, адрес) в поле «Информация о компании», объёмное (большой прайс, FAQ) в «Базу знаний». Дальше обязательно проверяешь бота в «тестовом чате»: это как поговорить с ним самому, без клиентов, если он где-то ошибается, ты просто дописываешь инструкцию или факты, пока не станет хорошо. И только когда бот толковый, подключаешь WhatsApp по QR-коду и пишешь ему с другого телефона. Если он ответил, всё, он работает сам, а заявки сами падают тебе в список.


Дальше: → Функции (научить бота действиям)
Связано: Карта кабинета · Системный промпт · Тест-чат · Подключить WhatsApp
Не получилось? → Бот не отвечает

Документация › Старт › Карта кабинета

Карта кабинета (навигация)

Чтобы не теряться: что где лежит в кабинете DOS AI и как устроены два уровня меню.

⏱ 7 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Меню два уровня: глобальное (про аккаунт) и меню внутри проекта (про конкретного бота).
  • Глобальное, слева всегда: Основное (Дашборд, Уведомления, CRM), Проекты, Аккаунт (Кабинет, Оплата и балансы, Поддержка), Справка.
  • Зашёл в проект, слева появляется его меню, сгруппированное по задаче: Настроить бота · Подключить · Клиенты · Цифры · Проект.
  • Что ты видишь и можешь, зависит от роли.
Кабинет DOS AI: обзор проекта, слева меню разделов, в центре состояние бота и цифры
Кабинет DOS AI: обзор проекта, слева меню разделов, в центре состояние бота и цифры

Два уровня навигации

DOS AI устроен так: у тебя есть аккаунт, в нём, проекты (по одному на каждого бота/бизнес). Поэтому и меню два:

  1. Глобальное меню, про весь аккаунт (все проекты, общий биллинг, рефералы).
  2. Меню проекта: появляется, когда ты зашёл внутрь конкретного проекта; всё про этого бота.

💡 Аналогия. Глобальное меню, как «список всех твоих магазинов». Меню проекта, как «панель управления одним магазином».

Глобальное меню (слева, всегда)

ПунктЧто тамКому
ДашбордСводка по всем проектам, быстрые цифрывсем
УведомленияВажные события (заявки, проблемы)всем
Мои проектыСписок ботов + кнопка «Создать»всем
CRMОбщая воронка по всем проектамвсем
БиллингОбщий счёт, подписки, история оплатвсем
ПоддержкаСвязь с командой DOSвсем
РефералыПриглашай и зарабатывайвсем
Документация / API / Для разработчиковСправка и технические докивсем
Админ-панельУправление платформойтолько DOS

Меню проекта (когда зашёл в бота)

Открываешь проект → слева появляются его разделы, по группам:

Обзор, самый верхний пункт: главная страница проекта, общее состояние бота и быстрые цифры. Видна всем (от viewer). Ниже, разделы по группам:

Настроить бота: «мозг» и всё, чем он пользуется

РазделЧто делаешьМинимальная роль
Настройки ботаСистемный промпт (характер и правила) + «Информация о компании». Выбор модели ИИ прямо здесь, редкие тумблеры внизу, в блоке «Расширенные настройки»admin
ФункцииДействия бота (записать, счёт, уведомить) → гайдeditor
МедиаБиблиотека фото/видео для отправкиviewer (загрузка: editor+)
База знанийЗагрузить факты/прайс/документыviewer (правка: editor+)
Тестовый чатПроверить бота в песочницеtester

📌 Отдельных пунктов «AI-модель» и «Продвинутое» в меню нет: выбор модели стоит в основных настройках бота, а редкие тумблеры (расписание, буферизация, лимиты, антиспам, история диалогов) собраны внизу той же страницы в блоке «Расширенные настройки».

Подключить: где бот работает

РазделЧто делаешьРоль
КаналыПодключить WhatsApp и Telegrameditor
ИнтеграцииGoogle, CRM, вебхукиeditor
Приём оплатНастроить счета клиентам (Kaspi-push)owner

Клиенты: работа с людьми

РазделЧто делаешьРоль
ДиалогиВсе переписки, перехват вручнуюviewer
ЛидыЗаявки и их статусыviewer
ТегиСправочник тегов для лидовviewer (правка: editor+)
ДожимныеАвтонапоминания «потеряшкам»editor
РассылкиМассовая отправка сообщений по сегменту клиентовadmin
ИсходящиеБот сам первым пишет по базе номеров (холодный обзвон текстом) → гайдtester (запуск: editor+)

Цифры: что происходит

РазделЧто смотришьРоль
АналитикаМетрики, конверсия, расходviewer
ОтчётыРегулярные сводки владельцу (на почту/в Telegram)owner
ЛогиСобытия по проектуeditor

Проект: управление

РазделЧто делаешьРоль
ОсновноеИмя, базовые настройки проектаadmin
УчастникиКоманда и ролиviewer (правка: admin)
БиллингБаланс токенов, пополнитьviewer (пополнить, можно)
Мои уведомленияЛичные уведомления, выйти из проектаучастник (кроме owner)
УдалениеУдалить/передать/архивировать проектowner

⚠️ Не нашёл раздел / всё серое? Скорее всего, у тебя роль ниже нужной. Например, промпт правит только admin, приём оплат и отчёты, только owner. Попроси владельца проекта повысить роль.

Куда идти под частую задачу

Хочу…Иду в…
Изменить, как бот общаетсяНастройки бота → Промпт
Добавить цены/услугиБаза знаний
Научить бота записывать/считатьФункции
Подключить WhatsAppКаналы → WhatsApp
Посмотреть перепискиДиалоги
Посмотреть заявкиЛиды
Пополнить балансБиллинг проекта (или «Оплата и балансы», если проектов несколько)
Проверить бота безопасноТестовый чат
Догнать ушедших клиентовДожимные

Простыми словами

В кабинете два меню, и это не запутанно, если понять логику. Слева всегда висит «общее» меню это про весь твой аккаунт: все боты, общий счёт, приглашения друзей. А как только ты заходишь внутрь конкретного бота, слева добавляется его собственное меню, разбитое на понятные группы, где настроить характер бота, где научить его действиям, где подключить WhatsApp, где смотреть переписки и заявки.

Если какой-то раздел не открывается или кнопки серые, почти всегда дело в правах: например, менять «характер» бота разрешено не всем, а только администратору. Тогда просто попроси владельца дать тебе доступ повыше.


Дальше: → Быстрый старт: первый бот за 30 минут
Связано: Что такое DOS AI · Роли и права · Глоссарий

Документация › Старт › Глоссарий

Глоссарий

Все термины платформы простым языком. Сюда ведут ссылки из других статей, если встретил незнакомое слово, ищи его здесь.

⏱ 6 мин (как справочник) · 👤 для всех · 🟢 live

Как пользоваться: жми Ctrl/Cmd+F и ищи слово. Каждый термин даёт короткое определение и ссылку на полную статью.

Основные понятия

Проект

Один бот для одного бизнеса (или точки). Внутри проекта: промпт, каналы, функции, CRM. У тебя может быть много проектов. → Что такое DOS AI

Бот / агент

AI-ассистент проекта, который отвечает клиентам. Его поведение задаёшь ты, текстом в промпте. «Бот» и «агент», синонимы.

Системный промпт

Текст, описывающий «характер» и правила бота: как общаться, что предлагать, что запрещено. Главная настройка бота. → Промпт

Канал

Мессенджер, через который бот общается: WhatsApp или Telegram. Один канал = один номер/бот = один проект. → Каналы

Функция (инструмент / tool)

Действие, которое бот может выполнить: записать в календарь, посчитать, выставить счёт, уведомить владельца. Бот сам решает, когда вызвать. → Функции

Параметр (функции)

Данные, которые бот собирает у клиента и передаёт в функцию (имя, телефон, дата, сумма). → Функции

База знаний (RAG)

Документы и факты, которые ты загружаешь (прайс, услуги, условия). Бот автоматически подмешивает нужные куски в ответ. RAG = технология поиска по этим документам. → База знаний

Дожим (follow-up)

Автоматическое напоминание клиенту, который заинтересовался и пропал. Бот мягко возвращает его в диалог. → Дожимы

Медиа-библиотека

Хранилище фото/видео/отзывов проекта, которые бот может отправить клиенту в нужный момент. → Медиа

CRM и клиенты

Диалог (conversation)

Одна переписка с одним клиентом в канале. Все диалоги видны в разделе «Диалоги». → Диалоги

Лид

Потенциальный клиент: человек, который написал и которого стоит «вести». Каждый диалог может стать лидом с данными (имя, телефон, что хочет). → Лиды

Статус лида

Где клиент в воронке: новый / в работе / целевой / купил / отказ и т.п. Бот ставит статус сам по ходу разговора. → Лиды

Стадия диалога

Этап разговора (приветствие → выяснение → предложение → закрытие). Помогает аналитике и боту понимать контекст. → Стадии

Тег / метка

Пометка на лиде для фильтрации (VIP, опт, жалоба). Бот или оператор ставит вручную/функцией. → Теги

Перехват (ручной режим)

Когда оператор сам вступает в диалог. Бота на этом чате можно поставить на паузу, чтобы он не встревал. → Диалоги

AI на паузе

Состояние диалога, когда бот временно молчит (оператор работает вручную или клиент попросил не писать). → Диалоги

Деньги

Токен

Единица расхода ИИ. Каждое сообщение бота тратит токены (зависит от длины и модели). Баланс токенов пополняешь в Биллинге. → Сколько стоит сообщение

Подписка

Регулярная оплата за работающий канал (например WhatsApp). Без активной подписки бот после пробного периода перестаёт отвечать клиентам: номер остаётся привязанным, переписка и настройки на месте. → Биллинг

Триал (пробный период)

Бесплатные дни работы WhatsApp-канала: 14 дней с момента подключения номера, 30 дней, если к проекту применён промокод. Число диалогов не ограничено, ответы бота всё это время идут с баланса проекта. Даётся один раз на проект и только до первой оплаты: у проекта, за который уже платили подписку, бесплатные дни заново не открываются, там продление подписки. → Подключить WhatsApp

Окно активации

14 дней после подключения канала, когда подписку можно купить со сниженной ценой (месяц −20%, 3 мес −15%, 6 мес −25%, год −30%). Даётся один раз на проект. → Биллинг

Приём оплат (Flow B)

Функция, когда бот выставляет твоему клиенту счёт прямо в чате (Kaspi-push), деньги идут на твою кассу. → Приём оплат

Реферал

Приглашённый тобой пользователь; за него начисляется комиссия. → Рефералы

Роли

viewer / tester / editor / admin / owner

Уровни доступа в проекте: viewer, только смотреть, tester, то же + тест-чат (гонять бота, без правок), editor, функции, база знаний, дожимы, интеграции, каналы и ручные ответы клиентам, admin, + промпт, настройки проекта и приглашения, owner: всё + удаление/оплаты. → Роли и права

Технические термины

QRDOS (подключение WhatsApp)

Самохостинг-механизм, которым платформа подключает WhatsApp: привязанное устройство по QR (как WhatsApp Web), всё держится на стороне платформы: отдельный сторонний сервис не нужен. (Ранее эту роль играл сервис-посредник Wazzup; убран в 2026-06.) → WhatsApp

Сервисный аккаунт (Google)

Технический Google-аккаунт DOS AI, которому ты даёшь доступ к своей таблице/календарю, чтобы бот мог с ними работать. → Интеграции

Вебхук (webhook)

HTTP-запрос на внешний адрес: способ боту «дёрнуть» твой сервер или CRM. Основа кастомных функций. → Вебхуки

Точки входа ИИ (5 штук)

Места, где работает бот: тест-чат, WhatsApp, Telegram, демо-чат на сайте, фоновые задачи (дожимы). Везде одинаково. → Как бот думает

QStash / крон

Планировщики, которые запускают регулярные задачи (дожимы, проверки). Тебе настраивать не нужно, работает само.


Простыми словами

Это словарик. Если в любой статье встретилось слово, которое непонятно, заходи сюда, ищи его поиском (Ctrl+F) и читай короткое объяснение. А если хочешь разобраться глубже, рядом с каждым словом есть ссылка на полную статью.


Дальше: → Быстрый старт: первый бот за 30 минут
Связано: Что такое DOS AI · Как бот думает · Карта кабинета

Документация › Старт › Как выбрать чат-бота

Как выбрать чат-бота для WhatsApp

Сервисов много, обещают они примерно одно и то же, а разница вылезает через месяц работы: у одного номер уходит в блокировку, у другого счёт приходит заметно больше обещанного.

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

1. Как бот попадёт в твой WhatsApp

Способов два, и они отличаются сильнее, чем всё остальное вместе взятое.

Официальный WhatsApp Business API. Номер регистрируется у Meta через провайдера. Плюс: правила игры прописаны, за рассылки не банят, есть верификация бизнеса. Минус: подключение идёт через проверку, шаблоны сообщений проходят модерацию, а платить обычно приходится и провайдеру, и за диалоги по тарифам Meta.

Привязанное устройство (QR). Бот входит на твой номер так же, как WhatsApp Web: сканируешь код, номер остаётся твоим. Плюс: подключение за минуту, номер уже прогрет перепиской, платить за каждый диалог никому не нужно. Минус: это не официальный API, поэтому дисциплина обязательна, и рассылки по холодной базе тут запрещены не капризом сервиса, а здравым смыслом.

Что спросить: какой из двух способов, и если QR, то что сервис делает против блокировки. Ответ «ничего, просто не спамьте» это плохой ответ.

2. Чем бот отвечает

Тут два подхода, и многие сервисы сегодня умеют оба.

Сценарий. Ты рисуешь ветки: кнопка, ответ, следующая кнопка. Работает предсказуемо ровно до первого вопроса, которого нет в ветке.

Модель. Ты описываешь словами, кто твой бот, что продаёшь, по каким ценам и как себя вести. Дальше он сам разбирает, что человек написал. Работает с любой формулировкой, но зависит от того, насколько подробно ты его описал.

Что спросить: что будет, когда клиент напишет то, чего ты не предусмотрел. И отдельно: можно ли забрать свой промпт с собой, если решишь уйти.

3. За что с тебя возьмут деньги

Моделей тарификации несколько, и они дают очень разный счёт при росте.

  • За подписчиков или контакты. Дёшево на старте, растёт вместе с базой, даже если половина базы молчит.
  • За сообщения или диалоги. Считаешь по трафику, но нужно понимать, что именно считается диалогом.
  • За канал или рабочее место. Фиксировано, не зависит от того, сколько тебе написали.
  • Отдельно за ИИ. Если бот отвечает моделью, эти ответы кто-то оплачивает. Либо это зашито в тариф, либо идёт отдельной строкой.

Что спросить: посчитайте мой месяц на моих числах. Возьми свой реальный поток обращений и попроси назвать сумму. Если сумму называть отказываются, скорее всего она тебе не понравится.

4. Что будет с перепиской и заявками

Бот собирает то, ради чего всё затевалось: имена, телефоны, что человек хотел, на когда записался.

Что спросить: где это лежит и как забрать. Есть ли встроенная CRM или заявки надо самому перекладывать в таблицу. Отдаётся ли выгрузка. Есть ли интеграция с той CRM, где ты уже работаешь.

5. Кто настраивает и сколько это займёт

Часть рынка продаёт не сервис, а внедрение: платишь за настройку отдельно, и без интегратора продукт не запускается.

Что спросить: запущусь ли я сам и за какое время. И проверить это до оплаты: попроси доступ и попробуй.

6. Что происходит, когда бот ошибётся

Он ошибётся, это вопрос времени. Дальше всё зависит от того, узнаешь ли ты об этом вовремя.

Что спросить: как бот передаёт разговор человеку, придёт ли мне уведомление и вижу ли я всю переписку целиком. Худший вариант это когда бот наговорил клиенту лишнего, а ты узнал об этом от самого клиента.

Наши ответы на те же шесть

Всё ниже проверяется в кабинете, цифры действуют на 11 августа 2026 года.

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

Ответы. Модель. Поведение описываешь обычным текстом, как инструкцию новому сотруднику, без блок-схем и кода. Промпт твой, забрать можно в любой момент.

Деньги. Telegram бесплатно. WhatsApp: $25 в месяц за канал. Ответы ИИ идут отдельно по факту: один доллар это примерно 80 ответов бота на быстрой модели и около 20 на самой сильной (замер по реальным диалогам; длина описания и ответов сдвигает цифру). Первые 14 дней после подключения номера канал работает бесплатно, по промокоду 30 дней. При регистрации на баланс кладём $5, по промокоду $10. Карта для старта не нужна. Считать свой месяц заранее можно калькулятором на главной.

Заявки. Встроенная CRM: стадии, теги, заметки, ответственные, вся переписка рядом. Есть интеграции с Google Таблицами и Календарём, Bitrix24, amoCRM, и произвольный вебхук, если у тебя своя система. Есть публичный API.

Запуск. Сам, без интегратора. Первый ответ клиенту обычно уходит через 10-15 минут после регистрации. Отдельно за настройку платить не нужно. Если хочется, чтобы бота собрали за тебя, есть платная услуга «Настроим за вас» за $50 разово, подписка при этом остаётся отдельно.

Ошибки. Бот передаёт разговор тебе, когда не знает ответа, и присылает уведомление в Telegram. Переписку видно целиком, в неё можно вмешаться в любой момент, бот при этом замолкает.

Когда мы не подойдём

Честный список, чтобы не тратить твоё время.

  • Нужно разослать тысячам за день. Отправка первым у нас есть, но с потолком в 20 сообщений в сутки на номер и разгоном в первые дни. Потолок стоит не для того, чтобы придержать тебя, а чтобы номер дожил до конца рассылки.
  • Нужен официальный статус WhatsApp Business API, галочка верификации и шаблоны, согласованные с Meta. Мы работаем иначе.
  • Клиенты пишут в основном не в мессенджеры, а звонят или приходят с сайта. Тогда начинать надо не с бота в WhatsApp.
  • Нужен бот, который ходит по жёсткому сценарию с кнопками и никогда не отклоняется от скрипта. Наш отвечает словами.

Дальше

  • Что такое DOS AI, если хочешь понять продукт целиком
  • Запуск за 10 минут, если хочешь просто попробовать
  • Каналы, про WhatsApp и Telegram подробно
  • Лимиты и цифры, все числа в одном месте

Документация › Проект и бот › Создание проекта

Создание проекта

Первый шаг к боту: создать проект под один бизнес. На той же странице ты отвечаешь на три вопроса о бизнесе, и платформа собирает бота целиком: описание, функции, настройки, теги и отчёт. Дальше сразу тест-чат.

⏱ 6 мин · 👤 для владельца · 🟢 live

Форма создания проекта
Форма создания проекта
За 30 секунд:
  • Проект = один бот для одного бизнеса или точки.
  • На одной странице: название проекта (обязательно), сфера бизнеса (по желанию) и три вопроса о бизнесе: кто вы, услуги и частые вопросы клиентов, что бот должен сделать.
  • Кнопка «Собрать бота»: проект создаётся, описание бота пишется по твоим ответам (30 центов с баланса проекта), включаются функции и настройки, заводятся теги и ежедневный отчёт.
  • Через 20-40 секунд ты в тест-чате, в поле ввода уже стоит первое сообщение «клиента».
  • Хочешь писать описание сам: кнопка «Создать без ответов, опишу бота сам». Функции, настройки и отчёт ставятся и в этом случае.

Зачем это нужно

Проект это «папка» твоего бота: внутри живут его характер, каналы, функции, переписки и заявки. Один бизнес = один проект. Две точки или два разных бизнеса = два проекта (у каждого свой бот и свой номер WhatsApp).

Шаги

1. Открой создание проекта

Глобальное меню слева → «Мои проекты» → «Создать» (или кнопка на Дашборде).

2. Заполни название и сферу

ПолеЧто вписатьОбязательно
Название проектаКак ты сам будешь называть его в кабинете («Стоматология Смайл»)да, до 100 символов
Сфера бизнесаВыбор из списка (стоматология, салон, ресторан…). По ней конструктор подбирает примеры под полями, порядок разговора и запреты для твоей ниши. Нет своей, оставь пустойнет
ПромокодСпрятан под ссылкой «Есть промокод?». Код партнёра даёт больше бесплатных дней и стартового балансанет

3. Ответь на три вопроса

ВопросЧто написать
Кто вы и чем занимаетесь?Название, город и адрес, что делаете, чем отличаетесь, часы работы. Если бот должен представляться именем, напиши каким. Обязательно, минимум 30 знаков
Услуги, цены, что спрашивают клиентыУслуги с ценами, способы оплаты, рассрочка, сроки и пары «спрашивают: … отвечаем: …»
Что бот должен сделать в итогеОтметь один или несколько вариантов (записать, собрать имя и телефон, ответить на вопросы, передать менеджеру, оформить заказ, выставить счёт) и при желании уточни своими словами

Бот будет знать ровно то, что ты напишешь: назвал цену, он её назовёт; не назвал, скажет, что уточнит у администратора. Второе и третье поле можно оставить пустыми: чего не хватает, попадёт в описание отдельным списком «чего владелец не указал», и его легко дописать потом.

Пока ты заполняешь форму, ответы хранятся в браузере: ушёл со страницы и вернулся, они на месте.

4. Нажми «Собрать бота»

Во время сборки на экране видно шаги: проект и настройки, функции и отчёт, описание бота, теги. Обычно это 20-40 секунд. Потом открывается тест-чат: отправь подставленное сообщение и посмотри, как бот отвечает. После первого ответа там же можно перейти к подключению канала или к правке описания.

Что собирается вместе с проектом

ЧтоКак настроено
Описание ботапо трём ответам: манера общения, факты о компании, ответы на частые вопросы, порядок разговора, запреты, примеры переписки
Функции«Помечать лида тегами», «Отложить дожимы», «Отключить дожимы», «Остановить диалог». Все включены и живут в разделе Функции
Теги5-8 категорий под твой бизнес с описанием, когда бот ставит каждую. Правятся на странице Теги
Отчётежедневная сводка в 09:00 по Алматы, выключена: на странице Отчёты выбери, куда слать, на почту или в Telegram, и включи
Кому отвечает ботвсем, кто напишет, включая контакты, которые были в телефоне до подключения. Если номер одновременно личный, переключи на «Только новым обращениям»
Буфер сообщенийпосле второго сообщения подряд бот ждёт 7 секунд тишины и отвечает на всю пачку сразу; для фото и голосовых так же
Пауза между частями ответа4 секунды
Пропущенный звонокбот пишет клиенту, который не дозвонился
Защита от спамавключена с порогами под флуд: 30 сообщений в минуту, 300 в сутки, 5 одинаковых подряд. Сработав, бот пропускает ответ, а не выключается на диалоге
Память диалогабез ограничения по времени
Глубина размышления моделисредняя

Всё это меняется потом: настройки бота в «Расширенных настройках», остальное на страницах функций, тегов и отчётов. Полный список значений в справочнике настроек.

Если что-то пошло не так

СимптомПричинаЧто делать
Кнопка не срабатывает, подсвечено первое полеВ ответе «Кто вы и чем занимаетесь» меньше 30 знаковДопиши подробнее
После создания открылся экран с тремя вопросами, а не тест-чатНа балансе проекта нет 30 центов (бесплатные $5 даются только первому проекту) или сборка не удаласьОтветы уже подставлены. Если дело в балансе, пополни баланс, потом нажми «Собрать описание»
Жёлтое предупреждение про балансЭто не первый проект, стартового баланса у него нетПроект создастся, описание соберёшь после пополнения
Красный баннер «достигнут лимит»У тебя 50 проектов (максимум)Удали ненужные или напиши в поддержку
Бот собран, но клиентам не отвечаетНе подключён каналПройди Быстрый старт

Под капотом

  • Создание: POST /api/projects. Сразу после записи проекта сервер ставит настройки нового проекта (NEW_PROJECT_AGENT_CONFIG), включает функции поведения и создаёт выключенную строку отчёта. Сбой любого из этих шагов не отменяет создание проекта.
  • Сборка описания: POST /api/projects/{id}/prompt/compose, 30 центов списываются только после успешной сборки. Словарь тегов (created_by = ai) заводится только проекту, у которого тегов ещё нет: пересборка описания в настройках живого проекта теги не добавляет.
  • Не хватило баланса или сборка не удалась: ответы переносятся под созданный проект, открывается /projects/{id}/setup с заполненными полями.
  • «Создать без ответов» ведёт на /projects/{id}/settings?tab=bot.
  • Лимит 50 проектов на пользователя. Бесплатный стартовый баланс даётся на первый проект (при регистрации по реферальной ссылке на первые 3); дальше проект создаётся с нулевым балансом.
  • Название компании отдельно не спрашивается: в базу уходит название проекта (company_name = name), потом его можно поменять в настройках.

Простыми словами

Создать проект это завести отдельного бота под один бизнес. На одной странице ты пишешь, как проект называется, и отвечаешь на три вопроса, как новому администратору: кто вы, что продаёте и почём, чем должен закончиться разговор. Нажал кнопку, и через полминуты бот готов: знает твои цены, умеет замолчать, если клиент попросил не писать, сам раскладывает клиентов по категориям, а утренний отчёт ждёт только того, чтобы ты сказал, куда его слать. Остаётся проверить бота в тест-чате и подключить WhatsApp.


Дальше: → Системный промпт
Связано: Быстрый старт · Карта кабинета

Документация › Проект и бот › Системный промпт

Системный промпт (характер бота)

Самая важная настройка: текст, который задаёт, как бот общается и по каким правилам. От него зависит 80% качества бота.

⏱ 10 мин · 👤 для владельца · 🟢 live

Редактор системного промпта: роль, задачи и тон бота, справа счётчик символов и кнопка «Сохранить»
Редактор системного промпта: роль, задачи и тон бота, справа счётчик символов и кнопка «Сохранить»
За 30 секунд:
  • Промпт это инструкция боту, как новому сотруднику: тон, что предлагать, что запрещено, какая цель.
  • Пиши правила и поведение в промпт; факты и прайс в Базу знаний; действия в Функции.
  • Не хочешь писать с нуля: кнопка «Составить за меня» над полем. Три вопроса о бизнесе, минута ожидания, готовое описание на 6-12 тысяч знаков. Стоит $0.30 с баланса проекта.
  • Есть история версий промпта, оценка стоимости и токенов.
  • Любую правку сразу проверяй в Тест-чате.

Зачем это нужно

Бот не знает твой бизнес и не имеет «характера» по умолчанию. Системный промпт это то, что превращает абстрактный ИИ в твоего администратора: вежливого или дружелюбного, продающего или консультирующего, с твоими правилами и запретами. Плохой бот почти всегда = неполный промпт, а не «глупый ИИ» (см. Как бот думает).

Где это настраивается

Меню проекта → «Бот» (вкладка settings?tab=bot). Здесь несколько полей:

ПолеЧто задаётЛимит
Системный промптГлавная инструкция: характер, правила, цельдо 100 000 символов
Информация о компанииДоп. контекст о бизнеседо 40 000
Статус ботаВключён/выключен (рубильник)-
Воронка продажВести ли лида по стадиям и статусамвкл/выкл
Итоговый промптПредпросмотр того, что реально уйдёт моделитолько чтение

«Составить за меня»: три вопроса вместо пустого поля

Над полем промпта всегда стоит кнопка «Составить за меня». Она открывает три вопроса, на которые ты отвечаешь как администратору при приёме на работу:

  1. Кто вы и чем занимаетесь? Название, город, что делаете, чем отличаетесь, часы работы. Это единственный обязательный ответ.
  2. Услуги, цены, что клиенты спрашивают и что вы отвечаете. Чем подробнее, тем меньше бот будет говорить «уточню у администратора».
  3. Что бот должен сделать с клиентом в итоге? Кнопки: записать на приём, собрать имя и телефон, ответить на вопросы, передать менеджеру, оформить заказ, выставить счёт. Можно несколько, плюс уточнение своими словами.

Под каждым вопросом стоит живой пример ответа под твою нишу, он не пропадает, когда начинаешь печатать. Пиши как угодно: списком, сплошным текстом или надиктуй голосом и вставь, ИИ разберёт.

Дальше ИИ собирает описание. Часть текста платформа пишет сама и одинаково для всех ботов: манера общения (одно-два коротких сообщения, один вопрос за раз, на «вы», без канцелярита и звёздочек), правило приветствия, порядок разговора, запреты и чек-лист перед каждым ответом. Это обычный текст внутри описания, его видно и можно править руками. ИИ добавляет к нему то, что знает только про тебя: факты о компании, пары «спрашивают → отвечаешь», честный список того, чего ты не указал (по нему видно, что дописать), три примера переписки на твоих данных и таблицу «ситуация → действие» под твою нишу. Получается 6-12 тысяч знаков. Имя бота: то, которое ты назвал в ответах; не назвал, бот представится как DOS (поменять можно прямо в тексте).

Порядок разговора зависит от того, что ты продаёшь. Услуги с расписанием (клиника, салон, автосервис, зал, кафе с бронью) ведут к записи на день и время. Товар (магазин, доставка) ведёт к заказу: что именно, размер, доставка или самовывоз, и никакого «удобного дня», у товара нет расписания. Сложные услуги, где цену нельзя назвать в переписке (ремонт, логистика, IT, реклама, недвижимость), ведут к заявке и передаче менеджеру. Платформа выбирает это по нише проекта; ниша не выбрана, выбирает ИИ по твоему первому ответу.

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

Приветствие всегда идёт ответом на сообщение клиента, а не вместо него: спросил цену, бот сначала называет цену и только потом представляется. Готовый текст «здравствуйте, меня зовут...» бот использует ровно в одном случае: клиент написал только «здравствуйте» и спрашивать пока нечего.

  • Стоит $0.30 с баланса проекта. Списывается только после удачной сборки и сохранения: если ИИ не справился, денег не берут. Баланса не хватает: плашка об этом стоит над кнопкой сразу, до ввода. Лимит 5 сборок в час и 20 в сутки на проект.
  • Ответил только на первый вопрос? Собрать всё равно можно. Платформа переспросит один раз («бот будет знать только это») и соберёт. Всё, чего ты не написал, попадёт в раздел «чего владелец не указал», и на такие вопросы бот будет отвечать «уточню у администратора», а не выдумывать. Дописать можно потом, прямо в тексте описания.
  • Цены проверяются на запись. Двойные единицы («24000 тыс») и точку вместо пробела («17.000») платформа приводит к обычному виду и отдельной строкой просит тебя проверить цифру. Твои числа при этом не меняются по смыслу. Знак валюты бот ставит только если ты сам его написал: не написал, цена останется голым числом.
  • Ответы не пропадают. Ушёл пополнять баланс, закрыл вкладку, вернулся через час: три поля заполнены тем, что ты писал. Черновик хранится в браузере до удачной сборки.
  • Уже есть описание? Конструктор прочитает его и описание компании, заполнит три поля тем, что ты уже писал, и покажет плашку «учёл то, что вы уже написали». Перед заменой предупредит: старый текст уходит в историю версий, вернуть можно одной кнопкой.
  • Это набросок, а не готовый продукт. Под полем так и написано: описание требует работы и проверки на живых диалогах. Пиши боту в тест-чате как клиент, читай ответы, правь текст.
  • Сразу после сборки тебя ведут в тест-чат, где в поле уже лежит первое сообщение «клиента» под твою нишу. Нажми «Отправить» и посмотри, как бот отвечает.

💡 Поля сохраняются автоматически при правке (через ~1 секунду). Есть история версий: можно откатиться к прошлой формулировке.

Как написать хороший промпт

Думай как про инструктаж нового администратора. Структура, которая работает:

  1. Кто ты. «Ты: администратор стоматологии "Смайл" в Астане».
  2. Тон. «Общайся вежливо на "вы", коротко, без канцелярита. Эмодзи: редко».
  3. Что делаешь. «Отвечай на вопросы об услугах и ценах, помогай записаться».
  4. Цель. «Главная задача, записать клиента: узнай услугу, предложи время, возьми имя и телефон».
  5. Правила и запреты. «Не ставь диагнозы. Не обещай скидок без согласования. Если не знаешь, предложи перезвонить».
  6. Что делать при неясности. «Если клиент пишет не по теме, мягко верни к записи».

💬 Приветствие пишется здесь же, в промпте. Отдельного поля «Приветственное сообщение» у проекта больше нет (убрано 2026-08-06): один и тот же текст в двух местах разъезжался, а поле к тому же намекало на автоотправку, которой никогда не было. Хочешь, чтобы бот здоровался определённым образом, скажи это строкой промпта: «Первым сообщением поздоровайся и представься: "Здравствуйте! Это Айнур из центра Профи"». У проектов, где поле было заполнено, текст уже перенесён в начало промпта.

📌 Пример мини-промпта (барбершоп):

Ты это администратор барбершопа BroozMan. Общайся дружелюбно на «ты», коротко. Помогай записаться к мастеру: узнай услугу (стрижка/борода/комплекс), предложи свободное время, возьми имя и телефон. Цены бери из базы знаний, не выдумывай. Если клиент сомневается, предложи показать работы. Не груби, не спорь.

⚠️ Не пихай в промпт большие списки фактов (весь прайс на 80 позиций, расписание на месяц). Для этого есть База знаний: она дешевле и бот не путает цифры. Промпт = поведение, база знаний = факты.

📌 Не уверен, что в промпт, что в «Информацию о компании», а что в базу знаний? Цельный разбор: в статье Загрузить знания о бизнесе в бота.

Воронка продаж: статусы и стадии

Если включить «Воронку продаж», бот по ходу разговора сам определяет:

  • Статус лида, насколько клиент «горячий»: потенциальный → квалифицирован → горячий → конвертирован (или потерян). Когда статус становится «квалифицирован/горячий/резерв» и есть имя+телефон, автоматически создаётся лид.
  • Стадию диалога, этап разговора: приветствие → выяснение → презентация → возражения → закрытие → готово.

Тебе не нужно это программировать, бот ставит сам. Можно подсказать ему в промпте: «Когда клиент согласился записаться, считай его квалифицированным». Технические детали формата: в статье JSON-ответ бота.

💡 Если воронка не нужна (например, бот только консультирует), выключи её, чтобы не усложнять.

Проверь, что работает

После правки промпта обязательно иди в Тест-чат и прогони реальные вопросы. Промпт это не «написал и забыл», а «написал → проверил → подправил», пока бот не отвечает как надо.

Частые ошибки

СимптомПричинаЧто делать
Бот сухой/формальныйНе задан тонДобавь «общайся дружелюбно/на ты», примеры фраз
Бот выдумывает ценыЦен нет в базе знаний, есть только в промпте размытоПеренеси прайс в Базу знаний
Бот не ведёт к записиНе задана цельПропиши «главная задача, записать: узнай X, возьми телефон»
Бот делает запрещённоеНет явных запретовДобавь раздел «Нельзя: …»
Не вижу вкладку «Бот»Роль ниже adminПромпт правит только admin/owner → Роли

Вопросы, которые обычно возникают

Насколько длинным должен быть промпт?
Столько, сколько нужно для ясных правил. Обычно 1-3 экрана. Длиннее ≠ лучше: чёткость важнее объёма. Большие факты: в базу знаний.

Можно откатить, если испортил?
Да, есть история версий: вернёшь прошлую формулировку.

Промпт виден клиенту?
Нет. Клиент видит только ответы бота. Промпт: внутренняя инструкция.


Под капотом

  • Промпт хранится в проекте; правки автосейвятся (debounce ~1.2 c для промпта, ~900 мс для коротких полей). История версий: локальная (последние 5) + серверная.
  • «Итоговый промпт» = системный промпт + подмешанные блоки (инфо о компании, инструкции воронки/стадий, доступные функции). Именно он уходит модели.
  • Воронка (funnel_enabled) включает в ответе модели поля lead_status (7 значений) и stage (6 значений, без отката назад). Создание лида: авто при переходе в qualified/hot/reserve + наличии имени и телефона. Полный формат, статья JSON-ответ бота.
  • «Статус бота», kill-switch: выключение требует подтверждения и глушит ответы во всех каналах.
  • Конструктор «Составить за меня»: POST /api/projects/{id}/prompt/compose, режимы compose (платно, 30 центов, gpt-5.4-mini, при обрезке ответа повтор на gpt-5.4) и prefill (бесплатно, вытаскивает ответы из текущего текста). Каркас, манера и сборка готового документа лежат в @dos/ai-pipeline (prompt-compose.ts): модель отдаёт только факты компании, скелет собирает код, поэтому манера у всех новых ботов одна и та же дословно. Пустой промпт больше не глушит бота: вместо заглушки он отвечает в общей манере и честно говорит, что про компанию ему ещё не рассказали.
  • Тонкие настройки (расписание, буферизация, расщепление ответов, распознавание медиа, кому отвечает бот, антиспам): в раскрывающемся блоке «Расширенные настройки» внутри вкладки «Бот» (отдельной вкладки «Продвинутое» больше нет). Там же паузы на оператора и звонок и автовозобновление; функции остановок стоят в разделе «Функции» у каждого проекта с рождения.
  • Язык ответа задавать не нужно. Бот отвечает на языке последнего сообщения клиента: по-казахски на казахский, по-русски на русский, зеркалит смешанный. Это правило платформы, оно стоит у всех ботов поверх промпта, даже если сам промпт и описание компании написаны по-русски. Казахские голосовые расшифровываются с подсказкой языка.

Простыми словами

Системный промпт это просто текст, которым ты объясняешь боту, как себя вести, как разговаривать, что предлагать, чего нельзя и к чему вести клиента. Пиши его как инструкцию новому сотруднику в первый день. Главное правило: «как общаться» в промпт, а «сколько стоит и что у нас есть» в отдельную Базу знаний, чтобы бот не путал цифры. Написал промпт: сразу проверь бота в тестовом чате и поправь, если где-то не так. Это нормально подкручивать несколько раз: так и получается хороший бот.


Дальше: → Тестовый чат
Связано: Как бот думает · База знаний · Функции
Не получилось? → Бот не отвечает

Документация › Проект и бот › 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строкастатус лида
summaryстрокакраткое резюме разговора для карточки лида
full_dataобъектпроизвольные собранные поля (кастомные данные)
deal_valueчисло или строкасумма сделки, названную клиентом в разговоре («полтора миллиона» тоже понимается). Пишется в карточку лида, только вверх: случайно занизить сумму бот не может
deal_currencykzt / usdвалюта суммы. Если бот её не назвал, определяется по маркеру в самом значении ($, usd, «долл»), иначе тенге
triggered_eventsмассив строкслужебная запись «какие функции реально вызвались в этом ответе и чем закончились» (до 50). Заполняет платформа, а не бот: она подставляет туда факт вызова с исходом, а на следующем ходу бот читает эту запись как правду. Раньше список писал сам бот, и он ошибался в обе стороны: то забывал записать вызов и звал функцию второй раз, то записывал вызов, которого не было, и уверял клиента, что заявка уже у менеджера
buttonsмассивкнопки под ответом (только Telegram, до 8 после обрезки; в WhatsApp деградируют в текст)
📌 stage и lead_status, обычные строки, а не жёсткий список, потому что проект может задать свой набор стадий/статусов. Платформа проверяет значение по разрешённому набору проекта; если значение «чужое», пишет предупреждение и оставляет старое, а не ломает диалог. Если воронка у проекта выключена, stage/lead_status из ответа игнорируются.
🛑 Бот НЕ останавливает диалог сам. Раньше бот мог сам решить «разговор окончен» и уйти на паузу (поля continue_to_talk/stage=done): это убрали, потому что модель делала это преждевременно (замолкала прямо после записи, игнорируя следующий вопрос клиента). Теперь диалог завершается только явной функцией: «Остановить диалог» или любой функцией с галочкой «Завершать диалог после выполнения». Так бот всегда дообщается, пока вы сами (или функция) его не остановите.

Разбивка на части (эффект печатания)

Бот может прислать message_parts, несколько коротких сообщений вместо одного длинного. Платформа отправляет их по очереди с паузой между ними (по умолчанию ~2 сек), создавая ощущение «человек печатает».

⚠️ Это НЕ стриминг. Ответ модели приходит целиком и сразу; «постепенность» это клиентская пауза (setTimeout) между уже готовыми частями. Стриминг в платформе не используется (он ломал бы подсчёт токенов и возвраты). Управление разбивкой: в продвинутых настройках (split_*).

Игнорируемые поля

Модель по привычке иногда возвращает selected_service / services: это поля удалённой фичи «Услуги» (убрана 2026-04-22). Схема их принимает и молча отбрасывает, чтобы старый «мусор» от модели не ломал разбор ответа. Это не ошибка.


Простыми словами

Когда бот отвечает, он отдаёт не фразу, а небольшую «анкету»: вот мой ответ клиенту, а вот что я про него понял, как зовут, какой телефон, на каком мы этапе разговора, считать ли его горячим лидом. Платформа читает эту анкету и сама заполняет карточку клиента, двигает его по воронке, решает, нужно ли потом напомнить о себе.

Тебе как владельцу в это лезть не нужно, всё работает само. Знать про это полезно в одном случае, если хочешь, чтобы бот точнее определял стадии и статусы под твой бизнес, опиши правила в промпте, и он будет аккуратнее заполнять эту «анкету».


Дальше: → Выбор AI-модели
Связано: Системный промпт · Стадии воронки · Лиды · Продвинутые настройки
Не получилось? → Бот не отвечает

Документация › Проект и бот › Выбор AI-модели

Выбор AI-модели

Бот работает на одной из моделей OpenAI. По умолчанию: быстрая и недорогая, её хватает 90% бизнесов. Можно поставить «умнее», но каждое сообщение будет дороже.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Модель выбирается на проект (не на каждый чат).
  • По умолчанию, gpt-5.4-mini: быстрая, недорогая, для большинства задач достаточно.
  • Есть модели мощнее (лучше рассуждают на сложных диалогах) и легче (ещё дешевле/быстрее).
  • Чем мощнее модель, тем дороже каждое сообщение (быстрее тратится баланс). См. Сколько стоит сообщение.
📍 Где найти. В проекте → «Настройки бота» → блок «Выбор модели», в основных настройках. Сразу видны три модели: рекомендованная, та что умнее и дороже, и та что дешевле. Остальные восемь и таблица сравнения лежат под ссылкой «Все модели»: они нужны редко, но никуда не делись.
Настройки бота: выбор AI-модели, влияющей на качество и стоимость ответа
Настройки бота: выбор AI-модели, влияющей на качество и стоимость ответа

Как это работает

У проекта есть настройка модели (projects.openai_model). Если не менял, действует модель по умолчанию gpt-5.4-mini. Менять стоит осознанно: модель влияет на качество ответов и на стоимость каждого сообщения.

Доступны 11 моделей четырёх семейств OpenAI: GPT-5.5 (gpt-5.5), GPT-5.4 (gpt-5.4-mini, gpt-5.4, gpt-5.4-nano), GPT-5 (gpt-5-mini, gpt-5, gpt-5.1, gpt-5.2) и GPT-4.1 (gpt-4.1-mini, gpt-4.1, gpt-4.1-nano), от самой лёгкой nano до флагмана. Помечены как популярные две: gpt-5.4-mini (по умолчанию) и gpt-4.1-mini (самая экономная из рабочих). Модели отличаются по трём осям:

  • Ум: насколько хорошо держит сложный диалог, следует инструкциям, рассуждает.
  • Скорость, как быстро отвечает.
  • Цена за сообщение: сколько баланса уходит на один ответ.
Класс моделиКогда брать
самая лёгкая (gpt-4.1-nano)простейшие боты: FAQ, базовые ответы, маршрутизация. Минимальная цена из всех
nano / mini (напр. gpt-5.4-mini, по умолчанию)большинство задач: запись, ответы по базе знаний, типовые вопросы. Дёшево и быстро
полные (напр. gpt-5.4, gpt-4.1)сложные диалоги, тонкие переговоры, длинный контекст. Умнее, но дороже
флагман (gpt-5.5)⚠️ самая дорогая: предельно сложные задачи, тонкий reasoning. Быстро ест баланс, бери только когда gpt-5.4 реально не вывозит
💡 Не гонись за самой мощной моделью «на всякий случай». Для записи в барбершоп или ответов по прайсу mini справляется не хуже, а баланс тратит в разы медленнее. Бери мощную, только если видишь, что бот реально «тупит» на твоих диалогах в тест-чате.
⚠️ Стоимость. Более мощная модель = больше списание за каждое сообщение. На потоке (сотни диалогов) разница в балансе ощутима. Прежде чем переключать весь проект, прогони сложные кейсы в тест-чате и реши, стоит ли качество денег.

Глубина размышления

Под выбором модели, в том же блоке, стоит вторая настройка: «Глубина размышления». Это скрытая работа модели перед ответом: она проверяет расписание, цифры и свои же выводы, и только потом пишет. Четыре положения:

ПоложениеОтветЦена ответаЧто даёт
Выкл2-3 секундыдешевле всегоотвечает сразу, без проверки: может назвать занятое время или не открыть таблицу
Лёгкаяоколо +2 секундпочти как «Выкл»чуть внимательнее, на сложных запросах ошибки остаются
Обычная (рекомендуем)около +3-4 секундпримерно +0,1 центапроверяет расписание и цифры перед ответом; в наших замерах ни одной ошибки
Глубокаявдвое дольше обычнойпримерно +0,2 центадля сложных сценариев с несколькими функциями подряд

Стоит ли ставить «Глубокую». Мы прогнали восемь боевых вопросов (возврат части пакета, «сколько всего выйдет», сроки, условия рассрочки) на «Обычной» и «Глубокой». Ошибок не было ни у той, ни у другой. Разница вышла в другом: «Глубокая» отвечала в среднем 8 секунд против 4,6 и стоила на 13% дороже, а на самом сложном вопросе думала 15 секунд. Поэтому по умолчанию стоит «Обычная», а «Глубокую» имеет смысл включать точечно: если видишь в тест-чате, что бот путается в многошаговых расчётах.

Работает для моделей семейства gpt-5 (кроме o-серии, она думает всегда по-своему). Пока положение не выбрано, под кнопками написано, что применяет платформа. Та же настройка есть в тест-чате, чтобы сравнить положения на своих диалогах перед тем, как менять для клиентов.


Модель для дожимов отдельно

Для дожимов можно задать свою модель (обычно дешевле основной: дожимы проще). Если не задана, наследуется модель проекта.


Простыми словами

«Модель» это мозг бота. Их несколько: попроще-побыстрее-подешевле и поумнее-помедленнее-подороже. По умолчанию стоит средне-лёгкая (gpt-5.4-mini), и для большинства задач: записать клиента, ответить по прайсу, снять простое возражение, её за глаза.

Включать самую мощную «чтобы наверняка» не надо: она будет отвечать так же, но баланс съест заметно быстрее. А вот «Глубину размышления» на «Обычной» держать стоит: это несколько секунд ожидания, зато бот не предложит клиенту занятое время. Менять модель есть смысл, только если ты в тест-чате видишь, что бот реально не вывозит сложные разговоры. Тогда поставь мощнее, но имей в виду, что каждое сообщение станет дороже.


Дальше: → Тестовый чат
Связано: Системный промпт · Продвинутые настройки · Сколько стоит сообщение
Не получилось? → Бот не отвечает

Документация › Проект и бот › Тестовый чат

Тестовый чат

Песочница, где ты говоришь с ботом сам: проверить промпт, функции и знания до того, как он попадёт к живым клиентам.

⏱ 7 мин · 👤 для владельца и оператора · 🟢 live

Тест-чат: слева настройки бота, в центре переписка с ответом бота и его стоимостью, справа панель «Что понял бот»: стадия, лид, действия
Тест-чат: слева настройки бота, в центре переписка с ответом бота и его стоимостью, справа панель «Что понял бот»: стадия, лид, действия
За 30 секунд:
  • Тест-чат = безопасная репетиция: бот думает как в бою, но без реальных клиентов.
  • Справа панель «Что понял бот»: стадия, статус лида, что узнал о клиенте, какие функции вызвал, токены.
  • Меню «Инструменты теста»: сценарии, загрузить переписку, показать промпт, экспорт.
  • Рубильник ИИ отсюда убран: здесь только индикатор; включается бот в Настройках.
  • Работает и с пустым описанием бота: бот отвечает живо и честно говорит, что про компанию ему пока не рассказали, а в углу висит карточка «Составить за меня». Клик мимо карточки просто продолжает разговор.
  • После сборки описания в поле уже лежит первое сообщение «клиента»: нажми «Отправить».
  • Проверяй тут каждое изменение промпта/функций/знаний.

Зачем это нужно

Менять промпт и сразу выпускать в WhatsApp, рискованно: ошибку увидят живые клиенты. Тест-чат даёт «прогнать» бота на реальных вопросах в безопасной среде. Это тот же самый «мозг», что и в бою (см. 5 точек входа), что работает здесь, так же сработает у клиента.

Где это

Меню проекта → «Тестовый чат». Нужна роль tester и выше (тестер может гонять бота, но ничего не меняет).

Что ты видишь

Слева, обычный чат: пишешь боту как клиент, он отвечает.

Справа: панель «Что понял бот» (главная ценность теста). Показывает «изнанку» каждого ответа:

СекцияЧто показывает
ЭтапНа какой стадии диалога бот (приветствие → … → готово)
ЛидКакой статус лида проставил
Что узнал о клиентеСобранные данные (имя, телефон…) с индикатором заполненности «3/5»
Действия ботаКакие функции вызвал, с аргументами и результатом
Распознано из медиаРасшифровка голосовых, текст с картинок/PDF
Технические детали (под спойлером)Токены, стоимость запроса, сырой JSON-ответ
Проверить дожимСимулировать, что бот отправит как напоминание

Сверху, шапка: модель, индикатор «ИИ включён / выключен» (только показывает; управление: в Настройках) и меню «Инструменты теста».

Инструменты теста

В меню «Инструменты теста»:

  • Сценарии: готовые наборы сообщений для типовых проверок;
  • Загрузить переписку: подставить реальный диалог, чтобы проверить на нём;
  • Показать промпт: увидеть итоговый промпт, который уходит модели;
  • Экспорт диалога: выгрузить тестовую переписку.

Кнопка «Очистить» сбрасывает тестовый диалог.

Как тестировать правильно

  1. Внёс правку в промпт / функцию / базу знаний;
  2. Открой тест-чат, прогони реальные вопросы клиентов:
  3. типичный («сколько стоит?»),
  4. целевой («запишите меня на завтра»),
  5. каверзный («а если опоздаю?», «дорого»),
  6. не по теме («а вы где находитесь?»);
  7. Смотри панель справа: правильная ли стадия, вызвал ли нужную функцию, что собрал;
  8. Не так → правь → повторяй, пока не понравится.

💡 Совет. Если бот должен вызывать функцию (записать, посчитать), проверь в «Действиях бота», что вызов был, а не только слово «записал» в ответе.

Пометка «в WhatsApp сработает». Часть функций работает с карточкой конкретного клиента: проставить теги, поставить напоминания на паузу, остановить диалог, отправить макет из медиатеки, выставить счёт. В тест-чате такого диалога нет (ты пишешь сам себе), поэтому записывать некуда, и вызов помечается серым «в WhatsApp сработает». Это не ошибка: сам вызов бот сделал правильно, а в подключённом канале функция отработает по-настоящему. Красная пометка «ошибка» означает настоящий сбой, её нужно разбирать.

⚠️ Важно: тест-чат, песочница, а не показатель готовности к бою. Здесь бот отвечает даже при нулевом балансе и выключенном для клиентов состоянии. Поэтому:

  • если вверху «ИИ выключен» в тест-чате бот может отвечать, но реальные клиенты в WhatsApp ответа не получат;
  • если баланс на нуле в тесте бот отвечает, но в бою клиентам не ответит.

То есть «в тесте работает» ≠ «в бою работает». Перед запуском проверь, что бот включён и есть баланс.

Частые ошибки

СимптомПричинаЧто делать
В тесте отвечает, клиентам, нетБот выключен или нулевой балансВключи бота в Настройках, пополни баланс
Бот «говорит», что записал, но записи нетВызвал не функцию, а просто текстПроверь «Действия бота»; поправь описание функции
Не вижу тест-чатРоль viewerНужна роль tester+ → Роли
Хочу включить бота прямо тутРубильник перенесёнУправление ботом: в Настройках (Бот)
Бот отвечает общими фразами и «уточню у администратора»Описание бота пустое или короткоеНажми «Составить за меня» в карточке или в настройках бота
В углу висит карточка и мешаетОписание бота пустоеЗакрой крестиком, вернётся при следующем заходе, пока описание не заполнено

Под капотом

  • Тест-чат работает в sandbox-режиме: стоимость ответа списывается с баланса проекта, как в бою, но нулевой баланс ответ не блокирует (спишется столько, сколько есть). Предупреждения о нуле/выключенном боте относятся только к боевым каналам.
  • Панель «Что понял бот» рендерит реальный структурированный ответ модели: стадия, lead_status, собранные переменные (с % заполнения), tool-calls (имя/аргументы/результат), RAG-источники с % похожести, токены и стоимость (USD + ₸), сырой JSON.
  • Рубильник ИИ из тест-чата убран осознанно (редизайн 2026-06-05): здесь индикатор + ссылка, управление, на settings?tab=bot (единый источник).
  • «Проверить дожим» дёргает превью следующего follow-up-сообщения.

Простыми словами

Тестовый чат это как поговорить с ботом самому, прежде чем пускать его к клиентам. Ты пишешь ему как покупатель, а он отвечает, и справа ты видишь «что у него в голове»: на каком он этапе разговора, что понял про клиента, какие действия сделал. Очень удобно: поменял что-то в боте, тут же проверил, не так, поправил. Только помни одну вещь: в тесте бот отвечает всегда, даже если для реальных клиентов он выключен или баланс пустой. Поэтому перед запуском убедись, что бот включён и на счету есть деньги: иначе в тесте он милый, а живым клиентам молчит.


Дальше: → Подключить WhatsApp
Связано: Системный промпт · Функции · База знаний
Не получилось? → Бот не отвечает

Документация › Проект и бот › Продвинутые настройки

Продвинутые настройки бота

Помимо промпта, поведение бота тонко настраивается, как он разбивает ответы, ждёт ли, пока клиент допишет, в какие часы работает, как реагирует на оператора, что делает со спамом. Эта статья: карта всех рычагов.

⏱ 11 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Бот «печатает по частям», ждёт, пока клиент допишет, может работать по расписанию, уступать оператору, защищаться от спама.
  • Всё это, настройки проекта (agent_config), у каждой есть разумное значение по умолчанию.
  • Трогай по необходимости: дефолты подобраны так, чтобы работало «из коробки».
📍 Где найти. Все эти настройки: в проекте → «Настройки бота» → раскрывающийся блок «Расширенные настройки» внизу страницы (там же лимиты истории диалогов). Выбор модели ИИ переехал наверх, в основные настройки: это решение про качество ответов и про цену каждого сообщения, прятать его за раскрывашкой неправильно.
Расширенные настройки бота: часы работы, буферизация, антиспам, контроль оператора и лимиты
Расширенные настройки бота: часы работы, буферизация, антиспам, контроль оператора и лимиты

Ответы: разбивка и темп

НастройкаПо умолчаниюЧто делает
split_messagesвклразбивать длинный ответ на несколько коротких сообщений
split_delay_seconds4 секпауза между частями (эффект печатания)
split_threshold300 симв.с какой длины начинать разбивать
split_max_length500 симв.макс. длина одной части
split_max_parts3макс. число частей
quote_client_messageвклпервый пузырь ответа привязан к сообщению клиента, как «Ответить» в WhatsApp: у пачки цитируется последнее, у голосового или фото само голосовое или фото
💡 Разбивка делает бота «живее»: клиент видит несколько коротких реплик вместо стены текста. Подробнее про механику: JSON-ответ бота.

Буферизация: дождаться, пока клиент допишет

Клиенты часто пишут мысль несколькими сообщениями подряд («Здравствуйте» / «хочу записаться» / «на завтра»). Чтобы бот не отвечал на каждое по отдельности, есть буфер:

НастройкаПо умолчаниюЧто делает
buffer_delay_seconds1 сек (у нового проекта 7 сек)сколько ждать тишины, когда клиент пишет очередью; одиночное сообщение отвечается быстрее
buffer_delay_media_seconds5 сек (у нового проекта 7 сек)ожидание для медиа (фото/голос)

Бот ждёт паузы в наборе и отвечает на всё разом, как живой человек.


Кому отвечает бот

Одна настройка (engage_mode) с тремя взаимоисключающими вариантами. Живёт на вкладке «Настройки бота», карточка «Кому отвечает бот» сразу под статусом бота (до 8 сентября 2026 пряталась в «Расширенных настройках», и её там не находили).

ВариантКому бот отвечает
Только новым обращениямТем, кто написал впервые после подключения номера. Контакты, которые были в телефоне раньше, остаются за вами: их сообщения видны в «Диалогах», но бот в них не пишет
Всем, кто напишет (у нового проекта)Плюс клиентам, которые были в телефоне до подключения. Переключение сразу возвращает бота в диалоги, которые он раньше пропустил как «старый контакт» (кроме тех, где вы писали сами в последние полчаса), и дальше он отвечает в них, когда клиент пишет снова
Только лидам с рекламыТолько тем, кто пришёл с рекламы «Написать в WhatsApp» (Click-to-WhatsApp). Для номера, где параллельно работают живые менеджеры: обычные и личные чаты бот не трогает, показывает их вам без ответа

С 14 сентября 2026 новый проект стартует в режиме «Всем, кто напишет»: человек, подключивший номер, ждёт, что бот ответит всем, и молчание в половине чатов читается как поломка. Проекты, созданные раньше, остаются в режиме «Только новым обращениям», пока владелец его не сменит. Если рабочий номер это ещё и личная переписка, переключи на «Только новым обращениям»: в мягком режиме бот ответит и знакомым, и подрядчикам. В строгом режиме в диалоге со старым контактом кабинет показывает, что включён строгий режим, и кнопку включить бота здесь.

Что важно знать про режим «Всем, кто напишет»:

  • переключение ничего не рассылает: оно только снимает паузу с пропущенных диалогов, а пишет бот лишь в ответ на следующее сообщение клиента;
  • бот не отличает давнего клиента от личного контакта. Если номер рабочий и личный одновременно, он ответит и знакомым;
  • чаты, где вы отвечаете сами, бот по-прежнему уступает вам (пауза при ответе оператора), а диалоги, из которых бота убрали руками или которые закрыты передачей менеджеру, режим не будит;
  • расход баланса вырастет: старая база это дополнительные диалоги.

На сообщения, отправленные до подключения номера, бот не отвечает ни в одном режиме. Иначе после каждого сканирования QR он разослал бы ответы на старую переписку, а WhatsApp блокирует номера именно за такой всплеск.

Настройки рекламного фильтра

НастройкаПо умолчаниюЧто делает
engage_modeall (только новым обращениям); у нового проекта existing_tooexisting_too = всем, кто напишет; ad_gated = только рекламные лиды
engage_ad_idsпустопусто = ЛЮБАЯ реклама; список = ТОЛЬКО перечисленные объявления

В список можно вставлять (по одному в строке):

  • ID объявления из Ads Manager (числа вида 1202…), самый надёжный способ: передаётся со 100% рекламных лидов и виден ещё до запуска рекламы;
  • ссылку на рекламный пост (https://www.instagram.com/p/…/), тоже работает заранее, но у части лидов ссылка не передаётся (короткие fb.me-переходы).

Как настроить фильтр ДО запуска рекламы (передайте таргетологу):

  1. Создайте кампанию и объявления как обычно, запускать не обязательно, достаточно, чтобы объявления были созданы.
  2. В Ads Manager откройте вкладку «Объявления» → «Столбцы: настроить столбцы» → включите столбец «ID объявления» (Ad ID).
  3. Скопируйте ID нужных объявлений и вставьте их в поле настроек, по одному в строке.
  4. ⚠️ При дублировании объявления или перезапуске креатива у копии появляется новый ID: добавьте и его. Один и тот же креатив, запущенный дважды: это два разных объявления с разными ID и разными ссылками на пост.

ID уже пришедшего лида виден в его диалоге: карточка справа → блок «Источник, реклама». Лид, отсечённый фильтром, не пропадает, он сохраняется в CRM с пометкой для оператора, просто бот на него не отвечает.


Перехват оператором и остановки

НастройкаПо умолчаниюЧто делает
pause_on_operatorвклставить ИИ на паузу, когда оператор пишет в чат
ignore_first_operator_messageвыклне паузить на первом сообщении оператора
pause_ai_after_answered_callвклсостоявшийся входящий звонок выключает бота в этом чате (звонок, который сделали вы сами, WhatsApp платформе не показывает, см. ниже)
exception_phrases-фразы-исключения, после которых пауза не ставится
auto_resume_enabled + auto_resume_*выклбот сам вернётся в перехваченный диалог: когда вы столько не пишете в этот чат, а клиент напишет снова, бот ответит ему. Первым бот не пишет
resume_message«Добрый день!»текст для редких служебных пауз (спам-защита, обрыв канала), которые снимает крон. После паузы оператора приветствие в тишину не уходит

Позвонили клиенту сами: как выключить бота

Если клиент позвонил вам и вы взяли трубку, бот в этом чате замолкает сам.

Если звонили вы, бот продолжит отвечать, и это не сбой настройки. WhatsApp сообщает нам только про входящие звонки: исходящий вызов с вашего телефона до платформы не доходит вовсе, поэтому узнать о таком разговоре ей физически неоткуда.

Рабочий способ занимает секунду: после разговора напишите что-нибудь в этот же чат («созвонились», «всё обсудили», что угодно). Бот увидит, что в диалог пришёл живой человек, и замолчит по обычному правилу перехвата. Это то же самое, что происходит, когда вы отвечаете клиенту руками.

Второй способ, если писать не хочется: откройте диалог в кабинете и нажмите кнопку AI ON в шапке переписки, она переключится в AI OFF.

Три функции про остановки («Остановить диалог», «Отложить дожимы», «Отключить дожимы») стоят у каждого проекта с рождения и живут в разделе «Функции»: там же их можно выключить, поправить описание «когда вызывать» или удалить.

Подробно про перехват, Диалоги; про три функции, Функции, разделы 7.8-7.10.


Расписание работы (рабочие часы)

НастройкаПо умолчаниюЧто делает
schedule_enabledвыклвключить рабочие часы
scheduleПн-Пт 09:00-20:00, Сб 09:00-18:00, Вс выклграфик по дням
timezoneпояс браузера при создании (иначе Asia/Almaty)часовой пояс проекта: задаётся во вкладке «Общие», по нему живут расписание, дожимы и весь кабинет (время сообщений, фильтры, графики)
offline_messageдежурный текставтоответ вне рабочих часов

Вне рабочих часов бот не тратит токены: сохраняет сообщение клиента (оператор увидит его в CRM) и один раз на диалог шлёт автоответ «сейчас нерабочее время».


Память диалога

НастройкаПо умолчаниюЧто делает
history_message_limit30сколько последних сообщений бот «помнит». В диалоге, где писал оператор, бот видит до 200 сообщений: после включения он понимает разговор, который вёл человек
history_time_limit2 недели (у нового проекта без ограничения)за какой период берётся история

Защита от спама

НастройкаПо умолчаниюЧто делает
spam_protection_enabledвыкл (у нового проекта вкл)включить лимиты
spam_message_limit / spam_duration_seconds5 / 60 сек (у нового проекта 30 / 60 сек)сколько сообщений за окно допустимо
spam_daily_limit100 (у нового проекта 300)макс. сообщений в день от одного
spam_response_message«Пожалуйста, подождите…»ответ при срабатывании
spam_repeat_threshold3 (у нового проекта 5)сколько одинаковых сообщений подряд считать спамом
spam_auto_blockвкл (у нового проекта выкл)при срабатывании выключить бота на диалоге и пометить лида проигранным
⚠️ Автоблок срабатывает и на живом человеке: при пороге 3 три «ок» подряд за разговор уже считаются спамом, и бот на этом диалоге выключается, пока его не включат вручную. Поэтому новому проекту защита включена с порогами под флуд и без автоблока: сработав, бот пропускает ответ, а не теряет клиента.

Распознавание медиа

НастройкаПо умолчаниюЧто делает
recognize_audioвклрасшифровывать голосовые
recognize_imagesвкл«видеть» картинки
recognize_pdfвклчитать PDF
recognize_documentsвклчитать документы (DOCX и т.п.)
⚠️ Распознавание голоса и картинок тратит баланс (это отдельная обработка). Если не нужно, выключи. См. Сколько стоит сообщение.

Запись на приём (календарь)

Настройки записи живут не здесь, а внутри самой функции записи: открой Функции → функцию записи → её конфиг. Там задаются длительность приёма (по умолчанию 60 мин), горизонт показа свободных окошек (7 дней), рабочие часы и дни записи, перерыв между приёмами и минимальное предупреждение (60 мин).

⚠️ Раньше эти же параметры дублировались настройками проекта calendar_*. Их убрали 2026-06-13, потому что редактор писал в одно место, а бот читал другое, и половина настроек молча не работала. Сейчас источник один, конфиг функции. Если встретишь calendar_* в старых заметках, это уже мёртвые ключи.

Подробно: Запись на приём и Google Календарь.


Простыми словами

Думай об этих настройках как о «характере» бота помимо промпта. Можно сделать так, чтобы он отвечал короткими репликами, как в живом чате, а не стеной текста. Можно научить его не торопиться с ответом, пока клиент дописывает мысль в несколько сообщений. Можно задать рабочие часы, и ночью он будет вежливо отвечать «мы на связи с утра», не тратя при этом деньги. Можно настроить, чтобы он уступал, как только в чат заходишь ты, и сам возвращался к работе через заданное время.

Хорошая новость: всё это уже настроено по уму «из коробки». Лезть туда стоит, только когда хочешь что-то конкретное, например, включить рабочие часы или защиту от спама. Остальное спокойно оставляй как есть.


Дальше: → Обзор каналов
Связано: Системный промпт · Выбор модели · Дожимы · Диалоги
Не получилось? → Бот не отвечает

Документация › Проект и бот › Загрузить знания о бизнесе

Загрузить знания о бизнесе в бота (что куда)

После этой статьи ты разложишь всю свою документацию, прайсы, регламенты, FAQ, скрипты по трём «карманам» бота так, чтобы он отвечал точно и не выдумывал.

⏱ 9 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • У бота три места для знаний, и у каждого своя работа: промпт (как себя вести + всегда-нужное продающее), «Информация о компании» (факты о тебе), База знаний (большие и меняющиеся справочники).
  • Главная ошибка новичка: свалить всё в одно место. От этого бот тупеет: либо «деревянный», либо выдумывает, либо не находит нужное.
  • Правило в одну строку: поведение → промпт, факты о компании → описание, толстые справочники → база знаний.
  • Ничего не нужно «вызывать», бот сам подмешивает всё это в каждый ответ (база знаний по релевантности, остальное: всегда).

Зачем это нужно

Бот знает ровно то, что ты ему дал, и где ты это дал. Один и тот же факт, положенный не в тот «карман», либо раздувает стоимость каждого ответа, либо вообще не доходит до бота. Поэтому «закинуть документацию в ИИ» это не «вставить всё в одно поле», а разложить её правильно. Сделаешь это один раз грамотно, бот сразу отвечает как живой менеджер, который выучил твой бизнес.

Три «кармана» бота, и что в каждый класть

КарманЧто тудаКогда применяетсяОбъём
🧠 **Системный промпт**Поведение (тон, характер, правила) + всегда-нужное продающее: как презентовать, как отрабатывать возражения, фирменные фишки, спец-кейсыВ каждом ответе, целикомКомпактно
🏢 «Информация о компании» (поле в настройках)Факты о тебе: кто вы, перечень услуг, адреса, часы работы, условия, контакты, гарантииВ каждом ответе, целикомДо 40 000 символов
📚 **База знаний** (RAG)Большое, меняющееся, нужное изредка: полный прайс на 100 позиций, детальные регламенты, обширный FAQ, длинные документы и PDFБот достаёт только релевантный кусок под конкретный вопросДо 100 записей; текст руками до 1 000 000 символов, из файла или страницы по ссылке до 500 000

💡 Простое правило выбора. Спроси себя про каждый кусок информации:

  1. Это про то, как бот себя ведёт и продаёт? → промпт.
  2. Это факт о компании, нужный почти в любом разговоре (услуги, адрес, часы)? → «Информация о компании».
  3. Это большой справочник, из которого в одном ответе нужна одна строка (полный прайс, регламент)? → база знаний.

Шаги

1. Раздели свою документацию на три стопки

Собери всё, что есть про бизнес: сайт, прайс в Excel, скрипты продаж, регламенты, FAQ, презентации, и мысленно разложи по трём карманам выше. Это самый важный шаг: 10 минут сортировки экономят недели «бот тупит».

📌 Пример (барбершоп).

  • Промпт: «Ты это администратор барбершопа BRUTAL. Дружелюбный, на «ты», всегда предлагаешь записаться. Если клиент сомневается, расскажи про бесплатную коррекцию через 2 недели.»
  • Информация о компании: «Барбершоп BRUTAL, Астана, пр. Достык 5. Часы: 10:00-21:00 без выходных. Услуги: мужская стрижка, борода, камуфляж седины. Мастера: Арман, Данияр.»
  • База знаний: полный прайс на 40 позиций + детальный FAQ по уходу.

2. Поведение и продающие приёмы → в промпт

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

🚫 Не делай так. Не прячь характер и презентацию в базу знаний: оттуда бот достаёт текст только если вопрос «похож», и в половине диалогов промахнётся → бот выйдет деревянным.

3. Факты о компании → в «Информацию о компании»

В настройках проекта есть отдельное поле «Информация о компании» (не путай с промптом). Сюда, сухие факты: услуги, адреса, часы, условия, контакты. Платформа сама вставит это в каждый ответ отдельным блоком «О КОМПАНИИ», тебе не надо дублировать их в промпт.

⚠️ Важно. Не оставляй это поле пустым «потому что напишу в промпте». Поле сделано именно под факты и вмещает до 40 000 символов: это правильный дом для них. Пустое поле → бот чаще выдумывает детали.

4. Толстые и меняющиеся справочники → в базу знаний

Полный прайс, длинные регламенты, большой FAQ, документы и PDF: в Базу знаний. Бот на каждый вопрос сам находит там самые подходящие куски и подмешивает в ответ (это RAG, автоматически). Туда же, то, что часто меняется: обновил одну запись, и бот сразу отвечает по-новому, промпт трогать не надо.

📌 Пример (интернет-магазин). Каталог на 300 товаров в базу знаний. Клиент спрашивает про одну модель, бот достаёт именно её строку, а не зачитывает весь каталог.

Проверь, что работает

  1. Прогони реальные вопросы клиентов в Тест-чате. В «технических деталях» ответа видно, какие источники бот подтянул, так проверишь, что факт дошёл.
  2. Для базы знаний есть «Тест поиска»: вводишь вопрос → видишь, какие фрагменты бот найдёт и с каким % похожести.
  3. Признак, что разложил верно: бот отвечает фактами точно (цены, адрес), звучит в своём характере и не «зачитывает простыню».

Частые ошибки

СимптомПричинаЧто делать
Бот «деревянный», не продаётХарактер/презентацию убрали в базу знаний, RAG их не всегда достаётПеренеси персону и всегда-нужный продающий текст в промпт
Бот выдумывает услуги/ценыФакты нигде не заданы или поле «Информация о компании» пустоеЗаполни «Информацию о компании»; крупный прайс: в базу знаний
Ответы дорогие и медленныеОгромный прайс вставили целиком в промптПеренеси объём в базу знаний: бот будет брать только нужный кусок
Факт есть, но бот его игнорируетВ промпте нет указания опираться на знанияДопиши в промпт: «цены и факты бери из базы знаний и информации о компании, не выдумывай»

Вопросы, которые обычно возникают

Можно всё засунуть в промпт и не морочиться?
Маленький бизнес с парой услуг: да, проживёт. Но большой прайс в промпте = дорогой и «путающийся» бот: он тащит весь текст в каждый ответ. Факты в «Информацию о компании», объём: в базу знаний.

В чём разница между «Информацией о компании» и базой знаний?
«Информация о компании» идёт в ответ целиком и всегда (для коротких всегда-нужных фактов). База знаний, большая, и бот берёт из неё только релевантный кусок под вопрос. Прайс на 3 услуги в описание; прайс на 100 в базу.

Я обновил прайс, где менять?
Там, куда положил. Если в базе знаний, отредактируй запись (бот сразу учтёт). Если в «Информации о компании», поправь поле. Поэтому меняющееся удобнее держать в базе знаний.


Под капотом

  • Финальный системный промпт собирается из блоков: твой системный промпт + блок «## О КОМПАНИИ» (из поля «Информация о компании», projects.description, лимит ввода 40 000 символов) + подмешанные на лету чанки базы знаний (суммарно до 8 000 символов, гибридный поиск под текущее сообщение: по смыслу, по точным словам и с поправкой на опечатки).
  • Промпт и «Информация о компании» идут в каждый запрос целиком, поэтому их размер прямо влияет на стоимость ответа. База знаний платится отдельно (≈1¢ за поиск) и тащит только релевантное.
  • «Информация о компании» ограничена 40 000 символов на ввод; если фактуры больше, выноси объём в базу знаний (до 100 записей; вставленный текст до 1 000 000 символов, извлечённый из файла до 500 000).
  • Персона/продающие приёмы держим inline в промпте, а не в RAG: RAG возвращает контент только при семантическом совпадении с сообщением, а характер нужен в каждом ответе.

Простыми словами

Представь, что нанял нового продавца. Есть три способа его обучить. Первое, объяснить, как себя вести: будь вежлив, всегда предлагай записаться, на «дорого» отвечай так-то. Это «системный промпт». Второе, дать визитку компании: кто мы, где, во сколько работаем, что продаём. Это «Информация о компании». Третье, положить на стол толстую папку с прайсом и регламентами, в которую он заглядывает, когда нужен конкретный пункт. Это «база знаний». Если всё свалить в папку, продавец будет рыться в ней даже на «привет» и звучать как робот. Если папку не дать, начнёт выдумывать цены. Разложишь правильно, и бот с первого дня отвечает как менеджер, который выучил твой бизнес.


Дальше: → База знаний (RAG)
Связано: Системный промпт · Как бот думает · Тестовый чат
Не получилось? → Бот не отвечает

Документация › Каналы › Обзор каналов

Обзор каналов

Канал это мессенджер, через который клиенты пишут боту. Один и тот же бот может отвечать и в WhatsApp, и в Telegram одновременно, мозг у него общий, меняется только «дверь».

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Платформа поддерживает 2 рабочих канала: WhatsApp (по QR, привязанное устройство) и Telegram (свой бот). Плюс тест-чат это песочница, не настоящий клиентский канал.
  • Один проект = оба канала разом. Можно подключить только WhatsApp, только Telegram или сразу два.
  • Мозг бота один на все каналы: промпт, база знаний, функции, дожимы работают одинаково везде.
  • WhatsApp платный (подписка проекта + пробный период), Telegram бесплатен в подключении: за подключение Telegram-канала отдельно платить не нужно.
Раздел «Каналы»: подключение WhatsApp и Telegram к одному боту
Раздел «Каналы»: подключение WhatsApp и Telegram к одному боту

Какие каналы есть

У каждого диалога есть пометка канала: WhatsApp, Telegram или тест-чат.

КаналЧто этоКому видноПлатный?
WhatsAppЛичный/рабочий WhatsApp по QR (привязанное устройство, самохостинг)Реальным клиентамДа: подписка проекта (есть бесплатные 14 дней, диалоги не ограничены)
TelegramСвой бот, созданный в @BotFatherРеальным клиентамПодключение бесплатно; платишь только за сообщения с баланса
Тест-чатПесочница внутри кабинетаТолько тебеОтветы списываются с баланса, как в бою; подписка не нужна

→ Подробно: Подключить WhatsApp · Подключить Telegram · Тест-чат

💡 Тест-чат, не клиентский канал. Это «репетиция»: бот думает точно как в бою, но без реальных людей (ответы оплачиваются с баланса проекта, как обычные). Используй его, чтобы проверить бота перед подключением WhatsApp/Telegram. См. Тестовый чат.

Один бот: два канала сразу

Можно подключить к проекту и WhatsApp, и Telegram одновременно. Бот будет отвечать в обоих, используя один и тот же промпт, базу знаний и функции.

Как платформа их различает:

  • у каждого диалога есть поле channel (whatsapp / telegram / test_chat);
  • идентификатор чата начинается с префикса: wz_… для WhatsApp, tg_… для Telegram;
  • в списке диалогов у каждой переписки стоит значок канала, а фильтр по каналу есть прямо над списком.

Для тебя это значит: в Диалогах видно, из какого канала пришёл клиент, а лиды и аналитика собираются вместе, независимо от канала.


Почему мозг общий

У бота одна «голова» на все каналы, это и есть 5 точек входа, которые ведут в один и тот же AI-конвейер:

  1. тест-чат: песочница в кабинете;
  2. WhatsApp (вебхук gateway Baileys, /api/webhook/baileys): входящие из WhatsApp;
  3. Telegram (вебхук Telegram): входящие из Telegram-бота;
  4. демо-чат: публичное демо на лендинге;
  5. фоновые задачи (кроны/очередь): дожимы, переотправки.

Что бы ты ни поменял в промпте, базе знаний или функциях: это сразу применяется во всех каналах. Не нужно настраивать бота для WhatsApp и Telegram по отдельности.


Чем каналы отличаются на практике

WhatsAppTelegram
Как подключаетсяQR-код (как WhatsApp Web)токен от @BotFather
Риск бана номераесть: Meta банит «холодные» номера, нужен антибан-чек-листнет: это официальный Bot API
Стоимость подключенияподписка проекта (после триала)бесплатно
Что нужно от тебя«живой» прогретый номерсоздать бота в Telegram за минуту
Медиаголос/фото/файлыголос/фото/файлы (до 20 МБ)
⚠️ Главная разница, риск. WhatsApp требует осторожности: неправильно подключённый номер забанят за минуты (см. Гигиена и антибан). Telegram такого риска не несёт, там официальный бот, банить нечего.

Где управлять каналами

Меню проекта → «Каналы» (/projects/<id>/channels). Там обе секции, WhatsApp и Telegram с кнопками «Подключить» / «Отключить» и индикатором статуса.


Простыми словами

Канал это просто мессенджер, в котором сидят твои клиенты. У платформы их два: WhatsApp и Telegram. Можешь включить любой или оба сразу: бот один, а «дверей», через которые к нему заходят, может быть две.

Самое удобное: настраиваешь бота один раз, характер, базу знаний, функции, и это работает и в WhatsApp, и в Telegram. Не надо ничего дублировать.

Разница только в двух вещах. Первое, деньги: WhatsApp платный (есть бесплатные 14 дней на попробовать), Telegram подключается бесплатно. Второе и более важное, безопасность: WhatsApp легко «обжечь», если подключить новый пустой номер, его забанят как спам, поэтому там есть чек-лист перед подключением. Telegram такого не боится. Если не уверен, с чего начать, начни с Telegram (быстро и без рисков) или сразу с WhatsApp, но внимательно прочитав про антибан.


Дальше: → Подключить WhatsApp
Связано: Подключить Telegram · Гигиена и антибан · Как бот думает · Биллинг
Не получилось? → Бот не отвечает · Канал отвалился

Документация › Каналы › Подключить WhatsApp

Подключить WhatsApp (по QR)

После этой статьи твой бот будет сам отвечать клиентам в WhatsApp: 14 дней бесплатно, без ограничения по числу диалогов, без карты и предоплаты.

⏱ 12 мин · 👤 для владельца и оператора · 🟢 live

Раздел «Каналы»: подключение WhatsApp по QR-коду (3 шага) и Telegram по токену от @BotFather
Раздел «Каналы»: подключение WhatsApp по QR-коду (3 шага) и Telegram по токену от @BotFather
За 30 секунд:
  • WhatsApp подключается сканированием QR-кода, как обычный «WhatsApp на компьютере». Платформа держит привязанное устройство сама (самохостинг), отдельный сторонний сервис не нужен.
  • Нужен «живой» рабочий номер (на котором уже переписывались), иначе WhatsApp забанит за спам.
  • Никаких анкет перед сканом: нажал «Подключить свой номер», получил QR. Не читается камера, есть код по номеру телефона; номер у другого человека, есть ссылка, по которой он подключит его сам.
  • Бесплатно: 14 дней, сколько угодно диалогов. Единственный ограничитель это баланс проекта: при регистрации мы кладём на него $5, и бот отвечает, пока эти деньги не кончатся. Дальше нужна подписка проекта.
  • Телефоном можно продолжать пользоваться, бот работает как привязанное устройство, не вместо тебя.

Зачем это нужно

WhatsApp это канал, через который твои клиенты уже пишут. Подключив его, ты отдаёшь боту входящие сообщения: он отвечает на вопросы, считает цены, собирает заявки, записывает на услуги: круглосуточно, без твоего участия. Это самый частый первый канал на платформе.

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

Почему по QR, а не напрямую через API

У WhatsApp нет «кнопки подключить бота» для обычного аккаунта. Платформа привязывается к твоему WhatsApp как ещё одно устройство, точно так же, как WhatsApp Web на компьютере, и держит это привязанное устройство у себя (самохостинг). Тебе ничего настраивать не нужно: ты только сканируешь QR. Главное помнить, подключается обычный личный/рабочий WhatsApp по QR, а не official Business API.

⚠️ Важно с самого начала. WhatsApp очень не любит, когда «свежий» номер вдруг начинает отвечать как привязанное устройство. Подключишь «холодный» номер, Meta забанит его за минуты. Поэтому перед сканом честно ответь себе на пять вопросов из блока «Какой номер выбрать» ниже: по опыту, бóльшая часть банов именно из-за неправильного номера.

Что понадобится

  • ☐ Создан проект → Создание проекта
  • ☐ Написан промпт бота, хотя бы черновой (иначе боту нечем отвечать) → Системный промпт
  • ☐ Телефон с WhatsApp на номере, который уже использовался для обычной переписки (не только что куплен/зарегистрирован)
  • ☐ Этот телефон под рукой: на нём надо открыть камеру для скана QR
  • ☐ Роль в проекте admin или owner. Роль editor видит страницу, но кнопку подключения нажать не сможет → Роли и права. Если номер у другого человека (например, у владельца бизнеса, а настраиваешь ты), в проект его звать не нужно: есть ссылка для самостоятельного подключения, см. шаг 3.

Какой номер выбрать

✅ Подойдёт🚫 Не подойдёт
Рабочий номер компании, с которого месяцами переписывалисьКупленная сегодня «симка под бота»
Личный номер с реальной историей чатовНомер из эмулятора / виртуальный
Обычный WhatsApp или WhatsApp Business: оба окНомер, уже подключённый к другому сервису рассылки

💡 Совет. Один номер = один проект. Если у тебя два бизнеса (две стоматологии): это два проекта и два разных номера. Подключить два WhatsApp-номера в один проект нельзя.

Шаги

1. Открой раздел «Каналы»

В меню проекта слева → «Каналы». Подзаголовок страницы: «Подключение WhatsApp и Telegram к боту проекта».

В блоке WhatsApp (QRDOS) видно текущее состояние и кнопка «Подключить свой номер». Под ней подсказка: «Подключите свой номер WhatsApp по QR-коду через QRDOS: откройте WhatsApp на телефоне → Связанные устройства → отсканируйте код».

2. Проверь номер (пять честных вопросов)

Анкеты перед сканом нет, платформа верит тебе на слово. Но именно от номера зависит, доживёт ли он до первой заявки. Ответь себе:

ВопросПочему это важно
Номер уже использовался в обычном WhatsApp, на нём есть живая переписка?«Пустой» номер для Meta = спам-бот
За последние сутки на нём были реальные чаты с людьми?Подтверждает, что номер живой
Номер не подключён одновременно к другому сервису рассылок?Два сервиса на одном номере = бан
WhatsApp стоит на настоящем телефоне, не в эмуляторе?Эмуляторы Meta вычисляет и банит навсегда
Номер сейчас не в блокировке и раньше не банился?Забаненный подключать бессмысленно

Хотя бы одно «нет» → возьми другой номер. Подробно: Гигиена и антибан.

3. Нажми «Подключить свой номер» и отсканируй QR

После нажатия статус меняется на «Поднимаем подключение...», через несколько секунд появляется QR-код и подсказка «Откройте WhatsApp → Связанные устройства → Привязать устройство и отсканируйте QR».

На телефоне с нужным номером:

  1. Открой WhatsApp;
  2. Настройки → Связанные устройства (Linked Devices);
  3. на iPhone: вкладка «Настройки» → «Связанные устройства»;
  4. на Android: «⋮» (три точки) → «Связанные устройства»;
  5. «Привязать устройство» → наведи камеру на QR-код на экране компьютера.

💡 QR живёт около минуты. Не успел, нажми «Обновить QR» и сканируй новый. Под QR есть раскрывающаяся подсказка «QR не сканируется?» с четырьмя шагами и кнопкой написать в поддержку.

Камера не читает QR? Под кодом есть переключатель «Не сканируется QR? Привязать по номеру телефона»: вводишь номер с кодом страны (например 77071234567), жмёшь «Получить код», а в WhatsApp идёшь Настройки → Связанные устройства → Привязать устройство → «Привязать по номеру телефона» и вводишь этот код.

Номер у другого человека? В блоке есть «Ссылка для самостоятельного подключения»: скопируй её и отправь владельцу номера. Он откроет ссылку на телефоне, увидит статус и сам отсканирует QR, приглашать его в проект не нужно. Ссылка действует 14 дней, потом на этой же странице появится новая; кнопка «Обновить ссылку» гасит старую сразу.

4. Дождись статуса «Подключён»

Как только телефон привяжется, статус сам сменится на «Подключён», и рядом появится номер телефона. Перезагружать страницу не нужно, она обновляется в реальном времени.

Сразу после привязки над блоком висит плашка «🔥 Прогрев номера» с обратным отсчётом: «Бот начнёт отвечать новым клиентам через 14:59. Сразу после подключения номер прогревается: это защита от блокировки WhatsApp. Все сообщения при этом сохраняются, вы видите их в Диалогах». Это 15 минут тишины, а не поломка: см. Антибан.

Там же, в блоке, два полезных тумблера и подсказки:

  • «Отмечать входящие прочитанными»: включено, бот «прочитывает» сообщения (у собеседника синие галочки), а телефон перестаёт присылать уведомления о новых сообщениях. Выключи, если хочешь получать уведомления на телефон, как раньше;
  • раскрывающийся блок «Что будет с вашим номером»: шесть коротких ответов про привязанное устройство, старые чаты, защиту от блокировки, прогрев и телефон в сети;
  • совет про WhatsApp Business: если включены авто-ответы (приветствие, «сообщение об отсутствии»), выключи их, иначе платформа примет их за ответ оператора и поставит бота на паузу.

📌 Пример (стоматология). Подключают рабочий +7 705…. Через ~10 секунд после скана статус «Подключён (+7 705…)». Через 15 минут прогрева клиент пишет «сколько стоит чистка?», бот отвечает сам, заявка падает в Лиды.

📌 Пример (барбершоп). Мастер боится, что после подключения «телефон отвалится». Ничего подобного: он дальше переписывается в WhatsApp как обычно, а бот просто параллельно отвечает новым клиентам. Если мастер сам вступит в диалог, бот на этом чате встанет на паузу.

Проверь, что работает

  1. Статус в блоке WhatsApp = «Подключён» + виден номер.
  2. Напиши боту с другого телефона в этот WhatsApp: должен прийти ответ от бота (несколько секунд).
  3. Открой Диалоги: там появится твоя тестовая переписка.

Если бот молчит, иди в Бот не отвечает.

Сколько это стоит

  • Пробный период, бесплатно: 14 дней (или 30 дней, если к проекту применён промокод), число диалогов не ограничено. Карта не нужна.
  • Внутри пробного периода бот отвечает, пока на проекте есть деньги. При регистрации мы кладём $5 ($10 по промокоду), каждый ответ бота списывает с них по факту (см. Сколько стоит сообщение).
  • Сразу после подключения открывается окно скидки на подписку: 14 дней, цена ниже обычной. Оплата внутри окна не съедает оставшиеся бесплатные дни, платный период начнётся после них.
  • После пробного периода канал работает, только если у проекта активная подписка. Если не оплатить, WhatsApp-подключение перестанет отвечать. Цены и оплата: в статье Биллинг.

💡 Бот замолчал раньше срока? Значит кончился баланс, а не «пробные диалоги»: лимита на количество переписок нет. Пополни баланс, и ответы пойдут сразу же.

Что доезжает из WhatsApp в кабинет

Подключение не сводится к «текст туда, текст обратно»: в Диалогах переписка выглядит так же, как в самом WhatsApp.

Что происходит в WhatsAppЧто видно в кабинете
Клиент печатает или пишет голосовоеиндикатор «печатает…» в диалоге
Твой ответ дошёл / прочитангалочки «доставлено» и «прочитано» на сообщении бота
Клиент поставил эмодзи-реакциюэмодзи рядом с сообщением. Бот реакции не читает: 👍 это часто вежливый кивок, а не ответ, и подавать его модели как реплику дороже, чем полезнее
Клиент удалил сообщение «у всех»на месте текста остаётся пометка «сообщение удалено»
Клиент исправил уже отправленное сообщениетекст обновляется, и бот отвечает на исправленный вариант, а не на первый
Клиент ответил на конкретное сообщение (цитата)цитата видна и оператору, и боту, в том числе в группах
Клиент переслал чужое сообщениепометка «Переслано», чтобы не принять его за слова самого клиента
Клиент прислал фото, документ, голосовоефайл в диалоге, голосовое расшифровано в текст (если распознавание включено)

💡 Если файл почему-то не скачался, на его месте будет прямая подпись, почему именно: молчаливого пустого места не остаётся.

Частые ошибки

СимптомПричинаЧто делать
QR не сканируется / успел протухнутьQR живёт около минутыНажми «Обновить QR»; не читает камера, привяжи по коду через номер телефона
«QRDOS временно недоступен, попробуйте через минуту»Шлюз подключения перезапускаетсяПодожди минуту и нажми ещё раз; повторяется, напиши в поддержку
Бот молчит первые минуты после подключенияИдёт прогрев номера (плашка «🔥 Прогрев номера» с отсчётом)Подожди 15 минут, сообщения клиентов не теряются
«Пробный период WhatsApp завершён. Для повторного подключения требуется оплата подписки.»Триал кончился, подписки нетОплати подписку → Биллинг, потом переподключи
Бот подключился и вдруг замолчалКончился баланс проекта (лимита на число диалогов нет)Пополни баланс → Биллинг
Бот подключился, но не отвечает вообщеПустой промпт или нет баланса токеновПроверь промпт и баланс
Бот ответил один раз и замолчал в чатеУ номера включён авто-ответ WhatsApp Business (приветствие / «нет на месте»): он уходит от твоего имени и ставит бота на паузуОтключи авто-ответы в WhatsApp Business → Настройки → Инструменты для бизнеса
Кнопки «Подключить» нет, всё сероеУ тебя роль editor/viewerПопроси admin/owner подключить → Роли
Статус «Сессия разлогинена, привяжите заново»Телефон долго был офлайн или ты сам отвязал устройство в WhatsAppНажми «Подключить свой номер» и отсканируй новый QR
Статус «Номер заблокирован WhatsApp, отправки остановлены»Meta забанила номерСм. Канал отвалился / бан
WhatsApp забанил номерПодключили «холодный» номерСм. Канал отвалился / бан

Если WhatsApp отвалился

WhatsApp может разорвать связь (телефон надолго офлайн, устройство разлогинило). Короткие обрывы платформа переживает сама: статус на минуту становится «Переподключаемся...» и возвращается в «Подключён». Если устройство отвязано совсем, статус станет «Сессия разлогинена, привяжите заново», а в обзоре проекта и в диалогах появится ссылка «Переподключить»: это тот же путь через QR. Штатная операция.

⚠️ Не отвязывай устройство руками на телефоне ради «подключить заново по-новому». Отключай через кнопку «Отключить» на платформе: она делает полный выход на шлюзе и стирает память о чатах. Иначе WhatsApp увидит «то же устройство с теми же контактами» и расценит это как уклонение от бана. Подробнее: Гигиена и антибан.

Вопросы, которые обычно возникают

Смогу ли я дальше пользоваться WhatsApp на телефоне?
Да. Бот работает как привязанное устройство (как WhatsApp Web). Твой телефон остаётся главным, ты переписываешься как обычно. Бот отвечает параллельно на новые входящие.

Что будет с моими старыми чатами и контактами?
На твоём телефоне: ничего, всё остаётся. Подключение только «читает» новые входящие и отвечает на них.

А если я сам отвечу клиенту, бот не перебьёт?
Когда оператор вступает в диалог, бота на этом чате можно поставить на паузу, он не будет встревать. Подробно, Диалоги.

Подойдёт WhatsApp Business?
Да. И обычный WhatsApp, и WhatsApp Business подключаются одинаково по QR. Главное: «живой» номер.

⚠️ Если у тебя WhatsApp Business, отключи встроенные авто-ответы (приветственное сообщение и «сообщение об отсутствии»). Найти: в приложении WhatsApp Business → Настройки → Инструменты для бизнеса → Приветственное сообщение / Сообщение в нерабочее время → выключить. Зачем: эти авто-ответы уходят от твоего имени, и платформа считает их за «оператор сам вступил в диалог» → ставит бота на паузу в этом чате (он ответит один раз и замолчит). Бот и так сам здоровается с клиентами, поэтому родной авто-ответ WhatsApp Business только мешает, два приветствия конфликтуют.

Захожу в WhatsApp: все сообщения уже помечены прочитанными, и телефон не присылает уведомления. Почему?
Бот: привязанное устройство, а WhatsApp синхронизирует «прочитано» между всеми твоими устройствами. Когда бот по умолчанию «прочитывает» входящее (собеседник видит синие галочки), телефон считает сообщение уже прочитанным и не показывает уведомление. Если хочешь получать уведомления на телефон, открой блок WhatsApp в разделе «Каналы» и выключи тумблер «Отмечать входящие прочитанными». Тогда входящие останутся непрочитанными (уведомления и значок «новое» вернутся), а собеседники будут видеть только серые галочки «доставлено», без синих «прочитано». Настройка действует на этот проект и применяется сразу, переподключать номер не нужно.

Можно один номер на два проекта?
Нет. Один номер = один канал = один проект. Для второго бизнеса: отдельный проект и отдельный номер.

Нужно ли держать телефон постоянно онлайн?
Желательно. Как и у WhatsApp Web, привязанное устройство какое-то время работает и без телефона, но если телефон надолго пропадёт из сети, WhatsApp может разлогинить устройство, и придётся «Переподключить».

Справка: состояния подключения WhatsApp

Что видишьЗначитЧто делать
Не подключёнКанал ещё не созданНажми «Подключить свой номер»
Поднимаем подключение...Платформа создаёт подключениеПодожди несколько секунд
QR на экранеЖдём скан (код живёт ~1 минуту)Сканируй с телефона или нажми «Обновить QR»
Подключён (номер) + плашка «🔥 Прогрев номера»Всё работает, первые 15 минут бот молчитПодожди отсчёт ✅
Подключён (номер)Бот в эфиреГотово ✅
Переподключаемся...Короткий обрыв связи, платформа восстанавливает самаПодожди минуту
Сессия разлогинена, привяжите зановоУстройство отвязано (долгий офлайн телефона или отвязали вручную)Подключи заново по QR
Номер заблокирован WhatsApp, отправки остановленыБанКанал отвалился / бан
Ошибка подключенияСбой на шлюзеНажми «Подключить» ещё раз; повторяется, в поддержку

Под капотом (для разработчиков и любопытных)

Что происходит автоматически, пока ты сканируешь QR.

Где живёт WhatsApp. WhatsApp это самохостинг через Baileys (QRDOS): платформа держит привязанное к твоему номеру устройство на своём gateway-сервере (как WhatsApp Web, только всегда онлайн). Сторонний провайдер-посредник больше не используется (убран в июне 2026). Инвариант: 1 номер = 1 канал = 1 проект.

Поток подключения (POST /api/projects/[id]/baileys/connect):

  • права admin+; рейт-лимит 30 запросов/мин на проект;
  • гейт isWhatsAppReconnectBlocked(), если триал исчерпан и подписки нет, вернётся HTTP 402 TRIAL_EXPIRED_PAYMENT_REQUIRED с текстом «Пробный период WhatsApp завершён…»;
  • проект переключается на провайдера QRDOS, gateway стартует сессию и выдаёт QR (/baileys/qr); фронт опрашивает /baileys/status и рисует статус в реальном времени;
  • по скану gateway шлёт вебхук /api/webhook/baileys → проект помечается подключённым (projects.baileys_connected = true); страница видит это и рисует «Подключён».

Пробный период (с 2026-08-04). Активен, пока не истекло окно в 14 дней (30 дней, если к проекту применён реферальный/амбассадорский код: продление ставит apply-promo, ветка 14/30 живёт в триггере mirror_baileys_connected(), crm/sql/0123). Ограничения по числу диалогов больше нет: hasActiveWhatsAppTrial() смотрит только на дату. Тем же триггером один раз ставится projects.activation_offer_ends_at, конец 14-дневного окна скидки на подписку. Внутри окна ответы гейтит баланс проекта, как и на платной подписке. У QRDOS нет поканальной платы провайдеру, поэтому «ройщика» неоплаченных каналов нет: после окна без подписки просто срабатывает гейт допуска (checkProjectEligibility) и бот перестаёт отвечать.

Антибан в коде: (1) чек-листа перед сканом нет: ответственность за выбор номера на владельце, платформа защищает поведением после подключения; (2) отвязка идёт полным logout на шлюзе с зачисткой авторизации, офсайтной копии сессии и памяти о чатах (connectionManager.disconnect(id, logout=true)): иначе контакты «переедут» на следующее подключение, Meta увидит «новое устройство, те же контакты» = уклонение = мгновенный бан; (3) 15 минут после подключения/реконнекта автоответы не уходят (isOutboundGatedOnReconnect), кроме диалога, где оператор вручную включил ИИ; (4) на шлюзе жёсткие потолки (services/baileys-gateway/src/anti-ban.ts): ≤8 разных чатов/мин, ≤30 отправок/мин, ≤200/час, ≤3000/сутки, гауссова пауза 1,5-5 с, блок 3-го одинакового текста подряд в один чат; (5) шаблонные служебные сообщения не чаще 1 на диалог в 5 с (throttleWaTemplateSend).

Гейт «можно ли отвечать» (checkProjectEligibility), для WhatsApp нужно project.status === 'active' И (активный триал ИЛИ активная подписка). Для Telegram только active, без подписки.

Таймлайн жизни триал-канала:

0ч ──────────── создан, QR отсканирован, бот в эфире
 │  бесплатно: 14 дней, диалогов сколько угодно (пока хватает баланса)
окно закрылось ─ если НЕ оплачено → гейт допуска останавливает ответы бота
                 если оплачено → канал живёт, пока активна подписка

Простыми словами

Подключить WhatsApp это как привязать «WhatsApp на компьютере»: заходишь в раздел «Каналы», жмёшь «Подключить свой номер» и сканируешь телефоном QR-код. Не читается камера, есть код по номеру; номер у другого человека, отправь ему ссылку, он подключит сам. После этого бот сам отвечает всем, кто тебе напишет. Телефоном при этом ты продолжаешь пользоваться как обычно, бот не занимает твоё место, а работает рядом.

Две недели бесплатно, и переписок сколько угодно (с промокодом партнёра, месяц). Тратится только баланс проекта, а при регистрации мы кладём на него $5, так что попробовать можно на реальном потоке клиентов, а не на паре сообщений. Дальше нужна подписка, и первые две недели после подключения она стоит дешевле обычного.

Один совет, который реально важен: подключай только «живой» номер, с которого уже переписывались люди. Новый пустой номер WhatsApp примет за спам и заблокирует. Пять вопросов из статьи перед сканом это не бюрократия, а защита твоего номера. Первые 15 минут после подключения бот молчит, это прогрев, сообщения при этом не теряются. И если связь когда-нибудь оборвётся, не отключай ничего руками на телефоне, просто подключи заново по QR на сайте.


Дальше: → Функции (инструменты бота)
Связано: Обзор каналов · Подключить Telegram · Биллинг · Диалоги · Антибан
Не получилось? → Канал отвалился / WhatsApp забанили · Бот не отвечает

Документация › Каналы › Подключить Telegram

Подключить Telegram-бота

Самый быстрый и безопасный канал: создаёшь бота в @BotFather, копируешь токен, вставляешь в кабинет, и бот отвечает клиентам в Telegram. Подключение бесплатное, без риска бана.

⏱ 8 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Напиши @BotFather в Telegram → /newbot → получи токен вида 1234567:AAE….
  • Кабинет → проект → «Каналы» → секция Telegram → вставь токен → «Подключить».
  • Один бот = один проект. Подключение бесплатно (платишь только за ответы бота с баланса).
  • Токен хранится в зашифрованном виде, входящие проверяются секретом: чужой к боту не подключится.
  • Отключение не трогает токен в @BotFather и сохраняет историю, лиды и дожимы.
Раздел «Каналы»: подключение Telegram-бота по токену
Раздел «Каналы»: подключение Telegram-бота по токену

Зачем это нужно

Telegram: второй канал платформы рядом с WhatsApp. В отличие от WhatsApp, здесь используется официальный Bot API: значит, нет риска бана номера, нет «прогрева», нет подписки за сам канал. Это самый простой способ запустить бота в бою за пару минут.

Мозг у бота общий: тот же промпт, база знаний, функции и дожимы работают в Telegram точно так же, как в WhatsApp (см. Обзор каналов).


Шаг 1. Создать бота в @BotFather

  1. Открой Telegram, найди @BotFather (официальный бот Telegram с синей галочкой).
  2. Отправь команду /newbot.
  3. Придумай имя бота (показывается в шапке чата) и username (должен заканчиваться на bot, например my_shop_bot).
  4. BotFather пришлёт токен: длинную строку вида 1234567:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
🔒 Токен это пароль от бота. Никому его не показывай. Если случайно засветил в @BotFather командой /revoke выпусти новый, старый перестанет работать.

Шаг 2. Подключить в кабинете

  1. Меню проекта → «Каналы».
  2. В секции Telegram вставь токен в поле (оно скрыто как пароль).
  3. Нажми «Подключить».

Что происходит за кулисами (/api/projects/<id>/telegram/connect):

  • токен проверяется по формату ^\d+:[A-Za-z0-9_-]+$ (цифры, двоеточие, буквы/цифры), если не подходит, увидишь «Неверный формат токена. Скопируйте токен из @BotFather без пробелов и лишних символов»;
  • платформа дёргает Telegram getMe: убеждается, что бот живой, и подтягивает его @username;
  • вызывается setWebhook, платформа говорит Telegram «слать все сообщения сюда»; при этом задаётся секретный токен (случайный), которым Telegram подписывает каждый входящий запрос;
  • проект из статуса «черновик» автоматически переходит в «активен»: бот сразу в эфире.

После успеха: тост «Telegram бот подключён!», в секции отображается @username бота.

📌 Защита от случайной перепривязки. Если токен такой же, как уже стоит, ничего не ломается. Если другой, старому боту платформа сначала снимет вебхук, потом поставит новый.

Шаг 3. Проверить

Рядом есть кнопка «Проверить подключение» (/api/projects/<id>/telegram/status):

  • «Бот подключён и работает», всё ок;
  • «Бот не отвечает. Проверьте токен.»: токен отозван или неверен, переподключи.

Дальше открой своего бота в Telegram (по его @username), напиши ему: он должен ответить как настроен в промпте.

⚠️ Если бот молчит, проверь, что ИИ включён и на балансе есть деньги: Telegram-подключение бесплатно, но каждый ответ бота списывает токены с баланса проекта, как и в WhatsApp. → Бот не отвечает

Что умеет бот в Telegram

  • Текст: основной режим.
  • Голосовые: расшифровываются в текст, бот отвечает по смыслу.
  • Видео и видео-кружки: звуковая дорожка расшифровывается, бот отвечает по содержанию.
  • Фото: бот «видит» картинку (описание изображения) и реагирует. Подпись под фото учитывается как вопрос клиента.
  • Альбомы (несколько фото разом): собираются в один запрос, бот отвечает одним сообщением, а не на каждое фото отдельно.
  • Файлы: принимаются до 20 МБ.
  • Пересланные сообщения: бот понимает, что это форвард, и учитывает откуда.
  • Стикеры: бот считывает эмодзи стикера как настроение и отвечает по-человечески (раньше отвечал «не умею со стикерами»).
  • Telegram Business: поддерживаются бизнес-сообщения (если у тебя Telegram Business-аккаунт, бот отвечает и там).
  • Кнопки под ответом (опция): бот может предлагать клиенту нажимаемые кнопки выбора (записаться / узнать цену / да-нет). Включается в Настройки → Разбивка ответов → «Кнопки под ответом бота». Нажатие кнопки бот воспринимает как ответ клиента и продолжает диалог.
  • Группы и супергруппы (опция), бот может отвечать в групповых чатах, но только когда к нему обращаются: упомянули через @имя_бота или ответили на его сообщение. На остальную переписку он не реагирует. Включается в Настройки → Разбивка ответов → «Отвечать в Telegram-группах».
  • Реакции (👍/❤️): видны рядом с сообщением и попадают в аналитику вовлечённости. Боту их не показываем: эмодзи чаще означает вежливый кивок, чем ответ, и как реплику его читать нельзя.
  • Меню команд: при подключении у бота автоматически появляются команды /start и /help (кнопка «/» в Telegram).

Всё это, тот же конвейер, что и в других каналах: функции, база знаний, лиды, дожимы.


Кампании и рассылки

Когда бот подключён, в разделе Каналы → Telegram появляется «Ссылка для рекламной кампании»: вводишь название кампании (например instagram_jan): получаешь ссылку вида t.me/твойбот?start=instagram_jan. Дай её в рекламе/постах: кто перейдёт и нажмёт «Старт», попадёт в Аналитику → раздел «Кампании»: увидишь по каждой кампании диалоги, лиды, конверсию и выручку. Это как реклама-атрибуция для WhatsApp, только для Telegram-ссылок.

Рассылки (раздел «Рассылки» в меню проекта, нужны права администратора): отправь сообщение сразу всей своей базе контактов. Только Telegram: массовая отправка в WhatsApp грозит баном номера, поэтому рассылки работают исключительно по Telegram-контактам. Что умеет рассылка:

  • Кнопки под сообщением: добавь к рассылке нажимаемые кнопки (ответ боту или ссылка). Рядом, живой предпросмотр, как сообщение увидит клиент.
  • Сужение базы: можно сузить по статусу лида, тегу или рекламной кампании (кто пришёл по конкретной deep-link ссылке). Рядом сразу показывается сколько контактов попадёт под условия: видно охват ещё до отправки.
  • Запланировать на потом: выбери «Запланировать» и укажи дату/время; рассылка сама уйдёт в нужный момент (до этого её можно отменить).
  • Бережная доставка: сообщения уходят постепенно (анти-бан), а кто написал боту «стоп»/«отписаться», исключается автоматически.
  • В истории видно, сколько отправлено, сколько ошибок, и можно остановить рассылку (или запланированную, и идущую) на ходу.

Профиль бота. В разделе Каналы → Telegram (когда бот подключён) есть свёрнутый блок «Профиль бота в Telegram», прямо из кабинета можно задать короткое описание (строка под именем бота) и описание (текст «Что умеет этот бот?», который клиент видит в пустом чате до первого сообщения). Не нужно открывать @BotFather.

Кнопки и аналитика вовлечённости. Если включены кнопки под ответом, оператор видит их прямо в диалоге, а когда клиент нажимает кнопку в переписке появляется пометка «🔘 Нажал кнопку» (видно, что это нажатие, а не набранный текст). В Аналитике появляется блок «Вовлечённость в Telegram»: показы кнопок, нажатия, кликабельность (CTR), какие кнопки нажимают чаще, реакции клиентов (👍/❤️) и разбивка диалогов на личные и групповые.


Отключить Telegram

Секция Telegram → «Отключить». Подтверждение предупредит: «Бот перестанет отвечать клиентам в Telegram. История диалогов, лиды и подписчики drip сохранятся. Подключить можно тот же или новый бот: токен в @BotFather не пострадает.»

При отключении (/api/projects/<id>/telegram/disconnect) платформа снимает вебхук в Telegram (deleteWebhook) и очищает все Telegram-поля проекта. Сам бот в @BotFather остаётся: токен живой, можно переподключить когда угодно.


Под капотом

Для технически любопытных, как устроено хранение и безопасность (по коду):

  • Шифрование токена. telegram_bot_token хранится зашифрованным (AES-256-GCM, ключ ENCRYPTION_KEY, префикс enc:). В открытом виде в базе токена нет.
  • Дедуп. Рядом лежит telegram_bot_token_hash (SHA-256), по нему за один запрос проверяется, не привязан ли этот бот к другому проекту. Если привязан, «Этот бот уже привязан к другому проекту. Создай нового бота в @BotFather или отключи от старого проекта.»
  • Проверка входящих. Telegram шлёт обновления на /api/webhook/telegram/<projectId> с заголовком x-telegram-bot-api-secret-token. Платформа сравнивает его с сохранённым секретом timing-safe сравнением (safeStringEqual); не совпал, 401, сообщение отклонено. Так чужой не сможет слать боту фейковые апдейты.
  • Подписанные типы апдейтов. Вебхук слушает: message, edited_message, callback_query, message_reaction, business_connection, business_message, edited_business_message, deleted_business_messages.
  • Лимиты. Подключение/отключение, 5 запросов / 60 сек (admin-роль). Входящий вебхук, 60 запросов / 60 сек на проект. Токен в запросе: до 200 символов.
  • Медиа без утечки токена. Файлы Telegram сохраняются как tg-file://…, чтобы токен бота не попал в ссылку.
  • Ошибки подключения (понятные RU-тексты): Telegram не принял токен → «Telegram не принял токен. Скопируй токен заново: целиком, от @BotFather, без пробелов.»; Telegram недоступен → «Telegram сейчас недоступен. Попробуй через минуту.»; иное → «Не удалось подключить бот. Повтори ещё раз, если повторится, напиши в саппорт.»

Простыми словами

Telegram: самый лёгкий способ запустить бота. Идёшь к @BotFather (это «фабрика ботов» внутри самого Telegram), пишешь /newbot, придумываешь имя, и он выдаёт тебе токен, такой длинный код. Этот код ты вставляешь в кабинете в разделе «Каналы» и жмёшь «Подключить». Всё, бот ожил, отвечает всем, кто ему напишет в Telegram.

Никакого риска, в отличие от WhatsApp: тут не нужен «прогретый номер», никто никого не банит, и за само подключение денег не берут. Платишь только за работу бота: за его ответы, как везде.

Токен это как пароль, держи его при себе. Если что-то пошло не так, всегда можно нажать «Проверить подключение»: бот либо «работает», либо просит обновить токен. А отключение ничего не ломает, история переписок, лиды и дожимы остаются на месте, и бот в @BotFather никуда не девается.


Дальше: → Функции (инструменты бота)
Связано: Обзор каналов · Подключить WhatsApp · Системный промпт · Биллинг
Не получилось? → Бот не отвечает

Документация › Каналы › Гигиена и антибан

Гигиена и антибан (WhatsApp)

WhatsApp подключается через WhatsApp Web, а Meta жёстко банит «холодные» номера в первые минуты. Эта статья, как не потерять номер. Касается только WhatsApp; Telegram банить нечего.

⏱ 9 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Бан грозит только WhatsApp (там WhatsApp Web). Telegram: официальный бот, риска нет.
  • Главное правило: подключай только «живой», прогретый номер, на котором уже была реальная переписка. Новый/пустой номер забанят за минуты.
  • Анкеты перед сканом нет, платформа верит тебе на слово. Поэтому пять вопросов ниже задай себе сам: это требования Meta, не наша бюрократия.
  • Первые 15 минут после привязки бот молчит (прогрев номера). Сообщения клиентов при этом принимаются и видны в Диалогах, отвечает бот сам, когда окно пройдёт.
  • Если номер уже банился или проект уже ловил баны, заводи новый проект и новый прогретый номер, не реконнекть старый.

Почему WhatsApp вообще банит

WhatsApp не даёт обычному аккаунту «кнопку бота». Платформа привязывается к твоему WhatsApp как WhatsApp Web (ещё одно устройство) и держит это устройство у себя (самохостинг). А Meta давно научилась ловить автоматизацию, если на свежеподключённом устройстве вдруг начинается рассылка незнакомым людям: это классический признак спам-бота, и номер улетает в бан за минуты.

Поэтому антибан это не про «обойти» правила Meta (это невозможно), а про то, чтобы бот вёл себя как живой человек с прогретого номера. Часть защиты делает платформа автоматически, часть зависит от тебя: выбора правильного номера.

🚫 Эмуляторы: мгновенный бан навсегда. Не подключай номер, который заводился на Android-эмуляторе (BlueStacks/NoxPlayer). Meta их детектит и банит без шансов на разбан.

Пять вопросов перед подключением

Окна с галочками перед QR нет: нажал «Подключить свой номер», получил код. Всё, что защищает номер до скана, это твой честный ответ на пять вопросов:

  1. ✅ Номер использовался в обычном WhatsApp минимум 24 часа с реальной перепиской.
  2. ✅ За последние сутки на нём было 10-15 живых чатов с людьми.
  3. ✅ Номер не подключён одновременно к другому сервису рассылок (два сервиса на одном номере = бан).
  4. ✅ Не использовали Android-эмуляторы (BlueStacks/NoxPlayer), Meta их детектит и банит навсегда.
  5. ✅ Этот номер раньше не был забанен в WhatsApp (забаненные не разбанивают).

Хотя бы одно «нет» → бери другой номер. Это рекомендации, проверенные на практике: что именно сделать с номером, решаешь ты.

⚠️ Если проект уже ловил баны. Meta помнит граф контактов даже после нашей чистки канала. Надёжнее создать новый проект и подключить там совершенно новый прогретый номер, который раньше не использовался в DOS AI, чем переподключать тот же. Тот же номер на том же проекте: на твой страх и риск.
💡 В самом блоке WhatsApp после подключения есть раскрывающаяся памятка «Что будет с вашим номером»: шесть коротких ответов про привязанное устройство, старые чаты, лимиты отправки, прогрев и телефон в сети. Полезно показать владельцу номера, если он волнуется.

Что платформа делает за тебя

Несколько защит встроены в код и работают автоматически:

  • Прогрев номера: первые 15 минут бот молчит. Сразу после привязки (и после каждого переподключения) платформа держит паузу 15 минут и не даёт боту автоматически отвечать (isOutboundGatedOnReconnect, OUTBOUND_RECONNECT_COOLDOWN_MINUTES = 15). Свежеавторизованный номер, который тут же начинает писать многим людям, для Meta красный флаг. Окно снимается по времени, а не «когда пойдут входящие»: сообщения клиентов всё это время принимаются, сохраняются и помечаются для оператора, просто ответ идёт после паузы. Исключение одно: если ты вручную включил ИИ в конкретном диалоге, там бот ответит сразу (это ровно случай «отсканировал QR и хочу проверить бота»).
  • Чистая отвязка канала. Кнопка «Отключить» делает на нашем шлюзе полный выход из аккаунта (logout) и стирает и авторизацию, и память о чатах: список известных контактов, буфер последних сообщений, офсайтную копию сессии. Иначе прежние контакты «переехали» бы на следующее подключение, и Meta увидела бы «новое устройство, те же контакты» = уклонение = мгновенный бан.
  • Защита от одинаковых рассылок. Платформа не даёт слать один и тот же шаблон пачкой: троттлинг 1 шаблонное сообщение на диалог в 5 секунд, а служебные автоответы («нет баланса», «нерабочее время» и т.п.) уходят один раз на диалог и повторяются не чаще раза в сутки. Одинаковые массовые сообщения: типовой триггер бана.
  • Жёсткие потолки отправки на самом шлюзе (страховка на случай, если что-то пойдёт вразнос выше по цепочке):
ПотолокЗначениеЗачем
Разных собеседников в минуту8главная защита от «блеска»: рассылка 20 незнакомцам в минуту не пройдёт. Ответ из 5 частей одному человеку стоит одного слота, а не пяти
Всего отправок в минуту30предохранитель от зацикливания
Отправок в час200ровный дневной темп
Отправок в сутки3000верхняя граница на сессию
Пауза между отправками1,5-5 сек (случайная, «человеческая»)вместе с индикатором «печатает»
Одинаковый текст подряд в один чат3-й блокируетсяловит случайную петлю-эхо

Прогрева «в первый день можно меньше» у нас нет намеренно: бот всегда отвечает тем, кто написал первым, а это низкорисковое поведение. Лимит первого дня только заставлял бы бота замолкать посреди разговора.

  • Лимит к API. Запросы на подключение и ручную отправку ограничены 30 в минуту на аккаунт: ровный темп вместо всплесков.
📌 Статус «Сессия разлогинена» сразу после подключения платформа считает «жёстким» сбоем (реальный обрыв, а не временная заминка): на холодном номере это чаще всего замаскированный бан, а не «отвалился на секунду».

Если связь оборвалась

  • Не отключай и не переподключай руками на телефоне. Короткие обрывы платформа чинит сама («Переподключаемся...»). Если устройство отвязано совсем («Сессия разлогинена»), подключи заново по QR на сайте: в обзоре проекта и в диалогах для этого есть ссылка «Переподключить».
  • На неоплаченном истёкшем пробном периоде реконнект заблокирован до оплаты (isWhatsAppReconnectBlocked): пока окно просрочено, новый QR не выдаётся, сначала подписка.
  • Поймал бан на холодном номере: реконнект того же номера обычно бесполезен. Заведи новый проект и подключи новый прогретый номер.

→ Подробный разбор сбоев: Канал отвалился / WhatsApp забанили


Если переносишь бота на другой номер

Переписки при смене номера никуда не деваются: диалог привязан к номеру клиента, поэтому вся история остаётся в Диалогах. Меняется одно: люди, которые писали на прежний номер, новый не знают.

  • Первым писать им с нового номера нельзя. Для WhatsApp сообщение незнакомцу с номера, которого он никогда не видел, выглядит как рассылка, а за это банят. Поэтому в таких диалогах поле ввода закрыто, в списке стоит пометка «прежний номер», а отложенные сообщения, досылки и напоминания им не уходят. Читать переписку можно всегда.
  • Когда человек напишет на новый номер сам, диалог открывается автоматически, и отвечать можно как обычно, и тебе, и боту.
  • Исключение: если человек уже есть в переписках самого нового телефона, он этот номер знает, и диалог не закрывается.
  • Не рассылай «мы сменили номер» с нового номера. Это как раз массовое сообщение незнакомцам. Сообщить о новом номере можно только со старого телефона, руками и не всем сразу.
  • Новый номер должен быть живым: WhatsApp на нём давно, заполнен профиль, нет чужих личных переписок (при подключении они подгрузятся в кабинет).
  • Не забудь поменять номер там, где тебя находят люди: карточки на картах, соцсети, сайт, реклама. Пока там старый номер, новые люди пишут на него.

Telegram: без этих забот

Всё выше, только про WhatsApp. Telegram работает через официальный Bot API: там нет «прогрева», нет WhatsApp Web, нет банов за автоматизацию. Если риск бана для тебя критичен, а номер прогреть негде, начни с Telegram.


Простыми словами

WhatsApp подключается так же, как «WhatsApp на компьютере». И у этого есть одна опасность: WhatsApp очень не любит, когда с нового, пустого номера вдруг начинается рассылка незнакомым людям, он сразу решает «это спам-бот» и блокирует номер за пару минут. Разбана почти не бывает.

Поэтому правило простое: подключай только тот номер, которым реально пользовались с которого писали людям хотя бы сутки, где есть живые переписки. Перед сканированием QR задай себе пять вопросов из этой статьи: это и есть проверка «номер живой?». Не относись к ним как к формальности: они спасают твой номер.

Многое платформа делает сама: например, сразу после подключения она держит бота молча первые 15 минут, чтобы не насторожить WhatsApp (сообщения клиентов в это время не теряются, они видны в Диалогах), и не даёт ему писать слишком многим людям за минуту. Но выбор номера: на тебе. Никогда не подключай номера с эмуляторов (BlueStacks и подобных): это бан навсегда. И если номер уже когда-то банился, не пытайся его реанимировать, возьми новый.

А если все эти сложности не хочется, просто используй Telegram: там ничего не банят, подключается за минуту.


Дальше: → Функции (инструменты бота)
Связано: Обзор каналов · Подключить WhatsApp · Подключить Telegram
Не получилось? → Канал отвалился / WhatsApp забанили

Документация › Инструменты бота › Функции

Функции (Инструменты бота): полный гайд

Раздел «Функции» в проекте DOS AI. Путь: Проект → Функции (/projects/<id>/functions).
Подзаголовок раздела: «Инструменты, которые ИИ сам решает когда использовать».
Каталог встроенных функций: уведомления владельцу, запись на время, Google Таблицы, приём оплаты, поведение бота, фото и видео, письмо клиенту
Каталог встроенных функций: уведомления владельцу, запись на время, Google Таблицы, приём оплаты, поведение бота, фото и видео, письмо клиенту

Этот документ объясняет фичу целиком, что это, как бот ими пользуется, как их создавать и настраивать, какие бывают, все встроенные функции с параметрами, кастомные вебхуки, лимиты, безопасность, тестирование и все крайние случаи. Написан для человека, который настраивает бота, а не только для программиста, но с технической глубиной там, где она нужна.

🆕 Обновление каталога (2026-06-13). Шаблоны теперь сгруппированы по задаче: Уведомления владельцу (Telegram, почта), Запись на время (Calendar + движок окошек), Google Таблицы, Приём оплаты (Kaspi) (как работает), Поведение бота (теги, пауза дожимов, стоп-диалог), Фото и видео, Письмо клиенту (гайд). Что ещё изменилось:
  • В модалке создания есть поиск по шаблонам: напишите «оплата», «запись», «уведомление».
  • У каждого шаблона на карточке видно «цену входа» (сколько полей, сколько минут, что понадобится) и ссылку 📖 Инструкция.
  • У шаблонных полей человеку показывается короткая подпись, а полная инструкция для ИИ спрятана в спойлер «Инструкция для ИИ».
  • Проверить функцию можно прямо в мастере (кнопка «Проверить»), не закрывая его.
  • Письмо клиенту через обычную почту теперь доступно как шаблон (см. «Письмо клиенту»); Gmail остался продвинутым вариантом.
  • HTTP-запрос это не шаблон, а путь «Своя интеграция по API» (для разработчика). См. Кастомные вебхуки.

Оглавление

  1. Что такое функции и зачем они
  2. Как бот ими пользуется (механика)
  3. Страница «Функции»: весь интерфейс
  4. Как создать функцию
  5. Анатомия функции (из чего состоит)
  6. Параметры: подробно
  7. Каталог встроенных функций
  8. Кастомные вебхуки: простой и продвинутый режим
  9. Управление диалогом и лидом (теги, пауза, стоп, медиа, оплата)
  10. Тестирование, версии, лог, импорт/экспорт
  11. Связь функций с промптом бота
  12. Лимиты и ограничения
  13. Безопасность и приватность
  14. Все статусы и состояния
  15. Лучшие практики и чек-лист
  16. FAQ и крайние случаи
  17. Глоссарий

1. Что такое функции и зачем они

Функция (инструмент) это действие, которое бот может выполнить во время диалога с клиентом. Сам по себе ИИ умеет только писать текст. Функции дают ему «руки»: записать клиента в календарь, добавить строку в Google-таблицу, выставить счёт на оплату, уведомить владельца в Telegram, поставить тег лиду и так далее.

Главная идея: вы не программируете «если клиент написал X, сделай Y». Вы просто описываете боту что умеет каждая функция и когда её вызывать, а ИИ сам решает в нужный момент диалога, какую функцию вызвать и с какими данными. Это принципиально отличается от жёстких сценариев-кнопок.

📌 Функция не создаёт лида. Карточку лида заводит статус лида, который бот ставит сам по ходу диалога: на уровне промпта, без функций. Функция «Уведомление владельцу» лишь сообщает вам о заявке; сам лид в CRM появляется из-за статуса. Для аналитики (диалоги/лиды/конверсия) функции тоже не нужны: она считается автоматически.

Пример. У стоматологии подключены две функции: «проверить свободное время» и «записать клиента». Клиент пишет «хочу на чистку завтра после обеда». Бот сам:

  1. вызывает проверить свободное время на завтра,
  2. получает свободные слоты,
  3. предлагает клиенту «14:00 или 16:30?»,
  4. когда клиент выбрал, вызывает записать клиента,
  5. подтверждает: «Записала вас на завтра 14:00 ✅».

Никто не прописывал этот сценарий шагами. Бот связал функции сам, потому что у каждой было понятное описание.

Что важно понять с самого начала:

  • Функция = пара «описание для ИИ (когда вызывать)» + «подключение (куда отправить данные)».
  • Бот вызывает функцию, только если она включена и её описание подсказывает, что сейчас подходящий момент.
  • Плохое описание = бот не вызывает функцию или вызывает не вовремя. Описание: самое важное поле.

2. Как бот ими пользуется (механика)

Простыми словами, что происходит под капотом на каждое сообщение клиента:

  1. Сборка инструментов. Платформа берёт все включённые функции проекта и превращает их в «меню инструментов» для модели (формат OpenAI tools). Каждая функция = имя + описание + список параметров.
  2. Решение модели. ИИ читает сообщение клиента, контекст диалога, системный промпт и это меню. Дальше он либо просто отвечает текстом, либо решает «здесь нужно вызвать функцию X с такими-то параметрами».
  3. Выполнение. Если ИИ вызвал функцию, платформа выполняет реальное действие (запрос в Google Calendar, HTTP-запрос на ваш сервер, запись в таблицу и т.д.) и получает результат.
  4. Возврат результата модели. Результат функции (успех/ошибка/данные) отдаётся обратно ИИ. Он смотрит на него и формулирует человеческий ответ клиенту на его основе.
  5. Цепочка. За один ход бот может вызвать несколько функций подряд (например, сначала проверить слот, потом записать). Это «round-trip»: вызов → результат → следующее решение.

Где это работает (5 точек входа). Функции одинаково работают во всех местах, где отвечает ИИ:

  • тест-чат в кабинете (песочница: без реальных клиентов, но ответы бота списываются с баланса проекта, как обычные),
  • боевой WhatsApp (по QR, привязанное устройство),
  • боевой Telegram,
  • демо-чат на главной странице сайта,
  • фоновые задачи: дожимы и авто-возобновление диалога.

То есть если функция работает в тест-чате, она так же сработает в бою.

Что НЕ является функцией:

  • База знаний (RAG). Документы и факты, которые вы загрузили в «Базу знаний», бот использует автоматически: это не вызов функции, контекст подмешивается сам. В логах вызовов вы можете встретить служебный kb_search, но настраивать его как функцию не нужно.
  • Системный промпт. Это «характер и правила» бота, отдельная настройка в Настройки. Функции и промпт работают вместе (см. раздел 11).

3. Страница «Функции»: весь интерфейс

3.1 Шапка

  • Заголовок: «Функции».
  • Подзаголовок: «Инструменты, которые ИИ сам решает когда использовать».
  • Кнопка «Импорт»: загрузить функции из JSON (см. 10.5).
  • Кнопка «+ Новая функция»: создать новую (см. раздел 4). Становится неактивной при достижении лимита 40 функций.
  • Счётчик функций использовано / 40. Меняет цвет: серый → жёлтый (осталось ≤2) → красный (лимит).

3.2 Строка статистики

Показывает по проекту: Всего, Активных (включённых), Подключено (с настроенным подключением), Типов, Цепочек.

3.3 Полоса готовности (Readiness)

Сводка состояния одной строкой:

  • «Все функции готовы» это всё в порядке.
  • Жёлтые предупреждения с количеством: «N с ошибками», «N не упомянуты в промпте», «N не протестированы». Это подсказки, а не блокировки.

3.4 Фильтры и поиск

  • Чипы-категории: «Все» + по типам (Calendar, Sheets, Telegram, Email, Webhook, CRM и т.д.), у каждого счётчик.
  • Поиск по названию функции.
  • Чекбокс «Только включённые»: спрятать выключенные.

3.5 Баннер рассинхрона с промптом

Жёлтый баннер появляется, если в системном промпте упоминается функция, которой не существует (например, вы написали в промпте «вызови book_table», а функции с таким именем нет). Баннер:

  • показывает каждое недостающее имя,
  • предлагает «возможно, имелась в виду ...»,
  • даёт кнопку «Создать» недостающую функцию в один клик,
  • ссылку «Открыть промпт бота».

3.6 Карточка функции

Каждая функция это карточка. У неё два режима отображения:

Бизнес-режим (по умолчанию):

  • иконка + имя + бейдж типа («Оплата», «Google Calendar» и т.д.) + статус + переключатель вкл/выкл;
  • описание (до 2 строк);
  • для встроенных: инфо о ресурсе («ID таблицы…», «Календарь…», «⚠ не задано» если не настроено);
  • параметры в виде цветных пилюль (имя + тип + * если обязательный);
  • бейдж здоровья (если тестировалась): процент успеха, статус последнего вызова;
  • алерт об ошибке (если последние вызовы падали) с куском текста ошибки;
  • нижняя строка: статус • тип подключения • число параметров • таймаут • бейдж цепочки (если в цепочке);
  • кнопки: «Проверить», «Редактировать», меню «⋯».

Меню «⋯»: Попробовать в чате • Превью запроса • Дублировать • История версий • Лог вызовов • Экспорт как JSON • Восстановить предыдущую версию • переключить Dev/Бизнес режим • Удалить.

Dev-режим (переключается в меню), техническая карта функции: HTTP-метод + URL, заголовки, JSON-схема параметров, готовая команда cURL с копированием, панель здоровья, таймлайн последних 5 вызовов, инлайн-форма редактирования.

3.7 Пустое состояние

Если функций нет:

  • «Нет функций»,
  • «Создайте первую функцию: ИИ будет сам решать когда её вызвать во время диалога»,
  • три шага: «1. Создайте действие → 2. Укажите, куда отправить данные → 3. Бот сам вызовет, когда нужно»,
  • кнопка «+ Новая функция».

3.8 Обновление в реальном времени

Список функций обновляется сам (realtime), без перезагрузки страницы. Если другая вкладка/сессия что-то изменила, вы увидите это сразу.


4. Как создать функцию

Нажмите «+ Новая функция». Открывается выбор пути:

Шаг 1. Выбор пути

  • «Из шаблона», готовые обёртки: уведомления владельцу, запись на время, Google Таблицы, приём оплаты, поведение бота, фото и видео, письмо клиенту. Параметры уже настроены правильно, вам остаётся заполнить подключение. Рекомендуется в 90% случаев.
  • «Кастомная»: свой запрос на любой сервер (вебхук). Для интеграции с вашей CRM, n8n, Zapier или собственным API.

Шаг 2. Выбор системы (для шаблона)

Показываются семь групп: Уведомления владельцу (Telegram, почта), Запись на время (Google Calendar и движок окошек), Google Таблицы, Приём оплаты (Kaspi), Поведение бота (теги, отложить дожимы, остановить диалог), Фото и видео, Письмо клиенту. У каждой: иконка, описание, число шаблонов. Плюс поиск по слову («оплата», «запись», «уведомление»).

Шаг 3. Выбор конкретного действия

Внутри группы, список шаблонов (например в Google Таблицах: «Узнать структуру таблицы», «Прочитать таблицу», «Найти в таблице», «Добавить строку», «Обновить запись в таблице», «Удалить строку»).

Шаг 4. Мастер настройки (ActionWizard)

Один экран с четырьмя секциями:

1) «Когда боту это вызывать»

  • Название (snake_case, только для кастомных; у шаблонов подставляется). Правило: ^[a-z][a-z0-9_]*$, маленькие латинские буквы, цифры, _, начинается с буквы. Пример: create_appointment.
  • Описание для AI: критическое поле, минимум 5 символов. Пишите с точки зрения бота, когда и зачем вызывать. Кнопка «Улучшить с ИИ» дорабатывает формулировку автоматически.

2) «Подключение»

  • Для встроенных: специфичная настройка (ID таблицы и лист; ID календаря и рабочие часы; токен и chat_id Telegram; и т.д.). Показывается email сервисного аккаунта, которому надо дать доступ к таблице/календарю.
  • Для кастомных вебхуков, URL, HTTP-метод, таймаут и сворачиваемые блоки: Авторизация, Заголовки, Параметры URL, Тело запроса, Маппинг ответа, Повторы, Пагинация (см. раздел 8).

3) «Что бот спросит у клиента»: конструктор параметров (см. раздел 6). Показывается только для кастомных вебхуков, где вы сами проектируете, какие данные бот собирает. У встроенных функций набор параметров уже задан шаблоном и менять его нельзя, поэтому отдельной секции нет: встроенную функцию достаточно включить (и при наличии, потыкать настройки в «Подключении»). Справочный список «что бот соберёт» для встроенных доступен read-only в блоке «Дополнительно».

4) «Дополнительно» (сворачиваемое): триггеры, поведение при ошибке (fallback), цепочки. Для встроенных функций здесь же: read-only список параметров, заданных шаблоном.

Кнопка «Создать функцию» (или «Сохранить» при редактировании). При редактировании есть автосохранение со статусом «Сохранение… / Сохранено / Ошибка сохранения».


5. Анатомия функции (из чего состоит)

Каждая функция хранит набор полей. Самые важные для вас: первые три.

ПолеЧто этоКто видит
Имя (name)Техническое имя, snake_case, уникально в проекте, 2-64 символаИИ (как имя инструмента)
Описание (description)Когда и зачем вызывать, 5-1000 символовИИ (решает по нему)
Параметры (parameters)Какие данные бот соберёт у клиента (до 20 шт.)ИИ + клиент
Тип действия (action_type)Куда направить: webhook или один из builtin_*система
ПодключениеURL вебхука или builtin_config (ID таблицы, токен и т.д.)система
Включена (is_active)Доступна ли боту прямо сейчасвы (переключатель)
ТаймаутСколько ждать ответа: от 1 до 60 секунд (1000-60000 мс)система
Триггер (trigger_type)ai_decides (по умолчанию) / по событию / по заполнению переменнойвы
Предохранитель (preconditions)Условия, без которых функция не выполнится, даже если бот решит её вызватьвы
Поведение при ошибке (fallback_behavior)silent / notify / retry / transfer + текст сообщениявы
Цепочка (chain_group, chain_order)Группировка и порядок связанных функцийвы
Иконка, категорияДля отображениявы

Имя, правила и подводные камни:

  • только a-z, 0-9, _, начинается с буквы;
  • уникально в рамках проекта (регистронезависимо);
  • нельзя использовать зарезервированные слова языков программирования (if, for, function, await и ещё ~200): система отклонит.

Тип действия (action_type) это все допустимые значения:
webhook, builtin_calendar, builtin_sheets, builtin_booking, builtin_telegram, builtin_email, builtin_whatsapp, builtin_crm, builtin_edu_crm, builtin_gmail, builtin_lead_meta, builtin_owner_payment, builtin_send_media.


5.1 Предохранитель: как запретить боту то, о чём вы его просили не делать

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

Предохранитель отказывает. Вы отмечаете факт, который должен быть в диалоге, и платформа проверяет его сама, до выполнения функции. Не сходится, функция не выполняется вовсе, а боту возвращается объяснение, чего не хватает, чтобы он попросил это у клиента.

Открывается на шаге «Когда выполнять» в конструкторе функции, там же, где триггер и поведение при ошибке.

УсловиеЧто проверяетКогда ставить
Клиент прислал файлФото или документ среди последних сообщений клиента (число сообщений задаёте вы)Подтверждение оплаты по чеку, приём документов
Заполнено поле лидаНапример phone: без телефона счёт отправлять некудаВыставление счёта, запись, доставка
Сначала отработала другая функцияНазванная функция уже успешно вызывалась в этом же диалогеПодтверждать оплату только после того, как счёт реально выставлен
Клиент написал хотя бы N сообщенийДлина разговораЗащита от срабатывания на первом же «здравствуйте»
Оплата реально прошлаПо этому диалогу есть счёт со статусом «оплачен», подтверждённый банком, а не словами клиентаЗапись на время, отгрузка, выдача доступа после предоплаты

Условий можно поставить несколько, тогда должны выполниться все.

«Счёт выставлен» и «деньги пришли» это разные условия, не путайте их. Первое даёт «Сначала отработала другая функция», и оно проходит уже в момент, когда бот отправил ссылку на оплату. Второе даёт «Оплата реально прошла», и оно ждёт ответа банка. Для записи на время берите второе: между выставленным и оплаченным счётом клиент успевает сказать «я оплатил», и на этих словах бот займёт время, за которое никто не заплатил.

Что вы увидите. На карточке функции появляется отметка «Предохранитель». Каждый отказ попадает в раздел Логи проекта с причиной, поэтому «функция молчит» никогда не остаётся без объяснения.

Чего предохранитель не делает. Он не проверяет содержимое: платформа видит, что клиент прислал документ, но не читает сумму в чеке, это по-прежнему работа бота и ваша. И если база на секунду недоступна, функция выполнится: блокировать живой разговор из-за сбоя связи хуже, чем пропустить одну проверку.


6. Параметры: подробно

Параметр это данные, которые бот соберёт у клиента в разговоре и передаст в функцию. Например: имя, телефон, дата, сумма. В конструкторе каждый параметр: карточка с номером.

6.1 Поля параметра

  • Тип: String (Aa) / Number (#) / Boolean (да-нет) / Array (список []) / Object (объект {}). Для массива дополнительно указывается тип элементов.
  • Обязательность: переключатель *« ОБЯЗ»** / «НЕОБЯЗ». Обязательный параметр бот будет добиваться у клиента, прежде чем вызвать функцию.
  • Имя (snake_case).
  • Описание, что бот спросит у клиента. Пишите как живой вопрос: «На какую дату вы хотите записаться?». От этого зависит, поймёт ли ИИ, что туда подставить.
  • Enum (для строк), фиксированный список допустимых значений через запятую: low, normal, high. ИИ выберет только из них.
  • Перемещение (↑ ↓) и удаление (✕).

6.2 Подсказки для ИИ (делают функцию точнее)

У параметра можно задать (в шаблонах часто уже заданы):

  • examples: примеры значений, помогают ИИ понять формат;
  • minimum / maximum: границы для чисел;
  • format: date, date-time, email;
  • pattern: регулярное выражение (например дата ^\d{4}-\d{2}-\d{2}$).

6.3 Заблокированные параметры (locked): «ШАБЛОН»

У шаблонных функций часть параметров помечена бейджем «ШАБЛОН» и заблокирована: их нельзя переименовать, удалить или сменить тип. Это сделано специально, они завязаны на встроенный обработчик (например start_time у записи в календарь). Описание у некоторых можно дополнить, структуру, нет. Не заблокированные параметры шаблона (например необязательное customer_name) редактировать можно.

6.4 Пустое состояние

Если параметров нет: «Параметры, данные, которые бот соберёт у клиента. Например: имя, телефон, дата, услуга.» Кнопка «+ Параметр».


7. Каталог встроенных функций

Ниже, встроенные шаблоны с параметрами и сценарием «когда использовать». * = обязательный, 🔒 = заблокирован (ШАБЛОН).

Config-поля (ID таблицы, ID календаря, токен и т.д.) вы заполняете один раз при настройке, ИИ их не видит. Параметры, то, что ИИ собирает у клиента в каждом вызове.

7.1 Google Sheets (builtin_sheets)

Требует доступа к таблице для сервисного аккаунта (его email показывается при настройке: дайте ему доступ «Редактор» к таблице). Config у всех: spreadsheet_id (ссылка на таблицу) + sheet_name* (лист, по умолчанию первый).

Функция (имя)Что делаетПараметры
Узнать структуру (get_sheet_info)Список листов, колонок, число строк. Бот понимает контекст таблицы.нет
Прочитать таблицу (read_sheet)Читает строки. Годится и для списков, и для расписаний-сеток.limit🔒 (1-2000), offset🔒, rows_as_array🔒 (true для сеток с одинаковыми заголовками), skip_past_dates🔒 (отфильтровать прошедшие даты; в расписаниях-сетках уже начавшиеся часы сегодняшнего дня дополнительно помечаются статусом past: бот их не предлагает), date_column🔒, timezone🔒 (по умолч. Asia/Almaty)
Найти в таблице (find_in_sheet)Поиск по частичному совпадению, по колонке или по всей таблице.query*🔒, column🔒, limit🔒 (1-20)
Добавить строку (add_row)Дописывает строку. Колонки создаются автоматически, если таблица пустая.data*🔒 (объект {колонка: значение})
Обновить строку/ячейку (update_row)Обновляет данные. 4 способа найти ячейку + защита от перезаписи занятого слота.row_number🔒, find🔒, cell🔒, target_cell🔒, data🔒, value🔒, expected_current_value🔒 (атомарный гард: записать только если значение совпало; '' = только если пусто), expected_other_cell🔒, updates🔒 (пакет до 100 строк)
Удалить строку (delete_row)Удаляет по номеру или поиску. Без восстановления.row_number🔒, find🔒
Про «защиту от двойной брони»: expected_current_value / expected_other_cell позволяют записать в слот «только если он ещё свободен». Если за это время слот успели занять, функция вернёт CELL_VALUE_CHANGED, и бот предложит другое время. Это спасает от ситуации, когда два клиента бронируют один слот одновременно.
Старые Sheets-шаблоны (скрыты в интерфейсе) заменены актуальными выше. Они работают у давних проектов для совместимости, но создавать новые функции из них нельзя: используйте 6 актуальных.

7.2 Google Calendar (builtin_calendar)

Config у всех: calendar_id * (primary или email календаря). Дополнительно: длительность слота, на сколько дней вперёд, рабочие часы/дни, минимальное предупреждение, перерывы между записями.

Функция (имя)Что делаетПараметры
Проверить свободное время (check_available_slots)Свободные слоты с учётом рабочих часов и занятого времени.date🔒 (необязат.; пусто = ближайшие слоты)
Записать клиента (book_appointment)Создаёт запись в календаре.start_time🔒, end_time🔒, client_name*🔒, service🔒, client_phone🔒, client_email🔒 (на неё придёт приглашение)
Перенести/изменить (update_calendar_event)Меняет время или детали записи.event_id*🔒 (бот находит сам), start_time🔒, end_time🔒, summary🔒, description🔒
Показать записи (calendar_list_events)Список предстоящих встреч.days_ahead🔒 (1-30), max_results🔒 (1-100)
Отменить запись (calendar_cancel_event)Удаляет запись (без восстановления).event_id*🔒

7.3 Письмо клиенту (builtin_email) и Gmail (builtin_gmail)

«Отправить письмо клиенту» (send_customer_email): бот шлёт письмо на адрес, который клиент назвал в переписке (счёт, подтверждение записи, коммерческое предложение). Работает сразу, без почтового сервиса, ответ клиента приходит на указанный тобой адрес. Подробно: Письмо клиенту.

Шаблон «Отправить с Gmail (Workspace)» (send_gmail) из каталога скрыт с июня 2026: он требовал Google Workspace и доступ сервисного аккаунта, и почти никто им не пользовался. У старых проектов такие функции продолжают работать. Для новых берите «Письмо клиенту».

7.4 Уведомления владельцу: Telegram (builtin_telegram) и почта (builtin_email)

«Уведомление в Telegram» (notify_telegram) шлёт сообщение в Telegram-чат (например владельцу о новой заявке). Config: bot_token , chat_id , message_template (шаблон сообщения с подстановкой переменных). Параметров нет, сообщение собирается из шаблона. Откуда берётся бот: если проект настраиваем мы, подключаем свой @dosaitech_bot* и токен вписываем сами, если настраиваете вы, создаёте бота через @BotFather. Подробно в Уведомлениях владельцу.

«Уведомление на почту» (notify_email) делает то же самое письмом на твой email: тема и текст из шаблона с переменными ({{client_name}}, {{phone}} и т.д.), настройка почтового сервиса не нужна.

Это типичный способ «уведомить владельца / передать оператору»: бот зовёт notify_telegram или notify_email, и тебе падает заявка с данными клиента. Подробно: Уведомления владельцу.

7.4a Свободные окошки для записи (builtin_booking)

find_free_slots: для бизнеса с несколькими специалистами. График живёт в Google-таблице (специалист, услуга, дни, обеды), занятость берётся из Education CRM или только из графика, а движок сам собирает свободные слоты и отдаёт боту готовый список. Config: таблица с графиком, услуги, длительность слота (60 мин), горизонт (7 дней, максимум 14), окно бизнеса (09:00-21:00). Подробно: Запись на время.

7.5 Своя интеграция по API (webhook)

Бот умеет дёргать ваш собственный сервис по HTTP (GET/POST): получить данные с вашего сервера/CRM или отправить заявку во внешнюю систему. Это путь «Своя интеграция по API» в мастере создания функции: метод, URL, заголовки и параметры вы задаёте сами. Подробности: в разделе 8. Разобранный пример с настоящим сервисом: МойСклад: наличие и цены.

7.6 Сегментация лидов (builtin_lead_meta)

Бот сам помечает текущего лида тегами прямо в диалоге. Работает с лидом, привязанным к этому диалогу. Подробно в статье Теги и сегментация.

Функция (имя)Что делаетПараметры / настройка
Помечать лида тегами (set_lead_tags)Бот добавляет лиду теги-категории (до 20), не затирая уже стоящие. Выбирает из словаря проекта или создаёт новый.tags🔒 (массив строк). Настройки: тумблеры «Разрешить боту создавать новые теги» и «Разрешить боту снимать/менять теги»*
Теги управляются на странице «Теги» (там же описания, которые видит бот). Функции «добавить один тег» и «тип клиента» удалены 2026-06-13: теги покрывают сегментацию.

7.7 Приём оплаты. Kaspi (builtin_owner_payment)

Бот выставляет клиенту счёт прямо в чате, клиент платит push-ом в Kaspi, деньги идут напрямую на вашу Kaspi-кассу (DOS их не хранит). Сначала подключите платежи в разделе «Приём оплат».

create_payment_invoice:

  • amount_kzt*🔒: сумма в тенге, целое, минимум 50;
  • customer_phone*🔒, номер клиента, привязанный к Kaspi (любой формат: +7 705…, 8705…);
  • description*🔒: за что платит (видно в Kaspi-push и чеке);
  • customer_name: имя (необязательно, для истории).
  • Config: catalog_description это описание по умолчанию для чека.

Клиенту приходит push в Kaspi, подтвердить нужно в течение ~30 минут. Подробно про ответы и ошибки: раздел 9.5.

7.8 Пауза дожимов (builtin_lead_meta)

pause_followups: клиент сказал «свяжусь сам в четверг» / «подумаю». Бот ставит автонапоминания на паузу, не выключая себя: в чате он продолжит отвечать, замолкает только авто-дожим.

  • until🔒: дата YYYY-MM-DD, до которой пауза. Пусто (и нет pause_hours) = пауза 1 день.
  • reason: причина для истории.

Подробное поведение: раздел 9.3.

7.9 Остановить диалог (builtin_lead_meta)

stop_dialog: клиент явно просит не писать («не пишите», «отстаньте», «stop») или окончательно отказался. Бот выключается на этом диалоге навсегда (до ручного включения оператором) и отменяет все дожимы.

  • reason: причина для истории.

Это «липкая» остановка, авто-возобновление её не оживит. Подробно, раздел 9.3.

7.10 Отключить дожимы (builtin_lead_meta)

stop_followups: клиент просит не напоминать («не надо дожимать», «сам напишу, когда решу», «еске салмаңыз»), но вопросы задавать продолжает. Бот выключает автонапоминания по этому клиенту насовсем, сам при этом остаётся включённым и отвечает как раньше.

  • reason: причина для истории.

Отличие от паузы: без срока и без возврата. Если клиент назвал срок, бот выберет паузу. Подробно, раздел 9.4.

✅ Три функции про паузы и остановки (7.8, 7.9, 7.10) стоят у каждого проекта с рождения и включены, а у проектов, созданных с 14 сентября 2026, к ним добавлена и включена функция «Помечать лида тегами». Управляются здесь же, в разделе «Функции», как любые другие: выключить тумблером, поправить описание «когда вызывать» под свою нишу, удалить. Паузы при ответе оператора и после звонка, автовозобновление живут в «Расширенных настройках» бота.
🛑 Как вообще останавливается диалог. Бот никогда не решает остановиться сам, он всегда дообщается с клиентом, пока его не остановят явно. Остановить можно четырьмя способами: (1) функцией «Остановить диалог» (её вызывает бот, когда клиент просит не писать); (2) галочкой «Завершать диалог после выполнения этой функции», она есть у любой функции (в настройках функции, внизу), когда функция успешно отработала, бот выключается на этом чате и отменяет дожимы (удобно, например, после записи на приём или передачи заявки менеджеру); (3) состоявшимся звонком, если включена настройка «Выключать ИИ после состоявшегося звонка» (по умолчанию включена, см. справочник настроек); (4) вручную: тумблером AI в шапке диалога. Во всех случаях бот молчит, пока вы не включите AI обратно вручную.
⏰ Отдельно про дожимы. Рядом с галочкой «Завершать диалог» есть вторая, «Останавливать дожимы после этой функции». Она решает только судьбу автонапоминаний и не трогает бота. Включайте, когда после функции напоминать уже не о чем: заявку передали живому человеку, клиента записали, оплату приняли. Оставляйте выключенной для уведомлений, которые разговор НЕ заканчивают: эскалация вопроса, пометка отказа, сигнал о жалобе. Раньше любое уведомление владельцу гасило дожимы само, без настройки, поэтому вопрос клиента «а куда можно позвонить?» мог молча выключить напоминания живому лиду.

Обе галочки действуют на вызовы, которые делает сам бот по ходу разговора. Если у функции выбран автозапуск (по событию или по смене статуса лида), она срабатывает ещё и сама: в этом случае уведомление уходит отдельным путём, и галочки в нём не участвуют. Бот при этом может вызвать её и обычным образом, тогда галочки работают как всегда. В настройках такой функции под галочками стоит та же пометка.

7.10 Отправка фото и видео (builtin_send_media)

send_media: бот шлёт материал из медиа-библиотеки проекта (видео, фото, отзывы, прайс) прямо в чат, когда это уместно. Сначала загрузите материалы в разделе «Медиа».

  • media_key*🔒: ярлык материала (список реальных ярлыков и подсказки «когда слать» подставляются автоматически);
  • caption: короткая подпись.

Ограничение: не более 3 медиа за 60 секунд на диалог (защита от спама). Подробно, раздел 9.6.


8. Кастомные вебхуки: простой и продвинутый режим

Кастомная функция это HTTP-запрос на ваш адрес. Используйте, когда нужной встроенной функции нет: своя CRM, n8n, Zapier, собственный API.

8.1 Простой режим (по умолчанию)

  • Только POST.
  • Тело, JSON со всеми параметрами одним объектом.
  • Стандартные заголовки.
  • Таймаут до 60 секунд (по умолчанию 10).

Этого хватает для большинства интеграций «отправить данные на сервер».

8.2 Продвинутый режим (mode: advanced)

Включается, когда нужен полный контроль над запросом:

  • URL (webhook_url): обязателен. Проверяется на безопасность (нельзя внутренние адреса 127.0.0.1, 10.x, 192.168.x и т.п.: защита от SSRF).
  • HTTP-метод: GET / POST / PUT / PATCH / DELETE. PATCH нужен для частичного обновления записи (так работают многие CRM).
  • Таймаут: до 60 секунд.
  • Формат тела: JSON / form-data / raw / x-www-form-urlencoded.
  • Шаблон тела (body_template): свой шаблон с подстановкой {{параметр}}, до 50 КБ.
  • Параметры URL (query): пары ?ключ=значение, до 30 шт.
  • Авторизация: Bearer-токен / Basic / API-key (хранится в зашифрованном виде).
  • Заголовки, произвольные пары «ключ: значение».
  • Маппинг ответа: выбрать из ответа API только нужные поля, чтобы вернуть их ИИ (до 50 полей, обрезка по длине). Это важно: не возвращайте боту огромный JSON, выберите 2-3 нужных поля.
  • Повторы (retry): до 5 попыток при 5xx / 429 / таймауте.
  • Пагинация: авто-сбор нескольких страниц (cursor / offset / page), до 10 страниц.

8.3 Подстановка переменных

В URL, заголовках и теле можно подставлять собранные параметры через {{имя_параметра}} (а также системные переменные). Пример тела:

{ "name": "{{client_name}}", "phone": "{{client_phone}}", "source": "whatsapp" }

8.4 Что важно про ответ

ИИ увидит то, что вернул ваш сервер (с учётом маппинга). Поэтому ваш ответ должен быть понятен модели: лучше вернуть { "status": "ok", "booking_id": 123 }, чем сырой дамп БД. На основе этого бот сформулирует ответ клиенту.


9. Управление диалогом и лидом

Эти встроенные функции не «делают запрос наружу», а управляют поведением бота и состоянием лида. Это ключевые продуктовые сценарии: разберём детально.

9.1 Теги (set_lead_tags)

  • Бот добавляет теги к уже стоящим (merge), не затирая операторские. Снять тег может оператор.
  • Выбирает из словаря проекта (со страницы «Теги», с описаниями) или создаёт новый, если включён тумблер «Разрешить боту создавать новые теги».
  • Максимум 20 тегов на лида. Теги видны и фильтруются в CRM/лидах, считаются в отчётах. Подробно, Теги и сегментация.

9.2 Пауза дожимов (pause_followups)

Когда вызывать (по описанию для ИИ): клиент написал «напишу в четверг», «наберу после 15-го», «свяжусь сам», «подумаю», «позже».

Что происходит:

  • ставится snoozed_until (на 09:00 по Алматы, если указана только дата; либо точное время);
  • если даты нет или она в прошлом → пауза +1 день (до 09:00 по Алматы следующего дня);
  • счётчики дожимов сбрасываются, чтобы по истечении паузы пришло одно мягкое напоминание;
  • бот в чате НЕ выключается, если клиент напишет раньше, ответит как обычно;
  • пауза соблюдается даже если раздел «Дожимы» у проекта выключен: в назначенный срок бот всё равно вернётся с одним сообщением о договорённости, без запуска лестницы касаний.

Отличие от стоп-диалога: пауза = «помолчи с напоминаниями до даты», стоп = «замолчи совсем».

9.3 Остановить диалог (stop_dialog)

Когда вызывать: клиент явно просит не писать или окончательно отказался после отработки возражений. НЕ вызывать на первое «дорого/подумаю»: это возражение (его отрабатывают или ставят pause_followups).

Что происходит:

  • ai_on = false на диалоге, фиксируется время паузы;
  • причина client_stop, «липкая»: авто-возобновление бота не оживит этот диалог;
  • все дожимы по диалогу отменяются автоматически (триггер БД);
  • заново включить может только оператор из дашборда.

Зачем так строго: защита от назойливости и от блокировок WhatsApp за спам.

9.4 Отключить дожимы (stop_followups)

Когда вызывать: клиент прямо просит не напоминать и не дожимать, но не просит замолчать совсем («не надо напоминать», «не пишите первыми, я сам напишу»).

Что происходит:

  • подписчик дожимов по этому диалогу переводится в cancelled (если его ещё нет, он заводится сразу отменённым, чтобы более поздний авто-зачисл не вернул напоминания);
  • ai_on не трогается: бот продолжает отвечать на сообщения клиента;
  • вернуть дожимы можно вручную из таблицы дожимов.

Три способа одним взглядом: пауза = помолчи с напоминаниями до срока, отключить дожимы = напоминаний больше нет, бот отвечает, стоп-диалог = замолчи совсем.

9.5 Приём оплаты (create_payment_invoice)

Поток: клиент согласился платить → бот вызывает функцию с суммой, телефоном и описанием → создаётся счёт в кассе владельца → клиенту приходит Kaspi-push → он подтверждает в приложении.

Успех возвращает боту: invoice_id, provider_invoice_id, status, сумму, телефон, сообщение и подсказку для ИИ: бот говорит клиенту «Счёт на N ₸ отправил вам в Kaspi, подтвердите в приложении».

Коды ошибок (бот объяснит клиенту человеческими словами):

КодЧто значит
invalid_amountсумма не число / меньше 50
amount_too_largeсумма больше лимита
missing_phone / invalid_phoneне указан/некорректный номер
missing_descriptionнет описания платежа
sub_merchant_not_connectedплатежи не подключены в разделе «Приём оплат»: бот скажет «оплата временно недоступна»
kaspi_auth_lostслетела привязка Kaspi: нужно переподключить
payment_service_4xx / payment_service_5xx / payment_service_networkпроблемы на стороне платёжного сервиса
internal_errorвнутренняя ошибка

Важно: суммы и номера бот не выдумывает, описание функции прямо запрещает это, он уточнит у клиента.

9.5 Отправка медиа (send_media)

  • Бот выбирает media_key из enum реальных ярлыков вашей медиа-библиотеки (список и подсказки «когда отправлять» подмешиваются в схему функции автоматически).
  • Материал ищется в библиотеке проекта (только активные), отправляется в канал (WhatsApp/Telegram), запись попадает в историю сообщений как image/video/....
  • Лимит: 3 медиа / 60 сек на диалог.
  • В тест-чате медиа не отправляется реально, показывается превью.
«Передать оператору / эскалация владельцу» как отдельной встроенной функции нет: это делается через notify_telegram (уведомить владельца), ручное выключение ИИ на диалоге, или кастомный вебхук в вашу CRM. В конкретных проектах такие функции часто называют send_lead / escalate_to_owner: это кастомные функции, а не встроенные шаблоны.

10. Тестирование, версии, лог, импорт/экспорт

10.1 Тест функции («Проверить»)

Кнопка «Проверить» на карточке открывает тест-модалку «Тест: <имя>»:

  • кнопка «Заполнить пример» подставляет примеры;
  • по каждому параметру, поле ввода (для enum, выпадающий список), с подсказкой формата;
  • «Отправить тест» реально выполняет вызов (для вебхука: шлёт запрос на ваш URL);
  • результат: код статуса, отформатированный JSON-ответ, длительность (мс), ошибка если была.

Используйте перед запуском, чтобы убедиться, что подключение настроено верно.

10.2 Попробовать в чате

Пункт меню «Попробовать в чате» открывает тест-чат, где можно проверить, вызовет ли бот функцию сам по описанию (а не только технически работает ли вебхук). Это проверка качества описания.

10.3 История версий

Каждое изменение функции сохраняет снимок (хранятся последние ~50 версий). Меню → «История версий» → список с датами → «Восстановить» любую (с подтверждением). Спасает, если случайно сломали настройку.

10.4 Лог вызовов (Executions)

Меню → «Лог вызовов», все реальные вызовы функции ботом: статус (успех/ошибка), время, длительность, разворачиваемые детали запроса/ответа. Первое место, куда смотреть, если «функция не сработала».

10.5 Импорт / экспорт

  • Экспорт как JSON (меню карточки): выгрузить одну функцию.
  • Импорт (кнопка в шапке): вставить JSON одной функции или массива, либо перетащить файл (до 1 МБ). Удобно переносить функции между проектами.

10.6 Дублировать и превью

  • Дублировать: копия функции (быстро сделать похожую).
  • Превью запроса: посмотреть, как будет выглядеть запрос, не отправляя его.

10.7 «Улучшить с ИИ»

Кнопка у поля описания: ИИ дорабатывает формулировку описания, чтобы бот точнее понимал, когда вызывать функцию.


11. Связь функций с промптом бота

Функции и системный промпт (Настройки → Промпт) работают вместе:

  • Описание функции говорит ИИ, что она делает и когда её звать. Это первично.
  • Промпт задаёт общий характер, правила и может явно направлять: «когда клиент готов записаться, вызови book_appointment».
  • Если в промпте упомянута функция, которой нет на странице «Функции» появится баннер рассинхрона (см. 3.5) с кнопкой создать её.
  • Полоса готовности предупреждает: «N не упомянуты в промпте», это намёк, что функция есть, но бот может про неё «забыть», если в промпте нет подсказки. Для важных функций стоит и хорошее описание, и упоминание в промпте.

Правило большого пальца: описание для понимания «что это», промпт для управления «в какой момент сценария это использовать».


12. Лимиты и ограничения

ОграничениеЗначение
Функций на проект40
Имя функции2-64 символа, ^[a-z][a-z0-9_]*$, без зарезервированных слов
Описание5-1000 символов
Параметров на функцию20
Значений enum на параметр50
Описание параметрадо 500 символов
Таймаут1000-60000 мс (1-60 секунд)
Заголовковпо стандарту HTTP; имя 1-200 символов, без переносов строк
Полей маппинга ответа50, путь 1-200 символов, обрезка 500-20000 символов
Параметров URL (query)30
Шаблон тела50 КБ
Повторов (retry)1-5
Страниц пагинации1-10
Версий на функцию~50
Медиа на диалог3 / 60 сек
Тегов на лида20
Лог вызовов (хранение)~90 дней

При попытке создать 41-ю функцию кнопка заблокируется, а импорт вернёт ошибку «лимит достигнут».


13. Безопасность и приватность

  • Секреты маскируются. Токены, пароли, ключи (bot_token, api_key, access_token, password, secret и т.п.) в ответах API возвращаются как ***hidden***. При редактировании, если прислать обратно ***hidden***, старое значение сохранится, вы не затрёте секрет случайно.
  • Шифрование. Конфиги авторизации и встроенных функций хранятся в зашифрованном виде (AES-GCM).
  • Защита от SSRF. URL вебхуков нельзя указывать на внутренние адреса (127.0.0.1, 10.x, 192.168.x, IPv6-приватные): защита от обращения бота к внутренней инфраструктуре. Проверка идёт с учётом DNS-резолва.
  • Заголовки чистятся от переносов строк (защита от инъекций).
  • Права доступа. Создавать/менять/удалять функции может участник проекта с ролью editor и выше; просматривать, viewer. URL и секреты не отдаются участникам без прав владельца.
  • Аудит. Каждое создание/изменение пишется в журнал аудита.

14. Все статусы и состояния

Статус функции на карточке:

СтатусЦветЧто значитЧто делать
Работаетзелёныйпоследние вызовы успешныничего
Не проверенажёлтыйещё не тестировалась/не вызываласьнажмите «Проверить»
Ошибкакрасныйпоследние вызовы падалиоткройте «Лог вызовов», смотрите текст ошибки
Выключенасерыйпереключатель выключенвключите, если нужна боту

Предупреждения полосы готовности:

  • «N с ошибками»: функции с красным статусом.
  • «N не упомянуты в промпте»: есть функция, но в промпте нет наводки (бот может её не звать).
  • «N не протестированы»: нажмите «Проверить».

UX-состояния страницы: загрузка (скелетоны), пусто (см. 3.7), ошибка загрузки (инлайн-сообщение, не белый экран).


15. Лучшие практики и чек-лист

Описание функции:

  • Пишите от лица бота: «Записывает клиента на приём. Вызывай, когда клиент подтвердил время.»
  • Укажите когда вызывать и когда НЕ вызывать.
  • Не пишите формально «Функция записи»: ИИ не поймёт момент.

Параметры:

  • Описание параметра = живой вопрос клиенту.
  • Помечайте обязательным только то, без чего действие невозможно.
  • Используйте enum для фиксированных вариантов и examples для форматов.

Подключение:

  • Для Sheets/Calendar: выдайте доступ сервисному аккаунту (его email показан при настройке).
  • Для вебхука: верните боту короткий понятный ответ, а не сырой JSON (настройте маппинг).
  • Поставьте разумный таймаут (медленный сервер = клиент ждёт спиннер).

Перед запуском:

  • ☐ Нажал «Проверить», подключение работает.
  • ☐ «Попробовал в чате»: бот вызывает функцию сам по описанию.
  • ☐ Функция включена.
  • ☐ Если важная, упомянул её в промпте.
  • ☐ Статус «Работает», полоса готовности зелёная.

Сценарии управления:

  • Возражение «дорого/подумаю» → отрабатывай или pause_followups, не stop_dialog.
  • «Не пишите мне» → stop_dialog.
  • Готов платить → create_payment_invoice (не выдумывай сумму: уточни).

16. FAQ и крайние случаи

Бот не вызывает функцию, хотя она включена.
Причина почти всегда в описании. Откройте «Попробуй в чате» и проверьте, понимает ли ИИ момент. Улучшите описание (кнопка «Улучшить с ИИ»), при необходимости добавьте наводку в промпт.

Функция вызывается не вовремя / слишком часто.
Описание слишком широкое. Добавьте «вызывай ТОЛЬКО когда…» и «НЕ вызывай если…».

В тест-чате работает, в бою, нет.
Проверьте, что функция включена в боевом проекте, подключение настроено (не ⚠ не задано), и канал/интеграция активны. Логика ИИ одинаковая во всех 5 точках входа: расхождение обычно в настройке подключения.

Достиг лимита 40 функций.
Удалите неиспользуемые или объедините близкие. Часто несколько узких вебхуков можно заменить одним с параметром «действие».

Два клиента бронируют один слот.
Для Sheets используйте update_row с expected_current_value/expected_other_cell (запись только если слот свободен). Для Calendar: check_available_slots непосредственно перед book_appointment.

Случайно сломал настройку функции.
Меню → «История версий» → «Восстановить» нужную.

Нужно перенести функции в другой проект.
«Экспорт как JSON» в одном → «Импорт» в другом.

Где функции send_lead / escalate_to_owner / kb_search?
send_lead / escalate_to_owner это кастомные функции конкретных проектов (вебхуки или Telegram-уведомления), а не встроенные шаблоны. kb_search: служебный поиск по базе знаний, он работает автоматически, настраивать его как функцию не нужно.


17. Глоссарий

  • Функция / Инструмент / Tool: действие, которое бот может выполнить (синонимы).
  • action_type, тип действия: webhook (свой HTTP) или builtin_* (встроенный обработчик).
  • builtin_config: настройки встроенной функции (ID таблицы, токен и т.д.), которые ИИ не видит.
  • Параметр: данные, которые бот собирает у клиента и передаёт в функцию.
  • locked / ШАБЛОН: заблокированный параметр шаблона, его нельзя ломать.
  • enum: фиксированный список допустимых значений параметра.
  • Цепочка (chain): группа связанных функций с порядком вызова.
  • fallback: поведение при ошибке функции (silent / notify / retry / transfer).
  • Дожим (follow-up): автоматическое напоминание клиенту; управляется pause_followups / stop_dialog.
  • Сервисный аккаунт: технический Google-аккаунт DOS AI, которому вы даёте доступ к таблице/календарю.
  • RAG / База знаний: автоматический поиск по вашим документам, НЕ функция.
  • 5 точек входа: места, где отвечает ИИ (тест-чат, WhatsApp, Telegram, демо-чат на сайте, фоновые задачи вроде дожимов); функции работают одинаково везде.

Простыми словами (вся статья в двух минутах)

Обычный бот умеет только разговаривать. Функции это «руки» бота: они позволяют ему делать дела, а не только отвечать словами, записать клиента в календарь, добавить строку в Google-таблицу, выставить счёт на оплату в Kaspi, скинуть тебе заявку в Telegram, отправить клиенту видео, поставить пометку на клиента. Каждая функция это «одно умение».

Самое важное и непривычное: ты не программируешь сценарий «если клиент сказал X, сделай Y». Ты просто по-человечески описываешь каждое умение: «эта функция записывает клиента, вызывай её, когда он подтвердил время», а бот сам решает, когда им воспользоваться, прямо посреди разговора. Поэтому в функциях главное поле, описание. Плохо описал, бот не поймёт, когда применять; хорошо описал, он сам всё свяжет (сначала проверит свободное время, потом запишет, потом подтвердит).

Делать функции можно двумя путями. Из шаблона это готовые умения (Google Таблицы, Календарь, Telegram, приём оплаты, отправка фото): тебе остаётся только подключить свою таблицу или номер, всё остальное уже настроено. Кастомная, если у тебя своя система (CRM, сайт), бот может «постучаться» на твой адрес и передать туда данные.

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

Что важно помнить на каждый день:

  • Функция работает, только если она включена и у неё настроено подключение (для таблицы, дать доступ, для оплаты: подключить Kaspi).
  • Всё новое проверяй в тест-чате: там видно, вызвал ли бот функцию или только написал «записал» словами.
  • Функций можно сделать до 40 на проект.
  • Секреты (токены, пароли) платформа прячет и шифрует, участники их не видят.
  • Не получается? Загляни в «Лог вызовов» функции: там видно, что именно пошло не так.

Если в двух словах: функции превращают болтливого бота в работающего сотрудника, который не только отвечает, но и записывает, считает и принимает оплату, а ты лишь объясняешь ему словами, что и когда делать.


Документ описывает раздел «Функции» DOS AI по состоянию на август 2026. Каталог встроенных функций, источник истины: packages/@dos/admin/src/function-templates.ts. Логика выполнения: packages/@dos/ai-pipeline/src/pipeline/tool-executor.ts.

Документация › Инструменты бота › База знаний

База знаний (RAG)

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

⏱ 8 мин · 👤 для владельца и оператора · 🟢 live

База знаний: загрузка документов (FAQ, прайс, описание услуг), бот использует их для точных ответов через векторный поиск
База знаний: загрузка документов (FAQ, прайс, описание услуг), бот использует их для точных ответов через векторный поиск
За 30 секунд:
  • База знаний = факты, на которые опирается бот: прайс, услуги, FAQ, условия.
  • Грузишь текст, файл (TXT/CSV/PDF/DOCX) или ссылку (URL): система сама разбивает и индексирует.
  • Бот на каждое сообщение ищет подходящие куски и добавляет их в ответ (это RAG, автоматически).
  • Лимит: 100 записей на проект (всего, не только активных), до 1 000 000 символов при вставке текстом, из файла и со страницы по ссылке извлекается до 500 000, файл до 4 МБ.
  • Статичные мелочи дешевле держать в промпте; большое/меняющееся, сюда.

Зачем это нужно

Бот знает только то, что ты ему дал. Если прайс есть лишь «в голове» у тебя, бот начнёт выдумывать цифры. База знаний даёт ему точные факты: он ищет в них релевантное под вопрос клиента и отвечает по делу, а не фантазирует. Это разница между «кажется, около 20 тысяч» и «чистка, 18 000 ₸».

Промпт или База знаний?

Кладём в…Что
🧠 ПромптКак себя вести, тон, правила, небольшие неизменные факты (адрес, часы)
📚 База знанийОбъёмное и меняющееся: полный прайс, описания услуг, FAQ, условия доставки

💡 Правило. Маленький статичный факт (адрес) в промпт (бесплатно). Большой список (прайс на 50 позиций) в базу знаний (бот достанет только нужное).

📌 Полный разбор «что в промпт, что в «Информацию о компании», что в базу знаний»: в отдельной статье Загрузить знания о бизнесе в бота.

Как добавить

Меню проекта → «База знаний» → «Добавить базу знаний».

  1. Название: понятное («Прайс услуг», «FAQ доставки»);
  2. Тип, выбери источник:
  3. Текст: вставь напрямую (до 1 000 000 символов);
  4. Файл: TXT, CSV, PDF, DOCX (до 4 МБ, текст извлечётся сам);
  5. URL, ссылка на страницу сайта (можно с глубиной сканирования: только страница / +ссылки 1-2 уровня / максимум);
  6. (для URL) Автообновление, нет / еженедельно / ежемесячно;
  7. «Добавить»: пойдёт загрузка → индексация → готово.

⚠️ Обработка документа стоит немного (около $0.01 за документ на индексацию, минимальное списание, 1¢), спишется с баланса. При добавлении показывается оценка токенов.

Как бот это использует

Тебе ничего вызывать не надо, это работает само:

  1. Клиент пишет вопрос;
  2. Бот ищет в базе знаний тремя способами сразу: по смыслу (похожие формулировки), по словам (точное совпадение: артикул, марка, название модели) и с поправкой на опечатки. Результаты объединяются, и кусок, найденный двумя способами, идёт выше;
  3. Лучшие фрагменты (в сумме до 8 000 символов) добавляются в контекст ответа;
  4. Бот отвечает, опираясь на них.

📌 Пример. В базе это прайс и условия. Клиент: «делаете отбеливание и сколько?». Бот находит строку про отбеливание → отвечает с точной ценой. Про услугу, которой в базе нет, он честно скажет, что уточнит.

📌 Пример на точные слова. Клиент спрашивает «есть мойка 8102?». По смыслу «8102» не значит ничего, и поиск только по смыслу такой вопрос проваливал. Совпадение по словам находит строку каталога сразу.

«Всегда под рукой»

У каждой записи есть кнопка-скрепка. Включённая, она означает: этот документ едет боту в каждом сообщении, минуя поиск.

Это для короткой шпаргалки, которую бот обязан знать всегда: пять-семь ходовых цен, условия замера, главное правило доставки. Ограничение жёсткое, 1500 символов на все закреплённые записи вместе (лишнее обрезается, и это видно в логах). Так и задумано: закреплённое оплачивается в каждом сообщении, ровно как текст промпта.

Всё остальное, полный каталог, характеристики, регламенты, частые вопросы, должно искаться. Тогда за него платишь только тогда, когда оно понадобилось.

Проверь, что работает

В разделе есть «Тест поиска»: вводишь вопрос клиента → видишь, какие фрагменты база вернёт боту, из какого раздела документа они взяты и как нашлись: по словам, по смыслу или с поправкой на опечатку. Это ровно тот поиск, что бот делает на каждое сообщение. Если по важному вопросу ничего не находит, переформулируй контент или добавь похожий.

Плюс прогони реальные вопросы в Тест-чате: там в «технических деталях» видно, какие источники бот подтянул.

Управление записями

  • Фильтры: Все / Активные / Неактивные, поиск по названию;
  • Включить/выключить запись (выключенная не участвует в поиске);
  • Скрепка «Всегда под рукой»: запись едет боту в каждом сообщении мимо поиска (см. выше);
  • Массовые действия: включить/выключить/удалить выбранные;
  • Большие документы система бьёт на фрагменты: их можно посмотреть и отредактировать.

Частые ошибки

СимптомПричинаЧто делать
Бот не знает то, что я загрузилЗапись выключена или вопрос непохож на текстВключи запись; проверь «Тест поиска», переформулируй контент
«Почти лимит» / не добавляетсяБлизко к 100 записямУдали ненужные, объедини мелкие
Загрузил, но бот выдумываетФакт есть в базе, но промпт не велит на неё опиратьсяВ промпте: «цены и факты бери из базы знаний, не выдумывай»
Файл не грузитсяБольше 4 МБ или не тот форматСократи / используй TXT, CSV, PDF, DOCX

Вопросы, которые обычно возникают

Чем это отличается от промпта?
Промпт, поведение (всегда в каждом ответе). База знаний, факты (бот достаёт только релевантное под конкретный вопрос). Большие данные в промпте = дорого и бот путается.

Это платно?
Да, чуть-чуть: и индексация документа, и каждый поиск стоят примерно по 1¢ ($0.01). Поиск идёт на каждое сообщение, это учитывается в расходе.

Бот читает весь документ каждый раз?
Нет. Только самые подходящие фрагменты под текущий вопрос: столько, сколько влезает в 8 000 символов контекста (обычно от 3 до 15, зависит от размера кусков).


Под капотом

  • RAG (Retrieval-Augmented Generation): документы режутся на чанки, для каждого считаются векторные embeddings. На каждое сообщение клиента идёт гибридный поиск: вектора (смысл) + полнотекстовый поиск с русской морфологией (точные слова) + триграммы (опечатки), результаты объединяются рангом. В контекст попадает столько лучших чанков, сколько помещается в 8 000 символов (не больше 15). Записи со «Всегда под рукой» подмешиваются без поиска, в пределах 1500 символов.
  • Лимиты: 100 записей/проект (всего), до 1 000 000 символов при вставке текстом, из файла и URL извлекается до 500 000 (MAX_EXTRACTED_LEN_KB / MAX_PAGE_SIZE), файл 4 МБ, в промпт идёт до 8 000 символов из 5 чанков.
  • Форматы: TXT, CSV, URL (с глубиной до 3 и автообновлением), PDF, DOCX. URL-скан: до 20 подстраниц, каждая = отдельная запись.
  • Стоимость: ≈$0.01 индексация документа + ≈$0.01 за поиск (на каждое сообщение); минимальное списание за эмбеддинг, 1¢.
  • Обновления списка идут в реальном времени (use-realtime-kb). RAG это не функция, а внутренний шаг пайплайна; включать/вызывать не надо.

Простыми словами

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


Дальше: → Дожимы
Связано: Системный промпт · Как бот думает · Тест-чат
Не получилось? → Бот не отвечает

Документация › Инструменты бота › Медиа-библиотека

Медиа-библиотека

Бот умеет не только писать, но и показывать: отправить клиенту видео, фото работ, отзыв или прайс, в нужный момент диалога. Для этого ты заранее складываешь материалы в медиа-библиотеку.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Раздел «Медиа» проекта: твоя библиотека видео/фото/отзывов/прайсов.
  • Каждому файлу даёшь ярлык (media_key), по нему бот его и отправляет.
  • Бот сам решает, когда показать материал (через функцию «Отправить медиа»), если клиент сомневается или просит показать.
  • Лимиты: до 60 файлов на проект, до 4 МБ каждый. Работает в WhatsApp и Telegram.
Раздел «Медиа»: предзагруженные фото, видео и файлы, которые бот отправляет по контексту
Раздел «Медиа»: предзагруженные фото, видео и файлы, которые бот отправляет по контексту

Зачем это нужно

Слова не всегда убеждают. «Покажите работы», «есть видео?», «скиньте прайс»: на такие моменты у бота должны быть готовые материалы. Медиа-библиотека (раздел «Медиа», /projects/<id>/media) это склад фото, видео, отзывов и прайсов, которые бот отправляет клиенту прямо в чат в подходящий момент: в диалоге и в дожимах.


Как загрузить

  1. Раздел проекта → «Медиа» → загрузи файл (нужна роль редактор+).
  2. Задай ярлык (media_key) и, при желании, подпись и описание «когда отправлять».
  3. Сохрани. Готово: материал доступен боту.

Лимиты и форматы:

  • до 60 материалов на проект (превысишь, «Достигнут лимит медиа на проект (60). Удали ненужное и попробуй снова.»);
  • до 4 МБ на файл (больше, «Файл больше 4 МБ»; это потолок загрузки через кабинет, тяжёлое видео лучше сжать или дать ссылкой);
  • форматы: изображения (JPEG/PNG/GIF/WebP/HEIC), аудио (MP3/OGG/WAV/MP4), видео (MP4/WebM/MOV), документы (PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX/ZIP).

Как бот отправляет

Бот выбирает материал по ярлыку через функцию «Отправить медиа» (send_media). Ты включаешь эту функцию и описываешь, что и когда показывать, а бот сам решает момент: клиент сомневается → показать видео-отзыв; просит прайс → отправить файл; нужно снять возражение наглядно → фото работ.

💡 Описывай ярлыки понятно. Бот выбирает материал по описанию, «когда отправлять». Чем понятнее опишешь (video_otziv, «когда клиент сомневается в качестве»), тем точнее бот будет показывать нужное. Это как с функциями: хорошее описание = верный выбор.
📌 После отправки бот ссылается на материал словами («посмотрите видео выше 👆»), а не пересказывает его. Работает и в WhatsApp, и в Telegram.

Стоит ли это денег

Отправка готового материала из библиотеки: бесплатна (не списывает баланс). Деньги тратятся только когда бот распознаёт входящее медиа от клиента (расшифровка голоса, «разглядывание» картинки): см. Сколько стоит сообщение.


Простыми словами

Представь, что у бота есть папка с «продающими материалами»: видео твоих работ, фото до/после, отзывы клиентов, прайс в PDF. Ты один раз туда всё загружаешь и подписываешь, что это и когда показывать. Дальше бот сам, по ходу разговора, достаёт нужное: клиент засомневался, кинул видео-отзыв, попросил цены, отправил прайс. Это работает гораздо убедительнее, чем расписывать всё словами.

Загрузить можно до 60 файлов, каждый до 4 МБ, в WhatsApp и Telegram одинаково. И приятный момент: отправлять эти материалы клиентам, бесплатно, баланс на это не тратится.


Дальше: → Дожимы
Связано: Функции · База знаний · Сколько стоит сообщение
Не получилось? → Функция не вызывается / падает

Документация › Инструменты бота › Дожимы

Дожимы (follow-up)

Клиент заинтересовался и пропал? Бот сам напомнит о себе через заданное время, и вернёт часть «потеряшек».

⏱ 9 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Дожим = автонапоминание клиенту, который замолчал.
  • Настраиваешь последовательность касаний с задержками (минуты/часы/дни/недели).
  • Каждое касание это либо ИИ с учётом истории диалога, либо фиксированный текст.
  • Бот сам ставит дожимы на паузу, если клиент сказал «свяжусь сам», и отменяет, если просил не писать.
  • Минимальная задержка, 15 минут.
Раздел «Дожимы»: конструктор шагов-напоминаний с задержками для замолчавших клиентов
Раздел «Дожимы»: конструктор шагов-напоминаний с задержками для замолчавших клиентов

Зачем это нужно

Большинство клиентов не отвечают сразу: «подумаю», «спрошу мужа», просто отвлеклись. Без напоминания половина из них теряется навсегда. Дожимы возвращают их мягким сообщением через нужное время: без твоего участия и без навязчивости. Это один из самых окупаемых инструментов.

Где это

Меню проекта → «Дожимные». Нужна роль editor+.

Как настроить последовательность

Дожим это цепочка касаний. Например: через 2 часа → через 1 день → через 3 дня. Для каждого касания задаёшь:

ПараметрВарианты
ЗадержкаЧисло + единица: минуты / часы / дни / недели (минимум 15 минут)
ТипИИ + история диалога (бот сам сочинит уместное напоминание) или Фиксированный текст (твой готовый текст)
ТекстСообщение (для фикс.) или подсказка для ИИ
МедиаМожно прикрепить фото/видео
МодельСвоя модель для дожимов или общая

💡 Совет. Первое касание делай быстрым и мягким (через 1-2 часа: «Подскажите, остались вопросы?»), дальше реже. Тип «ИИ + история» обычно работает лучше шаблона: напоминание получается живым и в контексте разговора.

📌 Пример (мотошкола). Касание 1 через 2 часа: «Остались вопросы по обучению? С радостью подскажу 🙂». Касание 2 через 1 день: напоминание про ближайший набор. Касание 3 через 3 дня: предложение пробного занятия.

Кто попадает в дожимы и кто выходит

  • Попадает: клиент, который квалифицировался, но не довёл до конца (можно настроить авто-зачисление по статусу лида).
  • Бот сам ставит на паузу: если клиент сказал «свяжусь сам в четверг», дожимы молчат до этой даты (функция пауза дожимов), но бот в чате продолжает отвечать.
  • Бот сам отключает напоминания, не замолкая: клиент сказал «не надо мне напоминать, сам напишу», но вопросы задаёт: дожимы по нему выключаются насовсем, а бот в чате отвечает как раньше (функция отключить дожимы).
  • Бот сам отменяет: если клиент попросил не писать или отказался, дожимы отменяются (стоп-диалог).
  • Эти три функции стоят у каждого проекта с рождения и включены. Добавлять их из каталога руками больше не нужно; выключить или поправить описание можно в разделе «Функции».
  • Заявка передана, дожимы закрываются автоматически. Как только бот вызвал функцию передачи заявки тебе (уведомление в Telegram, на почту или в WhatsApp), дожимы по этому клиенту прекращаются: он уже всё рассказал и услышал «передал, скоро свяжутся», напоминать ему «вы, наверное, заняты» больше не нужно. Бот при этом остаётся на связи: напишет клиент, ответит. Если хочешь продолжить дожимать именно этого человека, просто добавь его в дожимы вручную из таблицы.
  • Вручную: ты можешь поставить на паузу, возобновить или отписать клиента в таблице дожимов.

Статусы подписчиков

СтатусЗначит
АктивныйВ работе, дожимы идут
ПаузаВременно остановлен (тобой или «свяжусь сам»)
ЗавершёнВсе касания отправлены
ОтменёнОтписан вручную
ОтписалсяКлиент попросил не писать

Проверь и подсмотри, что отправится

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

Частые ошибки

СимптомПричинаЧто делать
Дожимы не идут вообщеFollow-up выключены на уровне проектаВключи «Follow-up включены» в разделе
Клиент получил дожим, хотя просил не писатьНе сработал стопПроверь, что у бота есть функция stop_dialog
Клиент сдал всю анкету, а дожимы всё равно идутФункция передачи заявки не сработала (например, бот удалён из твоей Telegram-группы)Открой диалог, если на нём стоит пометка «Ответь вручную», значит заявка тебе не доставилась, проверь настройки функции передачи
Хочу задержку «полчаса»Минимум 15 минутПоставь 30 минут: это разрешено
Дожим пришёл слишком навязчивоСлишком частые касанияУвеличь задержки, убери лишние касания

Вопросы, которые обычно возникают

Дожим выключает бота?
Нет. Дожим это напоминание. Бот продолжает отвечать в чате как обычно.

Что если клиент ответит на дожим?
Отлично, диалог продолжается обычным образом, дальнейшие касания не нужны (бот видит активность).

Можно совсем без текста, чтобы ИИ сам?
Да, тип «ИИ + история диалога»: бот сам сочинит уместное напоминание по контексту.


Под капотом

  • Задержки хранятся как delay_hours (дробное число), а в интерфейсе показываются человеческими единицами (минуты/часы/дни/недели) через DelayInput + formatDelayHuman. Минимум, 0.25 ч (15 минут), максимум, 720 ч (30 дней). Дробные часы пользователю не показываются.
  • Время следующего касания = max(последнее сообщение клиента, дата дожима, создание) + delay_hours.
  • Движок дожимов «тикает» регулярно (внешний планировщик QStash, ~каждые 5 минут).
  • Статусы подписчика: active / paused / completed / cancelled / opted_out. Пауза «свяжусь сам» это snoozed_until (per-subscriber), не трогает ai_on.
  • Связь с функциями: `pause_followups` ставит snooze; `stop_followups` переводит подписчика в cancelled, не трогая ai_on; `stop_dialog` выключает бота + отменяет дожимы (триггер БД). Общее правило: бот выключен в диалоге по любой причине → дожимы этого чата отменены.

Простыми словами

Дожимы это вежливые напоминания тем, кто заинтересовался и пропал. Ты заранее настраиваешь: через сколько и что написать. Например, через два часа, «остались вопросы?», через день, ещё разок, через три дня: предложение попробовать. Можно дать боту самому придумывать текст по ходу разговора: так живее. Бот умный, если клиент сказал «напишу сам в четверг», напоминания подождут до четверга, а если попросил «не пишите», бот их отменит, чтобы не злить человека. В итоге ты возвращаешь часть клиентов, которые иначе бы просто потерялись.


Дальше: → Лиды
Связано: Функции · Лиды · Диалоги

Документация › Инструменты бота › Теги и сегментация

Теги и сегментация

Теги это ярлыки на клиентах («VIP», «опт», «недозвон»), которые бот ставит сам по ходу разговора. По ним потом удобно фильтровать лидов и понимать, кто есть кто.

⏱ 6 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Теги, свободные ярлыки на лиде (до 20 на одного): VIP, опт, Астана, недозвон.
  • У проекта, созданного с 14 сентября 2026, функция «Помечать лида тегами» уже включена, а стартовый набор тегов собран из трёх ответов при создании проекта. У проектов постарше функцию нужно включить в разделе Функции: без неё теги ставит только оператор вручную.
  • На странице «Теги» заводите теги с описанием, его видит и оператор, и бот (бот тегает осмысленнее).
  • Бот сначала выбирает из существующих тегов, и только если ничего не подходит, создаёт новый (если это разрешено под-флагом). Новый тег бота помечается бейджем «создано ИИ».
  • Бот добавляет теги, не стирая уже стоящие. Снять тег может оператор.
  • В разделе «Лиды» можно фильтровать по тегам (логика «И»); на странице «Отчёты» виден весь список тегов с числом лидов за период и выгрузкой в CSV.
Раздел «Теги»: авто-разметка клиентов ботом для сегментов и фильтров
Раздел «Теги»: авто-разметка клиентов ботом для сегментов и фильтров

Шаг 1. Заведите теги (с описанием)

Откройте страницу «Теги» проекта и создайте нужные ярлыки. У каждого тега, кроме имени и цвета, есть описание: короткое пояснение, что этот тег значит («VIP = чек от 1 млн», «Недозвон = не берёт трубку 2+ раза»).

Описание важно вдвойне: его читает бот, и тегает осмысленнее, а не угадывает по одному имени. Описание можно добавить при создании или отредактировать позже (иконка ✎).

Теги бывают двух «авторов»: заведённые оператором и созданные ботом (бейдж «создано ИИ»), но в работе это один общий набор.


Шаг 2. Включите функцию «Помечать лида тегами»

Чтобы бот ставил теги сам, в проекте должна быть включена функция «Помечать лида тегами» (раздел Функции). У нового проекта она стоит с рождения, проектам, созданным до 14 сентября 2026, её добавляют из каталога. Пока она выключена, бот теги не трогает, их ставит только оператор.

У функции два переключателя. Первый, «Разрешить боту создавать новые теги»:

  • включён, если подходящего тега в списке нет, бот заведёт новый (коротко, 1-3 слова) и сам добавит ему описание; тег появится на странице «Теги» с бейджем «создано ИИ»;
  • выключен: бот выбирает только из тегов, которые вы уже завели; ничего нового не придумывает.

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

После этого опишите в промпте, что отслеживать («определяй город клиента», «помечай тип запроса»). Дальше бот вешает теги по ходу разговора сам.

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


Шаг 3. Сегментация: фильтр и отчёты

В разделе «Лиды» фильтруйте список по тегам: выберите несколько, покажутся лиды, у которых есть все выбранные теги (логика «И»). Фильтр учитывается и при экспорте: выгрузите именно нужный сегмент, а в CSV будет колонка «Теги».

На странице «Отчёты» видны все теги проекта с числом лидов по каждому за выбранный период (теги с нулём тоже видны), и есть кнопка «Выгрузить CSV»: список тегов с описаниями и количеством за период.

Блок «По тегам» по умолчанию включён и в письме-отчёте владельцу. В настройках отчёта можно выбрать, какие теги в него попадут:

  • Топ-N: N самых частых тегов за период (по умолчанию топ-5; число задаёте сами);
  • Все: все теги, которые встречались за период, от частых к редким;
  • Выбранные: только отмеченные вами теги (даже с нулём, удобно следить, что какой-то тег пока не присваивается).
💡 Зачем это на практике. Навесил ботом тег опт на оптовиков, отфильтровал, выгрузил, сделал им отдельное предложение. Или отметил недозвон, и дожимаешь именно их. Теги превращают «кучу диалогов» в управляемые группы.

Простыми словами

Теги это стикеры, которые лепятся на клиентов. У нового проекта первые стикеры заводятся сами из твоих ответов при создании, а на странице «Теги» ты их правишь, добавляешь свои и подписываешь, что каждый значит. Функция «Помечать лида тегами» у нового проекта уже включена, и бот развешивает стикеры сам прямо во время разговора: поговорил с оптовиком, повесил «опт», клиент из Астаны, «Астана». Что именно отслеживать, ты говоришь боту в промпте обычными словами.

Бот не плодит дубли: сперва смотрит, какие стикеры уже есть, и берёт существующий. Можно разрешить ему придумывать новые (он сам и подпишет их) или запретить, тогда он клеит только из твоего списка. Чужие стикеры бот не срывает, только добавляет; снять может оператор. На одного человека до 20 стикеров.

Зачем всё это? Чтобы потом в «Лидах» одним кликом отфильтровать, например, всех оптовиков или всех, кому не дозвонились, и поработать с ними отдельно. А на «Отчётах» видно сразу весь список тегов с числами и можно выгрузить в файл. Без тегов у тебя просто свалка диалогов, с тегами: аккуратные группы.


Дальше: → Диалоги
Связано: Лиды · Дожимы · Аналитика · Функции
Не получилось? → Функция не вызывается / падает

Документация › Инструменты бота › Уведомления владельцу

Уведомления владельцу

Бот сам пишет вам, как только появился горячий лид или нужно вмешаться: в Telegram, в WhatsApp или на почту.

⏱ 8 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Это функция №1: бот ловит заявку в чате и сразу сообщает вам.
  • Три способа: Telegram (мгновенно, в телефоне), WhatsApp (в личку или в рабочую группу) или Email (на почту, без настройки).
  • Для Telegram нужен бот-«вестник». Если настройку ведём мы, подключаем своего, @dosaitech_bot: вам остаётся добавить его в группу. Хотите бота со своим именем, заведите его за минуту сами.
  • В тексте уведомления можно подставлять данные клиента: {{name}}, {{phone}}, {{date}} и т.п.
  • Telegram-уведомление умеет ещё и завершить диалог: передать клиента вам в руки.
Каталог функций: шаблоны уведомлений владельцу в Telegram и на почту
Каталог функций: шаблоны уведомлений владельцу в Telegram и на почту

Зачем это нужно

Бот отвечает клиентам круглосуточно, но решение: за вами. Уведомление это «звоночек»: клиент назвал имя и телефон, готов записаться или платить, вам приходит сообщение, и вы подключаетесь в нужный момент, а не читаете все диалоги подряд.

📌 Пример (барбершоп). Клиент пишет ночью: «запишите на завтра на 14:00». Бот предлагает время, фиксирует заявку и шлёт вам в Telegram: «Новая запись: Асан, +7 705…, завтра 14:00». Утром вы уже знаете о записи.


Способ 1. Уведомление в Telegram

Что понадобится

  • ☐ Бот-«вестник»: наш @dosaitech_bot или свой, созданный через @BotFather
  • ☐ ID чата, куда слать (ваш личный чат или группа команды)

Шаги

1. Выберите бота

Уведомления приходят от бота, поэтому бот нужен в любом случае. Вариантов два.

Вариант А. Наш бот (по умолчанию, когда настройку ведём мы). Добавьте в вашу рабочую группу @dosaitech_bot (в Telegram он подписан «DOS AI») и пришлите нам номер группы, как его узнать, в шаге 2. Токен впишем мы, вам ничего копировать не нужно. Этот бот только приносит уведомления в вашу группу: переписку с клиентами он не ведёт и не читает, для клиентов работает ваш собственный канал.

Вариант Б. Свой бот. Подходит, если настраиваете сами или хотите, чтобы уведомления приходили от бота с вашим названием и аватаркой. Откройте в Telegram @BotFather → команда /newbot → придумайте имя и username. BotFather пришлёт токен вида 123456789:AAExxxxxxxxxxxxxxxxxxxxxx. Скопируйте его и вставьте в поле «Токен бота» на шаге 3.

⚠️ Важно. Токен это пароль от бота, кто им владеет, тот управляет ботом. Поэтому свой мы не публикуем и вписываем сами при настройке, а вы свой никому не пересылайте. В DOS AI токен хранится зашифрованным и в интерфейсе показывается как ***hidden***.

2. Узнайте ID чата

  • Личный чат: напишите боту @userinfobot, он пришлёт ваш id (число вроде 512345678).
  • Группа: добавьте бота из шага 1 в группу, затем добавьте туда же @userinfobot: он покажет ID группы (число со знаком минус, например -1001234567890).

⚠️ Бот должен быть участником группы, иначе Telegram не даст ему туда написать. И номер группы меняется, если её превратить в супергруппу или добавить темы: после такого возьмите ID заново.

3. Создайте функцию

Проект → Функции → Создать → Из готового шаблона → Уведомления владельцу → Уведомление в Telegram.

Заполните:

  • Токен бота, из шага 1 (если работаем мы, это поле уже заполнено);
  • ID чата, из шага 2;
  • Шаблон сообщения: текст уведомления. Кнопками-чипами вставляйте переменные: {{name}}, {{phone}}, {{summary}} и системные {{date}}, {{time}} (двойные фигурные скобки).

📌 Пример шаблона: 🔔 Новая заявка от {{name}}, тел: {{phone}}\n{{date}} {{time}}.

4. Опишите, КОГДА слать

В поле «Когда боту это вызывать» опишите повод: например «когда клиент назвал имя и телефон и согласился записаться, отправь уведомление». По этому описанию ИИ решает, в какой момент дёрнуть функцию.

Завершить диалог после уведомления

В настройках Telegram-уведомления есть переключатель «Завершить диалог после отправки». Если включить, после успешного уведомления бот замолкает на этом чате (передаёт клиента вам). Удобно для схемы «бот квалифицировал → дальше говорит человек».

Способ 2. Уведомление в WhatsApp

Подходит, когда команда и так сидит в WhatsApp и заводить Telegram не хочется.

Создать → Из готового шаблона → Уведомления владельцу → Уведомление в WhatsApp. Укажите:

  • Куда слать: ваш номер в международном формате (+7 705 …) либо ID рабочей группы WhatsApp вида 120363…@g.us;
  • Текст сообщения с теми же переменными {{client_name}}, {{phone}}, {{channel}}.

Уведомление уходит с того же номера, который подключён к проекту как канал, поэтому WhatsApp у проекта должен быть подключён и на связи.

⚠️ Своему же номеру бот не пишет: если указать номер канала, платформа отклонит отправку. Это защита от петли «бот написал себе и сам себе ответил».

Способ 3. Уведомление на почту

Самый простой вариант: работает сразу, ничего создавать в сторонних сервисах не нужно.

Создать → Из готового шаблона → Уведомления владельцу → Уведомление на почту. Укажите:

  • Email: куда слать;
  • Тема и Текст письма это с теми же переменными {{name}}, {{phone}}, {{date}}.

Письмо приходит вам с адреса noreply@dosai.pro.

Проверь, что работает

Откройте функцию → кнопка «Проверить» → заполните примеры значений → бот отправит тестовое уведомление вам в Telegram, в WhatsApp или на почту. В Telegram тестовое сообщение помечается префиксом «🧪 ТЕСТ».

Частые ошибки

СимптомПричинаЧто нажать
Уведомление не приходит в TelegramВы не написали боту первым / неверный chat_idНапишите боту любое сообщение; перепроверьте ID через @userinfobot
В группу не приходит, лично приходитБота убрали из группы или группу пересобралиДобавьте бота в группу заново и возьмите её ID ещё раз
Письмо не приходитОпечатка в адресеПроверьте email в настройках функции

Вопросы, которые обычно возникают

Можно слать в группу, а не лично?
Да. Добавьте бота в группу и используйте ID группы (с минусом).

Бот будет слать на каждое сообщение клиента?
Нет, только когда выполнено условие из описания (например, собраны имя и телефон). Опишите повод точно.

Обязательно заводить своего бота?
Нет. Если проект настраиваем мы, подключаем @dosaitech_bot, и вам остаётся добавить его в группу. Свой нужен в двух случаях: вы настраиваете сами (тогда поле «Токен бота» ждёт ваш токен) или хотите, чтобы уведомления приходили от бота с вашим названием и аватаркой. Перейти с нашего на свой можно в любой момент: создали бота у @BotFather, добавили в ту же группу, заменили токен в функции.

Ваш бот сидит в нашей группе. Он видит, что мы там пишем?
Нет. У него включён режим приватности Telegram: обычные сообщения группы боту просто не приходят, он их не получает. К переписке с вашими клиентами он тоже отношения не имеет, она идёт через ваш собственный канал WhatsApp или Telegram. Если всё равно не хотите чужого бота в рабочей группе, заведите своего, вариант Б выше.


Под капотом

  • Telegram-уведомление: встроенная функция типа builtin_telegram; токен шифруется (AES-GCM), не хранится в открытом виде.
  • Токен обязателен: платформа не подставляет никакого бота «по умолчанию» сама. Когда проект настраиваем мы, в это поле уходит токен @dosaitech_bot, когда вы сами, ваш токен от @BotFather.
  • Тестовый чат помечает сообщение префиксом «🧪 ТЕСТ», чтобы не путать с боевым.
  • Завершить диалог ставит conversations.ai_on=false с причиной hand-off; повторно включить бота можно из дашборда.
  • Email-уведомление (builtin_email) уходит через Resend с таймаутом 15 секунд; получатель: один адрес (множественные через запятую отклоняются как защита от рассылки).
  • WhatsApp-уведомление (builtin_whatsapp) уходит через канал проекта: одно и то же сообщение одному получателю не чаще раза в минуту, отправка себе заблокирована, при отключённом канале функция честно отвечает «номер сейчас не подключён» вместо тихого пропуска.

Простыми словами

Бот, как администратор, который сидит в чате круглосуточно. Когда приходит «горячий» клиент, бот толкает вас в плечо: «эй, тут заявка», и пишет вам в телеграм или на почту. Вы не читаете все переписки, а подключаетесь только когда реально нужно.


Дальше: → Запись на время
Связано: Функции · Письмо клиенту
Не получилось? → Функция не срабатывает

Документация › Инструменты бота › Запись на время

Запись на время

Бот сам показывает свободное время и записывает клиента: простым способом через Google Calendar или «движком окошек» для нескольких специалистов.

⏱ 12 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Три способа записи: выберите под свой бизнес (ниже шпаргалка).
  • Google Calendar: один специалист, простой график.
  • Движок окошек: несколько мастеров, график в таблице, обеды/отпуска/ограничения.
  • Google Таблицы, если вы уже ведёте слоты строками в таблице.
Каталог функций: шаблон записи на свободные окошки (Google Календарь / движок слотов)
Каталог функций: шаблон записи на свободные окошки (Google Календарь / движок слотов)

Как выбрать способ

Ваша ситуацияСпособ
Один мастер/кабинет, простой графикGoogle Calendar: бот смотрит занятость календаря и записывает
Несколько одинаковых объектов: бани, кабинеты, корты, столики, домикиGoogle Calendar: один календарь на группу, «Записей на одно время» = сколько объектов в группе
Несколько специалистов, график в таблице, есть обеды, отпуска, ограничения по дням/возрастуДвижок окошек: сервер сам считает свободные слоты, бот не ошибается
Вы уже ведёте слоты строками в таблицеGoogle Таблицы (см. статью про Таблицы)

Способ A. Google Calendar (один специалист)

Что понадобится

  • ☐ Google-календарь
  • ☐ Доступ для сервис-аккаунта (одна кнопка в настройках функции)

Шаги

  1. Проект → Функции → Создать → Из готового шаблона → Запись на время → группа «Google Calendar». Здесь 5 готовых действий: проверить свободное время, записать, перенести, показать записи, отменить.
  2. Сначала откройте доступ. Наверху настроек функции есть панель с адресом сервис-аккаунта и кнопкой «Скопировать». В Google Календаре: нужный календарь → «Настройки и общий доступ» → «Доступ для отдельных пользователей» → добавьте этот адрес с правом «Внесение изменений в мероприятия». Без этого шага проверка на шаге 4 не пройдёт, боту просто некуда смотреть.
  3. Укажите Календарь это ID вашего календаря: для основного его ID = ваш email в Google (например ivan@gmail.com), для отдельного календаря адрес вида ...@group.calendar.google.com (он лежит там же, в настройках календаря, раздел «Интеграция календаря»). Можно вставить ссылку из адресной строки, ID вытащится сам. ⚠️ Слово primary не подойдёт, так бот попадёт в свой технический календарь, вам не видимый, и записи «пропадут».
  4. Нажмите «Проверить подключение». Зелёный ответ покажет, сколько событий бот видит, красный назовёт причину.
  5. Настройте расписание работы: рабочие дни, часы, обед, длительность слота, минимальный запас до записи. Это настройки самой функции: бот будет предлагать только время внутри них.

⚠️ Важно. Расписание работы задаётся прямо в настройках функции «Проверить свободное время». Бот предлагает слоты строго в этих рамках.

📌 Пример (стоматология). Функция «Записать клиента» с длительностью слота 60 минут, рабочие дни Пн-Сб 9:00-19:00, запас 60 минут. Бот не запишет на ближайший час и не предложит воскресенье.

Если объектов несколько и они одинаковые

Бани, кабинеты, корты, столики, домики: бот не выбирает конкретный объект, он считает, СКОЛЬКО их занято на это время. Кто именно поедет в баню номер 3, решаете вы, как и сейчас.

  1. Заведите один календарь на группу одинаковых объектов.
  2. В функции «Проверить свободное время» поставьте «Записей на одно время» = сколько объектов в группе. Четыре бани, значит 4: пятого клиента на это время бот уже не запишет.
  3. То же число продублируйте в функции «Записать клиента». Без этого она возьмёт вместимость у первой попавшейся функции проверки, и при нескольких группах числа перепутаются.

Объекты разной вместимости или цены это разные группы. У каждой свой календарь и своя пара функций «проверить» и «записать», иначе бот отправит компанию из 25 человек туда, где помещается 10.

📌 Пример (база отдыха). 4 бани, 7 юрт до 10 гостей и 2 больших юрты. Это 3 календаря и 6 функций: check_bath_slots и book_bath (вместимость 4), check_yurt_small_slots и book_yurt_small (7), check_yurt_big_slots и book_yurt_big (2). Имена функций должны отличаться, имя правится в мастере, раздел «Расширенные настройки».

💡 Свои брони, которые вы ставите руками, вносите в тот же календарь. Бот считает занятость по нему целиком и не различает, кто создал событие.

Способ B. Движок окошек (несколько специалистов)

Одна функция вместо цепочки «прочитай график → возьми занятость → посчитай сам». Сервер сам учитывает часы по дням, обеды, отпуска, ограничения дней и возраст, и отдаёт боту готовый список свободных слотов с именами специалистов.

Что понадобится

  • ☐ Google-таблица с графиком специалистов
  • ☐ Список услуг (заполняется в конструкторе: без JSON руками)
  • ☐ (если берёте занятость из CRM) подключённая Education CRM

Формат листа-графика

Лист должен содержать колонки: специалист, услуга (предмет), минимальный возраст, дни работы с часами, обеды, комментарии. Имена колонок по умолчанию: «Преподаватель», «Предмет», «Минимальный возраст», «Обеды», «Комментарии». Если у вас они называются иначе в настройках функции есть раздел «Колонки в листе называются иначе?».

Дни ведутся одним из двух способов, сервер определяет его сам по заголовкам:

СпособКак выглядят колонкиКогда удобнее
Неделясемь колонок пн вт ср чт пт сб вс, одна и та же неделя повторяетсяграфик стабильный, меняется редко
Календарьпо колонке на дату: 22.06.2026, 23.06.2026, …часы плавают, отпуска и подмены видно прямо в ячейке дня

В календарном режиме день, для которого колонки ещё нет, считается «расписание не заведено» и не показывается: бот не будет записывать в дату, которую вы не заполняли. Если весь запрошенный период за последней заполненной колонкой, функция так и скажет, вместо пустого списка, который читается как «все заняты». Держите заполненными хотя бы 2-3 недели вперёд.

В ячейках дней пишутся часы работы: 11:00-18:00, можно с перерывом 11:00-15:00 и 16:00-21:00. Пустая ячейка, в, вых или слово Отпуск означают, что в этот день специалист не работает. Маркеры в ячейке: (без ПЗ) это «в этот день новых на пробное не ставим», (день ПЗ) это «день выделен под пробные».

Какие фразы в колонке «Комментарии» сервер понимает

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

Пишите такКак поймёт сервер
«Пробные только во вторник, четверг и субботу»пробные разрешены лишь в эти дни
«Ни в одно воскресенье не ставить пробные»воскресенье вычёркивается
«Пробные занятия не ставить»специалист не берёт пробных вообще
«Не работает 13 и 14 августа», «Отпуск с 2.08 по 7.08», «больничный до 15.08»эти даты вычёркиваются

Одна мысль на фразу, разделяйте точкой.

💡 Условие, которое выполняет человек («по договорённости», «после согласования с мастером»), не прячет специалиста: бот покажет его время и предупредит клиента, что запись подтвердит менеджер, а бронировать сам не станет.

⚠️ Если смысл фразы непонятен даже ИИ, специалист скрывается с пометкой менеджеру. Лучше не показать того, кого можно, чем записать клиента к тому, кого нельзя. Такие случаи видно на экране «Проверка графика», и о них приходит уведомление.

Шаги

  1. Создать → Запись на время → Свободные окошки для записи.
  2. Укажите ID Google-таблицы с графиком и нажмите проверку подключения. Затем «Найти лист автоматически»: сервер сам выберет лист с графиком и определит, как названы колонки, вам останется подтвердить.
  3. Услуги заполняются в конструкторе, для каждой услуги: название (как в колонке «Предмет»), синонимы через запятую, минимальный возраст, и (если занятость из CRM) branch_id / subject_id из вашей Education CRM.
  4. Источник занятости: «Education CRM» (берёт занятые уроки из CRM) или «Только график» (без CRM).
  5. Параметры окна: длительность слота, за сколько дней минимум можно записаться, горизонт показа (максимум 14 дней), окно работы бизнеса, таймзона.

💡 Совет. Не вводите JSON руками: конструктор услуг и колонок соберёт его за вас. Кнопка «Редактировать как JSON» оставлена на случай тонкой правки.

Напоминание клиенту перед визитом

Записали человека, дальше он про это забывает. Бот может напомнить сам, в тот же чат, где записывался.

Где включить: Функции → ваша функция «Записать клиента» → тумблер «Напоминать клиенту о записи». Включите, и сразу появится первое напоминание «за 1 день». Кнопкой «Добавить напоминание» добавьте второе, например «за 2 часа».

  • У каждого напоминания своя строка текста прямо под сроком. Оставите пустой, возьмётся общий текст из поля внизу. Так «за сутки» скажет «не забудьте про завтра», а «за 2 часа» скажет «выезжайте, ждём вас».
  • Подстановки: {{client_name}}, {{date}}, {{time}}.
  • Перенос записи двигает напоминания за собой, отмена снимает их. Опоздавшее больше чем на 3 часа не уходит вдогонку.
  • Если WhatsApp ограничил номер, напоминание не отправится и помечается неотправленным сразу, а не после трёх часов попыток.
  • Отправленное напоминание видно в переписке с пометкой «Напоминание», поэтому вы всегда знаете, что именно бот написал клиенту и когда.
  • В тест-чате напоминания не отправляются, это не сбой.
  • ⚠️ Напоминание встаёт только на запись, которую оформил бот. Занесли бронь в календарь руками, бот про неё не знает и не напомнит.
  • ⚠️ Если объектов несколько и у каждого свой календарь (баня 1, баня 2), тумблер включается в каждой функции записи отдельно. Настройки не наследуются.
  • ⚠️ Тумблера нет в функции «Проверить свободное время», и это правильно: напоминания читает только та функция, которая создаёт запись.

Проверь, что работает

Движок окошек: откройте функцию → «Проверить график». Это главный экран самопроверки: он показывает, что сервер понял из вашей таблицы: кого видит, что вычитал из каждого комментария, кто скрыт и почему, до какой даты заполнено расписание. Если кто-то из специалистов не появляется у клиентов, ответ будет здесь.

Дальше «Проверить» → передайте услугу (и возраст, если нужен) → вернётся список свободных слотов. Для Calendar: проверьте, что слоты попадают в ваши рабочие часы.

⚠️ Когда график мешает записи (лист переименовали, специалиста пришлось скрыть, колонки с датами кончились), приходит уведомление владельцу: не чаще раза в сутки, чтобы не превратиться в шум.

Частые ошибки

СимптомПричинаЧто нажать
Бот предлагает время вне рабочих часовРасписание не настроено или взяты дефолтыОткройте функцию «Проверить свободное время», задайте часы/дни
«нет специалистов по услуге»Название услуги не совпадает с колонкой «Предмет»Сверьте название/синонимы в конструкторе услуг
Не считается занятостьНе подключена Education CRM или нет branch_idПодключите CRM, заполните branch_id/subject_id
«Лист … не найден», в ответе перечислены другие листыЛист переименовали в таблицеВпишите новое имя листа в настройках функции
«не найдены ни колонки дней недели, ни колонки с датами»Поменяли раскладку листа или дни лежат не в заголовкахВерните дни в заголовки колонок: либо пн…вс, либо даты ДД.ММ.ГГГГ
«в графике нет колонок на даты …»Календарный лист заполнен по прошедшую датуДозаполните колонки на 2-3 недели вперёд
Специалист работает, но бот его не предлагаетКомментарий в графике не распознан, либо он не сматчился с CRM по имениПроверьте формулировку (см. таблицу выше); имя в графике должно совпадать с именем в CRM

Вопросы, которые обычно возникают

Можно показывать запись на сегодня?
Да: поставьте «Запись минимум за» = 0.

Сколько дней вперёд показывает движок окошек?
До 14 дней (горизонт настраивается).


Под капотом

  • Движок окошек: builtin_booking (find_free_slots), пересечение графика из Sheets ∩ RU-ограничений из комментариев ∩ занятости из edu-CRM. Модель не делает табличную математику: получает готовый ответ.
  • Google Calendar: builtin_calendar; расписание читается из настроек функции (builtin_config): рабочие дни/часы/слот/запас/таймзона.
  • Услуги хранятся в services_json, имена колонок: в columns_json; конструктор сериализует их за вас.

Простыми словами

Представьте администратора, который наизусть знает график всех мастеров: кто когда работает, у кого обед, кто в отпуске, кого нельзя ставить детям. Клиент говорит «хочу на гитару»: администратор мгновенно называет реальные свободные окошки. Движок окошек это и есть такой администратор внутри бота. А если мастер один, хватит простого календаря.


Дальше: → Бот выставляет счёт
Связано: Google Таблицы · Google Calendar
Не получилось? → Функция не срабатывает

Документация › Инструменты бота › Бот выставляет счёт

Бот выставляет счёт (Kaspi)

Бот сам выставляет клиенту счёт прямо в чате: клиент платит через push в Kaspi, деньги идут на вашу Kaspi-кассу.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Клиент готов платить → бот создаёт счёт → клиенту приходит push в приложение Kaspi.
  • Деньги идут напрямую на вашу Kaspi-кассу.
  • Сначала подключите платежи в разделе «Приём оплат» проекта.
  • Бот сам спрашивает у клиента сумму и номер, не выдумывает.
  • Отправив счёт, бот называет номер вслух и предлагает перевыставить, если Kaspi на другом телефоне.
Раздел «Приём оплат»: онбординг Kaspi-кассы и управление счетами клиентов
Раздел «Приём оплат»: онбординг Kaspi-кассы и управление счетами клиентов

Зачем это нужно

Чтобы не уводить клиента из переписки на сторонние ссылки. Договорились, бот тут же выставил счёт, клиент подтвердил оплату в Kaspi, не выходя из диалога. Меньше шагов, больше оплат.

📌 Пример (интернет-магазин). Клиент: «беру, сколько с меня?» Бот: «3 500 ₸, отправляю счёт на ваш номер». Клиенту приходит push в Kaspi, он подтверждает, заказ оплачен.

Что понадобится

  • ☐ Подключённые платежи: раздел «Приём оплат» проекта (мастер подключения)
  • ☐ Kaspi-касса бизнеса

Шаги

  1. Подключите платежи: Проект → Приём оплат и пройдите мастер. Без этого функция вежливо ответит клиенту, что оплата временно недоступна.
  2. Проект → Функции → Создать → Из готового шаблона → Приём оплаты (Kaspi) → Выставить счёт на оплату.
  3. (необязательно) Задайте описание по умолчанию: оно появится в Kaspi-push и чеке, если бот не передаст своё.
  4. В поле «Когда боту это вызывать» опишите момент: «когда клиент согласился оплатить и назвал сумму, выстави счёт».

Что бот собирает у клиента

  • Сумму в тенге (минимум 50, максимум 10 000 000);
  • Номер телефона, привязанный к Kaspi (любой казахстанский формат);
  • За что платит, короткая строка для чека.

Клиенту приходит push в приложение Kaspi: подтвердить нужно в течение 30 минут.

Управление в разделе «Приём оплат»

После подключения раздел «Приём оплат» показывает всё по оплатам проекта, обновляется сам, без перезагрузки страницы:

  • Сводка сверху: сколько получено за месяц и всего, сколько счетов ждут оплаты, сумма возвратов.
  • История счетов: кто, когда, на сколько и статус каждого счёта. Фильтр по статусу (все / ждут оплаты / оплачены / возвраты / отменены) и экспорт в CSV (для бухгалтерии).
  • Выставить счёт вручную, кнопка для счёта без диалога: указываете сумму, номер клиента и описание, клиенту приходит push в Kaspi.
  • Отменить неоплаченный счёт, если клиент передумал, счёт можно закрыть, чтобы он не висел.
  • Вернуть оплату по оплаченному счёту можно сделать возврат: полностью или часть суммы. Деньги уходят обратно на Kaspi клиента.

Проверь, что работает

В тест-чате функция симулирует успех (реальный счёт не создаётся) и показывает, что в боевом диалоге клиент получит push. Для боевой проверки выставьте счёт себе на свой номер: он появится в истории раздела «Приём оплат», там же можно сделать возврат.

Частые ошибки

СимптомПричинаЧто нажать
«оплата временно недоступна»Платежи не подключеныПройдите мастер в разделе «Приём оплат»
Бот просит сумму повторноКлиент не назвал сумму чёткоЭто нормально, бот не выдумывает сумму
Push не пришёл клиентуНеверный номер или не Kaspi-номерБот называет номер прямо в сообщении о счёте: клиенту достаточно ответить, что Kaspi на другом телефоне, и бот выставит счёт заново сам. Если он этого не сделал, уточните номер и выставьте счёт вручную

Вопросы, которые обычно возникают

Где деньги, у DOS?
Нет. Деньги идут напрямую на вашу Kaspi-кассу. DOS, только софт, который помогает выставить счёт.

Какая минимальная сумма?
50 ₸.


Под капотом

  • Встроенная функция builtin_owner_payment: создаёт счёт в кассе владельца и шлёт Kaspi-push. Валидация суммы (50 … 10 000 000 ₸) и номера: до обращения к провайдеру.
  • Структурированные коды ошибок (sub_merchant_not_connected, kaspi_auth_lost и т.п.) дают боту понять, как ответить клиенту.
  • В тест-чате счёт не создаётся, возвращается симуляция успеха.

Простыми словами

Раньше, чтобы взять оплату, нужно было кидать клиенту ссылку или реквизиты и надеяться, что он дойдёт. Теперь бот прямо в чате выставляет счёт, клиенту в Kaspi прилетает «оплатить 3 500 ₸?», он жмёт «да», и всё. Деньги: сразу на вашу кассу.


Дальше: → Письмо клиенту
Связано: Функции
Не получилось? → Функция не срабатывает

Документация › Инструменты бота › Письмо клиенту

Письмо клиенту

Бот сам пишет клиенту письмо: подтверждение, реквизиты, инструкцию или материалы. Ответ клиента приходит на вашу почту.

⏱ 5 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Бот отправляет письмо конечному клиенту от имени вашей компании.
  • Тему и текст бот составляет сам по ходу разговора.
  • Письмо уходит с адреса noreply@dosai.pro; если клиент ответит, придёт на ваш email.
  • Работает сразу, без подключения почтового сервиса.
Каталог функций: шаблон отправки письма клиенту на email
Каталог функций: шаблон отправки письма клиенту на email

Зачем это нужно

Иногда клиенту нужно прислать что-то письмом: подтверждение записи, реквизиты для оплаты, договор, инструкцию. Бот делает это сам, не отвлекая вас.

📌 Пример (автошкола). Клиент записался на занятие. Бот: «отправил на вашу почту памятку, что взять с собой и адрес». Клиент получает письмо, бот продолжает диалог.

Что понадобится

  • ☐ Ваш email для ответов клиента

Шаги

  1. Проект → Функции → Создать → Из готового шаблона → Письмо клиенту → Отправить письмо клиенту.
  2. Укажите «Куда придёт ответ клиента»: ваш рабочий email. Если клиент нажмёт «Ответить» на письмо, оно придёт сюда. Оставите поле пустым: ответы придут на email, с которым вы зарегистрированы в DOS AI.
  3. В поле «Когда боту это вызывать» опишите повод: «когда клиент попросил прислать реквизиты/памятку, отправь письмо».

Тему, текст и адрес клиента бот определяет сам по разговору: тему и текст составляет, email спрашивает у клиента, если тот не назвал.

⚠️ Важно. Письмо уходит с общего адреса noreply@dosai.pro от имени вашей компании (имя проекта в поле «От кого»). Личный почтовый ящик подключать не нужно.

Проверь, что работает

Откройте функцию → «Проверить» → передайте тестовый email, тему и текст → проверьте, что письмо пришло. Ответьте на него: ответ должен прийти на указанный вами адрес.

Частые ошибки

СимптомПричинаЧто нажать
«Email клиента неразборчив»Клиент не назвал почтуЭто нормально, бот переспросит
«уже отправлено недавно»Одинаковое письмо тому же адресу в течение минутыЗащита от повторов; подождите минуту
Ответ клиента приходит не тудаАдрес для ответа не заполнен, работает запасной вариантОтветы идут на email вашего аккаунта; чтобы получать на другой адрес, заполните «Куда придёт ответ клиента»

Вопросы, которые обычно возникают

Можно слать с моего собственного Gmail?
Есть продвинутый вариант «Отправить с Gmail (Workspace)»: он требует Google Workspace и технической настройки (domain-wide delegation). Для большинства проще обычное «Письмо клиенту».

Чем это отличается от уведомления на почту?
Уведомление, вам (владельцу). Письмо клиенту, конечному клиенту.


Под капотом

  • Встроенная функция builtin_email с операцией send_customer. Отправка через Resend; from = имя проекта <noreply@dosai.pro>, reply_to: ваш email из настроек (пусто → email аккаунта владельца).
  • Гарды: один валидный адрес получателя (защита от рассылки), очистка заголовков и три ограничителя подряд: одно и то же письмо на тот же адрес не чаще раза в минуту, на один адрес не больше 5 писем в час, по проекту не больше 60 писем в сутки. Живой переписке эти числа не мешают (письмо клиенту после разговора это единицы в день), а превратить бота в рассыльщик они не дают.
  • Тему/текст/получателя передаёт модель; владелец задаёт только адрес для ответа.

Простыми словами

Бот умеет не только писать в чат, но и отправить клиенту нормальное письмо: например, реквизиты или памятку. Письмо уходит как будто от вашей компании, а если клиент ответит, ответ придёт вам на почту. Ничего настраивать не нужно, только укажите свой email.


Связано: Функции · Уведомления владельцу
Не получилось? → Функция не срабатывает

Документация › Инструменты бота › Рассылки

Рассылки по базе контактов

Появилась акция или новость? Отправь сообщение сразу всей своей базе в Telegram, с сегментами, отложенным запуском и кнопками.

⏱ 7 мин · 👤 для владельца и админа · 🟢 live

За 30 секунд:
  • Раздел «Рассылки» в меню проекта: массовое сообщение по своим контактам.
  • Только Telegram. WhatsApp недоступен намеренно: массовая отправка грозит баном номера.
  • Сегментируй по статусу лида, тегу или рекламной кампании; перед отправкой видно охват (сколько получателей).
  • Можно отложить на будущее время и прикрепить кнопки (ответ/ссылка).
  • Кто написал «стоп», исключается автоматически. Отправка идёт постепенно (бережно к анти-бану).
Раздел «Рассылки»: массовая отправка по сегментам с отложенным запуском
Раздел «Рассылки»: массовая отправка по сегментам с отложенным запуском

Зачем это нужно

Дожимы напоминают о себе одному клиенту по таймеру. А рассылка это когда нужно сказать всем сразу: «в субботу скидка 20%», «открылся новый филиал», «записи на январь открыты». Раньше для этого пришлось бы вручную писать каждому, теперь это одно сообщение и пара кликов.

📌 Пример. Барбершоп запускает акцию на стрижку. Владелец делает рассылку по тегу «постоянный клиент» в Telegram, 140 человек получают сообщение с кнопкой «Записаться», отправка растягивается на несколько минут, никто из отписавшихся не получает спам.

Что понадобится

  • ☐ Подключённый Telegram-канал (рассылки работают только по нему).
  • ☐ Роль владелец или админ проекта (раздел доступен только им).
  • ☐ Желательно, настроенные теги, чтобы точно выбрать, кому слать.

Шаги

1. Открой раздел «Рассылки»

В меню проекта нажми «Рассылки». Создай новую это кнопка вверху.

2. Выбери, кому отправить (сегмент)

Сузь аудиторию любым из фильтров (или оставь пустым, уйдёт всей базе Telegram):

  • Статус лида: например только «горячие» или «потенциальные».
  • Тег: например «постоянный клиент» или «был на пробном».
  • Рекламная кампания: только тем, кто пришёл по конкретной рекламной ссылке.
💡 Совет. Под полем сегмента сразу показывается охват, сколько контактов получат сообщение. Сверься с числом перед отправкой.

3. Напиши сообщение и (по желанию) добавь кнопки

Введи текст. Можно прикрепить до 8 кнопок:

  • Кнопка-ответ: клиент жмёт, бот получает её как сообщение и продолжает диалог.
  • Кнопка-ссылка: открывает URL (только http/https).

4. Отправь сейчас или запланируй

  • Сейчас: рассылка уходит в очередь и начинает рассылаться постепенно.
  • На потом: укажи дату и время; рассылка будет ждать в статусе «запланирована» и стартует сама в нужный момент.

Проверь, что работает

Статус рассылки меняется: черновик → запланирована → в очереди → отправляется → отправлено. В списке видно счётчики (сколько ушло). Запущенную рассылку можно отменить, пока она в очереди или ещё идёт.

Частые ошибки

СимптомПричинаЧто нажать
Нет канала для рассылкиНе подключён TelegramПодключить Telegram
Охват = 0Слишком узкий сегмент или нет Telegram-контактовОслабь фильтр (убери тег/статус)
Хочу слать в WhatsAppНамеренно недоступно (риск бана номера)Используй Telegram

Вопросы, которые обычно возникают

Почему нельзя рассылать в WhatsApp?
Массовая отправка с подключённого номера WhatsApp: самый быстрый путь к его блокировке. Поэтому рассылки ограничены Telegram на уровне системы, а не спрятаны в интерфейсе.

А если человек просил больше не писать?
Контакты, которые написали «стоп» (отписались), исключаются из любой рассылки автоматически: отправлять им повторно нельзя.

Это то же самое, что дожимы?
Нет. Дожимы: авто-напоминания одному клиенту по таймеру после его действия. Рассылка: разовое сообщение сразу многим.


Под капотом (для разработчиков и любопытных)

  • Таблица project_broadcasts: scheduled_at (NULL = сейчас), buttons JSONB, статусы draft → scheduled → queued → sending → sent / failed / canceled.
  • API проекта: GET (список + ?count=1 превью охвата), POST (создать, снимок сегмента в строки-получатели, статус queued), PATCH {action:"cancel"}. Гейт: owner/admin.
  • Telegram-only хардлимит на слое данных: фильтр сегмента всегда добавляет .like("chat_id", "tg_%") и .eq("broadcast_opt_out", false). Поле channel сегмента: вестигиальное, WhatsApp исключён намеренно (ban-risk).
  • Сегмент: lead_status (.eq), tag (.contains tags), campaign (.filter full_data->source_detail->>campaign). Один и тот же фильтр применяется и к превью-COUNT, и к материализации, не могут разойтись.
  • Кнопки санитизируются как inline-кнопки бота: ≤8, label ≤64, url-кнопки только http(s).
  • Отправка paced воркером drip-tick (бережно к анти-бану); он же промоутит scheduled → queued по наступлению scheduled_at.

Простыми словами

Это как разослать одно объявление сразу всем своим клиентам в Telegram, но аккуратно: можно выбрать, кому именно (например только постоянным), приложить кнопку «Записаться», запустить сейчас или поставить на завтра. Тем, кто просил не беспокоить, ничего не уйдёт. В WhatsApp так нельзя: за массовую рассылку номер банят.


Дальше: → Лиды
Связано: Дожимы · Теги · Telegram
Не получилось? → Канал не работает

Документация › Инструменты бота › Исходящие диалоги

Исходящие диалоги (бот пишет первым)

Есть база заявок, но руки не доходят обзвонить? Бот сам напишет первым в WhatsApp по каждому номеру, аккуратно, по капле, с паузами и лимитами, чтобы не спалить номер.

⏱ 12 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Исходящие = бот сам инициирует диалог с человеком из заявки (пишет первым), а не ждёт входящего.
  • Работает только через подключённый WhatsApp-канал (QRDOS).
  • Это серый режим: WhatsApp может забанить номер за сообщения незнакомцам. Включает только владелец, под свою ответственность.
  • Текст первого сообщения вы пишете сами (готовые варианты, без ИИ). Бот шлёт случайный из списка, с подстановкой имени и услуги.
  • Первый запуск ведёт мастер: Сообщение (что писать) → Номера (кому) → Проверка и запуск, включая тест на своём номере одной кнопкой.
  • Рассылка по списку номеров бесплатна (готовый текст, ИИ не тратится).

⚠️ Сначала прочтите про риск

Исходящие, это серый режим. Вы пишете первыми незнакомым номерам. WhatsApp считает это спам-паттерном и может заблокировать номер, а это ваш основной рабочий номер: при бане теряется вся переписка с текущими клиентами.

Все встроенные защиты (лимиты, паузы, прогрев, проверка номера, автопауза) только снижают риск, но не убирают его.

🚫 Не включайте на главном номере, если не готовы к риску бана. Лучше отдельный номер под холодную рассылку.

Перед запуском обязательно прочтите Гигиену и антибан.

Включить Исходящие может только владелец проекта, поставив галку «Понимаю риск и беру ответственность на себя».


Что нужно до старта

  1. Подключённый WhatsApp-канал (QRDOS). См. Подключение WhatsApp. Без живого канала бот физически не сможет писать: лиды будут копиться в очереди, но не отправляться. В кабинете вы увидите красное предупреждение «WhatsApp-канал не подключён».
  2. Роль владельца. Включение и приём ответственности доступны только владельцу.

Баланс для рассылки по списку не требуется: первое сообщение это готовый текст, ИИ не участвует, токены не тратятся.


Как устроена страница

Первый запуск: мастер. Пока кампания ни разу не запускалась, страница показывает один экран с текущим шагом: 1 Сообщение → 2 Номера → 3 Проверка и запуск. Формы прямо в шагах, ничего искать не нужно. Мастер можно пропустить ссылкой сверху; после запуска он больше не появляется.

Дальше: кабинет кампании.

  • Пульт (карточка сверху): статус кампании словами и, главное, почему бот молчит прямо сейчас: «Кампания на паузе: причина», «Защитная пауза после подключения: ещё ~N мин», «Сейчас нерабочие часы», «Дневной лимит исчерпан», «Работает: в очереди N» или «Очередь пуста». Рядом полоса «Сегодня: X из Y» (сколько первых сообщений уже отправлено против действующего лимита; при прогреве написано «прогрев номера, день N»). Справа всегда красная кнопка «Стоп всё» (мгновенная пауза), на паузе вместо неё «Снять паузу». Текст про риск свёрнут в маленькую ссылку.
  • Пульс кампании: четыре живые плитки (Новые / В очереди / Отправлено / Ответили). Обновляются сами; клик по плитке открывает список лидов уже с этим фильтром.
  • Четыре вкладки: «Рассылка» (номера, запуск, список лидов, ответы), «Сценарий» (тексты), «Безопасность» (лимиты), «Статистика» (воронка и доставка).
  • При первом ответе появится разовый баннер «Есть ответ!» с кнопкой к списку ответивших.

Шаг 1. Сценарий: что бот пишет первым

Вкладка «Сценарий». Здесь вы задаёте типы заявок и текст первого сообщения для каждого.

Тип заявки это категория обращений со своим текстом. Например, заявки на «SMM», «Таргет», «Сайт»: заведите три типа, для каждого свой текст. Если заявки однотипные, хватит одного типа «Основной».

Как заполнить:

  • Текст первого сообщения (обязательно). Вы пишете готовое сообщение, бот отправит его как есть, без ИИ.
  • Несколько вариантов (по желанию, до 10). Бот каждому новому человеку отправит случайный из списка. Это «ротация»: снижает риск блокировки, WhatsApp не любит, когда со всех номеров летит один и тот же текст.
  • Название типа (по желанию). Только для вас. Пустое → «Основной».
  • Авто-подбор типа (по желанию). Если в данных заявки есть поле с определённым значением (например, услуга = SMM), бот сам выберет нужный тип.

Подстановки

В текст можно вставить переменные:

  • {{имя}}: подставится имя из заявки.
  • {{услуга}}: подставится услуга.
  • {{любое поле}}: любое другое поле заявки по его названию. Загрузили список с колонкой «город», пишете {{город}}; пришла заявка по API с полем filial, пишете {{filial}}.

Если в заявке нужного поля нет, кусочек аккуратно уберётся (включая предлог перед ним), сырые скобки клиенту никогда не уходят.

Развилки: разное сообщение каждому

В одинарных скобках через вертикальную черту пишутся варианты кусочка фразы, и бот выбирает один при каждой отправке:

  • {Здравствуйте|Добрый день|Привет}, {{имя}}! даст три разных начала;
  • Напишите{, если удобно|} иногда добавит хвост, иногда нет (пустая ветка после черты это «ничего»);
  • развилки перемножаются: три начала × три середины × два конца это восемнадцать разных сообщений из одного шаблона.

Зачем: ротация готовых вариантов ограничена десятью, а людей в списке бывают сотни, и одиннадцатый получает текст, который уже уходил кому-то. Одинаковые сообщения пачкой с одного номера это то, за что WhatsApp ограничивает номера, и то, по чему человек узнаёт робота.

⚠️ Не путайте скобки: двойные {{имя}} это подстановка из заявки, одинарные {а|б} это развилка. Одинарные скобки без черты остаются в тексте как есть.

📌 Пример: «Здравствуйте, {{имя}}! Вы оставляли заявку на {{услуга}}: подскажите, актуально?» → для заявки без имени и услуги превратится в «Здравствуйте! Вы оставляли заявку: подскажите, актуально?»

💡 Пока вы печатаете, рядом с полем обновляется живое превью «Так увидит клиент»: ваше сообщение в виде WhatsApp-пузыря с подставленным примером имени. Видно, как текст выглядит у клиента, ещё до отправки. Кнопки-примеры («пример 1», «пример 2») вставят готовый текст, чтобы отредактировать под себя, а черновик сохраняется сам и не потеряется при переходе на другую вкладку. Проверить текст на конкретном номере из вашего списка можно кнопкой «Показать пример сообщения» в блоке «Добавить номера» (вкладка «Рассылка»). А если заданы дожимы, внизу «Сценария» появится лента «Вся цепочка глазами клиента»: первое сообщение и напоминания по порядку, как их получит человек.

Дожимы (необязательно)

Тут же можно задать напоминания тем, кто не ответил на первое сообщение. Это тоже готовый текст (с теми же подстановками, что и в первом сообщении), а не ИИ. Например: первое напоминание через 24 часа, второе через 72.

Дожимы работают только пока человек молчит. Как только он ответит, напоминания прекращаются и диалог переходит в обычный режим (подключается основной бот проекта). Подробнее про механику, Дожимы.


Шаг 2. Номера: кому бот напишет

Вкладка «Рассылка», блок «Добавить номера» (у новой кампании раскрыт сразу, у работающей свёрнут в одну строку). Три способа добавить номера.

Способ 1. Вставить список (самый простой)

  1. Вставьте номера в поле, по одному в строке. Можно с именем через запятую: +7 705 123 45 67, Айгерим (имя необязательно). Или нажмите «Загрузить CSV».
  2. (по желанию) «Показать пример сообщения» покажет 1-2 сообщения в виде WhatsApp-пузырей, ничего не отправляя. «Проверить список» разложит базу по бейджам: всего / валидных / дублей / в стоп-листе / уже в работе / к загрузке / сколько номеров есть в WhatsApp.
  3. «Загрузить в очередь (N)»: на кнопке сразу видно, сколько номеров распознано. После нажатия номера станут лидами.

После загрузки прямо на месте появится зелёная строка «✓ Загружено N» с кнопкой «Запустить сейчас»: никуда переходить не нужно. Номера станут «лидами» (список ниже на той же вкладке). Бот напишет им не все разом, а по капле: по одному, с паузами и дневным лимитом. Например, 100 номеров при лимите 20 в день разойдутся примерно за 5 дней.

⚠️ Старые базы номеров = выше риск бана. Свежие заявки безопаснее.

Способ 2. Telegram-ловец заявок (автоматически)

Если заявки с рекламы падают в Telegram-группу (таргетолог / форма / CRM), можно поставить отдельного бота в этот чат: он сам распознает заявки, вытянет номер и превратит их в лидов. Ручные списки не понадобятся.

Настройка (только владелец):

  1. В @BotFather создайте нового бота, скопируйте токен. Там же /setprivacy → Disable (иначе бот не видит сообщения группы).
  2. Добавьте бота в вашу группу с заявками.
  3. Узнайте ID чата (например, через @getidsbot), обычно начинается с -100.
  4. Впишите токен и ID чата в кабинете, «Подключить ловец».

🔧 Как это работает: сначала бот бесплатно ищет телефон в тексте (regex). Если телефона нет, сообщение игнорируется без затрат. Если телефон есть, дешёвый ИИ-классификатор решает, заявка это или болтовня, и вытягивает имя/услугу. Только этот шаг тратит токены (лимит по умолчанию 200 распознаваний в сутки, нужен положительный баланс). Телефон всегда берётся из реального сообщения, ИИ его не выдумывает.

Способ 3. API (для разработчика)

Заявки с формы сайта можно слать прямо в очередь. Нужен API-ключ проекта (создаётся в настройках проекта).

POST https://dosai.pro/api/projects/<id>/outreach/intake
Authorization: Bearer dos_sk_live_...
Content-Type: application/json

{"phone":"+77051234567","name":"Айгерим","fields":{"услуга":"SMM"}}

Шаг 3. Запуск

Есть два режима (вкладка «Безопасность», блок «Режим запуска»):

  • Полу-ручной (по умолчанию): бот берёт номера в очередь только после вашей команды. Запустить можно тремя способами, все на виду: кнопка «Запустить сейчас» сразу после загрузки, оранжевая строка «N номеров готовы к запуску» вверху «Рассылки» или кнопка «Начать» у конкретного лида.
  • Авто: бот сам берёт новые номера в работу в ближайшие минуты, кнопку жать не надо.

После запуска следите за пультом (он сам объяснит, что происходит), плитками «пульса», списком лидов и воронкой во вкладке «Статистика».


Безопасность и лимиты

Всё настраивается на вкладке «Безопасность»: настройки собраны в три блока. Значения по умолчанию подобраны консервативно.

Блок «Режим запуска»: полу-ручной (оператор сам жмёт «Начать», полный контроль) или авто (система сама берёт новых лидов в работу в рамках всех лимитов).

Блок «Сколько и как часто» (главные ручки анти-бана):

ЗащитаПо умолчаниюЧто делает
Лимит новых сообщений в день20Больше этого числа первых сообщений в сутки бот не отправит. При значении выше 20 поле подсвечивается красным: высокий риск блокировки.
Плавный прогрев номерадни 1-2: до 5, дни 3-6: до 10, дни 7-13: до 20, с дня 14: полный лимитСвежий номер разгоняется постепенно, резкий старт = красный флаг для WhatsApp. Прогрев начинается заново и на другом номере, и когда WhatsApp ограничивал номер, а потом его вернул: такой номер под особым вниманием. Фактический план прогрева написан прямо под переключателем.
Пауза между сообщениями: от / до60-180 секБот берёт случайное время из диапазона: разброс выглядит по-человечески, а не как робот по таймеру.
Только в рабочие часывключеноБот пишет только в часы работы из расписания проекта (если оно задано).

Блок «Автозащита» (работает сама):

ЗащитаПо умолчаниюЧто делает
Автопауза при недоставке30% из последних 10Если много сообщений не доходит (мёртвые номера / блокировки), кампания сама встаёт на паузу и владельцу приходит уведомление.
Свежесть заявки10 мин (только для API-лидов)Старые заявки из API не холодятся (по разовым спискам это правило не действует).
Убирать из очередичерез 7 днейЛид, простоявший в очереди дольше, снимается сам: бот не пишет по совсем протухшей базе.
Требовать согласиевключено (для API-лидов)Писать только тем, кто отметил согласие в форме. Для списков и Telegram согласие покрыто модалкой ответственности.

Плюс защиты, которые работают всегда, без настройки:

  • Пауза после подключения канала, 15 минут. Сразу после подключения WhatsApp бот не пишет ещё 15 минут (это самое опасное окно для свежего соединения).
  • Проверка номера в WhatsApp. Перед отправкой бот проверяет, есть ли номер в WhatsApp. Нет → пропускает (отправка на несуществующий номер = сигнал бана).
  • Не пишет в существующий диалог. Если с номером уже есть переписка, бот не влезает (это уже не холодный контакт).
  • Не пишет на ваш собственный номер (тот, что подключён как канал).
  • Стоп-лист. Номер, добавленный в стоп-лист, бот больше никогда не тронет.

🚨 Функция остановки диалога. Чтобы бот умел остановиться по просьбе клиента («не пишите мне»), в проекте должна быть включена встроенная функция остановки. На вкладке «Безопасность» видно, включена она (✓) или нет (✗).

Стоп всё. В любой момент кнопкой «Стоп всё» (красная, на пульте сверху) можно мгновенно поставить всю кампанию на паузу. Причина паузы будет написана на пульте, рядом появится кнопка «Снять паузу».


Как читать статусы лидов

Список лидов живёт внизу вкладки «Рассылка» и показывает, что с каждым номером. Есть поиск (телефон в любом формате или имя) и фильтр по статусу. Статусы отображаются цветными пилюлями (оранжевая = в работе, зелёная = успех, красная = ошибка); наведите на статус, всплывёт подсказка. Быстрый путь: клик по плитке «пульса» сразу открывает список с фильтром по этому статусу.

📌 Фильтр «Ответил» показывает не таблицу, а витрину ответов: кто ответил, что именно написал (первая реплика) и кнопка «Открыть диалог». Это главный экран результата: сюда стоит заглядывать каждое утро.

СтатусЗначение
НовыйЗагружен, но не запущен. Нажмите «Начать».
В очередиЖдёт отправки. Бот напишет по капле.
ОткрываетсяПрямо сейчас бот открывает диалог.
ОтправленоБот написал первым, ждём ответа.
ОтветилЛид ответил! Диалог перешёл в обычный режим (см. Диалоги).
ОшибкаНе удалось отправить. Можно повторить.
ПропущенНомер пропущен, рядом причина (см. ниже).
УстарелСлишком долго ждал в очереди, снят автоматически.

Причины у статуса «Пропущен»: нет в WhatsApp, это ваш номер, уже есть диалог, в стоп-листе, нет согласия, заявка устарела.

Во вкладке «Статистика»:

  • Воронка исходящих: Отправлено → Прочитано → Ответили, с процентами от отправленных. Сразу видно, где теряются люди: не доходит текст или доходит, но не цепляет.
  • Чипы «Пропущено / Ошибки / Устарело» под воронкой кликабельны: открывают список лидов с этим фильтром.
  • Оценка очереди: «В очереди N лидов, при лимите X в день это примерно Y дней».
  • Доставка первого сообщения: дошло ли до телефона (✓✓), прочитал ли лид, среднее и медианное время до прочтения, последние прочтения поимённо. Цифры обновляются сами, пока вкладка открыта.

Как проверить, что всё работает

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

Три условия честного теста:

  1. Канал подключён и «на связи» (иначе тест не уйдёт, пульт это прямо скажет).
  2. Свежий номер. Не тот, что подключён как канал («Пропущен: это ваш номер»), и без прошлой переписки с этим ботом («Пропущен: уже есть диалог»).
  3. Терпение 5-20 минут. Бот-рассыльщик просыпается раз в 5 минут, а первые 15 минут после подключения канала действует защитная пауза. Если сейчас что-то мешает (пауза, нерабочие часы, исчерпанный лимит), блок теста напишет это прямо под статусом, это не поломка.

✅ Сообщение пришло на телефон, а ответ с него перевёл статус в «Ответил» → связка работает от начала до конца, можно запускать базу.

❌ Тишина → посмотрите на пульт (он называет причину) и на статус тестового номера: «Пропущен» (и почему), «Ошибка» или «В очереди» (ещё не прошёл паузы/лимиты).


💬 Простыми словами

Обычно бот отвечает тем, кто написал вам сам. Исходящие переворачивают это: бот сам пишет первым людям из вашей базы заявок, как будто менеджер обзванивает лиды, только в WhatsApp и автоматически.

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

Главное помнить: это рискованно для номера (WhatsApp не любит, когда пишут незнакомцам), поэтому не ставьте на свой главный номер и начинайте с маленькой свежей базы. И не ждите, что бот напишет мгновенно после подключения: первые 15-20 минут он специально молчит, это защита (пульт так и напишет).


🔧 Под капотом (для разработчика)

  • Отправка идёт только через self-hosted WhatsApp-канал (QRDOS). На других провайдерах проект молча пропускается.
  • Рассыльщик, отдельный cron-тик (раз в 5 минут). За один тик, не больше 2 сообщений на проект и не больше 6 суммарно, с паузами.
  • Первое сообщение собирается без ИИ: случайный вариант из типа заявки + подстановка {{имя}}/{{услуга}}. Ноль токенов. Поэтому рассылка по списку бесплатна.
  • Холодный диалог не считается «диалогом» в аналитике, пока лид не ответит (чтобы не портить конверсию). Как ответит, засчитывается один раз.
  • Telegram-ловец, единственное место, где в Исходящих участвует ИИ (классификатор «заявка / не заявка»), поэтому у него отдельный дневной лимит распознаваний и нужен баланс.

Не получилось?

  • Бот молчит: если сообщения не уходят.
  • Канал недоступен: если WhatsApp-канал отвалился.
  • Посмотрите на пульт сверху страницы: он словами называет, почему бот молчит прямо сейчас. Статус конкретного лида в списке «Рассылки» уточнит причину по номеру.

Документация › Работа с клиентами › Диалоги

Диалоги: лента, перехват, «AI на паузе»

«Диалоги» это центр, где ты видишь все переписки бота с клиентами в реальном времени и можешь в любой момент вмешаться, взять разговор на себя, поставив ИИ на паузу.

⏱ 9 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Раздел «Диалоги» (проект → chats): лента всех переписок, обновляется сама, без F5.
  • У каждого диалога в шапке, переключатель «AI ON / AI OFF»: красный = ИИ выключен в этом чате.
  • Начал писать клиенту вручную → ИИ автоматически встаёт на паузу (настраивается). Это перехват.
  • Если пишешь, а ИИ ещё включён, увидишь подсказку «ИИ всё ещё отвечает, выключите „AI" в шапке», чтобы не отвечать вдвоём.
  • Каналы WhatsApp и Telegram видны вместе, помечены значком.
Раздел «Диалоги»: лента переписок в реальном времени, пауза AI и перехват оператором
Раздел «Диалоги»: лента переписок в реальном времени, пауза AI и перехват оператором

Что это и зачем

Бот общается с клиентами сам, но иногда нужно вмешаться: сложный вопрос, дорогой клиент, жалоба. Раздел «Диалоги» (route /projects/<id>/chats) показывает все переписки списком и панель открытого чата рядом. Всё обновляется в реальном времени: новые сообщения и статусы прилетают сами.

Слева, список диалогов с фильтрами, справа, переписка с клиентом и поле ввода. Сверху чата: управление ИИ и статусом.


Перехват: взять разговор на себя

Главная механика раздела. Есть два способа поставить ИИ на паузу в конкретном диалоге:

1. Просто начни писать клиенту вручную. Когда оператор отправляет сообщение из диалога, платформа (если включена настройка pause_on_operator) автоматически:

  • ставит ai_on = false в этом диалоге,
  • помечает причину operator_joined_chat,
  • запоминает время паузы.

То есть бот замолкает, разговор ведёшь ты. Это самый естественный перехват, «вошёл и говоришь».

Отдельно про случай, когда вы начали писать в ту же секунду, что и бот. Ответ бота идёт до клиента не мгновенно: он ждёт паузу буфера, потом думает, потом длинный ответ уходит несколькими сообщениями с человеческими паузами между ними. Если вы вступили в разговор посреди этого, платформа обрывает недосланные сообщения бота, а в переписке остаётся ровно то, что клиент действительно увидел. Одно-два сообщения, уже ушедшие в WhatsApp до вашего, отменить нельзя: они у клиента на телефоне.

2. Переключатель в шапке. Кнопка-пилюля «AI ON / AI OFF»: нажал, ИИ выключен/включён вручную в этом диалоге. Красная рамка = выключен.

💡 Тонкие настройки перехвата живут в Настройках бота → Расширенные настройки → Контроль оператора:
  • pause_on_operator: ставить ли ИИ на паузу, когда оператор пишет (можно отключить, если хочешь писать «вместе» с ботом);
  • ignore_first_operator_message, не паузить на первом сообщении оператора (удобно, если первое: это пометка/приветствие);
  • exception_phrases: фразы-исключения, после которых пауза не ставится;
  • там же: пауза после состоявшегося звонка, автовозобновление и три функции про остановки (по просьбе клиента бот замолкает, откладывает или отключает дожимы).

Защита от «двойного ответа»

Если ты в режиме оператора начал печатать, а ИИ в этом диалоге ещё включён, платформа показывает предупреждение:

«ИИ всё ещё отвечает, выключите „AI" в шапке, чтобы вести диалог самому»

Это чтобы вы с ботом не ответили клиенту одновременно. Увидел подсказку: выключи AI в шапке.


Вернуть бота

Закончил разговор: снова включи «AI ON» в шапке диалога. Бот продолжит вести клиента дальше. По умолчанию пауза снимается только вручную: платформа не включит ИИ за тебя, чтобы не влезть в твой живой разговор.

Если не хочешь возвращать его руками каждый раз, включи автовозобновление (Настройки бота → Расширенные настройки → Контроль оператора) и задай срок. Дальше правило простое: когда ты этот срок не пишешь в чат, а клиент напишет снова, бот ответит на его сообщение сам. Первым он не пишет и приветствие в тишину не шлёт, поэтому «оживший» диалог всегда начинается с вопроса клиента. Срок считается от твоего последнего сообщения: пока разговор идёт, бот не вмешивается.

Паузы по просьбе клиента, после звонка и после передачи заявки автовозобновление не снимает: там бот молчит намеренно.


Ответ с цитатой

Ответ бота привязан к сообщению клиента, как «Ответить» в WhatsApp: над первым пузырём ответа видно, на что именно бот отвечает. Так и клиенту, и тебе в ленте понятно, к какому вопросу относится ответ, особенно когда человек прислал несколько сообщений подряд.

  • Одно сообщение: цитируется оно.
  • Пачка сообщений: цитируется последнее из пачки (бот отвечает на всю пачку разом, а привязать ответ WhatsApp умеет к одному сообщению).
  • Голосовое, фото или файл: цитируется само голосовое, фото или файл, мессенджер сам рисует превью.
  • Цитата только на первом пузыре, остальные части ответа идут без неё.

В Telegram работает так же. В ленте «Диалогов» привязка видна той же цитатой, что у ответов оператора. Выключается в настройках бота: Расширенные настройки → Разделение сообщений → «Отвечать с цитатой сообщения клиента».


Отправить позже

Клиент написал в час ночи, ответ у вас готов, но будить его сообщением незачем. Нажмите на часы рядом с полем ввода, выберите время, и сообщение уйдёт само.

Есть три быстрые кнопки (через час, завтра в 9:00, в понедельник в 9:00) и обычный выбор даты со временем, если нужен другой момент. Всё, что стоит в очереди по этому диалогу, видно там же, любое можно отменить, пока оно не ушло.

Запланированное сообщение отправляется ровно так же, как обычное: тем же каналом, с той же паузой бота, и в переписке выглядит обычным сообщением оператора. Точность до пяти минут: платформа проверяет очередь каждые пять минут, поэтому «в 9:00» означает промежуток с 9:00 до 9:05.

Пара оговорок. Если в момент отправки ваш WhatsApp-номер занят защитой от блокировки, сообщение подождёт следующей проверки, а не потеряется. Если оно опоздало больше чем на сутки (например номер долго был отключён), платформа его не отправит и покажет причину: «доброе утро» через день хуже молчания. Планировать можно текст, для файла из медиатеки пользуйтесь обычной отправкой.

Статусы и фильтры

У диалога есть статус: открыт (open), решён (resolved), закрыт (closed). В списке можно фильтровать:

  • по статусу (все / открытые / решённые / закрытые),
  • по каналу (все / WhatsApp / Telegram),
  • по состоянию ИИ, можно отметить сразу несколько: on (бот ведёт), off (выключен вручную), paused (на паузе), operator (перехватил оператор), done (диалог доведён до конца), pre_existing (переписка была до подключения бота),
  • по тегам,
  • только непрочитанные (onlyUnread),
  • архив (showArchived),
  • отложенные: чаты, которые вы сами отложили на потом (кнопка «Отложить чат»), со счётчиком,
  • «Ждут ответа»: диалоги, где бот намеренно промолчал и ответить должен человек. Так бывает со старой перепиской после переподключения канала, со знакомым контактом и с клиентом, пришедшим не с рекламы. Рядом с фильтром стоит счётчик: видно, сколько таких накопилось.

Плюс сортировка (свежие / старые / самые длинные переписки) и сохранённые виды: набрал нужную комбинацию фильтров, сохранил её под именем и возвращаешься одним кликом.

💡 «Ждут ответа» стоит открыть прямо сейчас, если бот работает не первый день. Раньше такие чаты были помечены значком, но собрать их в одном месте было нельзя, и они копились незамеченными: это самая частая причина «клиент писал, а ему никто не ответил».

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

⚠️ Часть массовых действий (например, закрыть пачкой) требует роли администратор, как и одиночное действие того же типа. См. Роли и права.

Реалтайм без F5

Список и открытый чат обновляются автоматически: платформа подписана на изменения переписок проекта и получает их сразу. Новое сообщение клиента, смена статуса, пауза ИИ: всё появляется само. Обновлять страницу не нужно.


Звуковые уведомления

Когда вкладка с диалогами свёрнута или неактивна, платформа подаёт тихий звуковой сигнал:

  • двойной сигнал: написал новый клиент (появился новый диалог),
  • короткий сигнал: новое входящее сообщение в существующем диалоге.

Ответы бота и оператора звук не издают, сигналит только реальный клиент. Между сигналами всегда пауза в несколько секунд, поэтому активная переписка не превращается в пулемёт.

Настройки живут в списке диалогов: Фильтры → «Звуковые уведомления». Можно выключить звук целиком, оставить только «новый диалог» или только «новое сообщение», а также включить звук даже при открытой вкладке. Настройки сохраняются отдельно для каждого проекта в этом браузере: шумный бот с трафиком можно приглушить, не трогая остальные.


Звонки видны в переписке

Звонок в WhatsApp это не сообщение, и сам по себе он в переписке не остался бы. Платформа ставит на него отдельную отметку прямо в ленте чата, между сообщениями, чтобы разговор не выпадал из истории:

  • Пропущенный звонок клиента: красная отметка слева.
  • Звонок, на который ответили: зелёная отметка с длительностью разговора. Если у вас включена настройка «Выключать ИИ после состоявшегося звонка» (по умолчанию включена), бот в этом чате замолкает: дальше клиента ведёте вы. Вернуть его можно тумблером AI в шапке диалога.
  • Ваш звонок клиенту: отметка справа, как исходящее сообщение. WhatsApp сообщает о таком звонке подключённому устройству не сразу: обычно через несколько минут после разговора, иногда позже. Как только запись доходит, бот в этом чате замолкает по той же настройке. Звонок старше двух часов бота уже не выключает: клиента к тому моменту мог вести бот, и обрывать его молча было бы хуже.

Отметка о звонке видна и боту: он понимает, что разговор состоялся, и не начинает консультацию с нуля поверх вашей договорённости.

Отдельная настройка «Отвечать на пропущенные звонки» (у проектов, созданных с 14 сентября 2026, включена сразу, у более ранних выключена) решает другое: писать ли клиенту сообщение после того, как до вас не дозвонились. Она не связана с отметками, те появляются всегда.


Каналы в одной ленте

WhatsApp и Telegram показываются вместе; канал виден по значку и идентификатору (wz_… / tg_…). Подробнее: Обзор каналов.


Простыми словами

«Диалоги» это твоя диспетчерская. Здесь видно всё, что бот пишет клиентам, прямо вживую: ничего не надо обновлять. Если видишь, что в каком-то чате нужно вмешаться, просто начни писать клиенту сам, и бот тут же замолкает: дальше говоришь ты. Это и есть «перехват».

В шапке каждого чата есть кнопка «AI», зелёная значит бот отвечает, красная, он на паузе и ждёт тебя. Закончил разговор: включи бота обратно той же кнопкой, и он продолжит. Платформа специально не включает его сама, чтобы не влезть в твою беседу.

И маленькая страховка, если ты начал печатать, а бот ещё включён, появится подсказка «выключи AI в шапке», чтобы вы случайно не ответили клиенту вдвоём.


Дальше: → Лиды и их статусы
Связано: Стадии диалога · Логи событий · Роли и права · Бот не отвечает
Не получилось? → Бот не отвечает, диагностика

Документация › Работа с клиентами › Лиды

Лиды и их статусы

Заявки, которые бот собрал из переписок: кто, как связаться, насколько «горячий». Твоя воронка продаж.

⏱ 8 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • Лид = потенциальный клиент с данными (имя, телефон) и статусом.
  • Бот сам создаёт лида, когда клиент квалифицировался и оставил контакт.
  • 7 статусов, от «нет»/«потенциальный» до «конвертирован»/«потерян».
  • Можно фильтровать, искать, экспортировать в CSV, заводить лида вручную.
  • Статус можно менять руками; «конвертирован/потерян»: финальные.
Раздел «Лиды»: список заявок со статусами, стадиями и источниками
Раздел «Лиды»: список заявок со статусами, стадиями и источниками

Зачем это нужно

Переписок много, а важны те, кто реально готов купить. Лиды это «выжимка»: бот вытаскивает из диалогов контакты и интерес, ставит статус, и ты видишь воронку: кому перезвонить, кто горячий, кто отвалился. Без этого заявки тонут в чатах.

Где это

Меню проекта → «Лиды». Смотреть может viewer, менять, editor+.

Что такое лид

У каждого лида есть:

ПолеЧто это
ИмяКак зовут клиента (бот спросил/распознал)
ТелефонКонтакт для связи
EmailЕсли оставил
СтатусНасколько «горячий» (см. ниже)
ДатаКогда появился
РезюмеКраткая выжимка диалога от бота
ИсточникКанал (WhatsApp/Telegram), откуда пришёл
Заметки оператораТвои пометки

Статусы лида

СтатусЧто значитСоздаёт лида?
НетОбычный посетитель, без интересанет
ПотенциальныйЕсть интерес, но нет данных/решениянет
КвалифицированСогласен + есть контакт✅ да
ГорячийГотов покупать, обсуждает оплату✅ да
РезервОтложил, но вернётся✅ да
КонвертированСделка закрыта (оплатил)финальный
ПотерянОкончательно отказалсяфинальный

💡 Как ставится. В основном бот сам по ходу разговора (если включена воронка продаж). Лид автоматически создаётся, когда статус становится «квалифицирован/горячий/резерв» и есть имя+телефон. Ты можешь поменять статус вручную в любой момент.

📌 Пример. Клиент уточнил цены, согласился записаться, оставил телефон → бот ставит «квалифицирован» → появляется лид. Дошёл до оплаты → «горячий». Оплатил → ты ставишь «конвертирован».

Кто создаёт лида: статус, а не функция

Это место, где обычно путаются. Разложим по полочкам.

Главное: при включённой воронке лида создаёт сам бот, статусом, на уровне промпта. При выключенной, телефон клиента (см. ниже). Никакую функцию для этого настраивать не нужно ни в том, ни в другом случае.

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

То есть:

  • Квалификация это момент, когда бот сам решил «это заявка» и поставил создающий статус. Это его суждение по правилам из системного промпта, а не кнопка и не функция. Откуда берётся: бот читает разговор и определения статусов из промпта, и каждый ход выбирает подходящий.
  • Лид: карточка, которая появляется в результате этого статуса.

Если воронка выключена

Воронку продаж можно отключить: тогда бот не раскладывает разговор по статусам, а просто консультирует и продаёт. Раньше в этом режиме карточки лидов не появлялись вовсе, и человек, оставивший телефон, оставался только в переписке. Теперь по-другому:

Воронка выключена: карточку заводит телефон. Как только клиент назвал номер в разговоре, платформа сама создаёт лида и присылает уведомление в колокольчик. Ни статуса, ни функции для этого не нужно.

Номер самого чата в WhatsApp сигналом не считается, иначе лидом становился бы каждый написавший. Нужен именно номер, прозвучавший в переписке. Статус у такой карточки ставится «квалифицирован», дальше меняй его руками как обычно.

Функция ≠ создание лида

Функции (например «Уведомление в Telegram», «Запись на время», «Приём оплаты»): это действия, а не создание лида:

  • функция «Уведомление владельцу» шлёт тебе сообщение в Telegram «лови заявку», но карточку лида создаёт статус, а не она;
  • можно квалифицировать клиента без единой функции: лид всё равно появится в разделе «Лиды».

Часто статус и функция срабатывают в одном ходе (бот квалифицировал клиента и отправил тебе уведомление): отсюда и путаница. Но это две независимые вещи: статус пишет карточку в CRM, функция делает действие во внешнем мире.

Нужны ли функции для аналитики?. Нет

Диалоги, лиды, конверсия, источники: аналитика считается сама, из статусов лида и факта «бот ответил». Чтобы видеть правильные цифры, не нужно настраивать ни одной функции. Функции добавляют только когда боту нужно реальное действие: уведомить, записать на время, принять оплату.

Свои статусы под твой бизнес

Сейчас платформа работает со стандартными 7 статусами лида: они покрывают путь от «потенциальный» до «конвертирован»/«потерян» (см. справочник статусов). Возможность задать собственные статусы (кастомная воронка) временно недоступна: редактор убран из настроек, вернём в упрощённом виде. Нужны свои этапы под бизнес, напиши в поддержку: это ускорит возврат фичи, а пока логику этапов можно описать словами в системном промпте и уточнять картину тегами.

Два продукта (или направления)

Два пути:

  • Один проект + теги: бот вешает на лида тег «Продукт А» / «Продукт Б», статусы общие. В аналитике увидишь разбивку по тегам. Подходит, если процесс продажи похож.
  • Отдельные проекты, если у продуктов разные скрипты, каналы и логика квалификации, заведи отдельный проект на каждый (свой бот, своя воронка). Чище и не путается.

Что можно делать

  • Фильтр по статусу и поиск по имени/телефону/email;
  • Фильтр по источнику: каналу (WhatsApp/Telegram) и для рекламных/кампанийных лидов по конкретному объявлению / площадке (Facebook/Instagram) / кампании / UTM, чтобы одним кликом собрать всех лидов с этого источника. Разрез появляется, когда такие лиды есть;
  • Колонка «Источник» в таблице показывает не только канал, но и название объявления / кампанию / площадку: видно сразу, откуда лид, без захода в карточку;
  • Колонка «Сумма» и сортировка по сумме (↓/↑) это крупные сделки наверх;
  • Диапазон дат;
  • Экспорт CSV (Имя, Телефон, Email, Статус, Теги, Дата): учитывает активные фильтры; для обзвона или своей таблицы;
  • Завести лида вручную (кнопка создания): если клиент пришёл не через бота;
  • Карточка лида (клик): полные данные, смена статуса, сумма сделки (₸/$, попадает в аналитику как выручка по объявлению/источнику, учитывает офлайн-продажи), заметки оператора, кнопки «позвонить/написать», резюме диалога и источник вплоть до объявления (превью, заголовок, площадка, ссылка, UTM) для рекламных лидов;
  • Массовые действия (editor+): сменить статус, удалить, экспортировать выбранных.

Связь с дожимами

Лиды, которые «зависли» (квалифицировались, но не дошли до оплаты), кандидаты на дожимы: бот напомнит о себе сам. Настраивается авто-зачисление по статусу.

Частые ошибки

СимптомПричинаЧто делать
Лидов нет, хотя переписки идутВыключена воронка / клиенты не оставляют контактВключи воронку, в промпте проси брать имя+телефон
Лид создался без телефонаБот квалифицировал по интересу, контакт позжеДозапросит в диалоге; можно вписать вручную в карточке
Не могу сменить статусРоль viewerНужна editor+ → Роли
Дубли лидовКлиент писал с разных номеровОбъедини вручную / веди по основному

Вопросы, которые обычно возникают

Чем лид отличается от диалога?
Диалог это вся переписка. Лид: «карточка клиента» с контактом и статусом, выжимка из диалога. Не каждый диалог становится лидом.

Бот сам ставит статусы или я?
В основном бот (если включена воронка). Но ты всегда можешь переопределить вручную.

Можно выгрузить базу клиентов?
Да, «Экспорт CSV».


Под капотом

  • Статусы (lead_status): none / potential / qualified / hot / converted / reserve / lost. converted и lost это терминальные.
  • Авто-создание лида: переход в qualified/hot/reserve, ранее не был терминальным, и в том же ответе модели есть client_name + phone.
  • Статус ставит модель в JSON-ответе (поле lead_status) при включённой воронке; ручная смена: editor+.
  • Колонки таблицы: Имя, Телефон, Статус, Дата (email/резюме/заметки, в карточке). Экспорт CSV, фильтры, диапазон дат, массовые действия.
  • Карточка лида: /projects/[id]/leads/[leadId], источник (канал, utm), резюме ИИ, заметки (до 5000 символов, автосейв).

Простыми словами

Лиды это список твоих потенциальных клиентов, который бот собирает сам. Пока человек просто болтает это ещё не лид. Но как только он проявил интерес и оставил телефон, бот заводит на него «карточку» и помечает, насколько он близок к покупке: просто интересуется, готов записаться или уже горячий. Ты видишь весь список, можешь кому-то перезвонить, поменять статус руками, выгрузить в табличку. Когда клиент оплатил, ставишь «конвертирован», и видно, что сделка закрыта. Это и есть твоя воронка продаж, только заполняется она сама.


Дальше: → Биллинг
Связано: Диалоги · Дожимы · Аналитика

Документация › Работа с клиентами › Стадии диалога

Стадии диалога (воронка)

Каждый диалог проходит воронку из 6 стадий, от «Приветствия» до «Завершено». Бот сам двигает клиента по ним, а ты видишь, на каком этапе кто застрял.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Воронка: Приветствие → Квалификация → Презентация → Возражения → Закрытие → Завершено.
  • Бот сам определяет стадию по ходу разговора: это не ручная пометка.
  • Стадия хранится у диалога; новый диалог стартует с «Приветствие».
  • Дошёл до «Завершено»: бот не замолкает сам, он продолжает отвечать, пока его не остановит функция «Остановить диалог» или оператор.

Шесть стадий

#СтадияRU-меткаЧто значит
0greetingПриветствиеклиент только написал, идёт знакомство
1qualificationКвалификациябот выясняет потребность (что нужно, бюджет, сроки)
2presentationПрезентациябот предлагает решение/услугу/цену
3objectionВозраженияклиент сомневается, бот отрабатывает
4closingЗакрытиеподводим к заявке/записи/оплате
5doneЗавершенодиалог отработан

Это и есть «воронка продаж» внутри переписки. По ней видно, где клиенты отваливаются, если много застряло на «Возражениях», слабая отработка сомнений; много на «Презентации», не доводим до закрытия.


Как стадия меняется

Стадию определяет сам бот по смыслу разговора: это часть его «мышления» (см. Как бот думает). Не нужно вручную перетаскивать клиента по этапам: модель оценивает, на каком шаге диалог, и обновляет стадию.

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

Стадии и внешняя CRM

Если подключена внешняя CRM (Bitrix24/amoCRM), внутренние стадии можно сопоставить со стадиями сделки в твоей CRM: тогда при смене стадии у диалога сделка автоматически двигается по воронке в CRM (через сопоставление стадий, см. CRM).

📌 Платформа использует стандартный набор из 6 стадий и 7 статусов лида: он работает «из коробки» и покрывает большинство сценариев продаж. Возможность полностью заменить набор своим (кастомная воронка) временно недоступна: редактор убран из настроек, вернём в упрощённом виде. Если твоему бизнесу нужны свои стадии, напиши в поддержку, это ускорит возврат фичи.

Простыми словами

Представь обычную продажу: сначала поздоровались, потом выяснили, что человеку нужно, показали вариант, развеяли сомнения, договорились, закрыли. Вот эти же шесть шагов бот проходит в каждой переписке, и сам понимает, на каком он сейчас. Тебе не надо ничего отмечать руками.

Польза простая: ты видишь, где клиенты застревают. Если куча диалогов зависла на «Возражениях», значит, бот плохо отвечает на сомнения, и это сигнал поправить промпт или базу знаний. А если хочешь, чтобы переходы между этапами совпадали с твоей CRM, связываешь их один раз, и сделки сами едут по воронке.


Дальше: → Аналитика
Связано: Диалоги · Лиды · Системный промпт · CRM
Не получилось? → Бот не отвечает

Документация › Работа с клиентами › Аналитика

Аналитика

Раздел «Аналитика» отвечает на главный вопрос владельца: сколько диалогов, сколько из них стали лидами и какая конверсия, за сегодня и за последние 7 дней.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Метрики: диалоги сегодня, лиды сегодня, конверсия за 7 дней, графики по дням.
  • Конверсия = лиды ÷ диалоги за период (в %).
  • Разбивки: лиды по статусам и по источникам.
  • Период по умолчанию, 7 дней (время Алматы).
Раздел «Аналитика»: диалоги, лиды, конверсия, время ответа и графики активности
Раздел «Аналитика»: диалоги, лиды, конверсия, время ответа и графики активности

Что показывает

Страница (/projects/<id>/analytics) считает всё на сервере и показывает:

МетрикаЧто это
Диалоги сегодняпереписки за сегодня, где бот реально ответил. Старые чаты, подтянувшиеся при подключении номера, и переписки, которые с самого начала вёл живой оператор (бот не включался), в счёт не идут, считаются только настоящие диалоги ИИ
Лиды сегодняновые лиды за сегодня
Конверсия (7 дней)лиды ÷ диалоги × 100% за период: какая доля переписок превращается в лида
График по днямдиалоги и лиды по дням за 7-дневное окно
Лиды по статусамраспределение лидов по статусам (новый / в работе / закрыт и т.д.)
Лиды по источникамоткуда пришли (канал/источник)
Реклама / Креативыкакие объявления Facebook/Instagram приносят диалоги, лиды, покупки. Две денежные колонки: Сумма сделок (то, что ты проставил на карточках лидов, учитывает офлайн-продажи) и Выручка в боте (оплаты прошли прямо в переписке). Для лидов, пришедших по рекламе «Написать в WhatsApp»
Откуда лиды (разрезы)те же диалоги/лиды/покупки + Сумма сделок/Выручка в боте в разбивке по площадке входа (Facebook / Instagram / Messenger), точке входа, UTM source / campaign и внешнему источнику-каналу. Блок появляется, только когда по разрезу есть данные. Работает и для не-рекламных входов (ссылка в профиле)
💡 Конверсия считается за период (7 дней), а не «за всё время»: так цифра отражает текущую динамику, а не размывается историей. Растёт конверсия → бот/промпт работают лучше; падает → есть что чинить.

Что мы называем «лидом»

Везде, где в аналитике написано «Лиды», считаются карточки из раздела Лиды: они создаются автоматически, когда бот доводит клиента до статуса «квалифицирован», «горячий» или «резерв». Это и есть канон: цифра «Лиды» на любой странице платформы означает одно и то же.

📌 Для аналитики не нужно настраивать функции: лиды считаются из статусов лида, которые бот ставит сам. Функции нужны только для действий (уведомить, записать, принять оплату), а не для подсчёта цифр.

Единственное число с другим смыслом в блоке «По каналам» воронки: там у каждого канала показано, сколько диалогов с проявленным интересом (любой статус, включая «потенциальный»). Это шире, чем лид-карточка, поэтому число подписано «с интересом», а не «лиды».

В блоке «Когорты по неделям» окно всегда: последние 8 недель, независимо от выбранного фильтра периода (так когорты остаются сравнимыми).

«Месяц» в карточках расходов, календарный месяц (с 1-го числа, время Алматы).

Период

По умолчанию аналитика берёт последние 7 дней в часовом поясе Asia/Almaty. Все «сегодня»/«за период» считаются по астанинскому времени, а не UTC, то есть «сегодня» совпадает с твоим днём.


Разрез по каналам

Сводные метрики аналитики, по проекту целиком (WhatsApp + Telegram вместе). Сколько диалогов в каждом канале по отдельности видно в Диалогах: там список разбит по каналам.


Простыми словами

Аналитика отвечает на простой вопрос: «работает ли вообще?». Ты видишь, сколько людей написали и сколько из них бот довёл до заявки: это и есть конверсия. Если из 100 переписок 20 стали лидами, конверсия 20%. Растёт от недели к неделе, отлично, бот молодец. Падает, пора смотреть, на каком этапе клиенты отваливаются (тут помогают стадии воронки).

Ещё две полезные картинки: откуда приходят люди и в каком статусе твои лиды. Считается всё по астанинскому времени, так что «сегодня»: это реально твой сегодняшний день.


Дальше: → Логи событий
Связано: Диалоги · Лиды · Стадии воронки · Биллинг
Не получилось? → напиши в саппорт с ID проекта

Документация › Работа с клиентами › Логи событий

Логи событий

«Что бот сделал за кадром»: вызовы функций, поиск по базе знаний, действия в CRM. Эти события видны прямо в ленте диалога, чтобы можно было понять, почему бот ответил так, а не иначе.

⏱ 7 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  • В диалоге, помимо сообщений, видны карточки событий: вызвал функцию, искал в базе знаний, изменил сделку в CRM.
  • Типы: function_call (вызов функции), kb_search (поиск по базе знаний), *`crm_inbound_`** (события из внешней CRM).
  • В карточке, что именно сделал, успех/ошибка, сколько заняло. Секреты маскируются.
  • Это главный инструмент диагностики «почему бот так поступил».
Раздел «Логи», что бот делал, вызовы функций, поиск по знаниям, действия CRM
Раздел «Логи», что бот делал, вызовы функций, поиск по знаниям, действия CRM

Зачем это нужно

Сообщения показывают, что бот написал. Логи событий показывают, что он делал между сообщениями: дёрнул ли функцию записи, нашёл ли ответ в базе знаний, отправил ли сделку в CRM. Без этого «почему бот так ответил», гадание.

События приходят через API диалога (/projects/<id>/conversations/<convId>/events) и показываются карточками в ленте переписки, в хронологии с сообщениями. Обновляются в реальном времени.


Какие события видны

Тип событияЧто значитЧто в карточке
function_callбот вызвал функциюимя функции, успех/ошибка, длительность, запрос/ответ (обрезаны)
kb_searchбот искал в базе знанийзапрос, сколько источников нашёл, не ниже ли порога релевантности
*`crm_inbound_`**пришло событие из внешней CRMсмена статуса сделки / заметка / обновление контакта

Среди crm_inbound_*: изменение статуса сделки, обновление сделки, удаление, добавление заметки, обновление контакта.

📌 Где искать падения функций. Если бот «должен был записать, но не записал», открой логи диалога и найди карточку function_call: там видно, вызвал ли он функцию и с какой ошибкой. → Функция не вызывается / падает

Безопасность данных в логах

  • Секреты маскируются. Токены, ключи, авторизация в параметрах функций редактируются перед сохранением.
  • Объём ограничен. Запрос/ответ функции обрезаются до ~2000 символов каждый, чтобы логи не разрастались и не текли.

Под капотом

  • Два журнала. Исходящие действия бота в CRM (создать/двинуть/прокомментировать сделку) пишутся в отдельный журнал crm_action_log (с полями action / result / error_message / crm_deal_id), а не в общий events_log. В ленте диалога они объединяются: «сырой» function_call для crm_* отбрасывается, показывается более информативная запись из crm_action_log (дедуп).
  • Forensic. events_log и crm_action_log: это история для разбора инцидентов; при удалении проекта такие записи сохраняются (не каскадятся), чтобы можно было провести пост-мортем.
  • Realtime. Лента подписана на оба журнала через Postgres Changes: события появляются без обновления страницы.

Простыми словами

Представь, что у бота есть «руки», он не только пишет, но и делает: записывает клиента в таблицу, ищет цену в базе знаний, заводит сделку в CRM. Логи событий это как раз список того, что он сделал руками, прямо внутри переписки, отдельными плашками между сообщениями.

Зачем тебе это? Чтобы понимать, почему бот ответил именно так. Сказал «записал вас на 15:00», а в плашке видно, реально ли сработала функция записи или упала с ошибкой. Это лучшее место, чтобы разобраться, когда что-то идёт не так. А чувствительные данные вроде паролей и ключей в этих логах автоматически замазываются, утечки не будет.


Дальше: → Обзор интеграций
Связано: Диалоги · Функции · База знаний · Функция не вызывается / падает
Не получилось? → Функция не вызывается / падает

Документация › Работа с клиентами › Авто-отчёты владельцу

Авто-отчёты владельцу (Telegram и почта)

После этой статьи бот будет сам присылать тебе сводку по проекту, каждый день, неделю или месяц в Telegram или на почту, без захода в кабинет.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Раздел «Отчёты» (только для владельца), настраиваемая сводка: сколько диалогов, лидов, конверсия, расход, баланс.
  • Расписание: ежедневно / еженедельно / ежемесячно, в выбранное время и часовой пояс.
  • Доставка: Telegram (через бота отчётов) и/или e-mail уведомлений проекта.
  • Можно собрать свой текст отчёта из {{переменных}} и проверить превью перед запуском.
  • Кнопка «Отправить сейчас»: прислать отчёт немедленно, не дожидаясь расписания.
  • У проекта, созданного с 14 сентября 2026, ежедневный отчёт уже есть и выключен: открой его, выбери, куда слать, на почту или в Telegram, и включи.
Аналитика и отчёты проекта: метрики и графики для авто-отчётов владельцу
Аналитика и отчёты проекта: метрики и графики для авто-отчётов владельцу

Зачем это нужно

Аналитика в кабинете отвечает на вопрос «как дела?», но только когда ты сам зашёл посмотреть. Авто-отчёт переворачивает это: сводка сама приходит туда, где ты и так сидишь (Telegram или почта). Ты держишь руку на пульсе проекта, не открывая кабинет: видишь, что бот привёл, например, 12 лидов за вчера и потратил $3, и решаешь, что делать дальше.

Что понадобится

  • ☐ Роль владельца проекта (раздел «Отчёты» виден только владельцу).
  • ☐ Для Telegram-доставки это подключённый бот отчётов/уведомлений.
  • ☐ Для e-mail это заданный адрес уведомлений в «Настройки → Уведомления».

Шаги

1. Создай отчёт

Меню проекта → «Отчёты» → «Новый отчёт». Дай ему понятное имя («Утренняя сводка», «Итоги недели»).

2. Задай расписание

Выбери частоту и время:

  • Ежедневно: в указанное время;
  • Еженедельно: в выбранные дни недели;
  • Ежемесячно: определённого числа.

Время считается в часовом поясе, который ты укажешь, отчёт придёт ровно тогда, когда удобно (например, в 9:00 утра по Астане).

3. Выбери, что показать

Включи нужные блоки показателей:

БлокЧто показывает
Диалогисколько диалогов, где бот реально ответил
Лидысколько новых заявок за период
Конверсиякакая доля диалогов стала лидами
Потраченорасход на ИИ за период отчёта
Баланстекущий баланс проекта
Число из анкетысумма / среднее / количество по числовому полю анкеты: напр. сумма долга, бюджет, чек
Последние лидысписок свежих лидов (имя, телефон, статус): до 20
Разбивка по полю / Теги / Статусыразрезы по сегментам лидов (топ-N)

💡 Совет. Включи блок сравнения с прошлым периодом, тогда рядом с «Лиды: 12» будет видно «было 8», и сразу понятен тренд.

4. (по желанию) Собери свой текст

Вместо стандартного вида можно включить свой шаблон и собрать сообщение из {{переменных}}, например:

📊 Отчёт {{period}}, {{project}}
💬 Диалоги: {{dialogs}}
👤 Лиды: {{leads}}
📈 Конверсия в лида: {{conversion}}
💸 Потрачено: {{spend}}
💰 Баланс: {{balance}}

Доступны переменные по группам: Воронка ({{dialogs}}, {{leads}}, {{conversion}}), Деньги ({{spend}}, {{balance}}), Сегменты ({{by_city}}, {{by_status}}, {{all_tags}}, {{leads_list}}), Сравнение ({{prev_dialogs}} и т.д.), Прочее ({{project}}, {{period}}).

5. Выбери, куда отправлять

В блоке «Куда отправлять этот отчёт» включи каналы:

  • Telegram: уйдёт в чат бота отчётов (или укажи ID конкретного чата/группы);
  • Email: на адрес уведомлений проекта.

⚠️ Важно. Если бот отчётов не подключён или e-mail не задан, соответствующий канал не сработает, и ты увидишь жёлтое предупреждение прямо в настройке. Подключи канал, иначе отчёт «уйдёт в никуда».

6. Проверь превью и сохрани

Внизу, превью с реальными числами за период: это ровно то, что придёт в Telegram/на почту. Нажми «Сохранить», отчёт встанет на расписание.

Проверь, что работает

Нажми «Отправить сейчас»: отчёт придёт немедленно в выбранные каналы. Это самый надёжный способ убедиться, что и текст, и доставка настроены верно, не дожидаясь расписания.

💡 История доставок видна владельцу, если отчёт не дошёл, по ней понятно, на каком канале сбой.

Частые ошибки

СимптомПричинаЧто делать
Раздела «Отчёты» нет в менюТы не владелец проектаРаздел доступен только владельцу; попроси владельца настроить
Отчёт не пришёл в TelegramНе подключён бот отчётов / неверный chat IDПодключи бота отчётов; оставь поле чата пустым для чата по умолчанию
Отчёт не пришёл на почтуНе задан e-mail уведомленийУкажи адрес в «Настройки → Уведомления»
В отчёте нулиВыбран период, где не было активностиПроверь период и что бот в это время работал
Первая строка отчёта «WhatsApp ограничил номер бота» или «WhatsApp-канал отключён»В этот момент бот не принимает сообщения из WhatsAppЦифры за такой период неполные: нули значат не затишье, а неработающий канал. Состояние канала видно в разделе «Каналы»

Вопросы, которые обычно возникают

Чем отчёт отличается от уведомлений?
Уведомления это «событие случилось прямо сейчас» (новый лид, оплата). Отчёт, сводка за период по расписанию (итоги дня/недели).

Можно несколько отчётов на один проект?
Да: например, ежедневная короткая сводка в Telegram и подробный недельный отчёт на почту.

Кто увидит отчёт?
Только адресаты выбранных каналов (твой Telegram-чат бота отчётов и/или e-mail проекта). Клиенты ничего не получают.


Под капотом

  • Доставку гонит крон report-tick: на каждый «слот» расписания берётся claim (claim_report_slot), собирается тело (buildAndDeliverReport) и отправляется в заданные каналы; каждая попытка пишется строкой в report_deliveries (история доставок владельца).
  • Каналы: Telegram (telegram_report_bot_token + telegram_report_chat_id; пусто → чат по умолчанию) и Email (notify_email проекта).
  • Период данных: календарный (вчера / прошлая неделя / прошлый месяц) либо окно в часах: числа считаются тем же слоем метрик, что и Аналитика, поэтому отчёт и кабинет сходятся.
  • «Отправить сейчас» и крон используют один путь сборки+отправки: превью, ручная отправка и автоотправка дают идентичный текст.
  • Если WhatsApp-канал отключён или номер ограничен WhatsApp, первой строкой отчёта (и в плитках, и в своём тексте) идёт предупреждение об этом (channelStatusLine). Без него такой период выглядел бы как «Тихий период: 0 диалогов, 0 лидов».

Простыми словами

Это как будто у тебя есть помощник, который каждое утро кладёт на стол листок: вчера написали столько-то человек, из них столько-то оставили заявку, потрачено столько-то, на счету столько-то. Ты сам выбираешь, что в этом листке и когда он приходит, каждый день, раз в неделю или раз в месяц, в Telegram или на почту. Хочешь, соберёшь текст листка под себя. И есть кнопка «прислать прямо сейчас», чтобы проверить, что всё настроено. Клиенты этого не видят, отчёт только для тебя.


Дальше: → Логи событий
Связано: Аналитика · Лиды и статусы · Уведомления владельцу
Не получилось? → Бот не отвечает

Документация › Интеграции › Обзор интеграций

Обзор интеграций + сервисный аккаунт Google

Интеграции дают боту «руки во внешнем мире»: записать в Google-таблицу, поставить событие в календарь, завести сделку в CRM. Эта статья, что есть и как подключается Google (через шаринг доступа, без паролей и OAuth).

⏱ 8 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Интеграции: Google (Таблицы, Календарь, Gmail) · CRM (Bitrix24, amoCRM) · CRM для образования (AlphaCRM) · свои вебхуки.
  • Раздел, проект → «Интеграции» (нужна роль редактор+; «просмотр» туда не пускают).
  • Google подключается без логина/пароля: платформа даёт тебе email сервис-аккаунта, ты делишься с ним своей таблицей/календарём как «Редактор», и всё.
  • Каждая интеграция работает через функции бота.
Раздел «Интеграции»: подключение Google и внешних CRM
Раздел «Интеграции»: подключение Google и внешних CRM

Какие интеграции есть

ИнтеграцияДля чегоСтатья
Google Таблицызапись лидов, расписание, прайс, бронь слотовGoogle Sheets
Google Календарьзапись на приём, проверка свободных слотовGoogle Calendar
Gmailотправка письма от бота (ограничения: см. статью)Gmail
CRM: Bitrix24 / amoCRMсделки и контакты в твоей CRMCRM
CRM для образования: AlphaCRMзапись на занятия, поиск ученикаCRM
МойСкладналичие и цены товаров прямо в ответе ботаМойСклад
Свои вебхукидёрнуть любой свой HTTP-эндпоинтФункции → Своя интеграция по API

Все они подключаются в разделе «Интеграции» проекта (доступ: роль редактор и выше; роль «просмотр» туда не пускается, см. Роли).


Как подключается Google: сервисный аккаунт

Это место, где новички путаются. У DOS AI нет «войти через Google» с паролем. Вместо этого работает сервисный аккаунт: служебный Google-аккаунт платформы, у которого есть свой email.

Что делаешь ты (один раз на каждую таблицу/календарь):

  1. В разделе «Интеграции» платформа показывает email сервис-аккаунта (скопируй его).
  2. Открываешь свою Google-таблицу (или календарь) → «Поделиться» → добавляешь этот email с правами «Редактор».
  3. Вставляешь ID таблицы/календаря в функцию. Готово: бот может читать и писать.

Почему так лучше OAuth: ты не отдаёшь платформе доступ ко всему своему Google-аккаунту. Ты делишься только конкретной таблицей или календарём, как поделился бы с коллегой. Захотел отключить, убрал email из доступа, и всё.

💡 Доступ: точечный. Бот видит ровно те таблицы/календари, которыми ты с ним поделился. Не поделился, не видит. Это и безопаснее, и понятнее.
⚠️ Забыл поделиться → ошибка доступа. Самая частая проблема: указал ID таблицы, но не дал сервис-аккаунту доступ. Бот честно скажет, что нужно добавить его email в «Поделиться» как Редактора. → Google Sheets

Что под капотом (для технических)

  • Аутентификация, JWT сервис-аккаунта (env GOOGLE_SERVICE_ACCOUNT_EMAIL + GOOGLE_SERVICE_ACCOUNT_KEY), без пользовательского OAuth.
  • Запрашиваемые scopes: spreadsheets, calendar, calendar.events, gmail.send.
  • Email сервис-аккаунта отдаётся в UI, чтобы ты мог расшарить ресурсы.

Простыми словами

Интеграции это «руки» бота во внешних сервисах. Через них он записывает клиентов в Google-таблицу, ставит встречи в календарь, заводит сделки в твоей CRM.

Самое непонятное для новичков, как подключить Google, ведь логина и пароля тут нет. И это сделано нарочно, ради твоей безопасности. У платформы есть свой служебный «робот-аккаунт» с email-адресом. Ты просто берёшь свою таблицу или календарь и делишься ими с этим адресом: точно так же, как поделился бы с сотрудником. Всё: бот теперь видит именно эту таблицу и ничего больше. Не понравилось, убрал доступ, и связь разорвана. Никакого «дать доступ ко всему Google» не требуется.


Дальше: → Google Sheets
Связано: Google Calendar · Gmail · CRM · Функции
Не получилось? → Функция не вызывается / падает

Документация › Интеграции › Google Sheets

Google Sheets

Самая популярная интеграция: бот пишет лидов в таблицу, читает прайс/расписание, бронирует слоты. Подключается за минуту: нужно лишь поделиться таблицей с сервис-аккаунтом.

⏱ 8 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Подключение = поделиться Google-таблицей с email сервис-аккаунта как «Редактор» (см. Обзор интеграций).
  • В функцию вставляешь ID таблицы, это часть ссылки между /d/ и /edit.
  • Бот умеет: узнать структуру, читать, искать, добавлять/обновлять/удалять строки (шесть готовых функций).
  • Не поделился → ошибка с подсказкой добавить email сервис-аккаунта.

Что бот умеет с таблицей

Готовые шаблоны Google Таблиц разбиты на две группы, Чтение и Запись:

ФункцияГруппаЧто делает
get_sheet_infoЧтениеструктура: листы, заголовки, размеры
read_sheetЧтениепрочитать строки
find_in_sheetЧтениенайти строку по значению
add_rowЗаписьдобавить строку (например, нового лида)
update_rowЗаписьобновить строку или ячейку (с защитой от перезаписи занятого слота)
delete_rowЗаписьудалить строку

Типичные сценарии: записывать лидов (имя/телефон/услуга → строка), читать прайс или расписание из таблицы, бронировать слоты в сетке расписания (через update_row с защитой ячейки).

💡 Раскраска диапазонов и создание листов из каталога шаблонов убраны (2026-06-13): это администрирование таблиц, а не работа бота-продавца. Сами операции на сервере остаются доступны для импортируемых функций.


Как подключить

  1. Поделись таблицей. Открой свою Google-таблицу → «Поделиться» → добавь email сервис-аккаунта (он показан в разделе «Интеграции») с правами «Редактор».
  2. Возьми ID таблицы из ссылки. В URL https://docs.google.com/spreadsheets/d/1AbC…XyZ/edit, ID это часть между /d/ и /edit.
  3. Создай/настрой функцию (см. Функции) и укажи в ней этот spreadsheet_id.
  4. Проверь в тест-чате: попроси бота сделать то, для чего функция (например, «запиши меня»).
💡 Один бот, несколько таблиц. ID таблицы, параметр функции, так что у разных функций могут быть разные таблицы (одна под лиды, другая под расписание).

Частая ошибка: «нет доступа»

Если указал ID, но не поделился таблицей с сервис-аккаунтом, бот вернёт ошибку вида:

«Сервис-аккаунт не имеет доступа в таблицу. Откройте её → Поделиться → добавьте <email сервис-аккаунта> с правами Редактор»

Лечится ровно так, как написано: добавь email в «Поделиться» как Редактора (не «Читатель», боту нужно и писать).

Другие типовые причины разобраны в Функция не вызывается / падает.


Простыми словами

Google-таблица это самый простой «склад данных» для бота. Он может складывать туда заявки (каждый лид: новая строчка), а может, наоборот, подсматривать в неё цены или расписание, чтобы отвечать клиентам.

Подключение занимает минуту. Открываешь свою таблицу, жмёшь «Поделиться» и добавляешь туда email бота (платформа его показывает) как Редактора: будто делишься с коллегой. Потом копируешь из ссылки на таблицу её «номер» (кусок между /d/ и /edit) и вставляешь в функцию. Готово.

И главное правило, на котором спотыкаются все, если бот говорит «нет доступа к таблице», значит, ты забыл с ним поделиться или дал права только на чтение. Добавь его как Редактора, и заработает.


Дальше: → Google Calendar
Связано: Обзор интеграций · Функции · Тест-чат
Не получилось? → Функция не вызывается / падает

Документация › Интеграции › Google Calendar

Google Calendar

Бот сам записывает клиентов на приём: проверяет свободные слоты и ставит событие в твой Google-календарь. Подключается так же, как Таблицы, шарингом календаря с сервис-аккаунтом.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Подключение = поделиться Google-календарём с email сервис-аккаунта (права на изменение событий).
  • Бот умеет: проверить свободное время, создать/изменить/удалить событие, показать список.
  • Время, по умолчанию Asia/Almaty (астанинское), с учётом перехода на летнее/зимнее.
  • В calendar_id укажи ID своего календаря (для основного, твой email в Google; для отдельного, адрес вида ...@group.calendar.google.com). Слово primary не подойдёт это технический календарь бота, тебе не видимый.

Что бот умеет с календарём

ФункцияЧто делает
Проверить свободное время (check_available_slots)свободные слоты на дату с учётом рабочих часов
Записать клиента (book_appointment)создать событие (запись клиента)
Перенести или изменить запись (update_calendar_event)перенести/изменить событие
Показать записи (calendar_list_events)список предстоящих записей клиента
Отменить запись (calendar_cancel_event)отменить запись

Главный сценарий, запись на приём: клиент пишет «хочу завтра в 15:00», бот проверяет, свободно ли, и создаёт событие. Удобно для салонов, клиник, мастеров, репетиторов.

Встроенная защита записи (работает сама, настраивать не нужно):

  • Нет двойных броней. Перед созданием события система ещё раз проверяет занятость этого времени (с учётом вместимости слота), если два клиента одновременно берут последнее окно, второй получит предложение выбрать другое время.
  • Клиент видит и меняет только свои записи. Список записей, перенос и отмена привязаны к клиенту этого чата (на всех каналах, WhatsApp и Telegram), чужие брони и ваши личные события в календаре бот клиенту не покажет и отменить не даст.
  • Записать в прошлое нельзя, если бот перепутал дату, система отклонит бронь и попросит уточнить.

Как подключить

  1. Поделись календарём. Адрес сервис-аккаунта лежит наверху настроек функции, в панели с кнопкой «Скопировать», и виден сразу, до всякой проверки. Дальше: Google Календарь → «Настройки и общий доступ» нужного календаря → «Доступ для отдельных пользователей» → добавь этот адрес с правом «Внесение изменений в мероприятия».
  2. Отдельный календарь под бота удобнее личного: в левой колонке Google Календаря «Другие календари» → плюс → «Создать календарь». Его ID (вида ...@group.calendar.google.com) лежит в его же настройках, раздел «Интеграция календаря».
  3. Укажи calendar_id в функции это ID твоего календаря, тот же, с которым ты поделился на шаге 1. Для основного календаря его ID это твой email в Google (например ivan@gmail.com); для отдельного календаря его ID есть в настройках календаря (вид ...@group.calendar.google.com). ⚠️ Слово primary не подойдёт, так бот попадёт в свой технический календарь, который ты не видишь, и записи «пропадут». Нажми «Проверить подключение»: красная ошибка сразу покажет, если календарь указан неверно или доступ не выдан.
  4. Настрой расписание работы прямо в функции «Проверить свободное время»: рабочие дни, часы, перерыв между слотами (в минутах), длительность слота, минимальный запас до записи. Бот предлагает клиентам только время внутри этих рамок. (До 2026-06-13 этот редактор не влиял на бота: теперь сервер читает расписание из настроек функции.)
  5. Записей на одно время (вместимость). По умолчанию 1, один приём на слот, как только на это время есть событие, бот его больше не предлагает. Поставь больше, если на одно время можно записать нескольких: несколько кресел/кабинетов работают параллельно или это групповое занятие. Например 3: бот запишет до трёх клиентов на один и тот же час, а четвёртому предложит другое время.
  6. Одинаковых объектов несколько (бани, корты, домики). Вместимость это и есть их число: один календарь на группу, «Записей на одно время» = сколько объектов. То же число поставь и в функции «Записать клиента»: без него она возьмёт вместимость у первой попавшейся функции проверки, и при нескольких группах числа перепутаются. Объекты разной вместимости или цены это разные группы, у каждой свой календарь и своя пара функций. Разбор с примером: Запись на время.
  7. Работаете за полночь или круглосуточно. Окно работы задаётся внутри одних суток, поэтому «с 11:00 до 02:00» пока не задать: ставьте 11:00-23:59. На саму бронь это не влияет, бот спокойно оформит запись, которая заканчивается ночью; не показываются только САМИ окошки после полуночи. У круглосуточного заведения по той же причине не попадёт в список последний час суток.
  8. Выходной/отпуск: событием «на весь день». Создай в календаре событие на весь день (Отпуск, Выходной): бот не предложит записи в этот день, даже если вместимость больше 1.
  9. Приглашение клиенту на почту (по желанию). Тумблер «Отправлять клиенту приглашение на почту», если включить и клиент даст email, ему придёт приглашение на встречу из Google Календаря. По умолчанию выключено (незваные приглашения часто принимают за спам). Тумблер живёт в функции «Записать клиента», потому что почту отправляет именно она.
  10. Напоминания клиенту (по желанию). Тумблер «Напоминать клиенту о записи»: бот сам напишет клиенту в тот же чат перед визитом (снижает неявки). Расписание задаёте вы: добавьте одно или несколько напоминаний «за N минут/часов/дней до записи» (например «за 1 день» и «за 2 часа»). Текст можно свой, с подстановками {{client_name}}, {{date}}, {{time}}: общий для всех напоминаний в поле внизу, а у каждого напоминания есть своя строка текста прямо под его сроком, если оставить её пустой, возьмётся общий. Так «за сутки» и «за 2 часа» могут говорить разное («не забудьте про завтра» и «выезжайте, ждём»). По умолчанию выключено. Перенос записи сдвигает напоминания, отмена: снимает их. В тест-чате напоминания не отправляются.
  11. 🚨 Оба тумблера настраиваются в функции «Записать клиента», а не в «Проверить свободное время». До 2026-09-05 они показывались на любой календарной функции, и включение в функции проверки молча ничего не делало: настройку читает только та ветка, которая создаёт запись. Теперь в проверяющей функции этих блоков просто нет. Если у вас несколько объектов с раздельными календарями (баня 1, баня 2), напоминания включаются в каждой функции записи отдельно.
  12. Проверь в тест-чате: «запиши меня на завтра в 15:00».

См. также пошаговый гайд: Запись на время.

💡 Часовой пояс. По умолчанию бот считает время в Asia/Almaty, то есть «15:00» для клиента это 15:00 по Астане. Пояс можно переопределить в параметрах функции, переход на летнее/зимнее время учитывается автоматически.
💡 Обед и перерывы. Отдельной настройки «обед» нет, просто создай в своём календаре повторяющееся событие (например «Обед» с 13:00 до 14:00 каждый день). Бот считает это время занятым и не будет предлагать его клиентам. Так же удобно блокировать отпуск или личные дела.
⚠️ Не поделился календарём → бот не сможет создать событие. Как и с таблицами: сначала дай сервис-аккаунту доступ, потом указывай ID.

Простыми словами

Если у тебя запись по времени, салон, врач, автошкола, репетитор: календарь незаменим. Клиент пишет «можно завтра в три?», и бот сам смотрит в твой Google-календарь: свободно, записывает, занято, предлагает другое время. Тебе не надо ничего делать руками.

Подключается один в один как таблицы: открываешь свой календарь, даёшь доступ email-у бота (на изменение событий) и указываешь, какой именно календарь использовать. Время бот считает по Астане, так что «три часа»: это три по-нашему, без путаницы с часовыми поясами.


Дальше: → Gmail
Связано: Обзор интеграций · Google Sheets · Функции
Не получилось? → Функция не вызывается / падает

Документация › Интеграции › Gmail

Gmail

📌 Сначала прочти это. Для большинства проще обычная отправка писем: см. «Письмо клиенту» (работает сразу, без Google Workspace) и «Уведомления владельцу». Gmail-функция ниже, продвинутый вариант для тех, у кого есть Google Workspace.
Бот умеет отправлять письма через Gmail-функцию. Но честно сразу: для обычного @gmail.com это не заработает, нужен Google Workspace с особой настройкой. Чаще проще использовать «Письмо клиенту».

⏱ 5 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Функция send_gmail шлёт письмо (кому / тема / текст, + копии). Из каталога шаблонов она скрыта: чтобы включить, напиши в поддержку, мы добавим её в проект.
  • Ограничение: работает только если у тебя Google Workspace и админ включил domain-wide delegation для сервис-аккаунта.
  • Для обычного личного @gmail.com отправка вернёт 403: это ожидаемо.
  • Заголовки писем защищены от инъекций.

Что делает

Функция send_gmail отправляет email: поля кому (to), тема (subject), текст (body), опционально копии (cc/bcc) и адрес для ответа (reply_to).

Отправка идёт от имени сервис-аккаунта платформы.


Важное ограничение (читай до настройки)

Gmail-отправка через сервис-аккаунт, не для всех. Она работает только при выполнении одного из условий:

  • у тебя Google Workspace (корпоративный Google для домена), и админ включил domain-wide delegation для сервис-аккаунта; или
  • сервис-аккаунт явно назначен авторизованным отправителем.

Если это не настроено, отправка вернёт ошибку 403 с подсказкой:

«Сервис-аккаунт не может отправить email. Для Gmail через Service Account нужна domain-wide delegation в Google Workspace админке (или используйте Resend / SMTP вместо Gmail)»

Перевод на простой язык: для обычного @gmail.com это просто не заработает. Нужна корпоративная почта на своём домене и доступ к её админке.

💡 Что делать вместо. Если тебе нужны письма клиентам (подтверждения, реквизиты, памятки) и у тебя нет Workspace, бери готовый шаблон «Письмо клиенту»: он работает сразу, без настройки Google, а ответ клиента приходит на твою почту.

Безопасность

Все поля письма (получатель, тема, копии) очищаются от спецсимволов переноса строк: защита от подмены заголовков письма (header injection).


Простыми словами

Бот в принципе умеет слать письма через Gmail, но тут надо быть честным, для обычной почты @gmail.com это не включится. Технически Google разрешает «роботу» слать письма только если у тебя корпоративная почта Google (Workspace) на своём домене и админ специально это разрешил. У большинства малого бизнеса такого нет, и тогда бот честно ответит ошибкой 403.

Поэтому если тебе просто нужно отправлять клиентам письма, не мучайся с Gmail: возьми шаблон «Письмо клиенту», он работает сразу. А если у тебя есть корпоративный Google на домене, тогда Gmail-функция тебе подойдёт, и админ домена включит нужный доступ.


Дальше: → CRM (Bitrix24 / amoCRM / AlphaCRM)
Связано: Обзор интеграций · Google Sheets
Не получилось? → напиши в саппорт, Gmail требует Google Workspace

Документация › Интеграции › CRM

CRM. Bitrix24 / amoCRM / AlphaCRM

Бот сам заводит сделки в твоей CRM и двигает их по воронке. Поддержаны Bitrix24, amoCRM и AlphaCRM (для образования). Связь двусторонняя: лиды уходят в CRM, а изменения сделок возвращаются в диалог.

⏱ 10 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • CRM: Bitrix24 (по webhook-URL), amoCRM (домен + API-ключ), AlphaCRM (URL + email + API-ключ, для учебных центров).
  • DOS → CRM: бот создаёт сделки/контакты из лидов.
  • Заполнение полей CRM: связываешь переменную бота (имя, телефон, город, бюджет…) с полем сделки: данные ложатся прямо в поле, а не в комментарий.
  • Зеркало диалога: можно включить копирование всей переписки в ленту сделки (все сообщения или только ответы бота).
  • CRM → DOS: изменения сделок (статус, заметки, удаление) прилетают обратно в ленту диалога: через готовую ссылку-вебхук, которую генерируешь в один клик.
  • Сопоставление стадий: при смене стадии диалога сделка двигается по воронке CRM.
  • Ключи хранятся зашифрованными.
Раздел «Интеграции»: синхронизация с Bitrix24 / amoCRM / AlphaCRM
Раздел «Интеграции»: синхронизация с Bitrix24 / amoCRM / AlphaCRM

Что синхронизируется

Основное направление, DOS → CRM: когда появляется лид, бот создаёт в твоей CRM сделку (имя, телефон, email, сумма, воронка+стадия, кастомные поля) и/или контакт.

Обратное направление, CRM → DOS: если в CRM меняют сделку, событие прилетает в DOS через входящий вебхук и показывается в логах диалога: смена статуса сделки, обновление, удаление, добавление заметки, обновление контакта.


Что можно настроить (в разделе «Интеграции» → CRM)

Всё ниже делается через интерфейс, роль редактор+. Появляется после того, как CRM подключена и прошла проверку связи.

1. Сопоставление стадий

Связываешь внутренние стадии воронки (Приветствие…Завершено) со стадиями сделки в своей CRM. Меняется стадия диалога → сделка автоматически едет по воронке CRM. Это основная автоматизация.

ℹ️ Про «Неразобранное» в amoCRM. Этой стадии в списке выбора не будет, и так задумано: amoCRM разрешает попасть в неё только новой заявке, а перевести туда существующую сделку не даёт даже вручную по API. Если бы мы её предлагали, сопоставление выглядело бы настроенным, а сделка молча никуда не ехала. Выбирай любую следующую стадию воронки.

2. Заполнение полей CRM данными бота

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

⚠️ Сначала нажми «Синхронизировать» метаданные CRM: платформа подтянет список реальных полей твоей воронки, чтобы было из чего выбирать.

3. Зеркало диалога (переписка → лента сделки)

Тумблер «Зеркалировать сообщения»: вся переписка с клиентом копируется в ленту связанной сделки CRM как комментарии (👤 Клиент / 🤖 Бот / 👨‍💼 Оператор). Охват на выбор: все сообщения или только ответы бота. Включение не тянет старую историю: зеркалятся только сообщения после включения. Идёт в фоне (раз в пару минут), ответ клиенту не задерживает, дубликатов не создаёт.

4. Обратная синхронизация (CRM → DOS)

Кнопка «Сгенерировать ссылку» даёт готовый URL входящего вебхука (секрет уже вшит в ссылку). Вставляешь его в исходящий вебхук своей CRM (Bitrix24: Разработчикам → Исходящий вебхук; amoCRM: Настройки → API). После этого изменения сделок из CRM прилетают обратно в ленту диалога: смена статуса, обновление, удаление, заметка. Ссылку можно скопировать или перевыпустить (старая перестанет работать).

📌 Кроме этого под капотом есть узкий микро-движок CRM (crm_automations): фоновые действия по триггеру стадии. Это не старый «движок автоматизаций WHEN→IF→THEN» (он удалён). Основные автоматизации, доступные через интерфейс: это четыре пункта выше.

Как подключить

Раздел проекта → «Интеграции» → секция CRM (нужна роль редактор+).

Bitrix24

Нужен webhook-URL входящего вебхука Bitrix24. Он сам несёт в себе секрет (в пути), отдельный ключ не нужен.

  • Вид: https://<аккаунт>.bitrix24.ru/rest/<id>/<токен>/
  • Должен быть https и содержать /rest/<id>/<токен>/.

amoCRM

Нужны домен + API-ключ (Bearer-токен).

  • Домен: можно ввести голый поддомен (mycompany), платформа сама допишет .amocrm.ru; принимаются .ru/.com/.kz.
  • Пример: mycompany → https://mycompany.amocrm.ru.

AlphaCRM (для учебных центров)

Образовательная CRM (s20.online). Нужны URL, email и API-ключ, по ним платформа получает токен доступа. Бот умеет: проверить свободные слоты занятий, записать на занятие, найти ученика по телефону/имени.

🔒 Безопасность ключей. API-ключ amoCRM/AlphaCRM хранится зашифрованным. Если ключ окажется незашифрованным (например, после ручной правки в БД), платформа в проде его отвергнет, нужно пересохранить креды в настройках. URL внешней CRM защищён от подмены адреса (anti-SSRF).

Под капотом

  • DOS→CRM: syncLeadToCRM (адаптеры Bitrix24/amoCRM/AlphaCRM).
  • Заполнение полей: project_configs → ключ crm_settings → field_mapping (переменная→поле) → autoSyncFieldsToCrm → adapter.updateDeal (после ответа бота). Неизвестные CRM-полю ключи молча игнорируются.
  • Зеркало диалога: project_configs → ключ crm_settings → mirror_messages/mirror_scope; фоновый крон crm-mirror (*/2 мин) шлёт непросинхроненные сообщения в ленту сделки (addDealComment), помечает messages.crm_synced_at (идемпотентность per-message).
  • CRM→DOS: входящие вебхуки парсятся и применяются к диалогам (parseCrmWebhook → applyInboundCrmEvent). Секрет принимается заголовком x-crm-secret или query-параметром ?secret= (CRM не умеют слать кастомные заголовки), опционально HMAC.
  • Авто-правила: project_configs.crm_automations (триггеры/действия) + сопоставление стадий project_crm_stage_mapping; дедуп 5 минут на правило+диалог.
  • Метаданные CRM (воронки, поля) кэшируются на проект ~10 минут.

Простыми словами

Если ты уже работаешь в Bitrix24 или amoCRM, бот встроится в твой привычный процесс: каждый новый клиент из переписки сам превращается в сделку в твоей CRM, не надо вручную переносить заявки. А когда у бота меняется этап разговора (например, клиент дошёл до «закрытия»), сделка сама двигается по воронке в CRM. И наоборот, если кто-то в CRM поменял сделку, ты увидишь это прямо в переписке.

Подключение зависит от CRM, для Bitrix24 нужна ссылка-вебхук (в ней уже зашит секрет), для amoCRM, адрес и ключ, для учебной AlphaCRM, адрес, почта и ключ. Все ключи хранятся в зашифрованном виде. Если используешь учебный центр у AlphaCRM ещё и запись на занятия с поиском ученика.


Дальше: → Роли и права
Связано: Обзор интеграций · Лиды · Стадии воронки · Логи событий
Не получилось? → Функция не вызывается / падает

Документация › Интеграции › Вебхуки и безопасность

Вебхуки и безопасность (SSRF)

[для разработчиков] Когда бот ходит на внешние URL (твои вебхуки, CRM), платформа защищается от атак типа SSRF: попыток заставить сервер дёрнуть внутренний адрес. Эта статья, что и почему блокируется.

⏱ 7 мин · 👤 для разработчика · 🟢 live

За 30 секунд:
  • Любой внешний URL (кастомный вебхук, CRM) проходит проверку безопасности перед запросом.
  • Блокируются внутренние/приватные адреса: 127.0.0.1, 10.x, 192.168.x, 169.254.x, приватный IPv6 и т.п.
  • Защита от DNS-rebinding: адрес «пинится», куда проверили, туда и идёт запрос.
  • Разрешены только http/https, без логина-пароля в URL; для CRM/уведомлений, только HTTPS.

Что такое SSRF и почему это важно

SSRF (Server-Side Request Forgery), атака, где злоумышленник заставляет сервер сходить на адрес, к которому у него самого нет доступа: внутренние сервисы, облачные метаданные, локальная сеть. Поскольку бот умеет ходить на внешние URL, без защиты кто-то мог бы направить его на http://127.0.0.1/... и выудить внутренние данные.

Поэтому каждый внешний URL проверяется перед запросом.


Что блокируется

Запрос не пойдёт, если адрес резолвится в приватный/служебный диапазон:

  • IPv4: 127.x (loopback), 10.x, 192.168.x, 172.16-31.x (приватные), 169.254.x (link-local), 0.x, CGNAT 100.64-127.x;
  • IPv6: loopback ::1, приватные fc/fd, link-local fe80:: и IPv4-mapped варианты;
  • URL с встроенными логином-паролем (https://user:pass@…);
  • любые протоколы кроме http/https.

Для CRM-вебхуков и URL уведомлений дополнительно требуется HTTPS («CRM webhook URL must use HTTPS»).


Защита от DNS-rebinding

Тонкая атака: домен сначала резолвится в «хороший» внешний IP (проверку прошёл), а через миг: в 127.0.0.1 (запрос уже пошёл на внутренний). Платформа закрывает эту лазейку: после проверки адрес «пинится», запрос отправляется именно на тот IP, который проверили (fetchPinnedToIp), а не резолвится заново. Окно подмены сведено к минимуму.

Плюс размер ответа ограничен: внешний сервис не сможет «залить» гигабайты в ответ.


Что это значит для тебя

  • Твой эндпоинт для кастомного вебхука должен быть публичным (не localhost, не внутренняя сеть) и желательно по HTTPS.
  • Не пытайся через бота ходить на внутренние адреса: это by design заблокировано.
  • Секреты к твоему API передавай через заголовки авторизации функции (они хранятся зашифрованно), а не в URL.
📌 Про подпись. Входящие вебхуки (например, от платёжных провайдеров) платформа проверяет по подписи. А вот исходящие запросы к твоему эндпоинту платформа подписью не заверяет, если тебе нужна аутентификация входящего от бота запроса, используй секретный заголовок/токен, который задаёшь в настройке функции.

Простыми словами

Раз бот умеет ходить на чужие адреса в интернете, теоретически кто-то мог бы попробовать обмануть его и заставить постучаться не наружу, а «внутрь»: на служебные адреса сервера, где лежит что-то приватное. Это известный класс атак, и платформа от него защищается: перед каждым походом на внешний URL она проверяет, что это действительно публичный адрес, а не локальный/внутренний. Все 127.0.0.1, 10.x, 192.168.x и подобные: мимо.

Для тебя как разработчика вывод простой: твой эндпоинт, который дёргает бот, должен быть нормальным внешним адресом по HTTPS, а не локальным. А пароли к нему передавай через заголовки авторизации (они шифруются), не зашивай в ссылку. Всё это, чтобы и твои данные, и платформа были в безопасности.


Дальше: → Публичный API
Связано: Кастомные вебхуки · CRM
Не получилось? → напиши в саппорт

Документация › Интеграции › МойСклад

МойСклад: наличие и цены в ответах бота

Клиент спрашивает «есть ли такой товар и почём», бот в этот момент смотрит ваш МойСклад и отвечает настоящим остатком и настоящей ценой. Прайс в промпте держать не надо, дублировать товары никуда не надо.

⏱ 12 мин · 👤 для владельца магазина или сервиса · 🟢 live

За 30 секунд:
  • Подключается функцией «Своя интеграция по API» в продвинутом режиме. Писать код не нужно, всё заполняется в полях.
  • От вас нужен токен доступа из аккаунта МойСклад.
  • Маппинг ответа обязателен: без него бот получит сотню полей на каждый товар и начнёт путаться.
  • Цены в МойСкладе хранятся в копейках: 4 900 ₸ лежит как 490000. Не предупредить бота значит назвать клиенту сумму в сто раз больше.

Что получится в итоге

Клиент:  Здравствуйте, есть шумоизоляция StP Аэро?
Бот:     Да, есть. StP Аэро, 12 листов на складе, 4 900 ₸ за лист.
         Возьмёте? Могу записать на установку.

Бот не хранит ваш прайс у себя. Он спрашивает МойСклад в момент разговора, поэтому цена и остаток всегда те же, что у вас в учёте. Подняли цену в МойСкладе, бот называет новую с того же дня.


Шаг 1. Токен доступа

Токен это длинная строка, которая заменяет логин с паролем. Создаётся в настройках вашего аккаунта МойСклад, в разделе про доступ к API.

⚠️ Прочитайте до того, как нажмёте кнопку. В МойСкладе на одного пользователя живёт ровно один токен. Выпустили новый, старый умер в ту же секунду. Если этим токеном уже пользуется ваш сайт, касса или 1С, они отвалятся.

Заведите для бота отдельного пользователя с правами только на просмотр справочников и остатков и выпускайте токен ему. Менять документы и отгружать товар боту не нужно.

Если удобнее получить токен запросом: POST https://api.moysklad.ru/api/remap/1.2/security/token с обычной авторизацией логином и паролем, в ответ приходит токен.


Шаг 2. Создайте функцию в продвинутом режиме

Раздел Функции → создать → «Своя интеграция по API» → включить продвинутый режим. Обычный режим не даёт ни параметров запроса, ни маппинга ответа, а без них здесь не обойтись.

Основное:

ПолеЗначение
Названиеcheck_stock
Описание для бота«Проверить наличие и цену товара на складе. Вызывай, когда клиент спрашивает про конкретный товар, его цену или наличие»
МетодGET
URLhttps://api.moysklad.ru/api/remap/1.2/entity/assortment

Описание читает не человек, а бот. По нему он решает, звать функцию или нет, так что пишите словами клиента: «спрашивает про товар, цену, наличие».

Параметры запроса:

КлючЗначение
search{{товар}}
limit5

{{товар}} это подстановка: бот сам положит туда название из вопроса клиента. limit держите небольшим: пяти позиций хватает, а сотня забьёт боту контекст.

Параметр функции (раздел «Параметры»):

ИмяТипОписание для ИИ
товарстрокаНазвание товара из вопроса клиента, как он его назвал

Авторизация: тип Bearer, в значение ваш токен. Он хранится зашифрованным и вырезается из логов вместе с остальными заголовками авторизации. Адрес проверяется на безопасность, см. Вебхуки и безопасность.


Шаг 3. Маппинг ответа. Без него не заработает как надо

МойСклад отдаёт на каждый товар под сотню полей: ссылки, идентификаторы, штрихкоды, налоги, даты правок, атрибуты. Бот всё это видит, платит за это токенами и хуже соображает.

В настройках функции откройте «Маппинг ответа» и включите «Включить маппинг ответа», а следом тумблер «Поиск по запросу клиента».

Дальше три поля:

Поле в интерфейсеЧто вписатьЧто это значит
1. Где в ответе лежит список товаровrowsМойСклад кладёт товары в массив rows
2. По какому полю искатьnameискать по названию товара
3. Откуда AI возьмёт запрос клиентатовартот самый параметр из шага 2

Какие поля передавать AI:

ПутьКороткое имя
rows[*].nameназвание
rows[*].salePrices[0].valueцена
rows[*].stockостаток
⚠️ Звёздочка обязательна. rows[*].name означает «имя у каждого товара в списке». Если написать rows.name без [*], поле окажется пустым, потому что rows это список, а не один товар. На этом спотыкаются чаще всего.

salePrices[0] это первая цена продажи. Если у вас несколько типов цен (розница, опт, для своих), нужный индекс подберите опытным путём, начните с нуля.

Короткие имена справа необязательны, но с ними бот тратит меньше токенов и реже путается.

Что бот получит на выходе:

{
  "matches": [
    { "название": "StP Аэро", "цена": 490000, "остаток": 12 }
  ],
  "count": 1
}

Аккуратный список вместо простыни. Если совпадений окажется слишком много, ответ обрежется по границе товара и бот получит подсказку попросить клиента уточнить запрос. Максимальную длину ответа можно поднять там же, по умолчанию 8000 символов.

Про остаток. Рядом с stock МойСклад отдаёт reserve (зарезервировано), inTransit (в пути) и quantity (доступно с учётом резерва). Если у вас часто бронируют товар, берите rows[*].quantity, оно честнее. Если складов несколько и нужен конкретный, добавьте в параметры запроса stockStore со ссылкой на нужный склад.


Шаг 4. Скажите боту про копейки

Это единственное место, где ошибаются все.

В МойСкладе все суммы хранятся в копейках. Цена 4 900 ₸ лежит в базе как 490000. Не сказать об этом значит услышать от бота «четыреста девяносто тысяч тенге», и клиент уйдёт молча, даже не написав в ответ.

Допишите в системный промпт:

Цены из функции check_stock приходят в копейках.
Перед тем как назвать цену клиенту, раздели на 100.

Шаг 5. Что говорить, когда товара нет

Ответ «нет в наличии» заканчивает разговор. Дайте боту продолжение, отдельной строкой в промпте:

Если товара нет в наличии, не заканчивай на этом.
Предложи похожий товар из того же ответа функции
или спроси, записать ли клиента, когда товар придёт.

Так вопрос про отсутствующую позицию превращается в заявку.


Шаг 6. Проверьте до того, как включите бота клиентам

Откройте тест-чат и спросите про товар, цену которого знаете наизусть.

Что смотреть:

  • цена совпадает с той, что у вас в МойСкладе (если больше в сто раз, вернитесь к шагу 4);
  • остаток совпадает с реальным;
  • бот нашёл товар, когда вы назвали его так, как называют клиенты, а не так, как он записан в учёте.

Третье проверьте отдельно. В учёте товар может лежать как «Шумоизоляция StP Aero 8мм», а клиент напишет «стп аэро». Поиск нечувствителен к регистру и ищет вхождение, но если расхождение сильное, добавьте в описание параметра примеры народных названий.


Что ещё можно, кроме остатков

Тем же способом бот дотягивается до любой части вашего МойСклада, меняется только адрес запроса:

ЗадачаЧто дёргать
Наличие и ценысправочник ассортимента
Остатки по конкретному складуотчёт по остаткам
Проверить, есть ли такой покупательсправочник контрагентов
Создать заказ прямо из перепискисоздание заказа покупателя, метод POST

Заказы из переписки настраиваются так же, только методом POST и с телом запроса. Тогда пользователю, под которым выпущен токен, нужны права на создание документов.


Если не работает

СимптомПричинаЧто делать
Все поля пустыеВ путях забыта звёздочкаrows[*].name, а не rows.name. Шаг 3
Цена в сто раз большеКопейкиШаг 4
Бот говорит, что не смог проверитьТокен просрочен или перевыпущен под другую программуВыпустите новый и вставьте в функцию. Помните: старый при этом умрёт
Бот находит не тот товарКлиент называет товар иначе, чем он записан в учётеДобавьте в описание параметра примеры народных названий
Ответ обрезается, бот просит уточнитьСлишком много совпаденийУменьшите limit или поднимите максимальную длину ответа
Функция долго думаетМойСклад отвечает медленноПоднимите таймаут функции, повторы при сбоях уже встроены, см. Кастомные вебхуки
Полей маппинга нет на экранеФункция в обычном режимеВключите продвинутый режим, шаг 2

Подробный разбор ошибок в статье Функция не вызывается или падает.


Простыми словами

У вас товары и цены живут в МойСкладе. Раньше, чтобы бот про них знал, пришлось бы переписывать весь прайс к нему в настройки и обновлять руками каждый раз.

Теперь бот спрашивает ваш МойСклад сам, посреди разговора с клиентом. Человек пишет «есть такое?», бот за секунду смотрит ваш учёт и отвечает честной цифрой: столько-то штук, столько-то тенге. Меняете цену у себя, бот говорит новую, ничего поддерживать не надо.

Чтобы это включить, нужен один ключ из вашего аккаунта МойСклад и минут двадцать настройки по шагам выше.

Три вещи, которые нельзя пропустить. Первая: ключ в МойСкладе выдаётся один на человека, и новый убивает старый, поэтому заводите для бота отдельного пользователя. Вторая: цены там лежат в копейках, и об этом боту надо сказать отдельной строчкой. Третья: в путях к полям нужна звёздочка, иначе бот получит пустоту.

Проверьте всё на одном знакомом товаре в тест-чате, прежде чем включать бота клиентам.


Дальше: → Вебхуки и безопасность
Связано: Функции · Кастомные вебхуки · Тест-чат
Не получилось? → Функция не вызывается / падает

Документация › Деньги › Биллинг проекта

Биллинг проекта: токены, подписка, пополнение

Две статьи расходов: токены (топливо для ответов бота) и подписка (доступ к каналам и функциям). Здесь, как пополнять и не остаться без бота.

⏱ 9 мин · 👤 для владельца · 🟢 live

Биллинг проекта: баланс и тариф вверху, ниже, пополнение через Kaspi или картой с готовыми суммами
Биллинг проекта: баланс и тариф вверху, ниже, пополнение через Kaspi или картой с готовыми суммами
За 30 секунд:
  • Токены, расходник: каждый ответ бота их тратит. Кончились → бот молчит в бою.
  • Подписка ($25/мес): нужна, чтобы бот отвечал в WhatsApp после бесплатных 14 дней. Telegram, тест-чат, CRM и функции работают и без неё.
  • Пополнить можно картой или Kaspi-push.
  • Баланс показывается в долларах, тенге: в скобках.
  • Прогноз подскажет, на сколько дней хватит при текущем расходе.

Зачем это нужно

Бот работает на двух «топливах». Если их перепутать или не следить, бот внезапно замолкает, и клиенты остаются без ответа. Эта статья объясняет, за что ты платишь и как держать бота в эфире.

Где это

  • По проекту: меню проекта → «Биллинг».
  • По всему аккаунту: глобальное меню → «Биллинг» (общий счёт, все проекты, история).

Смотреть и пополнять может любой участник; оплачивать подписку могут владелец и администратор проекта.

Две вещи, которые важно не путать

🔋 Токены🎟️ Подписка
Что этоРасходник за каждое сообщение ботаДоступ к платформе
Как тратитсяСписывается за каждый ответ ИИФиксированно в месяц
Сколько1 диалог ≈ $0.06-0.13, около 30-60 ₸ (зависит от модели и длины)$25/мес (в тенге по курсу на момент счёта, около 11 500-12 500 ₸)
Если кончилосьБот молчит в WhatsApp/TelegramБот перестаёт отвечать в WhatsApp, номер остаётся привязанным; Telegram работает дальше
Что даётСами ответы ботаРаботу WhatsApp-канала после бесплатного периода
💵 Цена в долларах, тенге считается от неё. Подписка стоит $25 в месяц, и это базовая цена. Сумма в тенге (около 12 500 ₸) это пересчёт по курсу на момент выставления счёта: курс меняется, значит и сумма списания месяц к месяцу немного отличается. То же с балансом: он ведётся в долларах, а тенге показывается справочно, чтобы понимать порядок списания. Оплатить можно банковской картой из любой страны, а в Казахстане дополнительно через Kaspi.

💡 Аналогия. Подписка это «абонемент в зал» (доступ), токены, «вода, которую пьёшь на тренировке» (расходник). Нужны оба.

Что показывает страница

  • Баланс: крупно, в долларах с тенге в скобках («$50.00 (~24 250 ₸)»), полоса заполнения и прогноз на сколько дней хватит при текущем расходе;
  • Тариф: твой план, статус проекта (Активна / Канал офлайн / Неактивна), до какой даты подписка, отсчёт триала WhatsApp;
  • Счета в ожидании: начатые, но не завершённые оплаты;
  • Пополнить / Подписка: единая панель оплаты (переключатель);
  • История операций: все пополнения и списания с фильтрами;
  • Калькулятор стоимости: прикинуть расход под модель и объём;
  • Автопополнение баланса: включил, и платформа сама пополняет баланс, когда он падает ниже порога (см. ниже).

Как пополнить токены

Меню проекта → «Биллинг» → вкладка «Пополнить баланс»:

  1. Выбери сумму (готовые: $5 / $10 / $25 / $50 / $100 или впиши свою, целое число долларов, от $5 до $1000);
  2. Пополняешь на $100 и больше, дарим сверху $10. Подарок приходит вместе с пополнением, отдельной строкой в истории операций. Своя сумма от сотни считается так же, как готовая плитка;
  3. Выбери способ:
  4. Картой (TipTopPay): оплата картой;
  5. Kaspi Push: введи номер, придёт push в Kaspi;
  6. Подтверди оплату → баланс пополнится.

Как оформить/продлить подписку

Та же панель → вкладка «Подписка»:

  • Выбери период: 1 / 3 / 6 / 12 месяцев (за длинные, скидка: 3 мес −5%, 6 мес −10%, 12 мес −20%);
  • Оплати тем же способом.

Скидка первых двух недель

Когда подключишь канал, на 14 дней открывается сниженная цена: месяц −20% ($20), 3 мес −15%, 6 мес −25%, 12 мес −30%. Год в этом окне стоит $210 вместо $300 по обычной цене за месяц. Сколько осталось до конца окна, написано прямо на плитках.

Две вещи, которые важно знать заранее:

  • Бесплатные дни не сгорают. Оплатишь, пока они ещё идут, и оплаченный период начнётся после них, а не вместо них. Дата начала показана под кнопкой оплаты.
  • Дальше цена обычная. Скидка действует на эту покупку; следующее продление пойдёт по $25 в месяц.

Окно даётся один раз на проект и только до первой оплаты подписки. По той же причине бесплатные дни не выдаются повторно: если проект уже был на подписке и она кончилась, дальше идёт продление, а не новый пробный период.

⚠️ Без активной подписки после пробного периода бот перестаёт отвечать в WhatsApp (см. Подключить WhatsApp). Номер при этом остаётся привязанным, переписка и настройки никуда не деваются: оплатил, и ответы пошли снова. Telegram работает без подписки: там платишь только за ответы бота с баланса.

Проверь, что всё в порядке

Перед тем как полагаться на бота в бою:

  1. Статус проекта, «Активна»;
  2. Баланс токенов не на нуле (прогноз показывает запас дней);
  3. Подписка действует (дата в будущем).

💡 Помни: в Тест-чате бот отвечает даже при нуле: это не показатель. Для клиентов нужны и баланс, и подписка.

Светофор в списке проектов

Открывать каждый проект не обязательно: в меню слева, в списке «Проекты», у каждого проекта горит значок-индикатор. Статус закодирован формой значка, а не только цветом, различимо и при дальтонизме:

  • галочка (зелёная): подписка и баланс в порядке, бот работает;
  • треугольник с «!» (жёлтый), скоро проблемы: мало токенов, подписка истекает в ближайшие 3 дня или канал WhatsApp отвалился;
  • крестик (красный), бот не отвечает клиентам: баланс на нуле и подписки нет;
  • пунктирный кружок (серый) это черновик, проект ещё не запущен.

Наведи курсор на значок: подсказка скажет, что именно не так и куда идти чинить.

Частые ошибки

СимптомПричинаЧто делать
Бот замолчал у клиентовКончились токеныПополни баланс
Бот молчит в WhatsApp, номер подключёнКончился пробный период, подписки нетОформи подписку
Статус «Канал офлайн»Канал отвалилсяСм. Канал отвалился
Оплатил, баланс не изменилсяПлатёж в обработкеГлянь «Счета в ожидании», подожди; не прошёл → Платёж не прошёл
Дорого выходитТяжёлая модель / длинные ответыСмени модель на mini, см. Стоимость сообщения

Автопополнение баланса

На странице биллинга проекта есть секция «Автопополнение баланса» (видна владельцу). Включаешь, платформа каждые ~30 минут проверяет баланс, и если он упал ниже порога (по умолчанию $5), сама пополняет до целевого уровня (по умолчанию $40):

  • Счёт в Kaspi: выставляется автосчёт, тебе приходит пуш в Kaspi и уведомление «оплати». Счёт действует 24 часа; пока он висит, новый не выставляется.
  • Списание с карты, если у тебя сохранена карта (TipTopPay), сумма списывается автоматически; о каждом списании приходит уведомление.

Можно задать месячный лимит автопополнений. Если пополнить баланс вручную (или это сделает поддержка), висящий автосчёт отменится сам: оплачивать его не нужно. После трёх неудачных списаний подряд или если карта удалена, автопополнение выключается и приходит уведомление.

Автопродление подписки

Тумблер «Автосчёт на продление подписки» стоит на той же странице биллинга, отдельной строкой внизу. За 3 дня до конца подписки на номер Kaspi, с которого оплачивали в прошлый раз, придёт счёт на продление, и вместе с ним уведомление, что это автопродление.

  • Это счёт, а не списание. Деньги уходят только когда вы сами подтвердите оплату в Kaspi. Не подтвердили, счёт просто истечёт, а подписка закончится в свой срок.
  • Включено у тех, кто уже платил через Kaspi. Если оплата через Kaspi была хотя бы раз, автопродление стоит включённым: это тот же способ, которым вы платите, просто счёт приходит сам и вовремя.
  • Выключается одним тумблером там же, в биллинге проекта. Он работает отдельно от автопополнения баланса: можно оставить только продление подписки, только пополнение баланса, оба или ничего.

Уведомления о балансе

Платформа сама сообщает о деньгах, эти сигналы включены всегда (их нельзя пропустить):

  • Пополнение, как только баланс пополнен (Kaspi, картой или вручную), приходит уведомление с суммой и новым балансом.
  • Низкий баланс, когда денег осталось мало, приходит напоминание пополнить (не чаще раза в сутки).
  • Бот остановлен на нуле, если баланс кончился и бот перестал отвечать клиентам, приходит тревога, чтобы вы быстро пополнили.

Куда слать, выбираете вы. В настройках проекта → вкладка «Уведомления» → блок «Баланс проекта» отметьте нужные каналы: Telegram-группа, Email, Webhook. Колокольчик в шапке сайта получает эти уведомления всегда: его отключить нельзя, это ваш гарантированный канал.

Перенос баланса между проектами

Если проектов несколько, баланс можно перенести с одного на другой: на странице /billing в списке «Баланс по проектам» у проекта с деньгами есть кнопка «Перенести». Перенос мгновенный и виден в истории обоих проектов. Перенос предлагается и при удалении проекта: диалог удаления честно предупреждает, что баланс и остаток оплаченной подписки сгорят безвозвратно, и даёт сначала перекинуть деньги на другой проект.

Вопросы, которые обычно возникают

Почему баланс в долларах?
Расходы ИИ считаются в долларах (так считают модели). Тенге показывается в скобках по курсу для удобства.

Подписка и токены это одно и то же?
Нет. Подписка, доступ (фиксированно в месяц). Токены, расходник за ответы. Нужны оба.

Сколько стоит один диалог?
Обычно $0.06-0.13, то есть около 30-60 ₸ по курсу. Это весь разговор целиком: клиент спросил цену, уточнил время и записался. Короткие ответы про цены и адрес обходятся в копейки, долгий подбор по прайсу на сотни страниц стоит дороже. Цифры из расхода живых проектов за 30 дней. Подробно, Сколько стоит сообщение.

Это я плачу платформе. А как брать деньги с моих клиентов?
Это другое, Приём оплат: бот выставляет счёт твоему клиенту, деньги идут на твою Kaspi-кассу.


Под капотом

  • Баланс хранится в центах; формат: formatBalanceUSD → "$X.XX (~Y₸)", курс-фолбэк 485 ₸/$.
  • Подписка: базовая цена subscription_price_usd = $25 (сумма к оплате в тенге считается по курсу НБК в момент счёта), скидки за период 5/10/20%, в окне активации 20/15/25/30% за 1/3/6/12 месяцев (subscription_offer_discount_*). Цену и для витрины, и для счёта считает один серверный расчёт, он же отдаётся на GET /api/billing/quote.
  • Пополнение через useTopup → /api/projects/<projectId>/tokens/topup → провайдер (карта или Kaspi-push). До подтверждения Kaspi-push кабинет показывает окно ожидания.
  • Страница (редизайн 2026-06-05): BalanceHero + PendingInvoices + PaymentPanel (Пополнить|Подписка) + History + калькулятор. Прогноз дней, из среднего расхода по окну транзакций.
  • Тест-чат баланс не блокирует; в бою eligibility требует active + (триал ИЛИ подписка) для WhatsApp.
  • Автопополнение (2026-06-10): таблица project_auto_topup, cron auto-topup-tick каждые 30 мин; карта, TipTopPay charge по сохранённому токену, Kaspi, автосчёт в Kaspi. Перенос баланса: атомарная пара журнальных проводок через клиринговый счёт.
  • Статусы счетов: pending → paid / failed (отклонён банком) / cancelled (отменён вами) / expired (истёк срок); истёкший или отменённый счёт можно выставить заново той же суммой из истории платежей.

Простыми словами

У бота два счёта, и их легко не перепутать на одной аналогии. Подписка это как абонемент: платишь раз в месяц ($25, в тенге около 12 000 ₸ по курсу) и бот работает в WhatsApp. Telegram абонемента не требует. А токены это топливо: каждый ответ бота немного их тратит, как бензин. Если кончится бензин (токены), бот замолчит, даже если абонемент (подписка) активен. Поэтому следи за обоими: пополняй баланс (картой или через Kaspi) и продлевай подписку. На странице есть прогноз, на сколько дней хватит денег: удобно не доводить до нуля. И помни: в тестовом чате бот отвечает всегда, а вот живым клиентам, только когда есть и баланс, и подписка.


Дальше: → Функции (научить бота действиям)
Связано: Сколько стоит сообщение · Приём оплат · Подключить WhatsApp · AI-модель
Не получилось? → Бот не отвечает

Документация › Деньги › Сколько стоит сообщение

Сколько стоит сообщение

Бот списывает с баланса за каждый ответ. Сколько именно, зависит от длины переписки, выбранной модели и того, что бот делает (ищет в базе знаний, распознаёт голос/фото). Эта статья объясняет, от чего зависит цена.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Платишь по факту: за каждый ответ бота списывается с баланса (в долларах, тенге в скобках).
  • Цена сообщения зависит от: длины диалога, модели, поиска по базе знаний, распознавания голоса/фото.
  • Отправка готового медиа из библиотеки и ответы вне рабочих часов, бесплатны.
  • Каждое списание видно в истории: можно посмотреть, на что ушло.

От чего зависит цена

У бота нет «фиксированной цены за сообщение», она складывается из нескольких факторов:

ФакторКак влияет
Длина диалогабот «помнит» переписку, чем длиннее история и ответ, тем дороже сообщение
Модельмощная модель дороже лёгкой за тот же ответ
Поиск по базе знанийесли бот лезет в базу знаний, это добавляет к стоимости
Распознавание медиарасшифровка голосового или «разглядывание» фото, отдельная платная операция

Баланс хранится в долларах (показывается как $X.XX (~Y₸)), списание идёт по факту после каждого ответа.


Что тратит баланс, а что нет

Тратит:

  • ответ бота (основное);
  • расшифровка голосовых сообщений клиента;
  • распознавание присланных фото/картинок;
  • поиск по базе знаний.

Не тратит:

  • отправка готового материала из медиа-библиотеки;
  • автоответ вне рабочих часов;
  • сообщения, на которые бот не отвечает (выключен, пауза, пустой баланс).

Как сэкономить

  • Лёгкая модель там, где хватает. Для записи/типовых вопросов gpt-5.4-mini дешевле мощных: см. Выбор модели.
  • Короткая память диалога. Настройка history_message_limit (по умолчанию 30): меньше история, дешевле сообщение (но бот меньше «помнит»). См. Продвинутые настройки.
  • Выключи ненужное распознавание. Не принимаешь голосовые/фото, отключи их распознавание, чтобы не платить за обработку.

Где смотреть расходы

Каждое списание попадает в историю транзакций: видно, сколько стоило, когда и за что. Так можно поймать, например, что распознавание голосовых заметно тянет баланс, и решить, нужно ли оно. Общая картина баланса и пополнение: в Биллинге.


Простыми словами

Тут как со счётчиком: платишь за то, что бот реально сделал. Ответил клиенту: небольшое списание. Чем длиннее у вас переписка и чем «умнее» выбранная модель, тем чуть дороже каждый ответ, бот ведь держит в голове весь разговор. Отдельно подкапывают деньги «тяжёлые» вещи: расшифровать голосовое, разглядеть фото, порыться в базе знаний.

А вот показать клиенту готовое видео из библиотеки или вежливо ответить ночью «мы на связи с утра»: бесплатно. Если хочется экономить, держи лёгкую модель там, где она справляется, и выключи распознавание голоса/фото, если оно тебе не нужно. И загляни в историю списаний: там видно, на что именно уходит баланс.


Дальше: → Приём оплат от клиентов
Связано: Биллинг · Выбор модели · Продвинутые настройки · База знаний
Не получилось? → Платёж не прошёл

Документация › Деньги › Приём оплат от клиентов

Приём оплат от клиентов (Kaspi)

Бот может не только отвечать, но и принимать оплату от твоих клиентов: выставлять счёт прямо в переписке. Деньги идут тебе напрямую, не через DOS.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Бот умеет выставить клиенту счёт на оплату прямо в чате (Kaspi).
  • Деньги поступают тебе напрямую: платформа их не держит и не является посредником по деньгам.
  • Касса бесплатная: ни платы за подключение, ни месячного тарифа. За каждую оплату, которая дошла до тебя, с баланса проекта списывается $0.25.
  • Подключает Владелец проекта: номер кассира и код из SMS. Анкета и реквизиты не нужны, название и БИН касса получит из Kaspi сама.
Раздел «Приём оплат»: подключение кассы Kaspi и управление счетами
Раздел «Приём оплат»: подключение кассы Kaspi и управление счетами

Что это даёт

Клиент в переписке говорит «готов оплатить», и бот тут же выставляет счёт (функция «Счёт на оплату», owner_payment_invoice). Клиент платит, ты видишь оплату. Не нужно вручную скидывать реквизиты и сверять переводы.

🔑 Важно про деньги. Платёж идёт напрямую тебе (на твой Kaspi как продавца): платформа DOS деньги клиентов не принимает и не хранит. DOS только помогает боту выставить счёт; расчёт между тобой и твоим клиентом.

Кто подключает и кто работает со счетами

Подключает и отключает кассу только Владелец проекта: к боту привязывается его касса Kaspi, и код подтверждения приходит на телефон кассира. Когда касса работает, Администратор проекта тоже выставляет, отменяет и возвращает счета (см. Роли).


Как подключить

Раздел «Приём оплат» → «Подключить кассу Kaspi»:

  1. Укажи номер телефона кассира с доступом к Kaspi Pay.
  2. Kaspi пришлёт на этот номер SMS с кодом, введи его.
  3. Готово: название ИП или ТОО и БИН касса получит из Kaspi сама.

После этого бот сможет выставлять счета твоим клиентам. Включи функцию «Счёт на оплату» и опиши в промпте, когда бот предлагает оплату.

💡 Лучше завести для кассы отдельного кассира. Если этот кассир войдёт в Kaspi Pay на другом телефоне, Kaspi может отключить кассу у нас, и бот перестанет выставлять счета, пока ты не подтвердишь её заново. Если это случится, мы сразу сообщим.

Сколько стоит

Касса бесплатная: подключение и работа ничего не стоят, тарифа нет. За каждую оплату, которая дошла до тебя, с баланса проекта списывается $0.25. Это тот же баланс, с которого бот платит за ответы (см. Биллинг). Счёт, который клиент не оплатил или отменил, ничего не стоит. Если покупателю потом вернули деньги, сбор не возвращается.

Когда на балансе меньше $0.25, бот не выставит новый счёт: клиенту он скажет, что передаёт вопрос владельцу, а тебе сразу придёт уведомление пополнить баланс. Держи баланс пополненным, чтобы не терять продажи.

Касса выставляет не больше 300 счетов в сутки. Это защита от сбоя, а не тариф: обычному бизнесу хватает с большим запасом.


Если что-то не подключается

Не приходит SMS или код не принимается: проверь номер кассира и то, что у него есть доступ к Kaspi Pay, и попробуй ещё раз через минуту. Не помогло, напиши в поддержку с названием проекта: мы видим состояние подключения со своей стороны и подскажем, что не так.


Когда счёт клиенту не выставился, ты узнаешь об этом сам

Бот может попросить кассу выставить счёт и получить отказ. Клиент в этот момент видит вежливое «сейчас не могу создать ссылку на оплату, передам владельцу», а продажа висит на волоске. Поэтому о каждом таком отказе приходит уведомление в колокольчик, не чаще одного раза в сутки на проект, чтобы занятый чат не превратил подсказку в поток.

Что случилосьЧто делать
На балансе проекта меньше $0.25пополнить баланс в Биллинге
Касса выставила 300 счетов за суткиподождать до завтра; если упираешься в предел регулярно, напиши в поддержку
Касса потеряла авторизацию в Kaspiподтвердить кассу заново, нужен код из SMS. В кабинете приём оплат при этом выглядит рабочим, а на деле не заплатит ни один клиент
Касса вообще не подключена, а функция оплаты у бота включенаподключить кассу либо выключить функцию оплаты, чтобы бот не обещал того, чего не может
Kaspi отклонил счётв уведомлении будет причина словами

Простыми словами

Это про то, чтобы бот не только болтал, но и брал деньги. Клиент написал «беру»: бот сразу выставил ему счёт в чате, тот оплатил через Kaspi. Удобно: не надо вручную диктовать номер карты и потом сверять, кто и сколько перевёл.

Три важных момента. Первый: деньги идут тебе напрямую, DOS их не трогает, мы просто помогаем боту выставить счёт. Второй: касса бесплатная, платишь только $0.25 с каждой прошедшей оплаты, и только пока на балансе есть деньги. Третий: подключить кассу может только владелец проекта: подтверждение приходит по SMS на телефон кассира, как обычный вход в Kaspi. Когда касса работает, счета выставляет, отменяет и возвращает и администратор проекта.

Подключение занимает пару минут, а если что-то споткнулось, напиши в поддержку: мы видим состояние подключения и подскажем, что поправить.


Дальше: → Рефералы и вывод
Связано: Биллинг · Функции · Роли и права
Не получилось? → Платёж не прошёл или напиши в поддержку

Документация › Деньги › Промокоды и партнёрская программа

Промокоды и партнёрская программа

Промокод применяется к конкретному проекту и удваивает старт: $10 на баланс вместо $5 и 30 бесплатных дней вместо 14. Отдельно есть партнёрская программа для тех, кто продвигает DOS AI постоянно.

⏱ 4 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Промокод вводится только при создании проекта: поле «Промокод (необязательно)» в форме. Ни при регистрации, ни позже в «Биллинге» его нет.
  • Код удваивает старт проекта: $10 на баланс вместо $5 и 30 бесплатных дней WhatsApp вместо 14. Диалоги не ограничены ни с кодом, ни без него.
  • Правило: один проект = один промокод.
  • Бесплатный период привязан к номеру: один номер получает его один раз.

Как применить промокод

  1. Создавая проект, впиши код в поле «Промокод (необязательно)» под формой.
  2. Нажми «Применить».
  3. Код сразу докидывает баланс до $10 и привязывает проект к пригласившему партнёру. Бесплатные 30 дней начнутся, когда подключишь номер WhatsApp (без кода их 14).
📌 Самая частая ошибка: ищут поле для кода при регистрации. Его там нет: код применяется к проекту, и только пока проект создаётся. Создал без кода, применить его к этому проекту уже нельзя.
📌 Один проект = один промокод. Применить второй к тому же проекту нельзя.

Что даёт код

Старт проекта удваивается, и это видно сразу:

Без кодаПо коду партнёра
Баланс при старте$5$10
Бесплатных дней WhatsApp1430
Ограничение по диалогамнетнет

Баланс докидывается в момент применения кода, дни начинают идти при подключении номера.

📌 Код открывает бесплатный период и второму-третьему проекту. Обычно бесплатные дни даются только первому проекту аккаунта. Проект с промокодом получает их независимо от этого: удобно, если собираешь ботов сразу нескольким клиентам.
📌 Окно скидки на подписку от кода не зависит: оно всегда 14 дней с подключения канала, см. Биллинг. Оплата внутри окна не сжигает оставшиеся бесплатные дни, платный период начнётся после них.
📌 Бесплатный период привязан к номеру: один номер получает его один раз. Повторное подключение того же номера на новом проекте уже потребует подписки.
⚠️ Бесплатен канал, а не ответы бота. Каждый ответ списывается с баланса проекта, и в бесплатные дни тоже. Кончится баланс раньше, чем дни, и бот замолчит посреди бесплатного периода, поэтому просто пополни счёт.

Партнёрская программа

Личный код есть у тебя с регистрации. Он лежит в кабинете, раздел «Рефералы», ждать первой оплаты не нужно. Комиссия по нему 10% с подписок клиентов, которых ты привёл, в течение года с их первой оплаты.

Применить его можно к любому проекту, включая свой. Свой проект получит тот же удвоенный старт: $10 на баланс и 30 бесплатных дней. Комиссия при этом идёт только с чужих проектов, то есть с тех, где владелец не ты: пока проект твой, начисления нет.

Это сделано для тех, кто собирает ботов на заказ. Создаёшь проект под своим кодом, настраиваешь бота, показываешь клиенту и передаёшь ему владение. Комиссия включается сама, как только владельцем стал он.

Для тех, кто продвигает DOS AI постоянно (медиа, агентства, сообщества), есть именные промокоды на особых условиях. Выдаются по договорённости: напиши нам, если хочешь стать партнёром.

📌 Комиссия начисляется только с подписок, а не с пополнений баланса на сообщения.

Когда код закреплён за тобой, в кабинете появляется раздел «Рефералы» с блоком твоего кода: сам код с кнопкой «Копировать», сколько человек его применили, сколько из них уже оплатили и сколько начислено.

Начисления копятся в кошельке. Свежая сумма замораживается на 3 дня после оплаты приведённого клиента: это защита на случай возврата платежа. В кошельке это видно строкой «Заморожено».

Вывод накопленного, два способа.

1. На карту.

  • Минимум $10.
  • Оформляешь заявку (нужны последние 4 цифры карты).
  • Заявка уходит на проверку, выплата вручную (обычно около 3 дней) на карту через Kaspi.
  • Статусы заявки: «в обработке», затем «выплачено».

2. В токены.

  • Переводишь размороженный баланс кошелька в токены своего проекта, мгновенно и без минимума (кроме совсем мелких сумм).
  • Удобно, если сам активно пользуешься платформой.

Простыми словами

Промокод это слово-пропуск для проекта. Вписал его в момент создания проекта, и старт удваивается: на баланс падает $10 вместо $5, а бесплатных дней у канала становится 30 вместо 14. Число диалогов не ограничено ни с кодом, ни без него. Позже применить код к тому же проекту уже нельзя, поэтому вводи сразу.

Свой код есть у каждого с регистрации, и ставить его можно куда угодно, хоть на свой проект: старт удвоится. Деньги он приносит только с чужих проектов, где владелец не ты.

А если ты рассказываешь о платформе своей аудитории, есть отдельная партнёрская программа с именным кодом на особых условиях. Про неё договариваются лично.


Дальше: → Роли и права
Связано: Биллинг · Сколько стоит сообщение
Не получилось? → Платёж не прошёл

Документация › Команда и аккаунт › Роли и права

Роли и права (viewer / tester / editor / admin / owner)

В проект можно пустить команду, но с разным уровнем доступа. Пять ролей: Просмотр → Тестер → Редактор → Администратор → Владелец. Каждая следующая включает права предыдущей.

⏱ 9 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Роли по возрастанию: Просмотр (viewer) → Тестер (tester) → Редактор (editor) → Администратор (admin) → Владелец (owner).
  • Просмотр: только смотреть (без email-ов участников). Тестер, то же, что Просмотр, плюс тест-чат (гоняет бота, но ничего не меняет). Редактор, функции, база знаний, дожимы, интеграции и ручные ответы клиентам. Администратор, промпт и настройки + приглашать людей. Владелец: деньги, роли, удаление, передача.
  • Промпт правит только Администратор и выше. Редактор настраивает всё вокруг бота, но не его характер.
  • Подключить кассу, передать и удалить проект может только Владелец. Администратор оплачивает подписку и выставляет клиентам счета, а пополнить баланс может любой участник: это только добавляет денег проекту.
  • Права проверяются и на сервере, и в интерфейсе (кнопки чужих действий просто не видны).

Пять ролей

РольRUКратко
viewerПросмотрсмотреть переписки, лиды, аналитику: без изменений
testerТестер+ тест-чат: гонять бота на пробных сообщениях; правки промпта/функций/настроек недоступны
editorРедактор+ функции, база знаний, дожимы, интеграции, медиа; вести диалог вручную; сбросить историю чата
adminАдминистратор+ промпт и все настройки проекта, закрывать диалоги, приглашать участников
ownerВладелец+ деньги, роли, передача и удаление проекта

Роли иерархичны: тестер умеет всё, что просмотр, плюс тест-чат; редактор, всё, что тестер, плюс правки; администратор, всё, что редактор, и так далее.

📌 Где проходит граница между Редактором и Администратором. Редактор настраивает всё вокруг бота: функции, базу знаний, дожимы, интеграции, медиа, и сам отвечает клиентам. Характер бота (системный промпт, информация о компании, модель, расширенные настройки) правит только Администратор: это одна правка, которая мгновенно меняет ответы во всех живых диалогах, поэтому она закрыта уровнем выше.

Кто что может (матрица)

ДействиеПросмотрТестерРедакторАдминистраторВладелец
Смотреть диалоги, лиды, аналитику✅✅✅✅✅
Видеть список участников✅✅✅✅✅
Тест-чат (гонять бота на пробе)❌✅✅✅✅
Видеть email-ы участников❌❌✅✅✅
Функции, база знаний, интеграции, дожимы, медиа❌❌✅✅✅
Вести диалог вручную (перехват)❌❌✅✅✅
Сбросить историю чата❌❌✅✅✅
Закрыть диалог (статус «closed»)❌❌❌✅✅
Промпт, модель и настройки проекта❌❌❌✅✅
Приглашать участников❌❌❌✅✅
Назначить роль Администратор❌❌❌❌✅
Менять роли / удалять участников❌❌❌❌✅
Пополнить баланс проекта✅✅✅✅✅
Оплатить подписку проекта❌❌❌✅✅
Выставлять счета клиентам, отменять и возвращать❌❌❌✅✅
Подключить или отключить кассу❌❌❌❌✅
Карта оплаты и автопополнение❌❌❌❌✅
Передать проект другому❌❌❌❌✅
Удалить проект❌❌❌❌✅
⚠️ Email-ы видны только с роли Редактор. Просмотр и Тестер видят участников, но их адреса скрыты: защита персональных данных команды.
🧪 Тестер для «дай пощупать бота». Ровно один шаг над Просмотром: открывается тест-чат, где человек гоняет бота пробными сообщениями. При этом он не может менять промпт, функции, настройки или отвечать реальным клиентам. Удобно давать тому, кто помогает проверять качество ответов, но кого не пускаешь в настройку.

Владелец против Администратора

Администратор это «правая рука» владельца, и деньги, которые идут внутрь проекта, ему доступны: он оплачивает подписку, пополняет баланс, выставляет счета клиентам, отменяет и возвращает их. Смысл простой: без оплаченной подписки и баланса бот молчит, и ждать владельца из отпуска значит стоять без ответов клиентам. Отобрать деньги этим правом нельзя: получателя выбирает не тот, кто нажимает кнопку.

Только Владелец может:

  • подключить и отключить кассу: это привязка кассы Kaspi компании, подтверждается кодом из SMS на телефон кассира;
  • распоряжаться своей картой: сохранённая карта, автопополнение и отчёт по его списаниям;
  • менять роли и удалять участников;
  • назначать роль Администратор («Only the project owner can grant the admin role»);
  • передать проект («Only the project owner can transfer ownership»);
  • удалить проект.
💡 Передача проекта. Владелец может передать проект другому: «После подтверждения вы станете владельцем: сможете пополнять баланс, менять настройки, управлять командой и удалять проект. Текущий владелец будет понижен до администратора.» То есть старый владелец становится Администратором.

Как добавить человека

Раздел проекта → «Участники» → пригласить по email. По умолчанию приглашённому даётся роль «Тестер» (самый частый кейс: «дай пощупать бота»; можно выбрать любую другую). Роль Администратор при приглашении может дать только Владелец. Подробнее: Участники и приглашения.


Где права проверяются

Права работают на двух уровнях (нельзя обойти, отключив одно):

  • На сервере: каждый запрос к API проверяет роль (requireProjectMember с минимальной ролью). Не хватает прав → отказ.
  • В интерфейсе: кнопки и разделы, которых тебе нельзя, просто не показываются (хук useProjectRole). Изменения роли подхватываются почти мгновенно (реалтайм).
📌 Платформенные админы: отдельно. У команды DOS есть служебный доступ суперадмина (is_superadmin) для поддержки всей платформы: это не роль внутри твоего проекта и не пересекается с ролями участников.

Простыми словами

Когда над проектом работает несколько человек, не всем нужен полный доступ. Поэтому есть пять уровней. Просмотр, для тех, кто только смотрит (например, руководитель глянуть статистику). Тестер, для тех, кому надо просто погонять бота в тест-чате, но без права что-то менять. Редактор, для тех, кто настраивает всё вокруг бота (функции, базу знаний, дожимы, интеграции) и отвечает клиентам руками, но сам характер бота не меняет. Администратор: твоя правая рука: правит промпт и настройки и зовёт людей в команду. И Владелец это ты: только у тебя ключи от денег и право удалить или передать проект.

Логика простая и безопасная, чем выше роль, тем больше можно. Самое важное, оплата подписки, приём платежей и удаление проекта закрыты для всех, кроме владельца. Даже администратор не сможет снести проект или подключить приём оплат мимо тебя. Пополнить баланс, наоборот, может любой участник: деньги при этом только приходят на проект, вынуть их обратно нельзя. А права проверяет сервер: лишние кнопки не показываются, и даже прямой запрос мимо интерфейса не пройдёт.


Дальше: → Участники и приглашения
Связано: Диалоги (перехват) · Биллинг
Не получилось? → напиши владельцу проекта, чтобы повысил роль

Документация › Команда и аккаунт › Участники и приглашения

Участники и приглашения

Добавляй команду в проект по email с нужной ролью. Приглашённому не нужен заранее созданный аккаунт: он создаст его при принятии.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Приглашение, по email, ссылка действует 7 дней.
  • По умолчанию даётся роль «Тестер» (можно выбрать любую); роль Администратор может выдать только Владелец.
  • Приглашать может Администратор и выше. Максимум, 20 участников на проект.
  • Поменять роль в висящем приглашении нельзя, отзови и пригласи заново.
Раздел «Участники»: приглашение команды и уровни доступа
Раздел «Участники»: приглашение команды и уровни доступа

Как пригласить

  1. Раздел проекта → «Участники» (/projects/<id>/members).
  2. Введи email и выбери роль.
  3. Отправь. Человеку придёт письмо с кнопкой «Принять приглашение».

В письме указано: «Ссылка действительна 7 дней. Если вы не ожидали это письмо, просто проигнорируйте его.» Приглашённому не нужен заранее аккаунт: он зарегистрируется при принятии и сразу попадёт в проект с выданной ролью.

📌 Кто кого может звать. Приглашать участников может Администратор и Владелец. Но роль Администратор при приглашении вправе выдать только Владелец: админ может звать максимум редакторов, тестеров и наблюдателей. См. Роли.

Лимит участников

На один проект, до 20 участников. Достиг лимита, освободи место (удали неактивных) или используй отдельный проект.


Управление приглашениями

  • Отозвать висящее приглашение: можно в любой момент (пока не принято).
  • Сменить роль в уже отправленном приглашении нельзя. Если ошибся с ролью, отзови приглашение и отправь заново с правильной: «У этого пользователя уже есть отправленное приглашение. Отзовите его и пригласите заново с новой ролью.»
  • Повторное приглашение с той же ролью, не плодит дубль.
⚠️ Сменить роль уже принятого участника или удалить его может только Владелец (см. Роли).
🔔 Люди узнают об изменениях сами (с 2026-08-07). Сменили роль или закрыли доступ, участник получит уведомление: раньше о снятой роли он узнавал, только упёршись в отказ посреди работы. Принял приглашение, уведомление придёт владельцу и тому, кто звал. Настройка контактов, в Уведомлениях, категория «Команда».

Простыми словами

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

Пара нюансов. Звать людей может администратор, но сделать кого-то таким же администратором, только ты как владелец. Всего в проект помещается 20 человек. И если случайно дал не ту роль в приглашении, поменять «на лету» не выйдет: просто отзови это приглашение и отправь новое с правильной ролью.


Дальше: → Профиль, пароль, безопасность
Связано: Роли и права · Передача проекта
Не получилось? → напиши в саппорт с ID проекта

Документация › Команда и аккаунт › Профиль, пароль, безопасность

Профиль, пароль, безопасность

Личные настройки твоего аккаунта (не проекта): имя, телефон, пароль, выход со всех устройств. Эта страница, про тебя, а не про конкретного бота.

⏱ 5 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Личный кабинет (/account), всё про твой аккаунт в одном месте: вкладки Профиль, Безопасность, Рефералы, Данные, Настройки.
  • Попасть в кабинет: клик по своему имени внизу бокового меню или пункт «Кабинет» в разделе «Система».
  • Можно сменить имя и телефон (вкладка «Профиль»), пароль (вкладка «Безопасность»); email меняется через саппорт.
  • Пароль: минимум 8 символов; главное правило - не брать популярный (платформа сверяет с базой утёкших и отклонит слишком известный).
  • Можно выйти со всех устройств разом, если потерял доступ или забыл выйти где-то.

Что где в кабинете

ВкладкаЧто внутри
Профильимя, телефон, email, дата регистрации, число проектов, статус пробного периода
Безопасностьсмена пароля, активные сессии (выход с устройств), журнал действий
Рефералыпартнёрский код, кто его применил, начисления и вывод (раздел появляется у партнёров)
Данныевыгрузка своих данных (GDPR) и удаление аккаунта
Настройкиязык интерфейса, регион, тема оформления

Что можно изменить

ЧтоКак
Имявкладка «Профиль», кнопка «Сохранить»
Телефонвкладка «Профиль»: контактный номер, необязательно
Парольвкладка «Безопасность»: ввести текущий + новый
Emailпока через саппорт (не самообслуживание), напиши, поможем
Язык / регион / темавкладка «Настройки»

Смена пароля

Кабинет → вкладка «Безопасность» → смена пароля. Требования к новому:

  • минимум 8 символов (максимум 128), без обязательных заглавных и спецсимволов: длина и редкость важнее состава;
  • пароль не должен быть слишком популярным: платформа сверяет его с базой паролей, утёкших в открытый доступ, и отклонит что-то вроде Aidar2024! или Qwerty123. Придумай редкое сочетание, которого нет в словарях.

Не выполнил, увидишь подсказку, какое именно правило нарушено. После смены тебя выйдет из аккаунта на всех устройствах: это нормально, войди заново с новым паролем.

🔔 О смене пароля платформа сообщит (с 2026-08-07): уведомление придёт в колокольчик, а если категория «Безопасность» включена, то и на почту с Telegram. То же самое, когда пароль меняют по ссылке восстановления из письма. Смысл простой: если пароль сменили не вы, вы узнаете об этом сразу. Настройка контактов, в Уведомлениях.

Выход со всех устройств

Если зашёл с чужого компьютера и забыл выйти, или подозреваешь, что доступ утёк, кабинет → «Безопасность» → можно завершить сессии:

  • на других устройствах (текущее остаётся);
  • на всех (включая текущее: тебя перекинет на вход).
🔔 Вход с незнакомого устройства тоже заметен. Если в аккаунт зашли с браузера, которым раньше не пользовались, придёт уведомление с указанием устройства, сети и времени. Обновление вашего браузера за новое устройство не считается, а самый первый вход при регистрации не тревожит.
💡 Это быстрый способ «отрезать» все активные входы, не меняя пароль (но пароль сменить тоже не помешает, если переживаешь за безопасность).
📌 Двухфакторной аутентификации (2FA) пока нет. Защита аккаунта: надёжный пароль + выход со всех устройств при подозрении.

Аккаунт ≠ настройки проекта

Не путай: Личный кабинет это про тебя (имя, телефон, пароль, сессии, язык). Настройки конкретного бота (промпт, каналы, функции) живут в настройках проекта (/projects/<id>/settings). Один твой аккаунт может владеть несколькими проектами: их число видно во вкладке «Профиль».


Простыми словами

Это твой личный кабинет, всё про тебя самого собрано в одном месте, по вкладкам. Зайти просто: внизу слева кликни по своему имени. На вкладке «Профиль» меняешь имя и телефон, на «Безопасности», пароль (платформа просит минимум 8 символов и отклонит слишком популярный, чтобы аккаунт не увели). Почту пока меняем через поддержку, напиши, если надо.

Полезная кнопка на «Безопасности», «выйти со всех устройств»: зашёл с чужого ноутбука и забыл выйти, или просто переживаешь, нажал, и все входы сбросились. Двухфакторной защиты по SMS пока нет, так что главная твоя броня, хороший пароль. Язык интерфейса, регион и тему меняешь на вкладке «Настройки», а свои данные можно выгрузить на вкладке «Данные». И помни: тут настройки твоего аккаунта, а характер ботов настраивается отдельно, в каждом проекте.


Дальше: → Уведомления и личные настройки
Связано: Участники · Роли и права
Не получилось? → напиши в саппорт (смена email, тоже через саппорт)

Документация › Команда и аккаунт › Уведомления

Уведомления и личные настройки

Платформа сообщает о важном: мало токенов, канал отвалился, пришёл платёж. Уведомления приходят в кабинет, на email, в личный Telegram или на твой вебхук. Здесь, что бывает и как задать контакты один раз на весь аккаунт.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Каналы доставки: колокольчик в кабинете, email, личный Telegram, личный WhatsApp-номер, свой вебхук.
  • Контакты отсюда используются как запасные: если у проекта канал не заполнен, системное уведомление уйдёт по адресу из аккаунта. Настройки проекта главнее.
  • Личный Telegram подключается через свой бот-токен и chat_id: токен хранится зашифрованным.
  • Самое важное, деньги и каналы связи: именно их пропуск приводит к тому, что бот тихо замолкает.

Куда приходят уведомления

КаналЧто это
Колокольчик в кабинетесписок уведомлений прямо в интерфейсе (страница /notifications)
Emailна указанную почту
Telegramалерты в твой Telegram через твоего бота
WhatsAppсообщение на твой личный номер; уходит через подключённый WhatsApp-канал одного из твоих проектов, поэтому без живого канала эта нога молчит
ВебхукPOST-запрос с JSON на свой URL (Slack, Discord, n8n, своя система)

Какие события можно получать

В настройках уведомлений включаются/выключаются 10 типов событий:

ТипКогда присылается
Оплата и балансоплата, низкий баланс, подписка, автопополнение
Безопасностьвход с нового устройства, смена пароля, выход на всех устройствах, создан API-ключ
Статус проектовошибка ИИ, бот отключён из-за спама, проблема в графике записи
Сводка по лидампервая заявка проекта
Каналы связиWhatsApp отключён, канал молчит
Лимиты и расходпока событий нет
Командаприглашение, новый участник, смена роли, закрытие доступа
Интеграциипока событий нет
Еженедельный отчётрегулярный отчёт по проекту
Обновления платформыновости о новых возможностях (по умолчанию выключено)
✅ Как это работает (с 2026-08-06). Настройки проекта главнее: если у бота задан свой контакт, платформа шлёт туда. А вот пустой канал теперь подхватывается отсюда: не указал в проекте почту или Telegram, системное уведомление уйдёт по тому, что стоит на этой странице. Так один раз заполненный аккаунт закрывает все проекты сразу.

Что важно помнить:
  • подхват работает для системных событий (деньги, каналы, график, состояние бота), то есть ровно для тех, из-за которых бот замолкает;
  • тумблеры выше управляют этим подхватом: снял «Оплата и баланс», по деньгам с аккаунта писать не будут (контакт, заданный в самом проекте, при этом продолжит получать);
  • если в проекте канал снят галочкой (Настройки проекта → уведомления о балансе), это считается осознанным «не пиши мне сюда», и аккаунт его не воскрешает.

Полный список событий и что из них всегда-включённое: Типы уведомлений.

События самого аккаунта: безопасность, команда, новости

Три категории выше относятся не к проекту, а к аккаунту, поэтому и работают иначе. Их подключили 2026-08-07.

Безопасность. Приходит, когда:

  • в аккаунт вошли с браузера или устройства, которым раньше не пользовались (первое устройство при регистрации не считается, обновление браузера тоже);
  • сменили пароль, в настройках или по ссылке восстановления из письма;
  • нажали «выйти на всех устройствах» или «на других устройствах»;
  • создали API-ключ. Ключ работает без пароля и без браузера, поэтому его появление вы видите сразу.

Команда. Приходит:

  • владельцу, когда администратор кого-то пригласил или добавил (сам владелец про свои действия уведомление не получает);
  • владельцу и пригласившему, когда человек принял приглашение;
  • самому участнику, когда ему сменили роль или закрыли доступ. До этого о снятой роли человек узнавал, только упёршись в отказ посреди работы.

Обновления платформы. Это подписка на новости, а не факт о вашем аккаунте, поэтому по умолчанию она выключена и выключенная не приходит вообще никак.

📌 Важная разница. Тумблеры на странице управляют письмами, Telegram и вебхуком. Безопасность и команда всё равно остаются в колокольчике: это история вашего аккаунта, и прятать из неё «пароль изменён» было бы неправильно. Для обновлений платформы выключенный тумблер значит «не присылать совсем».

Личный Telegram для алертов

Самый быстрый способ узнавать о проблемах, получать уведомления в Telegram через своего бота:

  1. Создай бота в @BotFather (как для канала, но отдельного, для алертов себе).
  2. Укажи его токен и свой chat_id: на этой странице, чтобы алерты шли по всем твоим проектам, или в настройках конкретного проекта, если для него нужен отдельный получатель.
  3. Готово: важные события будут падать тебе в Telegram.
🔒 Токен этого бота хранится зашифрованным, как и все ключи на платформе. В настройках показывается только признак «токен задан»: сам токен не отображается.
📌 Это отдельный бот от того, что общается с клиентами. Один, отвечает клиентам (канал), другой, шлёт алерты тебе.
💡 Регулярные отчёты по проекту шлёт бот, заданный в проекте. Подключить или сменить его можно в настройках проекта и прямо на странице Отчёты: в блоке «Кто отправляет».
📌 Контакт проекта перебивает аккаунт. Удобно, когда ведёшь чужие проекты: по одному алерты идут тебе, по другому, клиенту, а аккаунт остаётся подстраховкой для всего остального.

Простыми словами

Платформа присматривает за твоими ботами и дёргает тебя, когда что-то важное: кончаются деньги, отвалился WhatsApp, пришла оплата. Эти сигналы можно получать сразу в кабинете (колокольчик), на почту и, удобнее всего, себе в Telegram.

Настроить можно двумя способами, и они дополняют друг друга. Внутри проекта указываешь контакты для конкретного бота: удобно, когда ведёшь чужие проекты и алерты по ним должны идти разным людям. А на этой странице задаёшь свои контакты один раз на весь аккаунт: их платформа возьмёт для любого проекта, где ты ничего не заполнил. Важнее всего два сигнала, «кончаются деньги» и «WhatsApp отвалился»: именно из-за их пропуска бот тихо перестаёт отвечать клиентам, а узнаёшь ты поздно. Для Telegram-алертов заведи отдельного бота в @BotFather: это не тот, что общается с клиентами, а твой личный «вестник».


Дальше: → Удаление, передача, дублирование проекта
Связано: Профиль и безопасность · Биллинг · Канал отвалился
Не получилось? → напиши в саппорт

Документация › Команда и аккаунт › Удаление, передача, дублирование

Удаление, передача, дублирование проекта

Три необратимых (или почти) действия с проектом: все только для Владельца. Удалить, передать другому человеку или склонировать готовую настройку.

⏱ 7 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Все три действия, только Владелец (см. Роли).
  • Удаление сносит проект и его данные (диалоги, лиды, базу знаний); финансовая история сохраняется. Необратимо.
  • Передача делает владельцем другого человека, а тебя: администратором.
  • Дублирование копирует настройку (промпт, функции, дожимы, базу знаний) в новый проект: без диалогов и канала.

Удаление проекта

Меню проекта → «Удаление» (вкладка настроек, внутри называется «Опасная зона») → Удалить проект. Доступно только Владельцу.

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

⚠️ Это необратимо. Восстановить удалённый проект нельзя. Перед удалением, выгрузи нужное (экспорт лидов).

Удаление идёт в фоне и устойчиво к сбоям: если процесс прервётся, повторный клик продолжит с того же места, уже вычищенное второй раз не трогается. Поэтому можно увидеть «Удаление этого проекта уже запущено…» или «Удаление прервалось при очистке…». Это нормально: подожди пару минут, обнови страницу и, если проект ещё на месте, нажми «Удалить» снова.

Если одно и то же сообщение приходит и на третий раз, дальше сам ничего не сделаешь: напиши в поддержку и назови код из сообщения (DELETE_PHASE1_PARTIAL, DELETE_PHASE2_PARTIAL или DELETE_FINAL_FAILED). Проект в таком состоянии уже не показывается в списке и не считается в лимитах, а система раз в час пробует довести удаление сама.


Передача проекта

Меню проекта → «Удаление» → блок передачи владения. Только Владелец.

  1. Указываешь email нового владельца: ему придёт письмо «Принять владение» (ссылка действует 7 дней).
  2. Он принимает, и становится Владельцем.
  3. Ты автоматически становишься Администратором этого проекта: «Текущий владелец будет понижен до администратора.»
📌 Передача не происходит без согласия, пока человек не нажал «Принять владение», ничего не меняется. «Если вы не ждали это письмо, проигнорируйте его, передача не произойдёт без вашего согласия.»

Зачем: продаёшь бизнес, передаёшь проект клиенту, меняешь ответственного в команде.


Дублирование проекта

Меню проекта → «Удаление» → Дублировать проект. Только Владелец.

Копируется: настройки, функции, дожимы, база знаний (с содержимым). Можно задать имя новой копии (иначе добавится «(копия)»).

НЕ копируется: подключённые каналы (WhatsApp/Telegram), история диалогов и лиды, баланс/биллинг, личный Telegram для алертов.

💡 Зачем дублировать. Настроил идеального бота для одного филиала, клонируй под второй, подключи там свой номер, и не настраивай всё заново. Или держи «эталон» и экспериментируй на копии, не трогая боевой проект.

Простыми словами

Три «больших» действия с проектом, и все, только для тебя как владельца, чтобы сотрудник случайно ничего не натворил.

Удалить, снести проект совсем: уйдут переписки, лиды, база знаний (платёжная история останется для отчётности). Назад не вернёшь, так что сперва выгрузи нужное. Если при удалении выскочит «подождите 1-2 минуты», не пугайся, это система аккуратно дочищает, просто повтори.

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

Дублировать, снять копию готовой настройки: промпт, функции, база знаний переедут в новый проект, а вот канал и переписки, нет. Шикарно, когда настроил одного бота идеально и хочешь такого же под другой филиал, не собирая всё с нуля.


Дальше: → Публичный API и ключи
Связано: Роли и права · Участники · Создание проекта
Не получилось? → напиши в саппорт с ID проекта

Документация › Для разработчиков › Публичный API

Публичный API и ключи dos_sk_live_…

[для разработчиков] Дёргай платформу из своего кода: API-ключ dos_sk_live_… авторизует запросы как тебя самого, с теми же правами на проекты, что и в браузере.

⏱ 8 мин · 👤 для разработчика · 🟢 live

За 30 секунд:
  • Ключ формата dos_sk_live_…, передаётся в заголовке Authorization: Bearer ….
  • Ключ работает от имени твоего аккаунта: действуют те же роли/доступы, что и в кабинете.
  • Ключи бывают read и read+write, на весь аккаунт или на один проект.
  • Хранится только SHA-256-хеш, сырой ключ показывается один раз при создании. Потерял, выпусти новый.
Раздел «Для разработчиков»: выпуск и управление API-ключами
Раздел «Для разработчиков»: выпуск и управление API-ключами

Создание ключа

В кабинете → управление API-ключами → создать. При создании:

  • задаёшь права: только чтение (read) или чтение+запись (read+write);
  • задаёшь область: весь аккаунт (все твои проекты) или один проект;
  • опционально, срок жизни (1-365 дней).
🔑 Сырой ключ виден ОДИН раз. Платформа хранит только его SHA-256-хеш и не может показать ключ повторно. Скопируй сразу в надёжное место. Потерял, просто отзови и выпусти новый.

Лимиты: до 50 ключей на аккаунт; запросы по ключу до 120 в минуту (при превышении API вернёт 429 Too Many Requests, сделайте паузу и повторите). Управлять ключами можно только из браузера (залогиненная сессия), сам ключ не может создавать другие ключи (защита от эскалации прав).


Использование

Передавай ключ в заголовке:

Authorization: Bearer dos_sk_live_xxxxxxxxxxxxxxxxxxxxxxxx

Платформа резолвит ключ в твоего пользователя, дальше работают те же правила доступа, что и в кабинете: ключ видит ровно те проекты и может ровно то, что роль твоего аккаунта на этих проектах. Никаких отдельных «прав ключа» сверх твоих собственных нет.

СвойствоПоведение
Праваread: только GET; write, позволяет POST/PUT/PATCH/DELETE. Ключ только для чтения на мутирующем запросе → отказ
Областьaccount-scoped (все проекты) или project-scoped (заблокирован на один)
RBACнаследует роли твоего аккаунта на проектах, не выше
Отзывотозванный ключ перестаёт работать сразу

Базовый адрес: https://dosai.pro. Пример запроса:

curl https://dosai.pro/api/projects \
  -H "Authorization: Bearer dos_sk_live_…"

Машиночитаемое описание

АдресЧто это
https://dosai.pro/api/openapi.jsonПолная спецификация OpenAPI 3.1: все эндпоинты, параметры, коды ошибок. Открыта без ключа, подходит для генераторов клиентов и Postman
https://dosai.pro/llms.txtКороткая памятка для ИИ-агентов: что за платформа, как авторизоваться, куда идти дальше
https://dosai.pro/api/mcpMCP-сервер: тот же каталог как готовые инструменты для Claude Code, Codex и Cursor. См. Подключить ИИ-агента

Каталог эндпоинтов

Все пути, относительно https://dosai.pro, авторизация, Authorization: Bearer dos_sk_live_… (мутирующие запросы требуют ключ с правом write).

Проекты

МетодПутьЧто делает
GET/api/projectsСписок всех проектов пользователя
POST/api/projectsСоздать новый проект: { name, company_name, industry, … }
GET/api/projects/:idПолучить проект по ID
PATCH/api/projects/:idОбновить проект
DELETE/api/projects/:idУдалить проект

Лиды

МетодПутьЧто делает
GET/api/projects/:id/leadsСписок лидов. Query: page, limit, status (none/potential/qualified/hot/converted/reserve/lost), before (курсор)
GET/api/projects/:id/leads/:leadIdПолучить лид по ID
PATCH/api/projects/:id/leads/:leadIdОбновить лид: { lead_status, client_name, phone, email }
DELETE/api/projects/:id/leadsМассовое удаление: { ids: string[] }
GET/api/projects/:id/leads/exportЭкспорт лидов в CSV

Диалоги

МетодПутьЧто делает
GET/api/projects/:id/conversationsСписок диалогов. Query: page, limit, status (open/resolved/closed), include_archived
GET/api/projects/:id/conversations/:convIdДетали диалога
PATCH/api/projects/:id/conversations/:convIdИзменить диалог: { client_name, phone, tags[], status, archived_at, pinned_at }
GET/api/projects/:id/conversations/:convId/messagesСообщения диалога
POST/api/projects/:id/conversations/:convId/sendОтправить сообщение от оператора: { text: string }, опционально заголовок Idempotency-Key. Ответ 200 ещё не значит «доставлено»: смотрите поле ok

Функции ассистента

МетодПутьЧто делает
GET/api/projects/:id/functionsСписок функций бота. Значения секретов (токены, ключи) маскируются сервером

Интеграции

МетодПутьЧто делает
GET/api/projects/:id/integrationsСписок интеграций
POST/api/projects/:id/integrationsСоздать интеграцию (webhook): { name, type, url, events[], headers? }
PUT/api/projects/:id/integrations/:intIdИзменить интеграцию: те же поля, что при создании
DELETE/api/projects/:id/integrations/:intIdУдалить интеграцию

Аналитика и отчёты

МетодПутьЧто делает
GET/api/projects/:id/analyticsСтатистика проекта это query from, to (YYYY-MM-DD)
GET/api/projects/:id/reportsСкачать PDF-отчёт за месяц, query period=2026-03

Биллинг

МетодПутьЧто делает
GET/api/projects/:id/tokensБаланс токенов проекта
GET/api/projects/:id/tokens/historyИстория транзакций

Лимиты запросов

  • API-ключ: до 120 запросов/мин на ключ; сверх: 429 Too Many Requests.
  • Ориентиры по типам: GET ≈ 30-60/мин, POST/PATCH ≈ 10-30/мин, PDF-отчёты ≈ 5/мин (точные значения у каждого роута свои).
  • В каждом ответе, заголовки X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset; при 429 ещё и Retry-After (секунды до сброса).

Безопасность ключа

  • Это пароль доступа к твоим проектам: храни как секрет, не коммить в репозиторий, не клади в открытый фронтенд.
  • Светанул ключ, немедленно отзови и выпусти новый.
  • Для интеграции, которой нужно только читать, выдавай read-only ключ.
  • Нужен доступ только к одному проекту это делай project-scoped ключ, не account-wide.

Простыми словами

Если ты разработчик и хочешь дёргать платформу из своего кода, заводишь API-ключ. Это длинная строка вида dos_sk_live_…, которую ты прикладываешь к запросам в заголовке Authorization. Важная идея: ключ это «ты в виде кода». Он видит ровно те проекты и умеет ровно то, что и ты сам в кабинете, не больше. Хочешь дать интеграции только читать, выпусти ключ «только чтение». Хочешь ограничить одним проектом: выпусти ключ на этот проект.

Главное правило безопасности: ключ показывается один-единственный раз при создании, мы храним только его «отпечаток» и заново показать не сможем. Скопировал, сохранил надёжно. Потерял или засветил, не страшно, заходишь и отзываешь, выпускаешь новый. И никогда не клади такой ключ в открытый код или фронтенд: это как пароль.


Дальше: → Кастомные вебхуки
Связано: Роли и права · Формат данных
Не получилось? → напиши в саппорт

Документация › Для разработчиков › Кастомные вебхуки

Кастомные вебхуки (продвинутый режим)

[продвинутое] Научи бота дёргать твой HTTP-эндпоинт: проверить остаток на складе, создать заказ в своей системе, получить данные из своей БД. Через функцию «Своя интеграция по API» (тип webhook).

⏱ 9 мин · 👤 для разработчика и владельца · 🟢 live

За 30 секунд:
  • Функция «Своя интеграция по API» (тип webhook) даёт боту звонить на твой URL.
  • Настраиваешь URL, метод, заголовки, тело; в шаблонах можно подставлять данные диалога (выражения).
  • Есть повторы при сбоях, таймаут до 60 сек, авторизация к твоему API (Bearer/Basic/API-key): ключи хранятся зашифрованными.
  • URL проходит проверку безопасности (SSRF): внутренние адреса заблокированы.

Зачем это нужно

Встроенных функций (запись в Sheets, календарь, CRM) хватает не всем. Если у тебя своя система, склад, ERP, личный бэкенд, кастомный вебхук позволяет боту обратиться к ней прямо в разговоре: клиент спросил «есть ли товар?» → бот дёрнул твой /api/stock → ответил по факту.


Как настроить

Создай функцию типа «Своя интеграция по API» (тип webhook, см. Функции):

  • URL, твой эндпоинт (через выражения можно вставить данные: https://api.shop.kz/order?phone={{phone}});
  • метод: GET или POST;
  • заголовки: свои, включая авторизацию;
  • тело (для POST): шаблон с подстановкой полей диалога;
  • описание, когда боту это звать (как у любой функции).

Бот сам решит, когда вызвать, передаст параметры и использует JSON-ответ твоего сервиса в разговоре.


Обратное направление: платформа сама шлёт события на твой URL

Не путай с функцией выше. Функция это когда бот идёт к тебе посреди разговора. А в разделе «Интеграции» → «Вебхуки» настраивается обратное: платформа сама шлёт тебе POST, когда в проекте что-то произошло. Указываешь URL и отмечаешь события чипами.

Доставляются все девять событий (семь из них подключены 2026-08-06):

СобытиеКогда шлётся
conversation_startedбот ответил в диалоге, которого раньше не было
message_receivedбот ответил в уже существующем диалоге
lead_createdбот создал заявку
payment_receivedоплата прошла
tokens_lowбаланс проекта на исходе
trial_expiringзаканчивается бесплатный период WhatsApp
whatsapp_disconnectedWhatsApp-канал отвалился
ai_errorбот не смог ответить из-за ошибки ИИ
schedule_problemдвижок записи не разобрал график

Тело запроса одинаковое: event, project_id, project_name, title, body, data (подробности события) и fired_at.

📌 Про повторы. Событие вроде «мало баланса» может повторяться, пока причина не устранена, поэтому на своей стороне считай доставку идемпотентной: ориентируйся на пару event + fired_at, а не на «пришло, значит новое».

Доставки видно в «Логах событий»: статус, код ответа, повторы. Подпись платформа на этих запросах не ставит, если нужна аутентификация, положи секрет в query или прими только с известного адреса.


Надёжность: таймаут и повторы

ПараметрПоведение
Таймаутпо умолчанию ~10 сек, настраивается от 1 до 60 сек
Повторынастраиваемые: число попыток + задержка (линейная/экспоненциальная)
Авто-повторвременные коды 408, 429, 502, 503, 504, 522, 524 повторяются всегда; 429 уважает Retry-After

Если твой сервис «прилёг», бот не зависнет, отработает таймаут и повторы, а клиенту скажет, что не получилось (см. Функция падает).


Авторизация к твоему API

Бот может авторизоваться на твоём эндпоинте: Bearer-токен, Basic, API-ключ в заголовке или кастомный заголовок. Эти секреты хранятся зашифрованными. Заголовки очищаются от спецсимволов (защита от инъекций), а служебные заголовки слать нельзя.

⚠️ URL проверяется на безопасность. Нельзя направить бота на внутренний адрес (127.0.0.1, 10.x, 192.168.x и т.п.): это блокируется (SSRF-защита). Эндпоинт должен быть публичным и желательно по HTTPS.

Простыми словами

Это для тех, у кого есть своя программа или сайт с API. Обычный бот умеет писать в Google-таблицу или CRM, но если тебе нужно дёрнуть именно свою систему, например, проверить остаток на складе или создать заказ: ты настраиваешь «Свою интеграцию по API». Говоришь боту: вот адрес, вот как авторизоваться, вот что отправить, и он по ходу разговора обращается к твоему сервису и отвечает клиенту по реальным данным.

Сделано надёжно, если твой сервер тормозит, бот не зависнет, подождёт сколько-то секунд, попробует ещё раз, а не получилось, честно скажет клиенту. Пароли к твоему API хранятся в зашифрованном виде. Одно ограничение: адрес должен быть «внешним» на внутренние/локальные адреса бота направить нельзя, это защита от взлома.


Дальше: → Язык выражений
Связано: Функции · Вебхуки и безопасность · МойСклад: готовый пример · Функция падает
Не получилось? → Функция не вызывается / падает

Документация › Для разработчиков › Язык выражений

Язык выражений (expressions)

Подставляй в тексты бота живые данные: Привет, {{client_name}}!. Выражения работают в промпте, дожимах и шаблонах: на основе Handlebars, безопасно.

⏱ 8 мин · 👤 для владельца и разработчика · 🟢 live

За 30 секунд:
  • Синтаксис это двойные фигурные скобки: {{client_name}}, {{phone}}, {{stage}}.
  • Работает в системном промпте, дожимах, шаблонах уведомлений, тест-чате.
  • Есть помощники: даты/время, текст ({{upper …}}), условия ({{#if …}}), математика.
  • Это безопасный шаблонизатор (Handlebars): произвольный код не выполняется.

Что это и где работает

Выражения это «вставки» в тексты бота, которые на лету заменяются на реальные данные диалога. Например, Здравствуйте, {{client_name}}! превратится в Здравствуйте, Алмас!.

Работают в: системном промпте, сообщениях дожимов, шаблонах уведомлений, тест-чате.

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


Переменные и помощники: живой справочник

Полный список переменных ({{client_name}}, {{phone}}, {{stage}}, {{data.поле}}…) и помощников (даты, текст, условия {{#if}}, математика, {{digits}}): в живом справочнике выражений. Он строится прямо из кода движка, поэтому всегда совпадает с тем, что реально умеет бот: здесь копию не держим, чтобы она не устаревала.

💡 {{client_name}} и {{name}}: одно и то же, оба работают. Аналогично {{client_phone}} и {{phone}}.

Пример:

{{#if client_name}}Здравствуйте, {{client_name}}!{{else}}Здравствуйте!{{/if}}
Сегодня {{day_of_week}}, {{date}}. Ваш статус: {{default lead_status "новый"}}.
🕐 Дата и время ({{date}}, {{time}}, {{now}}, {{day_of_week}}, {{format_date}}) считаются по часовому поясу проекта из настроек бота. Если пояс не задан, по Алматы. Другой пояс можно указать первым параметром: {{time "Europe/Moscow"}}.
💡 Числа из анкеты сравниваются как числа: {{#if (eq data.amount 100)}} сработает и тогда, когда клиент написал «100» текстом, а {{#if (gt data.amount 1000)}} понимает «5 000» с пробелом.

Безопасность

Это безопасный шаблонизатор, а не выполнение кода. Нельзя запустить произвольный JS, обратиться к файлам или сети. Встроены защиты от перегрузки: ограничения на длину шаблона, число и глубину условных блоков, размер данных и времени выполнения. Если шаблон «слишком тяжёлый», условные блоки останутся текстом, а простые вставки всё равно подставятся, бот не зависнет.

📌 Невалидное выражение (опечатка в скобках) не ломает сообщение: оно останется текстом, а остальные вставки в том же тексте подставятся как обычно.

Простыми словами

Выражения это способ вставлять в тексты бота «живые» кусочки. Пишешь в промпте Привет, {{client_name}}!, и каждому клиенту бот подставит его имя. Можно вставлять телефон, текущую дату, стадию разговора и собранные данные. Есть и помощники посложнее: написать дату в нужном формате, сделать текст заглавными буквами, показать разный текст в зависимости от условия («если имя известно, поздоровайся по имени, иначе просто привет»).

Звучит как программирование, но бояться нечего: это безопасные «шаблоны», а не настоящий код, сломать или взломать через них ничего нельзя, и даже если ошибёшься в скобках, сообщение не развалится. Работают они в промпте, дожимах: везде, где бот пишет текст.


Дальше: → Формат данных и интеграция фронта
Связано: Системный промпт · Дожимы · Кастомные вебхуки
Не получилось? → напиши в саппорт

Документация › Для разработчиков › Формат данных

Формат данных и интеграция фронта

[для разработчиков] Единые правила API, как выглядят успех и ошибка, пагинация, realtime, авторизация. Если строишь интеграцию или свой фронтенд, начни отсюда.

⏱ 8 мин · 👤 для разработчика · 🟢 live

За 30 секунд:
  • Успех: { "data": … }. Ошибка: { "error": "текст", "code": "КОД" }.
  • Пагинация: ?page=&limit= (по умолчанию 100, максимум 200).
  • Realtime: через Supabase-каналы (INSERT/UPDATE/DELETE по таблице с фильтром проекта).
  • Авторизация: сессия-cookie (браузер) или API-ключ Bearer dos_sk_live_… (API).

Конверт ответа

Все ответы API это в едином формате.

Успех:

{ "data": { ... } }

HTTP 200 (или другой 2xx).

Ошибка:

{ "error": "Человеко-читаемое сообщение", "code": "ERROR_CODE" }

Коды ошибок и статусы

HTTPcodeКогда
400INVALID_INPUT / INVALID_UUIDневерные/неполные данные
401UNAUTHORIZEDнет/невалидны учётные данные или подпись
403FORBIDDENавторизован, но нет прав (роль)
404NOT_FOUNDобъект не существует или не виден
429RATE_LIMITEDпревышен лимит (смотри заголовок Retry-After)
500INTERNAL_ERRORнеобработанная ошибка (полный текст в логах и Sentry, наружу только общий)
500DATABASE_ERRORсбой запроса к базе

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


Пагинация

Параметры запроса: ?page= и ?limit=.

  • по умолчанию limit = 100, максимум 200;
  • page начинается с 1 (ограничен сверху, чтобы не уехать в гигантский offset);
  • в ответ обычно приходит блок pagination: { page, limit, total, has_more }.

Realtime

UI обновляется без перезагрузки через Supabase Realtime: подписка на изменения таблицы (postgres_changes) с фильтром по проекту (project_id=eq.<id>), события INSERT / UPDATE / DELETE.

Что важно интегратору:

  • подписка возвращает статус (подключено / ошибка / закрыто) и умеет переподключаться после обрыва сети;
  • на DELETE приходит только первичный ключ (если не включён полный снимок строки);
  • глобальный индикатор «нет связи» загорается, только когда отвалились все каналы.
💡 На клиенте это обёрнуто в хуки use-realtime-* (по одному на сущность), после любой мутации список обновляется сам. Подробнее про продукт-поведение: Диалоги.

Авторизация

СпособДля чего
Сессия-cookieбраузерный кабинет (httpOnly-cookie Supabase)
API-ключ Authorization: Bearer dos_sk_live_…внешние интеграции, серверный код, см. Публичный API

Оба проходят одни и те же проверки доступа (роли/проекты): отдельной «облегчённой» авторизации нет. Ключ только для чтения на мутирующем методе → отказ.


Простыми словами

Это шпаргалка для тех, кто пишет код поверх платформы. Договорённости простые и одинаковые везде, если всё хорошо в ответе лежит data с данными; если плохо, error с понятным текстом и коротким code, по которому удобно ветвить логику. Списки отдаются порциями (постранично, до 200 за раз). Живые обновления (новое сообщение, новый лид) прилетают сами через подписку, не надо опрашивать сервер по таймеру.

Заходить можно двумя дверями: обычной сессией из браузера или API-ключом для своего кода, и за обеими дверями работают одни и те же правила доступа, так что ключ не даёт ничего сверх твоих прав. Если строишь свой интерфейс или интеграцию, этих правил достаточно, чтобы начать.


Дальше: → Бот не отвечает
Связано: Публичный API · Кастомные вебхуки
Не получилось? → напиши в саппорт

Документация › Для разработчиков › Подключить ИИ-агента

Подключить ИИ-агента (MCP)

[для разработчиков] Подключите Claude Code, Codex или Cursor к DOS AI одной командой и управляйте проектами прямо из своего ИИ-инструмента: «покажи вчерашних лидов», «поправь промпт», «сколько потратили за неделю».

⏱ 7 мин · 👤 для разработчика и интегратора · 🟢 live

За 30 секунд:
  • Адрес сервера: https://dosai.pro/api/mcp, авторизация тем же ключом dos_sk_live_…, что и у API.
  • В Claude Code подключается одной командой, в Codex и Cursor через конфиг.
  • Агент получает 13 инструментов: проекты, промпт, функции, лиды, диалоги, отправка сообщения, аналитика, баланс.
  • Удалять проекты и проводить платежи агент не может: этого нет в наборе инструментов намеренно.
  • Готовые команды с подставленным ключом лежат в кабинете: раздел для разработчиков.

Что это даёт

Обычный API нужно программировать. MCP (Model Context Protocol) это стандартный «разъём», через который ИИ-инструмент видит платформу как набор понятных действий и вызывает их сам, по просьбе на человеческом языке.

Практический смысл для интегратора, который ведёт несколько клиентов:

  • «Покажи все проекты, где вчера не было ни одного лида», вместо обхода кабинетов руками.
  • «Прочитай промпт барбершопа, добавь правило про запись на выходные, сохрани»: правка без переключения окон.
  • «Сколько диалогов и лидов у стоматологии за июль, какая конверсия»: сводка в одном ответе.
  • «Открой последний диалог и ответь клиенту, что мастер перезвонит в 10:00»: ответ оператором из терминала.

Шаг 1. Выпустить ключ

Ключ выпускается в кабинете, раздел для разработчиков (/developers). Подробно про права и область действия написано в статье Публичный API.

Что важно выбрать правильно:

ВыборКогдаЧто сможет агент
Только чтениеАналитика, отчёты, разбор диалоговСмотреть, но ничего не менять
Чтение и записьПравка промпта, ответы клиентамЕщё и менять промпт, статусы лидов, отправлять сообщения
Один проектРабота по одному клиентуТолько этот проект. dosai_list_projects вернёт ровно его, остальные недоступны
Весь аккаунтВедёте несколько проектовВсе проекты аккаунта
🔑 Ключ показывается один раз. Скопируйте сразу; потеряли, отзовите и выпустите новый.

Шаг 2. Подключить свой инструмент

Готовые команды с уже подставленным ключом появляются в кабинете сразу после создания ключа, проще скопировать оттуда. Ниже те же команды, если подключаете позже.

Claude Code

claude mcp add --transport http dosai https://dosai.pro/api/mcp \
  --header "Authorization: Bearer dos_sk_live_ВАШ_КЛЮЧ"

Проверка: claude mcp list, сервер dosai должен быть в списке. Дальше просто просите словами: «покажи мои проекты в DOS AI».

Codex

В ~/.codex/config.toml:

[mcp_servers.dosai]
url = "https://dosai.pro/api/mcp"
bearer_token_env_var = "DOSAI_KEY"

И ключ в профиль оболочки (~/.zshrc или ~/.bashrc):

export DOSAI_KEY="dos_sk_live_ВАШ_КЛЮЧ"

Так ключ не лежит в конфиге, который легко утащить в репозиторий или синхронизировать между машинами. Если ваш Codex ругается на поле url, он старый: обновите его, поддержка удалённых серверов там встроенная.

Cursor

В ~/.cursor/mcp.json:

{
  "mcpServers": {
    "dosai": {
      "url": "https://dosai.pro/api/mcp",
      "headers": { "Authorization": "Bearer dos_sk_live_ВАШ_КЛЮЧ" }
    }
  }
}

Cursor умеет подставлять переменные окружения, так что ключ тоже можно не держать в файле: "Authorization": "Bearer ${env:DOSAI_KEY}".

Любой другой инструмент

MCP это открытый стандарт, а не список из трёх программ. Клиенты, которые умеют искать серверы сами, найдут нас в официальном реестре MCP под именем pro.dosai/dos-ai (домен подтверждён, запись активна). Проверить можно так:

curl "https://registry.modelcontextprotocol.io/v0/servers?search=dosai"

Всем остальным нужны всего две вещи:

ЧтоЗначение
Адрес сервераhttps://dosai.pro/api/mcp (транспорт streamable HTTP)
ЗаголовокAuthorization: Bearer dos_sk_live_ВАШ_КЛЮЧ

Большинство инструментов настраиваются файлом такого вида:

{
  "mcpServers": {
    "dosai": {
      "url": "https://dosai.pro/api/mcp",
      "headers": { "Authorization": "Bearer dos_sk_live_ВАШ_КЛЮЧ" }
    }
  }
}

Проверить связь до настройки инструмента можно одной командой: в ответ придёт список инструментов.

curl -s https://dosai.pro/api/mcp \
  -H "Authorization: Bearer dos_sk_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Если инструмент вообще не умеет MCP, остаётся обычный путь: публичный REST API с тем же ключом.

⚠️ Веб-версии claude.ai и ChatGPT подключаются иначе: там нельзя просто вписать ключ, требуется вход по кнопке «Разрешить доступ» (OAuth), которого у нас пока нет. Работают инструменты, где ключ задаётся вручную: Claude Code, Codex, Cursor и подобные.

Что умеет агент

ИнструментЧто делаетПрава ключа
dosai_list_projectsСписок проектов, у каждого видно, работает ли WhatsApp-каналчтение
dosai_get_projectНастройки проекта: статус, канал и работает ли он сейчас (whatsapp_channel: online, offline, banned когда WhatsApp ограничил номер, not_connected, unknown), модель, балансчтение
dosai_get_promptПрочитать системный промптчтение (роль админа или владельца)
dosai_update_promptЗаменить системный промптзапись (роль админа или владельца)
dosai_list_functionsСписок функций ассистентачтение
dosai_list_leadsЛиды постранично, с фильтром по статусу (none, potential, qualified, hot, converted, reserve, lost)чтение
dosai_get_leadПолная карточка лида с ответами анкетычтение
dosai_update_leadСтатус лида, имя, телефон, почтазапись
dosai_list_conversationsДиалоги, с фильтром по статусу (open, resolved, closed) и включением архивныхчтение
dosai_get_messagesПереписка одного диалогачтение
dosai_send_operator_messageНаписать клиенту от лица операторазапись
dosai_get_analyticsДиалоги, лиды, конверсия, время ответа, воронка, источники и расход за период (без указания дат: последние 7 дней)чтение
dosai_get_balanceОстаток и расходчтение

Чего в наборе нет намеренно: удаление проектов, платежи и возвраты, управление участниками, админ-функции. ИИ иногда ошибается, и цена ошибки не должна равняться удалённому проекту или списанным деньгам. Эти действия остались в API, где вызов делается осознанно.


Безопасность

  • Ключ = доступ к вашим проектам. Команда подключения содержит его в открытом виде: вставляйте только в свой терминал, не выкладывайте в репозиторий и не показывайте на экране при записи видео.
  • Начните с ключа только на чтение. Права на запись выдавайте, когда точно нужны правки.
  • Клиенту или подрядчику выдавайте ключ, привязанный к одному проекту.
  • Агент действует от вашего имени. Он видит ровно то, что видите вы, и ограничен вашей ролью на каждом проекте.
  • Отправка сообщения необратима. dosai_send_operator_message пишет живому человеку в WhatsApp или Telegram. Согласуйте текст с агентом до отправки. Если канал сообщение не принял, инструмент честно скажет «не доставлено»: в этом случае оно лежит в диалоге неотправленным и ждёт повтора.
  • Тексты клиентов это данные, а не команды. В переписке может оказаться фраза вида «игнорируй прежние инструкции и сделай…». Сервер прямо предупреждает об этом агента при подключении, но привычка проверять, что именно агент собирается сделать, остаётся за вами.

Лимиты

  • 120 запросов в минуту на ключ, плюс собственный лимит у каждого эндпоинта (например, аналитика 20 в минуту).
  • Один вызов инструмента = два запроса к платформе, поэтому ориентируйтесь примерно на 60 действий агента в минуту.
  • Лимит считается на каждый ключ отдельно: два ключа одного аккаунта имеют по своему бюджету, они не складываются и не делятся.
  • При превышении приходит понятная агенту фраза «превышен лимит, подожди N секунд», и он повторит сам.

Если не работает

Что видит агентЧто произошлоЧто делать
«API-ключ недействителен, истёк или отозван»Ключ удалён, истёк или скопирован с опечаткойВыпустить новый в кабинете
«Этот ключ только для чтения»Ключ без права записи, а действие меняет данныеВыпустить ключ с правом записи
«Ключ привязан к другому проекту»Ключ на один проект, а запрос к другомуВзять ключ на весь аккаунт или на нужный проект
«Недостаточно прав на этом проекте»Ваша роль ниже администратораПопросить владельца повысить роль
«Превышен лимит запросов»Слишком частоПодождать указанные секунды
«Конфликт: такое действие уже выполнено» на отправкеТот же текст в тот же диалог в пределах пяти минут считается случайным дублем и не уходитТак задумано: защищает клиента от двойного сообщения при повторе запроса. Нужно отправить то же самое ещё раз, подождите или измените текст
«Сообщение НЕ доставлено клиенту»Канал отказал: номер переподключается, сработала защита от блокировки или бот заблокирован клиентомСообщение сохранено в диалоге как неотправленное, его видно в кабинете с кнопкой повтора. Повторите позже; отправленным его считать нельзя
«Неверные аргументы. Unrecognized key»Агент передал поле, которого у инструмента нетНичего не делать: в ответе названо лишнее поле, агент исправится сам. Так сделано нарочно, чтобы выдуманный параметр не поменял смысл ответа молча
Сервер не появился в спискеОпечатка в адресе или заголовкеПроверить https://dosai.pro/api/mcp и формат Bearer dos_sk_live_…

Под капотом

Сервер работает по streamable HTTP и не хранит сессий: каждый вызов самодостаточен, поэтому переключение серверов между двумя запросами агента ничего не ломает.

Каждый инструмент внутри вызывает тот же публичный REST-эндпоинт, что и обычная интеграция. Это сделано намеренно: права, лимиты, проверки и запись в журнал живут в одном месте, и агент получает ровно те же ответы, что получил бы curl. Отдельной «агентской» логики доступа не существует, поэтому она не может разойтись с основной.

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

Машиночитаемое описание REST-части лежит на https://dosai.pro/api/openapi.json, краткая памятка для агентов на https://dosai.pro/llms.txt.


Простыми словами

Обычно, чтобы связать программу с платформой, нужен программист: он пишет код, который ходит по адресам и разбирает ответы. MCP убирает этот шаг для ИИ-инструментов. Вы один раз даёте своему ИИ-помощнику адрес и ключ, и дальше говорите обычными словами: «сколько заявок пришло вчера», «поправь промпт у бота стоматологии», «ответь этому клиенту, что перезвоним в десять». Помощник сам понимает, какое действие вызвать.

Ключ это пароль: он даёт помощнику ровно те же возможности, что есть у вас в кабинете, не больше. Если хотите, чтобы помощник только смотрел и ничего не менял, выпустите ключ «только чтение». Если работаете с одним клиентом, выпустите ключ на один проект: до остальных помощник не дотянется.

И главное, что мы решили заранее: помощник не умеет удалять проекты и трогать деньги. Даже если он что-то неправильно поймёт, худшее, что произойдёт, это изменённый текст промпта или одно лишнее сообщение клиенту. Всё это видно и поправимо.


Дальше: → Кастомные вебхуки
Связано: Публичный API · Роли и права
Не получилось? → напиши в саппорт

Документация › Решение проблем › Бот не отвечает

Бот не отвечает: диагностика

«Бот молчит» это 9 разных причин, а не одна. Эта статья, порядок проверки от частого к редкому, чтобы за 2 минуты понять, в чём дело: деньги, выключатель, подписка, канал, или это вообще не баг.

⏱ 10 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд (проверь по порядку):
  1. ИИ включён? Рубильник «Статус бота» живёт в настройках бота, а у отдельного диалога свой переключатель «AI» в шапке.
  2. Деньги на балансе есть? Пусто → бот шлёт короткое «Скоро ответим» вместо нормального ответа.
  3. Проект активен, подписка/триал в силе? Иначе бот не отвечает по правилам доступа.
  4. Отвечает ли в тест-чате? Да в тесте, нет в бою → проблема в канале/деньгах/доступе, не в промпте.
  5. Реже: первое сообщение в новом WhatsApp-чате (баг WhatsApp Web), старая переписка (бот в них не лезет), только что переподключил канал (пауза 15 мин), авто-ответ WhatsApp Business (бот ответил раз и замолчал → п. 8).
Раздел «Логи»: первое место диагностики, если бот повёл себя странно
Раздел «Логи»: первое место диагностики, если бот повёл себя странно

Главный принцип: не гадай, сравни и посмотри

Самая частая ошибка: придумать причину и чинить не то. Правильный порядок:

  1. Сравни с другими чатами. Бот молчит везде или в одном диалоге? Везде → деньги/доступ/канал. В одном → этот конкретный чат (старая переписка, оператор перехватил, стоп-диалог).
  2. Проверь в тест-чате. Там бот отвечает всегда (даже если выключен для клиентов и баланс пуст). Отвечает в тесте, молчит в бою → дело не в боте, а в канале/деньгах/доступе.
  3. Только потом меняй промпт, если бот реально «думает не то», а не «молчит».

1. Проверь выключатель ИИ

У каждого диалога есть флаг ai_on. Если ИИ выключен, бот сохраняет входящие, но не отвечает (это не баг, это пауза).

Бот мог встать на паузу сам у платформы есть причины автопаузы (ai_off_reason):

Причина (ai_off_reason)Что значитЭто нормально?
operator_joined_chatоператор написал в диалоге, из кабинета или со своего телефона (или сработал авто-ответ WhatsApp Business: см. п. 8)да, если это человек; если это авто-ответ WhatsApp, отключи его. Бот вернётся сам, если включено автовозобновление
chat_started_by_operatorдиалог начат вручную операторомда
client_stopклиент попросил остановить бота (функция stop_dialog)да
pipeline_stage_done«Воронка завершена»: устаревшая причина, бот больше не останавливается сам на стадии «Завершено»; встречается только у старых диалоговда, включи ИИ вручную, если нужно
pre_existing_dialogпереписка существовала до подключения ботада: см. п. 5
backlog_offlineсообщение пришло в момент переподключения каналада: временно
guards_violationсработала защита от спамапроверь, не флуд ли
💡 Если причина из списка «да», бот молчит намеренно. Включи ИИ обратно вручную в диалоге, если нужно перехватить.

2. Проверь доступ (подписка, триал, бан)

Перед каждым ответом платформа проверяет «можно ли боту отвечать» (checkProjectEligibility). Если нет, молчит. Возможные причины (коды):

КодЧто значитЧто делать
PROJECT_NOT_ACTIVEпроект в статусе «черновик»подключи канал, проект активируется сам
INSUFFICIENT_BALANCEпустой баланспополни
NO_SUBSCRIPTION / SUBSCRIPTION_EXPIREDнет активной подпискиоформи подписку
WHATSAPP_TRIAL_EXPIREDбесплатные дни WhatsApp кончилисьоформи подписку
SUBSCRIPTION_NO_EXPIRYподписка помечена активной, но без даты окончания (сбой данных)напиши в саппорт, сами не чините
ACCOUNT_BANNEDаккаунт заблокированнапиши в саппорт
📌 Ограничения по числу пробных диалогов больше нет (отменено 2026-08-04). Если встретишь в старых заметках код TRIAL_CONVERSATIONS_EXHAUSTED или «10 пробных диалогов», это неактуально: внутри бесплатных дней диалогов сколько угодно, ограничивает только баланс проекта.
⚠️ Telegram vs WhatsApp. Telegram-боту для ответа нужен только активный проект + баланс. WhatsApp дополнительно требует активный триал или подписку (см. Биллинг).
✅ С 2026-07-23 такие блокировки видны в Диалогах. Раньше сообщение клиента, пришедшее при истёкшей подписке / пустом балансе / проекте на паузе, вообще не попадало в CRM: полная тишина без следа. Теперь входящее сохраняется в диалоге, а на диалоге появляется бейдж причины («Нет подписки» / «Нет баланса» / «Проект на паузе»). После продления/пополнения бейдж снимается сам, и бот отвечает на следующее сообщение клиента.

3. Проверь баланс

Это частая причина «бот вдруг замолчал». Когда баланс ниже минимума, платформа не запускает AI-ответ, а вместо него:

  • клиенту уходит короткий дежурный текст вроде «Спасибо, что написали! Скоро ответим.» (чтобы человек не остался без ответа);
  • тебе как владельцу приходит уведомление «мало токенов» (tokens_low);
  • в логах диалога это причина no_token_balance.

Увидел у клиента короткое «Скоро ответим» вместо нормального ответа бота: это маркер пустого баланса. Пополни.


4. Канал жив? (WhatsApp/Telegram)

Если бот молчит во всех диалогах, возможно, отвалился сам канал, а не бот:

  • WhatsApp мог отвязать устройство («Сессия разлогинена») или поймать бан;
  • Telegram мог перестать работать, если токен отозвали в @BotFather.

Это отдельная тема: см. Канал отвалился / WhatsApp забанили.


5. Это контакт, который был до подключения?

В режиме «Только новым обращениям» бот намеренно не отвечает в чатах, которые существовали до того, как ты подключил канал (pre_existing_dialog). Так он не влезает в давние разговоры твоих менеджеров и не «выстреливает» в личные контакты, за что WhatsApp может забанить номер.

Это не баг, а настройка. Если старым клиентам отвечать НУЖНО, поменяй «Кому отвечает бот» на «Всем, кто напишет» (вкладка «Настройки бота», карточка сразу под статусом бота, подробности в Расширенных настройках). Переключение сразу снимает паузу с таких диалогов, и бот отвечает в них на следующее сообщение клиента. Разовая альтернатива для одного чата: включить ИИ вручную в шапке диалога.

⚠️ Пометка держится сама по себе: пока режим прежний, следующие сообщения этого клиента бот тоже пропустит, а не «подхватит».

На сообщения, отправленные до подключения номера, бот не ответит ни в одном режиме. Это защита от бана: иначе после каждого сканирования QR он разослал бы ответы на всю переплывшую историю.


6. Первое сообщение в новом WhatsApp-чате (баг WhatsApp Web)

Иногда самое первое сообщение в совершенно новом WhatsApp-чате приходит не текстом, а системной заглушкой вроде === SYSTEM WZ === Check this message on your device. Это баг WhatsApp Web на стороне Meta: телефон сообщение видит, а привязанная сессия, нет, поэтому расшифровать его нельзя.

Что делает платформа: такое нечитаемое сообщение пропускается (ответить на пустоту нельзя), но:

  • создаётся карточка диалога (чтобы лид не потерялся);
  • в диалог пишется внутренняя заметка о ситуации;
  • тебе как владельцу уходит оповещение.

То есть бот «молчит» на первое сообщение не из-за поломки, а потому что физически не смог его прочитать. Обычно клиент пишет второе: на него бот уже отвечает.

📌 Если видишь в WhatsApp сообщение клиента, которого нет в кабинете как текст: это та самая заглушка. Лид не потерян, карточка создана.

7. Только что переподключил канал?

После подключения или переподключения WhatsApp платформа 15 минут держит номер молча: это защита от бана, свежеавторизованный номер, который сразу начинает писать людям, Meta принимает за спам-бота.

Что важно понимать про эти 15 минут:

  • придерживаются любые автоответы бота, не только дожимы и рассылки: на новое сообщение клиента бот в это окно тоже не ответит;
  • сообщения не теряются: они принимаются, сохраняются в Диалогах и помечаются как требующие ответа, чтобы ты видел их сразу;
  • окно снимается по времени, ровно через 15 минут после подключения, а не «когда пойдут входящие»;
  • проверить бота можно сразу: открой диалог и включи в нём «AI» вручную, для такого диалога пауза не действует. Ещё быстрее, в тест-чате, он не зависит от канала вообще.

Подробнее: Антибан.


8. Бот ответил один раз и замолчал (авто-ответ WhatsApp Business)

Частый случай именно для WhatsApp Business: бот отвечает клиенту первый раз нормально, а потом в этом же чате замолкает, причина паузы, operator_joined_chat.

Что произошло: у твоего номера в WhatsApp Business включён встроенный авто-ответ, приветствие или «сообщение об отсутствии». Когда клиент пишет, WhatsApp сам отправляет это сообщение от твоего имени. Платформа видит исходящее «от владельца» и логично считает, что оператор вступил в диалог вручную → ставит бота на паузу, чтобы не перебивать человека. В итоге бот замолкает.

Как починить (одна настройка, один раз): в приложении WhatsApp Business → Настройки → Инструменты для бизнеса → отключи «Приветственное сообщение» и «Сообщение в нерабочее время». Бот и так сам здоровается с клиентами: родной авто-ответ только конфликтует с ним.

💡 Это касается только аккаунтов WhatsApp Business с включёнными авто-ответами. Обычный WhatsApp такого не делает. Чтобы снова включить бота в уже «запауженном» чате, открой диалог и включи ИИ вручную.

Шпаргалка: «бот молчит» за 60 секунд

Молчит во ВСЕХ чатах?
 ├─ да → 1) ИИ включён? 2) баланс не пуст? 3) подписка/триал? 4) канал жив (разлогин/бан/токен)?
 └─ в ОДНОМ чате?
     ├─ контакт был до подключения? → норма; нужен ответ → «Кому отвечает бот» = «Всем, кто напишет»
     ├─ оператор перехватил / стоп-диалог? → норма, ai_off_reason
     └─ первое сообщение в новом WhatsApp? → баг WhatsApp Web, ждём второго

Отвечает в тест-чате, молчит в бою → НЕ промпт. Смотри канал/деньги/доступ.

Простыми словами

Когда бот «замолчал», не спеши лезть в его настройки, чаще всего дело вообще не в нём. Пройди по-простому, сверху вниз.

Сначала глянь: бот включён? Бывает, его поставили на паузу, сам или оператор. Потом, деньги на счету есть? Если ноль, бот не отвечает, а вместо него клиенту уходит короткое «Скоро ответим» это верный знак, что пора пополнить. Дальше, оплачен ли проект (подписка или пробный период). И проверь, жив ли сам WhatsApp/Telegram: может, отвалилась связь, а не бот.

Первое, что стоит сделать: открой тест-чат и напиши боту там. В тесте он отвечает всегда. Если в тесте отвечает, а реальным клиентам нет, значит, бот в порядке, а проблема в деньгах, подписке или канале. Не трогай промпт зря.

И про старые переписки: отвечает ли в них бот, зависит от настройки «Кому отвечает бот». У проектов, созданных до 14 сентября 2026, по умолчанию стоит «Только новым обращениям» (новые проекты создаются в режиме «Всем, кто напишет»), и тогда сообщения давних клиентов видны в «Диалогах», но бот в них молчит: переключается на вкладке «Настройки бота», карточка «Кому отвечает бот». Отдельная не-поломка: иногда бот молчит на самое первое сообщение в новом чате WhatsApp, это глюк самого WhatsApp, клиент просто пишет ещё раз, и бот отвечает.


Дальше: → Функция не вызывается / падает
Связано: Как бот думает · Тест-чат · Биллинг · Канал отвалился
Не получилось? → напиши в саппорт с ID проекта и примером чата

Документация › Решение проблем › Функция не вызывается / падает

Функция не вызывается / падает

Две разные проблемы: бот не вызвал функцию (хотя должен был), или вызвал, но она упала. Чинятся они по-разному. Эта статья, как отличить и где смотреть.

⏱ 10 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Не вызвал? Проверь: функция включена? описание понятное? не требует ли она от модели посчитать что-то (координаты/индексы: модель этого не умеет)?
  • Упала? Бот видит ошибку и обычно переспрашивает или сообщает клиенту, не молчит. Смотри причину в Диалогах или тест-чате.
  • Где смотреть: карточки вызовов функций видны в Диалогах и в тест-чате («Что понял бот»): там видно имя функции, аргументы, результат/ошибку.
  • Частое: функция требует подключённой интеграции (Google Sheets/Calendar), а её нет.

Сначала пойми: не вызвал или упал?

СимптомЭтоКуда смотреть
Бот «не сделал» действие, в логах вызова функции нетне вызвалраздел «Не вызывается»
В логах вызов есть, но с ошибкой; бот переспросил/извинилсяупалраздел «Падает»

Открой тест-чат → блок «Что понял бот»: там видно, какие функции бот дёрнул, с какими параметрами и что вернулось. Если функции в списке нет, он её не вызвал.


Бот не вызывает функцию

1. Функция выключена

У каждой функции есть переключатель (is_active). Если она выключена, платформа не передаёт её модели, бот физически не может её вызвать. Проверь в разделе «Функции», что нужная функция включена.

2. Модель не поняла, когда её звать

Бот решает вызвать функцию по её описанию. Если описание размытое («работа с таблицей»), модель не сообразит, в какой момент её применить. Чините описанием, а не уговорами в промпте: опиши понятно, что функция делает и когда её звать. → Функции: как писать описание

3. Не хватает обязательного параметра

Если функция требует параметр, которого в разговоре ещё нет (например, телефон для заявки), модель либо переспросит клиента, либо не вызовет. Это нормально, добавь в промпт, что нужно сперва собрать.

4. Функция требует «посчитать», а модель не умеет считать

🚫 Ключевое правило. Языковая модель плохо считает: координаты ячеек, индексы строк, «какая буква колонки», арифметику. Если функция ждёт от неё вычисленный адрес (G7, номер строки), она будет ошибаться или не вызывать.

✅ Решение архитектурное, не промптовое. Функция должна принимать человеческие метки («запиши к инструктору Вячеслав на 14:00»), а адрес/ячейку сервер вычисляет сам. У платформы для этого есть label-based функции (например, бронь по target_cell с описанием строки/колонки, а не по координате). Если своя функция упирается в «модель не туда пишет», переведи её на метки. Никакие уточнения в промпте «считай внимательно» это не лечат.

→ Подробнее об этом классе проблем: Функции


Функция падает (возвращает ошибку)

Хорошая новость: ошибки не теряются. Когда функция падает, платформа возвращает модели структурированную ошибку ({ error, error_code }), и бот её видит, обычно переспрашивает клиента или вежливо сообщает, что не получилось. Молча проглотить ошибку он не должен.

Типичные причины

ЧтоПоведение ботаКак чинить
Нет обязательного параметра{ error, missing_params } → бот переспрашиваетнорма; убедись, что промпт собирает данные
Неверное значение (вне допустимого набора/диапазона){ error, invalid_params } → бот пробует сновапроверь enum/границы в настройке функции
Интеграция не подключена (Google Sheets/Calendar)бот говорит «владелец не подключил…»подключи интеграцию и укажи ID таблицы/календаря
Внешний сервис не ответил (таймаут/5xx)бот предлагает попробовать позжевременное; для своих вебхуков настрой retry
Приём оплаты не настроен (sub_merchant_not_connected)бот: «приём оплаты сейчас недоступен»подключи приём оплат

Таймауты и повторы

  • У функции есть таймаут, по умолчанию 10 секунд, настраиваемый в пределах 1-60 сек.
  • Для своих вебхук-функций («Своя интеграция по API») можно настроить повторы: при кодах 429/502/503/504 платформа повторяет с нарастающей задержкой, уважая Retry-After.
  • Внешние интеграции (Google/оплата) возвращают понятный клиенту русский текст ошибки, а не технический трейс.

Защита от зацикливания

Бот может вызвать несколько функций за один ход, но не бесконечно: лимит, 15 раундов вызовов на один ответ. Если упёрся в потолок, платформа аккуратно завершает ход осмысленной репликой, а не ошибкой (и пишет событие tool_rounds_exceeded). Если видишь такое часто, функция, вероятно, возвращает данные, которые провоцируют новый вызов по кругу; упрости сценарий.


Где увидеть вызовы функций

Все вызовы пишутся в журнал событий (events_log, тип function_call) и показываются:

  • в Диалогах: карточками прямо в ленте переписки (имя функции, успех/ошибка);
  • в тест-чате: в блоке «Что понял бот».
📌 Важно: вызовы функций живых диалогов лежат в журнале событий, а не среди сообщений. Поэтому в «сырой» переписке их не видно: смотри именно карточки функций в Диалогах. Секреты (токены/ключи в параметрах) в журнале маскируются.

Под капотом

  • Загрузка функций: loadProjectFunctions() фильтрует .eq("is_active", true), выключенные не попадают в схему для модели (tool-executor.ts).
  • Валидация аргументов: перед выполнением аргументы приводятся к типам (coerceArgs) и проверяются по ограничениям (validateArgConstraints: enum/min/max/pattern). Невалидные → ошибка модели на самокоррекцию.
  • Детект ошибки результата: toolResultHasError() считает результат ошибкой, если есть error, success:false или непустой errors.
  • Логирование: logFunctionCall() пишет event_type:"function_call" с function_name / duration_ms / success / error / request / response; чувствительные ключи редактируются (REDACT_KEYS), payload обрезается до 2000 символов.
  • Игнор устаревших полей: если модель вернёт selected_service / services (удалённая фича «Услуги»), схема ответа их молча отбрасывает (ai-response-schema.ts): это не ошибка.

Простыми словами

С функциями бывает две разные беды, и их легко перепутать.

Первая: бот вообще не вызвал функцию. Чаще всего она просто выключена (проверь тумблер в «Функциях»), либо у неё непонятное описание, и бот не сообразил, когда её применять. И есть особый случай, если функция требует от бота что-то посчитать, номер ячейки, координату, индекс, он будет ошибаться, потому что языковая модель считать не умеет. Лечится это не уговорами в промпте, а тем, чтобы функция принимала понятные слова («запиши к Вячеславу на 14:00»), а все вычисления делал сервер.

Вторая беда: функция вызвалась, но упала. Тут хорошая новость: бот ошибку видит и обычно либо переспрашивает клиента, либо честно говорит «не получилось, попробуем позже», он не зависает молча. Самая частая причина, функция лезет в Google-таблицу или календарь, которые не подключены. Подключи интеграцию, и заработает.

А чтобы понять, что вообще произошло, открой тест-чат или Диалоги: там каждый вызов функции показан карточкой, видно, что бот дёрнул, с какими данными и что вернулось. Это лучшее место для диагностики.


Дальше: → Канал отвалился / WhatsApp забанили
Связано: Функции (полный гайд) · Интеграции · Тест-чат · Бот не отвечает
Не получилось? → напиши в саппорт с ID проекта и именем функции

Документация › Решение проблем › Канал отвалился

Канал отвалился / WhatsApp забанили

Бот молчит во всех чатах разом, обычно дело не в боте, а в канале: WhatsApp отвязал устройство, номер словил бан или закончился неоплаченный бесплатный период. Эта статья, как понять, что именно, и что делать.

⏱ 9 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • «Переподключаемся...» это короткий обрыв, платформа чинит сама: ничего не делай.
  • «Сессия разлогинена, привяжите заново» = устройство отвязано → нужно отсканировать QR заново (на сайте, не ковыряясь в телефоне).
  • «Номер заблокирован WhatsApp» = бан → повторный QR тем же номером бесполезен, нужен новый прогретый номер: кнопка «Подключить другой номер» в Каналах или новый проект.
  • Кончился бесплатный период без подписки → номер остаётся привязанным, но бот молчит; вернуть = оплатить подписку.
  • Telegram «падает» только если отозвали токен в @BotFather → переподключи.

Шаг 1. Понять состояние канала

Открой проект → «Каналы» → блок WhatsApp. Статус написан словами:

СтатусЧто этоСамо пройдёт?Что делать
Подключён (номер)канал в эфире-всё ок; если бот всё равно молчит, дело не в канале → Бот не отвечает
Поднимаем подключение... / Переподключаемся...короткий обрыв связи с телефоном, платформа восстанавливает✅ да, за минутуподожди; держи телефон в сети
Сессия разлогинена, привяжите зановоWhatsApp отвязал устройство (телефон долго был офлайн, отвязали вручную в «Связанных устройствах», сменили телефон)❌ нетотсканируй QR заново
Номер заблокирован WhatsApp, отправки остановленыбан номера❌ нетновый номер
Ошибка подключениясбой на шлюзеобычно данажми «Подключить» ещё раз; повторяется, напиши в поддержку
Не подключёнканал не привязан-подключи WhatsApp

Плановое обслуживание платформы тоже мягкий случай: номера на несколько минут переподключаются по очереди и возвращаются сами, QR при этом не нужен. Уведомление придёт, только если номер не вернулся в течение 15 минут после окончания работ.

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

Текст уведомления тоже разный, и по нему сразу видно, с чем имеешь дело:

  • «WhatsApp отключился» → сессия завершилась, нужен повторный QR.
  • «Устройство DOS AI отвязали в WhatsApp на телефоне» → кто-то нажал «Выйти» в разделе «Связанные устройства». Если это был не ты, просто отсканируй QR заново.
  • «WhatsApp ограничил номер» → бан. Про повторное подключение там не сказано ни слова намеренно: оно не сработает, нужен другой номер.
💡 Если в кабинете видишь сообщение, что не удалось загрузить статус канала: это временная недоступность, не бан. Обнови через минуту.

Шаг 2. «Сессия разлогинена»: отсканируй QR заново

Это значит, что привязанное устройство на стороне WhatsApp оборвалось (телефон надолго ушёл в офлайн, разлогинили связанные устройства, сменили телефон). Бот молчит, потому что физически отключён от WhatsApp.

Что делать:

  1. На сайте, в блоке WhatsApp, нажми «Обновить QR» (или «Подключить свой номер») и отсканируй QR заново, как при первом подключении.
  2. Не разрывай и не «чини» связь руками на телефоне: это только усугубит.
  3. Держи телефон с интернетом: иначе сессия снова слетит.

После нового скана снова идёт 15 минут прогрева (плашка с отсчётом), это нормально.

⚠️ Если разлогин прилетает сразу после подключения на свежем/«холодном» номере: это, скорее всего, бан, замаскированный под обрыв сессии. См. ниже.

Бан: что делать

Статус «Номер заблокирован WhatsApp» (или мгновенный разлогин на новом номере) = Meta заблокировала номер за подозрение в спам-автоматизации. Это происходит на стороне WhatsApp/Meta, вне платформы: снять бан можем не мы, а только WhatsApp по заявке владельца номера.

Что делать:

  • Реанимировать тот же номер обычно бесполезно, забаненные номера не разбанивают. Платформа это знает: забаненный номер сама не переподключает ни по расписанию, ни после обновления, а ссылка для клиента на подключение по нему отвечает отказом.
  • В разделе Каналы на карточке забаненного номера есть кнопка «Подключить другой номер»: она отвязывает старый номер от бота и показывает QR-код для нового. Настройки бота, функции и история диалогов остаются в проекте. Все остальные экраны кабинета (обзор проекта, дашборд, диалоги, оплата) в это время показывают именно «WhatsApp ограничил номер», а не «канал отключён», и ведут к этой же кнопке.
  • Пока номер ограничен, дожимы по WhatsApp ждут, а не сгорают. Отложенные сообщения, назначенные на этот номер, помечаются «не отправлено» с понятной причиной, чтобы не висеть в очереди сутки. Написать клиенту из Диалогов с ограниченного номера тоже нельзя: кабинет сразу ответит, что нужен другой номер, а не «попробуйте через минуту».
  • После подключения другого номера дожимы прежним собеседникам закрываются, а не продолжаются с нового: человек, который писал на старый номер, нового не знает, и «вы ещё думаете?» с незнакомого номера читается как спам, а для WhatsApp это холодное сообщение со свежего номера, то есть тот самый признак, за который ограничили предыдущий. Кто напишет на новый номер сам, начинает переписку заново, и дожимы у него будут свои. Холодные рассылки на новом номере начинаются с малого дневного лимита, даже если проект давно «прогрет»: прогрев считается по номеру.
  • Холодные рассылки («Исходящие») на ограниченном номере встают и прямо говорят, что нужен другой номер. Люди, которым первое сообщение ушло со старого номера, после замены помечаются пропущенными: писать им продолжение с нового номера нельзя, они его не знают. Их телефоны при этом освобождаются, и новую кампанию по ним можно запустить заново, обычным первым сообщением.
  • После подключения другого номера (после бана или просто при переносе бота) людям прежнего номера первым писать нельзя: в их диалогах поле ввода закрыто и стоит пометка «прежний номер», пока человек не напишет на новый номер сам. Подробно: Если переносишь бота на другой номер.
  • Помощник DOS в WhatsApp и письма платформы про этот номер говорят то же самое: нужен другой номер. Совета «отсканируйте QR заново» при ограничении ты не увидишь нигде.
  • Оплата подписки ограничение не снимает, и платформа скажет об этом прямо. Если оплатить, пока номер ограничен, придёт отдельное сообщение: подписка активна, деньги на месте, но отправлять с этого номера нельзя, нужен другой. Письма «бесплатный период заканчивается» и «скидка заканчивается» в такой момент тоже называют настоящую причину, а не зовут просто заплатить: сроки в них настоящие, но одной оплаты будет мало.
  • Если ограничение поймали сразу несколько номеров в один день, это не авария платформы, и писем «ведутся технические работы» из-за этого не будет. Такие письма приходят только когда проблема действительно на нашей стороне, и тогда переподключать ничего не нужно.
  • Недоставленные сообщения на ограниченном номере не висят в очереди часами: они сразу помечаются с причиной, чтобы было видно, что именно не дошло.
  • Хочешь начать совсем с чистого листа, заведи новый проект и подключи в нём новый, прогретый номер.
  • Перед подключением ответь себе на пять вопросов про номер: иначе новый номер забанят так же.
🚫 Почему не переподключить тот же номер на том же проекте? Meta помнит граф контактов даже после нашей чистки канала. Надёжнее: чистый проект + чистый номер. Подробно: Гигиена и антибан.

Бесплатный период кончился, подписки нет

Если 14 (или 30 по промокоду) бесплатных дней закончились и подписку не оформили, канал никуда не исчезает: номер остаётся привязанным, переписка и настройки на месте. Просто бот перестаёт отвечать. Признаки:

  • на диалогах появляется бейдж «Нет подписки», входящие сообщения при этом сохраняются;
  • тебе приходит уведомление о том, что бот остановлен;
  • в блоке WhatsApp статус по-прежнему «Подключён».

Что делать: оформи подписку, и бот ответит на следующее же сообщение клиента. Если за это время устройство успело разлогиниться, новый QR на неоплаченном проекте платформа не выдаст до оплаты: сначала подписка, потом скан.


Telegram «отвалился»

У Telegram нет банов и разлогинов, он ломается только в одном случае: токен отозвали или сбросили в @BotFather. Тогда проверка (getMe) не проходит, и платформа помечает бот как отключённый (telegram_bot_connected = false).

Что делать:

  1. Кабинет → «Каналы» → Telegram → «Проверить подключение». Покажет «Бот не отвечает. Проверьте токен.»: токен невалиден.
  2. В @BotFather возьми актуальный токен (или выпусти новый через /token//revoke).
  3. Вставь и переподключи. → Подключить Telegram

Простыми словами

Если бот молчит сразу во всех чатах, почти всегда «упал» не бот, а канал, через который он общается.

С WhatsApp бывает три ситуации. Первая, безобидная: связь ненадолго оборвалась («Переподключаемся...»), платформа поднимет её сама, делать ничего не надо. Вторая: сессия разлогинена, это как если бы на телефоне отвязался «WhatsApp на компьютере»; надо просто зайти на сайт и заново отсканировать QR-код (важно на сайте, а не ковыряться в телефоне). Третья, неприятная: бан, WhatsApp заблокировал номер. Тут тот же номер уже не спасти, нужен другой, заранее «прогретый» номер: подключить его можно кнопкой «Подключить другой номер» в Каналах или в новом проекте, обязательно прочитав про антибан.

Отдельный случай, когда бесплатный период кончился, а подписки нет: тогда бот просто перестаёт отвечать. Номер при этом остаётся привязанным, настройки и переписка на месте, и бот включится сразу после оплаты. А вот заново отсканировать QR-код без подписки уже не получится.

С Telegram проще: он не банится и не слетает. Сломаться может только если ты сам отозвал токен бота в @BotFather, тогда возьми токен заново и переподключи. Кнопка «Проверить подключение» сразу покажет, в токене ли дело.


Дальше: → Платёж не прошёл
Связано: Подключить WhatsApp · Гигиена и антибан · Подключить Telegram · Биллинг
Не получилось? → напиши в саппорт с ID проекта

Документация › Решение проблем › Платёж не прошёл

Платёж не прошёл

Оплатил пополнение, а баланс не вырос? В 90% случаев это задержка подтверждения, а не потеря денег. Эта статья, что проверить и когда писать в саппорт.

⏱ 6 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Kaspi: чаще всего платёж в статусе «ожидает подтверждения», подтверди его в приложении Kaspi на телефоне.
  • Карта (TipTopPay): баланс зачисляется моментально; если нет, подожди 5 мин и обнови.
  • Деньги списались, а баланс не появился? Подожди 5-10 минут и обнови: подтверждение иногда идёт с задержкой.
  • Нельзя создать новый Kaspi-платёж: «У вас уже есть ожидающий платёж», заверши или дождись текущего.
  • Списались, но баланс так и не пришёл через 10+ минут → напиши в саппорт, разберёмся (платёж не потеряется).

Как устроено пополнение

Пополнить можно двумя способами:

  • Kaspi (push-уведомление): ты вводишь номер телефона → платформа отправляет счёт в приложение Kaspi → ты подтверждаешь в телефоне → баланс пополняется. Между «подтвердил» и «баланс вырос» бывает небольшая задержка: это нормально.
  • Карта (TipTopPay): Visa / Mastercard / Kaspi Gold → баланс зачисляется моментально после оплаты, подтверждение в Kaspi не требуется.

Большинство вопросов «платёж не прошёл» относятся к Kaspi-флоу (подтверждение в приложении). Для карточной оплаты, если деньги списались, а баланс не вырос через 5 минут, пиши в саппорт.


Что проверить по порядку (Kaspi-флоу)

1. Подтверди платёж в Kaspi. Самое частое: платёж создан, но висит как «ожидает». Открой приложение Kaspi на телефоне и подтверди оплату, «Откройте Kaspi на телефоне и подтвердите платёж».

2. Подожди и обнови. Если уже подтвердил и деньги списались, но баланс прежний, подожди 5-10 минут и обнови страницу. Подтверждение от Kaspi иногда приходит с задержкой; платформа сама досверяет такие платежи.

3. Не создавай второй платёж. Если видишь «У вас уже есть ожидающий платёж» у тебя уже висит незавершённый. Заверши его или дождись, не плоди новые.

4. Только что прошёл предыдущий? Сообщение «Предыдущий платёж только что прошёл, обновите страницу, баланс уже зачисляется» означает, что всё ок: просто обнови.


Когда писать в саппорт

Если деньги реально списались с Kaspi, но баланс не появился спустя 10+ минут, напиши в саппорт. Платёж не теряется: у нас есть досверка и ручное проведение зависших платежей. Укажи:

  • ID проекта,
  • сумму и время оплаты,
  • что деньги списались в Kaspi.
💡 «Платёж создан, но не удалось сохранить ссылку. Если деньги спишутся, но баланс не появится, напишите в поддержку», если видел такое сообщение, действуй так же: проверь, списалось ли, и при списании без зачисления, в саппорт.

Простыми словами

Главное, не паникуй: деньги почти никогда не теряются, чаще всего это просто задержка.

Платил через Kaspi (push)? Скорее всего, просто не подтвердил, зайди в приложение Kaspi и нажми «Подтвердить». Если уже подтвердил и деньги ушли, а баланс не вырос, подожди минут десять и обнови страницу, подтверждение иногда чуть запаздывает, и система сама подхватит платёж. Не нужно тыкать «оплатить» несколько раз, если висит надпись про «ожидающий платёж», значит один уже в процессе, дождись его.

Платил картой (TipTopPay)? Баланс зачисляется сразу после оплаты, отдельного подтверждения нет. Если деньги списались, а баланса нет через 5 минут, пиши в саппорт.

В обоих случаях, если деньги точно списались, но через десять-пятнадцать минут баланса всё нет, пиши в саппорт с суммой, временем и ID проекта. Мы найдём этот платёж и проведём его руками, он никуда не денется.


Дальше: → Частые вопросы (FAQ)
Связано: Биллинг · Сколько стоит сообщение · Приём оплат
Не получилось? → напиши в саппорт с ID проекта, суммой и временем оплаты

Документация › Решение проблем › FAQ

Частые вопросы (FAQ)

Короткие ответы на самые частые вопросы, с ссылками, где копнуть глубже.

⏱ 8 мин · 👤 для владельца · 🟢 live


Старт и пробный период

Можно попробовать бесплатно?
Да. Проект на пробном периоде получает $5 на баланс, а WhatsApp-канал работает бесплатно 14 дней, без ограничения по числу диалогов. С промокодом партнёра старт удваивается: $10 и 30 дней. Карта и предоплата не нужны. Бесплатный период открывает канал, а сами ответы бота идут с баланса: закончится он раньше дней, просто пополни. → Что такое DOS AI, Подключить WhatsApp

Нужна ли карта, чтобы начать?
Нет. Пробуешь без карты; оплата нужна, только когда захочешь продолжить после триала. → Биллинг

Сколько проектов можно создать?
Проектов на аккаунт до 50, а вот бесплатный старт (деньги на баланс + бесплатные дни WhatsApp) даётся первому проекту. Если ты зарегистрировался по чьей-то партнёрской ссылке, бесплатный старт получают первые три проекта. И отдельно: любому проекту, где ты применил промокод партнёра, бесплатный период открывается независимо от очерёдности. Удобно, если пробуешь ботов сразу нескольким клиентам.


Каналы

Бот может работать в WhatsApp и Telegram одновременно?
Да, в одном проекте: оба канала сразу, мозг у бота общий. → Обзор каналов

Что выбрать новичку, WhatsApp или Telegram?
Telegram, быстрее и без рисков (официальный бот). WhatsApp, где сидят клиенты, но нужен «прогретый» номер и осторожность с баном. → Telegram, Антибан

Почему WhatsApp могут забанить?
Meta банит «холодные» номера за подозрение в спаме. Поэтому перед подключением стоит честно ответить на пять вопросов про номер: живой ли он, есть ли переписка, не в эмуляторе ли, не банился ли раньше. → Гигиена и антибан

Можно пользоваться телефоном после подключения WhatsApp?
Да. Бот работает как привязанное устройство (WhatsApp Web), не вместо тебя. → Подключить WhatsApp


Поведение бота

Бот не отвечает, что делать?
Проверь по порядку: включён ли ИИ, есть ли деньги, активна ли подписка/триал, жив ли канал. → Бот не отвечает

Можно отвечать клиенту вручную?
Да. Начни писать в диалоге, бот сам встанет на паузу. Закончил, включи «AI» обратно. → Диалоги

Бот «тупит» на сложных вопросах, как улучшить?
Сначала поправь промпт и базу знаний. Если не помогает, поставь модель мощнее. → Выбор модели

Бот пишет ерунду / выдумывает.
Опиши в промпте «бери только из базы знаний, не выдумывай» и наполни базу знаний. Проверяй в тест-чате.

Бот не записал клиента, хотя обещал.
Смотри логи диалога: вызвалась ли функция и с какой ошибкой. → Функция не вызывается / падает


Деньги

Сколько стоит одно сообщение?
Зависит от длины диалога, модели и того, что бот делает (база знаний, распознавание медиа). → Сколько стоит сообщение

Оплатил, а баланс не вырос.
Чаще всего это задержка подтверждения. Подтверди в Kaspi, подожди 5-10 минут, обнови. → Платёж не прошёл

Можно зарабатывать на платформе?
Да, чаще всего так: собирают ассистентов бизнесам за настройку и дальше ведут их проекты на помесячном сопровождении. Отдельно есть партнёрская программа для тех, кто продвигает DOS AI постоянно. → Промокоды и партнёрская программа

Бот может принимать оплату от моих клиентов?
Да: выставляет счёт в чате через Kaspi, деньги идут тебе напрямую. → Приём оплат

А можно, чтобы вы настроили за меня?
Да, это отдельная разовая услуга: $50 за всю настройку, стартовая цена держится до 16.10.2026. Мы расспрашиваем про бизнес, пишем боту инструкцию, подключаем канал, загружаем прайс и частые вопросы, проверяем на живых диалогах. Дальше ты меняешь что угодно сам. Подписка на платформу оплачивается отдельно, $25 в месяц. Написать: WhatsApp или Telegram.


Команда и данные

Как дать доступ сотруднику?
Пригласи по email в «Участниках», выбери роль. Деньги и удаление, только у владельца. → Роли и права

Безопасны ли данные / ключи?
Токены и ключи хранятся в зашифрованном виде, в логах секреты маскируются. → Логи событий

Подключается ли моя CRM / Google?
Да: Bitrix24/amoCRM/AlphaCRM и Google Таблицы/Календарь. Google: через шаринг доступа, без пароля. → Обзор интеграций


Не нашёл ответа?

Напиши в саппорт с ID проекта и описанием проблемы (а лучше: скриншотом). Если бот ведёт себя странно в конкретном диалоге, укажи, в каком.


Простыми словами

Это шпаргалка на «быстро спросил, быстро узнал». Если коротко по главному: попробовать можно бесплатно и без карты; бот работает в WhatsApp и Telegram сразу; если он молчит, почти всегда дело в деньгах, выключателе или канале, а не в поломке; платишь по факту за сообщения; а доступ сотрудникам даёшь с разными правами, оставляя деньги под собой. На каждый вопрос есть ссылка на подробную статью, если нужно копнуть глубже, иди по ней. А если ответа тут нет, пиши в саппорт с ID проекта, разберёмся.


Дальше: → Что такое DOS AI
Связано: Бот не отвечает · Биллинг · Роли · Антибан

Документация › Решение проблем › Лиды из рекламы с задержкой

Лиды из рекламы приходят с задержкой

Клиент написал из рекламы Instagram/Facebook, на телефоне сообщение есть сразу, а боту прилетает через несколько часов (или ИИ на него не отвечает). Это не поломка бота и не ваша вина: так устроена доставка WhatsApp на «второе устройство». Эта статья: почему так и как свести задержку к минимуму за 10 минут настройки телефона.

⏱ 6 мин · 👤 для владельца и оператора · 🟢 live

За 30 секунд:
  1. Бот подключён к WhatsApp через QR-код это телефон главный, платформа «второе устройство».
  2. WhatsApp не всегда сразу отдаёт рекламные сообщения на второе устройство: они ждут на телефоне.
  3. Сильнее всего задержка ночью, когда телефон «спит».
  4. Лечится телефоном: держать его онлайн, не выгружать WhatsApp, отключить экономию батареи.
  5. Платформа уже страхует: предупреждает «канал молчит» и метит такие чаты «✋ Ответьте вручную».

Почему так происходит

Бот подключается к WhatsApp сканированием QR-кода: ровно как WhatsApp Web на компьютере. В этой схеме:

  • Главное устройство: телефон. Все сообщения сначала приходят на него.
  • Платформа: «связанное устройство». Она получает сообщения через телефон, который их «раздаёт».

Для обычных сообщений раздача мгновенная. Но первое сообщение из рекламы (Click-to-WhatsApp, когда человек кликнул объявление в Instagram/Facebook), особый случай: WhatsApp нередко держит его на телефоне и не передаёт на связанное устройство сразу. Бот его просто ещё не видит.

Когда телефон «оживает» (вы открыли приложение, или произошла суточная синхронизация канала), накопленные сообщения подтягиваются разом. Поэтому ночные рекламные лиды часто «доезжают» только утром.

Это ограничение самого WhatsApp для рекламных диалогов, а не бага платформы. Ни мы, ни провайдер канала не можем заставить WhatsApp отдать сообщение, которое он держит на телефоне.

Как свести задержку к минимуму (сделайте это с телефоном канала)

Телефон, на котором отсканирован QR канала, должен быть всегда активен. Чек-лист:

  1. Телефон онлайн 24/7: на зарядке (особенно ночью), стабильный Wi-Fi или мобильный интернет.
  2. Не закрывайте приложение WhatsApp свайпом. Пусть висит в фоне.
  3. Отключите экономию батареи для WhatsApp:
  4. Android: Настройки → Приложения → WhatsApp → Батарея → «Без ограничений».
  5. iPhone: не убивайте приложение из шторки; ночью выключите «Режим энергосбережения».
  6. Уберите лишние связанные устройства. В телефоне: WhatsApp → Настройки → Связанные устройства → выйдите из всех лишних сессий WhatsApp Web/Desktop. Оставьте только связку с платформой. Чем меньше связанных устройств, тем стабильнее синхронизация.
  7. Идеал, отдельный телефон под канал: всегда на зарядке, со стабильным интернетом, без посторонних приложений.

После этого бóльшая часть задержек уходит, рекламные лиды начинают доходить за минуты, а не часы.

⚠️ Это сильно лучше, но не 100% гарантия: само ограничение WhatsApp иногда задерживает первое рекламное сообщение даже при онлайн-телефоне. Полностью убрать задержку можно только переходом на официальный WhatsApp Business API: обсуждается отдельно.

Что платформа уже делает за вас

Чтобы лид не потерялся, пока вы настраиваете телефон:

  • Предупреждение «канал онлайн, но молчит». Если входящие перестали приходить, владелец получает уведомление в Telegram/почту, сигнал зайти и проверить телефон. Подробнее: канал отвалился.
  • Метка «✋ Ответьте вручную». Лид, который приехал с задержкой и которого бот не подхватил, помечается в разделе Диалоги: оператор сразу видит, кому ответить руками.

Так даже задержанный лид не теряется молча: вы либо отвечаете вручную, либо он доходит до бота, когда телефон синхронизируется.


Связанные статьи

  • Подключить WhatsApp, как устроено подключение по QR.
  • Анти-бан и безопасность канала, почему важно не «спамить» с только что подключённого номера.
  • Бот не отвечает, диагностика, общий порядок проверки, если бот молчит.
  • Канал отвалился / WhatsApp забанили, что делать при обрыве канала.

Документация › Справочники › Каталог функций

Каталог встроенных функций

Готовые инструменты бота, по категориям. Как функции работают и настраиваются в гайде по функциям; здесь, справочная таблица «что есть».

⏱ 7 мин · 👤 справочник · 🟢 live


Google Таблицы (6)

ФункцияЧто делает
sheet_infoструктура таблицы (листы, заголовки, размеры)
sheet_readпрочитать строки
sheet_findнайти строку по значению
sheet_add_rowдобавить строку
sheet_update_rowобновить строку
sheet_delete_rowудалить строку

→ Google Sheets

Google Календарь (5)

ФункцияЧто делает
calendar_check_slotsпроверить свободные слоты
calendar_create_eventсоздать событие (запись)
calendar_update_eventперенести/изменить событие
calendar_list_eventsсписок событий
calendar_delete_eventотменить запись

→ Google Calendar

Запись на время (1)

ФункцияЧто делает
booking_find_free_slots«Свободные окошки для записи»: движок собирает свободные слоты из графика с учётом ограничений и занятости

Сообщения и уведомления (4)

ФункцияЧто делает
telegram_sendуведомление в Telegram (владельцу или в группу)
whatsapp_notifyуведомление в WhatsApp: на личный номер или в рабочую группу
email_notifyуведомление на почту владельцу
email_send_customerотправить письмо клиенту

Работа с лидом (1)

ФункцияЧто делает
lead_set_tagsбот добавляет лиду теги (до 20, merge, выбор из словаря или создание нового)

Деньги (1)

ФункцияЧто делает
owner_payment_invoiceвыставить клиенту счёт на оплату через Kaspi

Управление диалогом (2)

ФункцияЧто делает
followups_pauseпоставить дожимы на паузу («свяжусь сам»)
stop_dialogостановить бота в диалоге (клиент попросил)
stop_followupsотключить дожимы по клиенту насовсем, бот продолжает отвечать (клиент просил не напоминать)

Медиа (1)

ФункцияЧто делает
send_mediaотправить материал из медиа-библиотеки по ярлыку

Своя интеграция по API

Кроме встроенных функций, бот умеет дёргать твой собственный сервис по HTTP: это путь «Своя интеграция по API» при создании функции (тип действия webhook). Подробности и формат в Кастомных вебхуках.


ℹ️ Что намеренно НЕ показано в кабинете. Два шаблона помечены hidden в коде и не появляются в окне «Добавить функцию»: gmail_send (отправка с рабочего Gmail, требует Google Workspace с техническим доступом для сервисного аккаунта; всем остальным подходит email_send_customer) и sheets_book_grid_slot (legacy-бронь ячейки расписания, оставлена ради одной живой функции у давнего проекта). Если понадобится первый, напишите нам: он рабочий, просто требует настройки на стороне вашего Google Workspace.

Про legacy-функции Sheets

Старые обёртки sheets_* (с «s»: sheets_get_structure, sheets_read_grid и т.п.) убраны из каталога: в новых проектах используй современные sheet_* (без «s»), они покрывают всё то же. Несколько старых функций ещё работают у давних проектов для обратной совместимости, но новым их не создать.


Простыми словами

Это просто список «что бот умеет делать руками»: записать в таблицу, поставить встречу в календарь, найти свободное окошко для записи, отправить письмо или сообщение в Telegram и WhatsApp, навесить тег на клиента, выставить счёт, поставить дожимы на паузу, показать видео из библиотеки. Все инструменты разбиты по темам. Как их включать и настраивать в гайде по функциям, а тут, чтобы быстро глянуть, что вообще есть.


Дальше: → Справочник настроек
Связано: Функции (гайд) · Google Sheets · Статусы и типы

Документация › Справочники › Справочник настроек

Справочник настроек (agent_config)

Полная таблица настроек бота со значениями по умолчанию. Объяснения и сценарии в Продвинутых настройках; здесь, справочник «всё в одном месте».

⏱ 9 мин · 👤 справочник · 🟢 live


Основное

НастройкаУмолчаниеЧто делает
bot_activetrueглавный выключатель бота
default_chat_activetrueновые чаты с включённым ИИ
temperature0.5«температура» модели (0-2): ниже = предсказуемее
frequency_penalty0.0штраф за повторы
presence_penalty0.0штраф за «топтание на месте»

Разбивка ответа

НастройкаУмолчаниеЧто делает
split_messagestrueразбивать ответ на части
split_delay_seconds4пауза между частями
split_threshold300с какой длины разбивать (символы)
split_max_length500макс. длина части
split_max_parts3макс. число частей

Буферизация

НастройкаУмолчаниеЧто делает
buffer_delay_seconds1ждать новых сообщений перед ответом
buffer_delay_media_seconds5доп. ожидание для медиа

Перехват оператором

НастройкаУмолчаниеЧто делает
pause_on_operatortrueпауза ИИ, когда пишет оператор
ignore_first_operator_messagefalseне паузить на первом сообщении оператора
exception_phrases[]фразы-исключения (пауза не ставится)
auto_resume_enabledfalseбот сам вернётся в перехваченный диалог на следующем сообщении клиента
auto_resume_days / _hours / _minutes0/0/3сколько оператор должен молчать в чате до возврата
resume_message«Добрый день!»текст при авто-возврате

Рабочие часы

НастройкаУмолчаниеЧто делает
schedule_enabledfalseвключить расписание
scheduleПн-Пт 09-20, Сб 09-18, Вс выклграфик по дням
timezoneпояс браузера при создании проекта (иначе Asia/Almaty)часовой пояс проекта. Задаётся во вкладке «Общие» и действует на весь проект: время у сообщений, «сегодня» в фильтрах и графиках, отчёты, расписание бота и дожимы
offline_messageдежурный текставтоответ вне часов

Память диалога

НастройкаУмолчаниеЧто делает
history_message_limit30сколько сообщений «помнит»; в диалоге, где писал оператор, до 200
history_time_limit2_weeksза какой период история

Защита от спама

НастройкаУмолчаниеЧто делает
spam_protection_enabledfalseвключить лимиты
spam_message_limit5сообщений за окно
spam_duration_seconds60длина окна
spam_daily_limit100сообщений в день от одного
spam_repeat_threshold3сколько одинаковых сообщений подряд считать спамом
spam_response_message«Пожалуйста, подождите, я обрабатываю ваш запрос.»ответ при срабатывании
spam_auto_blocktrueавто-блок при нарушении

Распознавание медиа

НастройкаУмолчаниеЧто делает
recognize_audiotrueрасшифровывать голосовые
recognize_imagestrue«видеть» картинки
recognize_pdftrueчитать PDF
recognize_documentstrueчитать документы

Дожимы

НастройкаУмолчаниеЧто делает
followup_enabledfalseвключить дожимы
followup_touches_count3число касаний
followup_interval_hours24интервал между касаниями
followup_max_silence_hours72стоп при молчании дольше
followup_reset_on_replytrueсброс счётчика при ответе клиента
followup_send_weekendsfalseслать в выходные
followup_max_silence_mark_lostfalseпометить лида «потерян» по истечении followup_max_silence_hours
followup_model(наследует)модель для дожимов

Видимость данных клиента боту

НастройкаУмолчаниеЧто делает
nickname_visibilitytrueбот видит имя из профиля мессенджера
number_visibilityfalseбот видит номер телефона клиента
messenger_visibilityfalseбот знает, из какого мессенджера пришёл клиент

Кому бот отвечает

НастройкаУмолчаниеЧто делает
default_chat_activetrueв новых чатах ИИ сразу включён
engage_modeallкому отвечает бот (карточка на вкладке «Настройки бота»): all = только новым обращениям, existing_too = плюс контактам, которые писали на номер до подключения, ad_gated = только лидам с рекламы (Click-to-WhatsApp)
engage_ad_ids[]пусто = любая реклама; список = только эти объявления
respond_in_groupsfalseотвечать в групповых чатах
respond_to_missed_callsfalseписать после пропущенного звонка
pause_ai_after_answered_calltrueесли клиент ПОЗВОНИЛ вам и вы взяли трубку, бот на этом чате замолкает: дальше клиента ведёт человек. Пропущенный звонок бота не выключает. Звонок, который сделали ВЫ САМИ, платформе не виден (WhatsApp сообщает только про входящие), поэтому после своего звонка напишите что-нибудь в этот чат либо снимите тумблер AI в шапке диалога. Включить обратно, тем же тумблером
inline_buttons_enabledfalseразрешить боту кнопки под ответом (Telegram)
quote_client_messagetrueпервый пузырь ответа привязан к сообщению клиента, как «Ответить» в WhatsApp (у пачки цитируется последнее, у голосового/фото само голосовое/фото; в Telegram так же)
collect_variables[]поля анкеты, которые бот собирает по ходу разговора

Что получает новый проект

Таблицы выше показывают умолчание платформы, то есть то, что действует у проекта, где настройку никто не менял. С 14 сентября 2026 новый проект создаётся уже настроенным, и при создании ему записываются вот эти значения:

НастройкаУ нового проектаЗачем
buffer_delay_seconds7люди пишут очередью коротких сообщений, бот отвечает на всю пачку. Одиночное сообщение отвечается быстрее, 7 секунд это тишина после второго сообщения подряд
buffer_delay_media_seconds7то же для фото, голосовых и файлов
engage_modeexisting_tooбот отвечает всем, кто напишет, включая контакты, которые были в телефоне до подключения
respond_to_missed_callstrueклиент, который не дозвонился, получает сообщение
spam_protection_enabledtrueзащита включена
spam_message_limit / spam_duration_seconds30 / 60порог под флуд, а не под живого человека
spam_daily_limit300сообщений в сутки от одного клиента
spam_repeat_threshold5одинаковых сообщений подряд
spam_auto_blockfalseсработавшая защита пропускает ответ, а не выключает бота на диалоге
history_time_limitno_limitклиент, вернувшийся через месяц, продолжает разговор
reasoning_effortmediumглубина размышления модели

Ещё при создании проекту включаются функции «Помечать лида тегами», «Отложить дожимы», «Отключить дожимы» и «Остановить диалог» и создаётся выключенный ежедневный отчёт. Если при создании ответить на три вопроса о бизнесе, появляется и стартовый набор тегов. Подробно в статье Создание проекта.

Дожимы: расписание отправки

НастройкаУмолчаниеЧто делает
followup_schedule_enabledfalseограничить дожимы часами
followup_schedule_start / _end00:00 / 23:59окно отправки дожимов
followup_disabled_days[]дни недели без дожимов
followup_system_promptпустоотдельная инструкция боту для дожимов
auto_enroll_statusпустоавто-подписка на дожимы при этом статусе лида

⚠️ Настроек записи на приём в agent_config нет. Ключи calendar_* остались в схеме как наследство и ничего не делают (убраны из работы 2026-06-13). Длительность приёма, горизонт записи, рабочие часы и минимальное предупреждение задаются внутри самой функции записи (её конфиг: slot_duration 60 мин, days_ahead 7, working_hours_start / working_hours_end, working_days, min_notice_minutes 60, break_minutes). См. Google Календарь и Запись на приём.

Простыми словами

Это полная «панель приборов» бота: все тумблеры и ручки в одной таблице со значениями по умолчанию. Большинство уже выставлено по уму, трогать не обязательно. Сюда удобно заглянуть, когда хочешь точно понять, как называется настройка и какое у неё значение из коробки. Одно исключение стоит запомнить: настройки записи на приём живут не здесь, а внутри самой функции записи. Что каждая делает по-человечески и когда её крутить в статье Продвинутые настройки.


Дальше: → Коды ошибок и состояния
Связано: Продвинутые настройки · Лимиты и квоты

Документация › Справочники › Коды ошибок

Коды ошибок и состояния

Справочник кодов и состояний, которые встречаются в системе: почему бот не отвечает, какие ошибки отдаёт API, что значат состояния канала. Диагностика по шагам: в Бот не отвечает.

⏱ 7 мин · 👤 справочник · 🟢 live


Доступ к ответу бота (eligibility)

Почему бот может не отвечать (проверка перед ответом):

КодHTTPЗначение
PROJECT_NOT_ACTIVE403проект в черновике
ACCOUNT_BANNED403аккаунт заблокирован
INSUFFICIENT_BALANCE402пустой баланс
NO_SUBSCRIPTION402нет подписки
SUBSCRIPTION_EXPIRED402подписка истекла
WHATSAPP_TRIAL_EXPIRED402бесплатный период WhatsApp кончился (14 дней с подключения номера, 30 с промокодом партнёра)
SUBSCRIPTION_NO_EXPIRY402подписка есть, но у неё нет даты окончания (расходится журнал, чинится на нашей стороне)
TRIAL_EXPIRED_PAYMENT_REQUIRED402попытка подключить или переподключить номер после бесплатного периода без подписки
CHANNEL_BANNED409WhatsApp ограничил этот номер: ссылка для подключения его не поднимает, а отправить с него из Диалогов нельзя; нужен другой номер (кнопка «Подключить другой номер» в Каналах)
PREVIOUS_NUMBER409номер проекта сменили, а этот человек писал на прежний и новый не знает; первым писать ему с нового номера нельзя, отправка откроется, когда он напишет сам
PREVIOUS_NUMBER_CHECK_FAILED503не удалось проверить, писал ли человек на прежний номер; попробуйте через минуту
GATEWAY_UNAVAILABLE503Не удалось отвязать ограниченный номер на сервере WhatsApp; попробуйте через минуту, новый номер подключается только после отвязки старого
PROJECT_NOT_FOUND404проект не найден
AUTH_TEMPORARILY_UNAVAILABLE503вход на месте, но сервер проверки сессии не ответил вовремя; повторите запрос через пару секунд, выходить и входить заново не нужно

→ Бот не отвечает, диагностика

Причины автопаузы ИИ (ai_off_reason)

Бот молчит в диалоге намеренно. Важно: бот никогда не решает остановиться сам, пауза всегда ставится либо функцией, либо оператором, либо классификацией «это не новый лид», либо технической/защитной причиной. В колонке «снимается», сама ли уйдёт пауза или только ручным тумблером AI в шапке диалога.

ПричинаЗначениеСнимается
lead_handoffфункция с галкой «Завершать диалог после выполнения» успешно отработала (передача заявки специалисту)вручную
client_stopклиент попросил не писать, функция stop_dialogвручную
operator_joined_chatоператор написал в идущий AI-диалог (из кабинета или со своего телефона, причина одна)вручную, либо сам на следующем сообщении клиента, если включено автовозобновление
chat_started_by_operatorдиалог начат вручную (оператор написал первым)вручную
operator_manual_offоператор вручную выключил ИИ в диалогевручную
pre_existing_dialogпереписка старше подключения бота (исторический чат)вручную
backlog_offlineсообщение пришло в момент переподключениявручную
ad_gatedрежим «только реклама»: лид не с рекламы, диалог ведёт операторвручную
default_chat_inactiveнастройка «новые чаты с выключенным ИИ» (default_chat_active = false)вручную
guards_violationсработала защита (спам / лимит / баланс)вручную
max_messages_reachedбот дошёл до потолка своих ответов в этом диалоге (настройка «Макс. ответов бота на диалог», по умолчанию 200) и передал диалог вам: клиенту написано, что подключится менеджер, на диалоге стоит метка «ответьте руками», вам ушло уведомление dialog_too_longвручную: ответьте сами или включите бота в шапке диалога
conversation_clearedистория диалога очищена операторомвручную
connect_warmupпрогрев номера ~15 мин после подключения канала (защита от блокировки)сама через ~15 мин
undecrypted_placeholderпервое сообщение лида не удалось расшифроватьсама на следующем читаемом сообщении
subscription_expiredподписка неактивна: ответ клиенту не отправлен, само сообщение сохранено в диалогесама после продления, на следующем сообщении клиента
insufficient_balanceбаланс исчерпан: ответ не отправлен, сообщение сохраненосама после пополнения, на следующем сообщении клиента
project_pausedпроект поставлен на паузу: бот не отвечает, входящие сохраняютсясама после снятия с паузы, на следующем сообщении клиента
ℹ️ pipeline_stage_done («диалог дошёл до финальной стадии воронки»), больше не используется (2026-07-21). Бот раньше сам замолкал после воронки, теперь этого нет. Причина может встречаться только в старых, ранее закрытых диалогах.
🔁 Авто-возобновление диалога (настройка проекта, по умолчанию выключена). Если включить, бот сам снимает паузу по таймеру и пишет клиенту приветствие. Но он трогает только «мягкие» паузы: guards_violation, backlog_offline, max_messages_reached, conversation_cleared и паузы без причины. Никогда не перебивает операторские паузы (operator_*), стоп клиента (client_stop), передачу специалисту (lead_handoff), классификацию (pre_existing_dialog, ad_gated, default_chat_inactive), прогрев/расшифровку и биллинг-паузы (subscription_expired, insufficient_balance, project_paused, те снимаются сами после оплаты/снятия с паузы), если человек или правило намеренно убрали бота из чата, авто-возобновление его туда не вернёт.

Состояния канала (WhatsApp)

Статус в кабинетеТипЗначение
Подключён (номер)-в эфире
Поднимаем подключение... / QR на экране-ждём скан, QR живёт около минуты
Переподключаемся...мягкоекороткий обрыв, восстановится само
Сессия разлогинена, привяжите зановожёсткоеустройство отвязано → новый QR
Номер заблокирован WhatsApp, отправки остановленыжёсткоебан номера
Ошибка подключенияобычно мягкоесбой на шлюзе, повтори подключение
Не подключён-канал не привязан

→ Канал отвалился / WhatsApp забанили

Ошибки API

Единый формат ответа: { "error": "текст", "code": "КОД" }.

HTTPcodeКогда
400INVALID_INPUT / INVALID_UUIDневерные/неполные данные
401UNAUTHORIZEDнет/невалидны учётные данные
403FORBIDDENнет прав (роль)
404NOT_FOUNDобъект не найден
409CONFLICTконфликт (напр. параллельное изменение)
429RATE_LIMITEDпревышен лимит (см. Retry-After)
500INTERNAL_ERRORнеобработанная ошибка (полный текст в логах и Sentry, наружу только общий)
500DATABASE_ERRORсбой запроса к базе
402INSUFFICIENT_BALANCE«Составить за меня»: на балансе проекта меньше $0.30
502COMPOSE_FAILED / PREFILL_FAILED«Составить за меня»: ИИ не собрал описание или не разобрал текущее; деньги не списаны, попробуй ещё раз
500SAVE_FAILED«Составить за меня»: описание собрано, но не сохранилось; повтори
400KASPI_CLIENT_NOT_FOUNDоплата через Kaspi: на указанном номере нет приложения Kaspi, счёт не выставлен; укажите номер, где Kaspi установлен
503PROVIDER_UNAVAILABLEоплата через Kaspi сейчас недоступна; попробуйте через несколько минут или оплатите картой

→ Формат данных

Ошибки функций

Когда функция падает, она возвращает модели { error, error_code }, и бот реагирует:

Пример error_codeЗначение
missing_paramsне хватает обязательного параметра
invalid_paramsзначение вне допустимого
sub_merchant_not_connectedприём оплаты не настроен
kaspi_auth_lostпотеряна авторизация Kaspi
payment_service_4xx / payment_service_5xx / payment_service_networkошибка платёжного сервиса

→ Функция не вызывается / падает


Простыми словами

Это «расшифровщик»: справочник всех технических кодов, которые могут попасться. Бот молчит и где-то мелькнул WHATSAPP_TRIAL_EXPIRED? Значит, кончился бесплатный период. Видишь у канала «Сессия разлогинена»? Устройство отвязано, надо отсканировать QR заново. Прилетел от API FORBIDDEN? Не хватает прав по роли. Тут не нужно ничего настраивать, просто находишь свой код и понимаешь, что он значит и куда дальше смотреть.


Дальше: → Стадии, статусы, типы
Связано: Бот не отвечает · Канал отвалился · Формат данных

Документация › Справочники › Стадии и статусы

Стадии, статусы лида, типы клиента

Все «словари» CRM в одном месте: стадии воронки, статусы лида, типы клиента, статусы подписчика дожимов. Что это значит на практике: в Лидах и Стадиях.

⏱ 5 мин · 👤 справочник · 🟢 live


ℹ️ Значения ниже, стандартный набор, платформа работает с ним «из коробки». Замена набора своим (кастомная воронка) временно недоступна: редактор убран из настроек, вернётся в упрощённом виде.

Стадии воронки (по умолчанию 6)

КодМетка
greetingПриветствие
qualificationКвалификация
presentationПрезентация
objectionВозражения
closingЗакрытие
doneЗавершено

→ Стадии диалога

Статусы лида (по умолчанию 7)

КодМеткаСоздаёт лид
noneНет-
potentialПотенциальный-
qualifiedКвалифицирован✅
hotГорячий✅
convertedКонвертированэто (сделка закрыта)
reserveРезерв✅
lostПотерян-

→ Лиды и их статусы

Сегментация клиента: теги

Отдельного фиксированного поля «тип клиента» больше нет (удалено 2026-06-13). Категория клиента (опт / розница / кафе и т.п.) теперь выражается обычными тегами: их бот ставит сам или оператор вручную, с описаниями.

→ Теги и сегментация

Статусы подписчика дожимов (5)

КодЗначение
activeактивен (получает дожимы)
pausedна паузе
completedпрошёл все касания
cancelledотменён
opted_outотписался

→ Дожимы


Простыми словами

Это все «выпадающие списки» CRM, собранные вместе. У диалога есть стадия: на каком этапе разговор (от «приветствия» до «завершено»). У лида: статус (от «потенциального» до «горячего» или «потерянного»). Категорию клиента (розница, опт, кафе) отдельным полем больше не хранят, для этого теги. А у подписчика дожимов, свой статус (активен/на паузе/отписался). Бот заполняет всё это сам по ходу общения; тебе тут, чтобы свериться, какие вообще бывают значения.


Дальше: → Лимиты и квоты
Связано: Лиды · Стадии · Теги · Дожимы

Документация › Справочники › Лимиты и квоты

Лимиты и квоты

Все числовые ограничения платформы в одной таблице: проекты, участники, медиа, база знаний, триал, деньги, функции.

⏱ 5 мин · 👤 справочник · 🟢 live


Проект и команда

ЛимитЗначение
Проектов на аккаунт50
Участников на проект20
API-ключей на аккаунт50
Запросов по API-ключу120 в минуту (плюс свой лимит у каждого эндпоинта)
Запросов к каналу и ручных отправок30 в минуту на аккаунт
Действий ИИ-агента через MCPпримерно 60 в минуту (один вызов инструмента = два запроса)

Контент бота

ЛимитЗначение
«Составить за меня» (конструктор описания)$0.30 за сборку с баланса проекта, 5 в час, 20 в сутки на проект
Медиа-файлов на проект60
Размер медиа-файла4 МБ (общий потолок загрузки через кабинет)
Медиа из Telegram (входящее)до 20 МБ
Тегов на лида20
Память диалога (сообщений)30 (по умолчанию)

База знаний

ЛимитЗначение
Записей на проект100
Размер загружаемого файла (PDF/DOC)4 МБ
Текст, вставленный рукамидо 1 000 000 символов
Текст, извлечённый из файладо 500 000 символов
Текст со страницы по ссылкедо 500 000 символов на страницу, при обходе по ссылкам до 20 страниц на уровень
Контекст базы знаний в промпте8 000 символов (сколько релевантных фрагментов влезет, до 15)
Результатов поиска по базе знаний5 (по умолчанию)

→ Медиа · База знаний

Пробный период (WhatsApp)

ЛимитЗначение
Длительность бесплатного периода14 дней (30 дней, если к проекту применён промокод)
Ограничение по числу диалоговнет (отменено 2026-08-04)
Стартовый баланс проекта$5 ($10 по промокоду)
Окно скидки на подписку14 дней с момента подключения канала
Бесплатный период на один номеродин раз
Скольким проектам аккаунта даётся бесплатный стартпервому (первым трём, если ты пришёл по чьей-то партнёрской ссылке); проект с применённым промокодом получает его в любом случае

Отсчёт бесплатных дней начинается при подключении номера, а не при регистрации. Внутри периода единственный ограничитель, баланс проекта: кончились деньги, бот замолчит, даже если дни ещё идут.

→ Подключить WhatsApp · Промокоды

Деньги

ЛимитЗначение
Подписка проекта$25/мес (в тенге пересчитывается по курсу на момент счёта)
Скидка за длинный период3 мес −5%, 6 мес −10%, 12 мес −20%
Скидка в окне активации (14 дней после подключения канала)1 мес −20%, 3 мес −15%, 6 мес −25%, 12 мес −30%
Пополнение балансапресеты $5 / $10 / $20 / $50 / $100 (можно своё значение, от $5 до $1000)
Минимальный вывод партнёрских начислений$10
Заморозка свежих партнёрских начислений3 дня

→ Биллинг · Промокоды и партнёрская программа

Функции и запросы

ЛимитЗначение
Функций на проект40
Параметров на функциюдо 20
Таймаут функции1-60 сек (по умолчанию ~10)
Вызовов функций за один ответ15 (защита от зацикливания)
Частей в одном ответе5
Кнопок под ответом (Telegram)8

Отправка в WhatsApp (антибан)

Потолки живут на нашем шлюзе и считаются на подключённый номер.

ЛимитЗначение
Разных собеседников в минуту8 (ответ из нескольких частей одному человеку стоит одного слота)
Всего отправок в минуту30
Отправок в час / в сутки200 / 3000
Пауза между отправками1,5-5 сек, случайная
Одинаковый текст подряд в один чат3-й блокируется
Шаблонное служебное сообщение на диалогне чаще раза в 5 сек, и один раз на диалог в сутки
Молчание после подключения номера15 минут

→ Кастомные вебхуки · Антибан


Простыми словами

Это просто шпаргалка «сколько чего можно». До скольких проектов завести, сколько человек пустить в команду, какого размера файлы грузить, сколько длится бесплатный период, почём подписка, как часто бот может дёргать функции. Заглядываешь, когда упёрся в ограничение или планируешь, например, «а влезет ли мой прайс в базу знаний» или «со скольки долларов идёт выплата партнёру».


Дальше: → Переменные и хелперы выражений
Связано: Биллинг · Медиа · Публичный API

Документация › Справочники › Выражения

Переменные и хелперы выражений

Полный справочник переменных и помощников языка выражений живёт на отдельной живой странице: она строится прямо из кода движка и всегда актуальна.

⏱ 1 мин · 👤 справочник · 🟢 live


Где смотреть

→ Живой справочник выражений: все переменные ({{client_name}}, {{phone}}, {{stage}}…), помощники дат ({{now}}, {{format_date}}…), текста ({{upper}}, {{default}}…), логики ({{#if}}, {{eq}}…) и утилиты ({{math}}, {{digits}}…) с синтаксисом и примерами.

Страница генерируется из того же кода, который исполняет выражения: список не может устареть или разойтись с реальным поведением бота.


Простыми словами

Раньше здесь была копия шпаргалки по «вставкам», но копии устаревают. Теперь один источник: открой живой справочник, там всё и всегда свежее. Как выражения работают в целом: в статье Язык выражений.


Дальше: → Типы уведомлений
Связано: Язык выражений · Системный промпт · Дожимы

Документация › Справочники › Уведомления

Типы уведомлений

Справочник: какие события платформа умеет присылать и куда. Сначала уровень конкретного бота (Настройки проекта → «Уведомления»), затем события самого аккаунта, которые настраиваются в Уведомлениях.

⏱ 4 мин · 👤 справочник · 🟢 live


Каналы доставки

КаналЧто это
Колокольчиксписок в кабинете
Emailна указанную почту
Личный Telegramчерез твоего бота-вестника
Личный WhatsAppна твой номер, через подключённый канал одного из проектов. Номер задаётся в Настройках проекта → «Уведомления» → «Номер WhatsApp»
Вебхуксвой URL для своей системы

События проекта (настраиваются в Настройках проекта → «Уведомления»)

Колонка «Всегда шлётся»: системные события приходят, даже если ты их отключил без них бот может молча встать. Настраиваемых тумблеров всего два (conversation_started, payment_received): остальное системное и доставляется всегда.

У нового проекта «Оплата получена» включена сразу, «Новый диалог» выключен: на работающем боте это десятки сообщений в день, и такую ленту перестают читать. Включить его можно в любой момент там же, в Настройках проекта → «Уведомления».

СобытиеО чёмВсегда шлётся
conversation_startedначат новый диалог-
payment_receivedполучена оплата-
ai_errorбот не смог ответить клиенту или ответ не дошёл: клиент написал и остался без ответа✅
function_failingфункция проекта перестала работать: за последние часы она не отработала много раз подряд. Обычно это истёкший ключ, незаполненная настройка или недоступный сервис, на который она ходит✅
bot_first_replyбот впервые ответил живому клиенту в этом проекте (один раз на проект)✅
first_leadпервая заявка проекта (один раз на проект; поток новых лидов шлёт функция бота, не платформа)✅
tokens_lowбаланс ниже порога (порог настраивается)✅
balance_topped_upбаланс пополнен (Kaspi, картой, вручную или автопополнением)✅
auto_topupсработало автопополнение баланса✅
trial_expiringзаканчивается бесплатный период WhatsApp✅
activation_offer_expiringзакрывается окно скидки на подписку (14 дней с подключения канала)✅
subscription_expiringистекает подписка✅
whatsapp_disconnectedWhatsApp-канал отвалился (если WhatsApp ограничил номер, письмо, Telegram и колокольчик говорят одно и то же: нужен другой номер, кнопка «Подключить другой номер» в Каналах)✅
channel_silentканал числится подключённым, но входящие не приходят уже давно: проверь телефон✅
platform_incidentТехнические работы на нашей стороне: бот временно не отвечает, от тебя ничего не требуется✅
platform_incident_resolvedРаботы завершены, бот снова отвечает✅
schedule_problemдвижок записи не смог прочитать график или спрятал специалиста✅
spam_detectedсработала защита от спама✅
dialog_too_longбот дошёл до потолка своих ответов в одном диалоге (настройка «Макс. ответов бота на диалог») и передал его вам: клиенту написано, что подключится менеджер, диалог помечен «ответьте руками». В письме ссылка на диалог✅
outreach_pausedисходящая кампания остановлена автоматически (много недоставленных)✅
lead_message_unreadableпервое сообщение лида не читается (баг WhatsApp Web)✅
owner_reportотчёт по проекту по расписанию✅
🎉 Два сигнала про хорошие новости. bot_first_reply и first_lead приходят по одному разу на проект: первый, когда бот впервые ответил настоящему клиенту, второй, когда пришла первая заявка. Остальные уведомления сообщают о поломке, деньгах или тишине, эти два, о том, что настройка доехала до результата.
ℹ️ Новый лид больше не отдельное уведомление платформы (lead_created убран 2026-06-12): о новом лиде сообщает функция бота (telegram_notify / send_lead), чтобы не было дубля. Настрой её в Функциях.
🔌 Эти же события уходят в вебхук. Если в разделе «Интеграции» → «Вебхуки» подписаться на payment_received, tokens_low, trial_expiring, whatsapp_disconnected, ai_error или schedule_problem, платформа пришлёт их и на твой URL, вдобавок к почте и Telegram. Формат тела: Кастомные вебхуки.

События аккаунта (настраиваются в Уведомлениях)

Не привязаны к проекту, поэтому и живут отдельно. Подключены 2026-08-07. Контакты берутся с той же страницы аккаунта.

СобытиеО чёмКому приходит
login_new_deviceвход с браузера или устройства, которым раньше не пользовалисьвладельцу аккаунта
password_changedпароль изменён (в настройках или по ссылке восстановления)владельцу аккаунта
sessions_revokedвыход на всех или на других устройствахвладельцу аккаунта
api_key_createdсоздан API-ключвладельцу аккаунта
member_invitedкого-то пригласили или добавили в проектвладельцу проекта (кроме случая, когда он сам это и сделал)
member_joinedприглашение принятовладельцу и пригласившему, а при прямом добавлении, самому участнику
member_role_changedроль участника измененаучастнику, чья роль изменилась
member_removedдоступ к проекту закрытучастнику, который его потерял
platform_updateновости о новых возможностяхтем, кто подписался (по умолчанию выключено)
📌 Тумблеры «Безопасность» и «Команда» управляют письмами, Telegram и вебхуком, но не колокольчиком: эти события остаются в истории аккаунта в любом случае. «Обновления платформы», наоборот, подписка: выключено значит не приходит совсем.

⚠️ Следи в первую очередь за tokens_low и whatsapp_disconnected. Именно из-за их пропуска бот тихо перестаёт отвечать клиентам. Системные события (✅) доставляются всегда, даже при выключенных уведомлениях, но деньги и каналы всё равно держи на email/Telegram. См. Бот не отвечает.

Простыми словами

Первая табличка, сигналы про конкретный проект (бот): кончаются деньги, отвалился канал, пришёл платёж, начался новый диалог. Настраиваемых из них всего два (новый диалог / оплата прошла), остальное системное и шлётся всегда. Ты выбираешь, о чём тебя беспокоить, и куда это слать (почта, Telegram, номер WhatsApp, вебхук), в Настройках проекта → «Уведомления». Главное, не выключай уведомления про деньги и каналы: именно они предупреждают, когда бот вот-вот замолчит.

Вторая табличка, сигналы про сам аккаунт: кто-то вошёл с незнакомого устройства, сменился пароль, появился API-ключ, в проекте прибавился человек или у кого-то поменялась роль. Эти настраиваются на странице Уведомления, и там же задаются контакты. Разница одна: тумблер там управляет письмом и Telegram, а в колокольчике такие события остаются всегда, чтобы историю аккаунта нельзя было случайно стереть галочкой.


Дальше: → FAQ
Связано: Уведомления и настройки · Биллинг · Канал отвалился