# DOS AI: полный публичный корпус > Платформа для создания ИИ-ассистентов (чат-ботов) в WhatsApp и Telegram > со встроенной CRM. Краткий указатель и описание продукта: /llms.txt Ниже руководство пользователя (68 статей), бесплатный курс (41 урок) и разборы из блога (19 статей) целиком. У каждого материала указан канонический адрес: при цитировании ссылайся на него. # ЧАСТЬ 1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ --- ## Что такое DOS AI URL: https://dosai.pro/docs/guide/00-start/00-what-is-dosai [Документация](../README.md) › [Старт](../00-start) › Что такое DOS AI # Что такое DOS AI > Платформа, на которой ты собираешь AI-бота для своего бизнеса: он сам отвечает клиентам в WhatsApp и Telegram, собирает заявки и ведёт их в CRM. ⏱ 6 мин · 👤 для всех · 🟢 live > **За 30 секунд:** > - DOS AI: конструктор умного бота для WhatsApp/Telegram, без программирования. > - Бот отвечает клиентам словами (ты задаёшь его «характер» текстом) и умеет действия, записать, посчитать, выставить счёт через [функции](../03-tools/30-functions.md). > - Все переписки и заявки складываются в [CRM](../04-crm), ты видишь аналитику и можешь вмешаться вручную. > - Платишь за то, что бот реально работает (токены за сообщения + подписка за канал). --- ## Проблема, которую это решает Клиенты пишут в WhatsApp круглосуточно: «сколько стоит?», «вы работаете завтра?», «запишите меня». Живой человек не успевает отвечать мгновенно 24/7, а медленный ответ = потерянный клиент. Нанять оператора дорого, и он всё равно спит ночью. **DOS AI ставит между клиентом и тобой умного бота.** Он отвечает за секунды, на твоём языке, по твоим правилам, ловит заявку и кладёт её тебе в CRM. Ты подключаешься, только когда это реально нужно. ## Из чего состоит платформа Думай о DOS AI как о конструкторе из нескольких блоков: | Блок | Что делает | Где настраивается | |---|---|---| | 🧠 **Бот (промпт)** | «Характер» и правила: как общаться, что знать, что предлагать | [Системный промпт](../01-bot/11-system-prompt.md) | | 💬 **Каналы** | Где бот общается: WhatsApp, Telegram | [Каналы](../02-channels/20-channels-overview.md) | | 🛠️ **Функции (инструменты)** | Действия бота: записать в календарь, посчитать, выставить счёт, уведомить тебя | [Функции](../03-tools/30-functions.md) | | 📚 **База знаний** | Документы и факты, на которые бот опирается (прайс, услуги, правила) | [База знаний](../03-tools/31-knowledge-base.md) | | 🎯 **Дожимы** | Автонапоминания тем, кто «подумает и пропал» | [Дожимы](../03-tools/33-drip.md) | | 📇 **CRM (диалоги и лиды)** | Все переписки и заявки, статусы, перехват вручную | [Работа с клиентами](../04-crm) | | 📊 **Аналитика** | Сколько диалогов, заявок, конверсия, расход | [Аналитика](../04-crm/43-analytics.md) | | 💳 **Деньги** | Баланс токенов, подписка, приём оплат от клиентов | [Деньги](../06-money) | Один **проект** = один бот = один бизнес (или одна точка). Если у тебя две стоматологии это два проекта. ## Для кого это - **Малый и средний бизнес в любой стране:** стоматологии, барбершопы, салоны, рестораны, автосервисы, школы, магазины: те, кому клиенты пишут в мессенджеры. Платформа облачная и к стране не привязана: нужен только WhatsApp или Telegram. Больше всего клиентов сейчас в Казахстане, поэтому там есть местные удобства вроде оплаты через Kaspi, но это дополнение, а не условие. - **Не нужны навыки программирования.** Бот настраивается обычным текстом: ты описываешь, как он должен себя вести, словами. - **Разработчикам** платформа даёт [API и вебхуки](../08-developers/80-public-api.md): можно интегрировать со своими системами, но это опционально. ## Что бот умеет, а что нет ✅ **Умеет:** отвечать на вопросы по твоим правилам и прайсу, записывать клиентов (Google Календарь/Таблицы), считать стоимость, выставлять счета на оплату (Kaspi), уведомлять тебя о горячих заявках, вести лида по воронке, догонять «потеряшек» напоминаниями, отправлять фото/видео из библиотеки. 🚫 **Не умеет (и это правильно):** ставить медицинские диагнозы, давать юридические заключения, обещать то, чего ты не разрешал. Бот работает строго в рамках, которые ты задал в промпте. 📌 **Пример.** Барбершоп: клиент пишет «во сколько завтра свободно к Артуру?» → бот смотрит расписание в Google Календаре → предлагает «12:00 или 15:30» → клиент выбирает → бот записывает и подтверждает. Владелец утром видит заявку в CRM, не нажав ни одной кнопки ночью. --- ## Простыми словами DOS AI это место, где ты делаешь себе «робота-секретаря» для WhatsApp и Telegram. Ты не программируешь, ты просто описываешь словами, как он должен общаться с клиентами и что про твой бизнес знать. Дальше он сам отвечает людям днём и ночью: подсказывает цены, записывает на приём, принимает оплату и собирает все заявки в одном месте, чтобы ты ничего не потерял. А если нужно, ты в любой момент сам вступаешь в переписку. --- **Дальше:** → [Как бот думает](./01-how-bot-thinks.md) **Связано:** [Карта кабинета](./03-cabinet-map.md) · [Глоссарий](./04-glossary.md) · [Быстрый старт](./02-quickstart.md) --- ## Как бот думает URL: https://dosai.pro/docs/guide/00-start/01-how-bot-thinks [Документация](../README.md) › [Старт](../00-start) › Как бот думает # Как бот думает > Понять за 8 минут, что происходит между сообщением клиента и ответом бота: тогда станет ясно, *почему* бот отвечает так, и где это чинить. ⏱ 8 мин · 👤 для всех · 🟢 live > **За 30 секунд:** > - На каждое сообщение бот собирает: твой [промпт](../01-bot/11-system-prompt.md) (правила) + факты о бизнесе (поле «Информация о компании» и [база знаний](../03-tools/31-knowledge-base.md)) + [функции](../03-tools/30-functions.md) (действия). > - Дальше он решает: просто ответить словами **или** вызвать функцию (записать, посчитать, выставить счёт). > - Бот **не помнит** ничего, кроме истории текущего диалога. Что не написано в промпте/знаниях: он не знает. > - Одинаково работает во всех точках: тест-чат, WhatsApp, Telegram, ручная отправка. --- ## Что происходит на каждое сообщение Когда клиент пишет, за доли секунды бот проходит такой путь: ``` Сообщение клиента │ ▼ 1. Собрать контекст: системный промпт (характер + правила) + история этого диалога + подходящие куски базы знаний (RAG) + меню включённых функций │ ▼ 2. Решить: «ответить словами» ИЛИ «вызвать функцию» │ │ │ ▼ │ выполнить действие │ (календарь / таблица / счёт …) │ │ │ ▼ │ получить результат, подумать снова ▼ │ 3. Сформулировать ответ клиенту ◄────────┘ │ ▼ Ответ уходит в WhatsApp / Telegram ``` Ключевое: различать **два вида знаний**. **Общие вещи о мире** бот уже знает из обучения, что такое кариес, как вежливо общаться, базовую логику и счёт: это объяснять не нужно. А вот **факты про твой бизнес**, услуги, цены, расписание, адрес, он **не знает**, пока ты не дашь их в [промпте](../01-bot/11-system-prompt.md), поле «Информация о компании» или [базе знаний](../03-tools/31-knowledge-base.md). Плюс бот **не ищет в интернете** и не знает, что происходит прямо сейчас за пределами диалога. Правило простое: общему учить не надо: давай ему только то, что специфично для тебя. ## Источники, из которых бот берёт ответ | Источник | Что это | Когда использовать | |---|---|---| | 🧠 **Системный промпт** | Поведение: характер, тон, правила, что запрещено | Всё «как себя вести» → [Промпт](../01-bot/11-system-prompt.md) | | 🏢 **Информация о компании** | Короткие базовые факты: услуги, цены, адрес, часы, вшиваются в каждый ответ целиком | Компактные факты «о тебе» → [Промпт](../01-bot/11-system-prompt.md) | | 📚 **База знаний (RAG)** | Объёмные/меняющиеся документы: большой прайс, условия, FAQ, подмешиваются по кускам | Много фактов / документы → [База знаний](../03-tools/31-knowledge-base.md) | | 🛠️ **Функции** | Реальные действия во внешнем мире | Записать, посчитать, оплатить → [Функции](../03-tools/30-functions.md) | 💡 **Правило большого пальца:** *как общаться* в промпт; *коротко о бизнесе* в «Информацию о компании»; *много фактов / документы* в базу знаний; *что делать* в функции. ## Что значит «бот вызвал функцию» Сам по себе ИИ умеет только писать текст. [Функции](../03-tools/30-functions.md) дают ему «руки». Ты не прописываешь сценарий «если X то Y», ты описываешь каждую функцию словами, и бот **сам решает** в нужный момент её вызвать. 📌 **Пример.** Подключены функции «проверить свободное время» и «записать клиента». Клиент: «хочу завтра после обеда». Бот сам: проверяет слоты → предлагает время → после согласия записывает → подтверждает. Никто этот сценарий по шагам не программировал. За один ход бот может вызвать несколько функций подряд (проверил → записал). Подробно в [гайде по функциям](../03-tools/30-functions.md). ## Бот работает одинаково везде (5 точек входа) Один и тот же «мозг» отвечает во всех местах, где есть ИИ: 1. **Тестовый чат** в кабинете (песочница, без реальных списаний) → [Тест-чат](../01-bot/14-test-chat.md); 2. боевой **WhatsApp** (подключается по QR-коду, как WhatsApp Web) → [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md); 3. боевой **Telegram**; 4. ручная **отправка** оператором из диалога; 5. **переотправка** упавшего ответа. ⚠️ **Важно.** Если что-то работает в тест-чате, так же сработает в бою. Поэтому **всегда проверяй изменения в тест-чате** перед тем, как выпускать в WhatsApp. ## Почему бот иногда «тупит», и где чинить | Симптом | Обычно причина | Куда смотреть | |---|---|---| | Отвечает не по делу / выдумывает | Факта нет в промпте/знаниях, бот «додумал» | Добавь факт в [Базу знаний](../03-tools/31-knowledge-base.md) | | Не записывает / не считает | Функция выключена или плохое описание | [Функции](../03-tools/30-functions.md) | | Отвечает слишком формально/сухо | Тон не задан в промпте | [Промпт](../01-bot/11-system-prompt.md) | | Молчит совсем | Кончился баланс / триал / пустой промпт | [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) | 💡 Запомни: **плохой ответ бота это почти всегда не «глупый ИИ», а неполный промпт или знания.** Бот честно работает с тем, что ты ему дал. --- ## Под капотом (для разработчиков) - Каждый ответ, **non-streaming** вызов модели (в DOS AI streaming запрещён: ломает авторитетный подсчёт токенов, refund при обрывах, round-trip функций). «Постепенный» эффект печати: клиентский, через паузы между частями ответа. - Функции отдаются модели как OpenAI `tools`; вызов функции → выполнение → результат возвращается модели → она формулирует финальный текст (tool-call round-trip). - База знаний подмешивается через **RAG** (семантический поиск релевантных кусков), а не «весь документ в каждый запрос». - Ответ модели, структурированный JSON (текст для клиента + служебные поля: статус лида, стадия диалога, флаги). Формат в статье [JSON-ответ бота](../01-bot/12-json-response.md). - Все 5 точек входа зовут один пайплайн (`executeAIPipeline`), поэтому поведение консистентно. Память диалога = история сообщений из БД, а не «глобальная память». --- ## Простыми словами Представь бота как нового толкового сотрудника: общие вещи (язык, вежливость, что такое кариес) он уже знает, а вот про **твой** бизнес, только то, что ты ему рассказал. Перед каждым ответом он быстро «вспоминает»: твои инструкции (как себя вести), справочник про твой бизнес (цены, услуги, адрес) и список действий, которые ему разрешено делать (записать, посчитать, выставить счёт). Потом он либо отвечает словами, либо делает действие, и пишет клиенту результат. Поэтому если бот ответил неправильно, почти всегда дело не в том, что «ИИ тупой», а в том, что ему чего-то не рассказали. Добавишь нужный факт или правило, и он сразу станет умнее. И всегда сначала проверяй бота в тестовом чате: там он думает точно так же, как в реальном WhatsApp, но без последствий. --- **Дальше:** → [Быстрый старт: первый бот за 30 минут](./02-quickstart.md) **Связано:** [Системный промпт](../01-bot/11-system-prompt.md) · [Функции](../03-tools/30-functions.md) · [База знаний](../03-tools/31-knowledge-base.md) · [Тест-чат](../01-bot/14-test-chat.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Быстрый старт: первый бот за 30 минут URL: https://dosai.pro/docs/guide/00-start/02-quickstart [Документация](../README.md) › [Старт](../00-start) › Быстрый старт # Быстрый старт: первый бот за 30 минут > Сквозной путь, от пустого кабинета до живого бота, который отвечает тебе в WhatsApp. Делай по шагам: ничего не пропуская. ⏱ 10 мин чтения · ≈30 мин на практике · 👤 для владельца · 🟢 live > **За 30 секунд (что будем делать):** > 1. Создать проект · 2. Задать «характер» бота · 3. Загрузить факты о бизнесе · 4. Проверить в тест-чате · 5. Подключить WhatsApp · 6. Получить первую заявку. > 💡 Перед стартом полезно (но не обязательно) прочесть [Что такое DOS AI](./00-what-is-dosai.md) и [Как бот думает](./01-how-bot-thinks.md), тогда каждый шаг будет очевиден. --- ## Что нужно приготовить заранее - [ ] Аккаунт на платформе (регистрация по email); - [ ] Телефон с **«живым» рабочим WhatsApp** (см. [какой номер](../02-channels/21-whatsapp-wazzup.md#какой-номер-выбрать)); - [ ] Под рукой: твой **прайс/услуги, часы работы, адрес**, чтобы бот ими оперировал. ⚠️ Бесплатный период WhatsApp: **14 дней, число диалогов не ограничено**. Ограничивает только баланс проекта (при создании кладём на него $5), поэтому канал лучше подключать, когда бот уже настроен (шаги 1-4), чтобы пробные дни не ушли на пустого бота. --- ## Шаг 1. Создай проект (3 мин) Глобальное меню слева → **«Мои проекты» → «Создать»** (или кнопка на Дашборде). - Дай проекту понятное имя (например «Стоматология Смайл»); - Укажи **сферу бизнеса** (стоматология, салон, ресторан, автосервис и т.д.): это метаданные проекта для аналитики; промпт при создании платформа **не** заполняет. ## Шаг 2. Задай характер бота (8 мин) Меню проекта → **«Бот»** → поле **«Системный промпт»**. Тут описывается **поведение** бота, *как он себя ведёт* (факты про бизнес, отдельно, шаг 3). Опиши своими словами: - **Тон:** как общаться (вежливо на «вы» / дружелюбно на «ты», с эмодзи или строго); - **Правила:** что можно и **чего нельзя** (не ставить диагноз, не обещать скидок без согласования); - **Цель:** что считать успехом (записать / взять телефон / довести до оплаты); - **Как вести диалог:** что уточнить у клиента, что предложить, когда позвать живого человека. 📌 Всё это пишется **обычным текстом в одно поле**: отдельных переключателей «тон» или «услуги» в интерфейсе нет, ты просто формулируешь инструкцию словами, как новому сотруднику. 💡 **Совет.** «Ты: администратор стоматологии. Общайся вежливо на вы. Уточни, что беспокоит, предложи удобное время, возьми имя и телефон. Диагнозы не ставь, это к врачу». Глубоко: [Системный промпт](../01-bot/11-system-prompt.md). 🚫 Факты о бизнесе (услуги, цены, адрес, часы) сюда **не** вписывай, для них есть отдельные места (шаг 3). ## Шаг 3. Дай боту факты о бизнесе (5 мин) Факты живут в **двух местах** (это не промпт, промпт про поведение, а тут про *что бот знает*): **1. Поле «Информация о компании»**: там же, в разделе «Бот». Сюда коротко и то, что нужно **всегда**, чем занимаетесь, ключевые услуги, цены, адрес, часы работы. Эта информация целиком добавляется в каждый ответ бота. Лимит до 40 000 символов. **2. «База знаний»**: меню проекта → **«База знаний»**. Сюда **объёмное и меняющееся**: большой прайс на 100 позиций, условия, частые вопросы, документы. Бот сам подмешивает нужные куски в ответ (это RAG, см. [Как бот думает](./01-how-bot-thinks.md)). 📌 **Правило.** Короткий факт (адрес, часы) → «Информация о компании». Большой документ (полный прайс, FAQ) → «База знаний». Тон и правила → системный промпт (шаг 2). Так бот и говорит правильно, и факты не путает. ## Шаг 4. Проверь в тест-чате (5 мин). НЕ пропускай Меню проекта → **«Тестовый чат»**. Это песочница: бот думает точно как в бою, но без реальных клиентов и списаний. Прогони реальные сценарии: - «Сколько стоит чистка?»: называет цену из базы знаний? - «Запишите меня на завтра»: ведёт к записи? - «А вы рядом с метро?»: отвечает по фактам, не выдумывает? ⚠️ **Если бот ошибается** это нормально на старте. Почти всегда лечится так: ответил не по фактам → добавь факт в Базу знаний; ведёт себя не так → поправь промпт. Покрути, пока не понравится. Подробно, [Тест-чат](../01-bot/14-test-chat.md). ## Шаг 5. Подключи WhatsApp (5 мин) Теперь, когда бот толковый, выпускаем в эфир. Меню проекта → **«Каналы» → «Подключить WhatsApp»**. Это отдельная подробная статья (там чек-лист антибана и QR): **→ [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md)**. Коротко: отметь 5 галочек безопасности → отсканируй QR телефоном (WhatsApp → Связанные устройства) → дождись статуса «Подключён». ## Шаг 6. Получи первую заявку (2 мин) 1. Напиши боту с **другого** телефона, как клиент; 2. Бот отвечает, поздравляю, он в эфире; 3. Открой меню проекта → **«Диалоги»**: там твоя переписка; 4. Если бот собрал имя/телефон/запрос в **«Лиды»** появится заявка. 🎉 Готово. Дальше бот работает сам круглосуточно. --- ## Что делать дальше | Хочешь… | Иди в статью | |---|---| | Научить бота записывать/считать/выставлять счёт | [Функции](../03-tools/30-functions.md) | | Догонять клиентов, которые «подумают и пропадут» | [Дожимы](../03-tools/33-drip.md) | | Подключить ещё и Telegram | [Telegram](../02-channels/22-telegram.md) | | Понять расход и пополнить баланс | [Биллинг](../06-money/60-billing.md) | | Дать доступ сотруднику | [Участники и роли](../07-team/71-members.md) | ## Если что-то пошло не так | Симптом | Куда | |---|---| | Бот не отвечает в WhatsApp | [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) | | WhatsApp не подключается / QR истёк | [Подключить WhatsApp → Частые ошибки](../02-channels/21-whatsapp-wazzup.md#частые-ошибки) | | Бот отвечает неправильно | Шаг 4: допиши промпт/знания | --- ## Простыми словами Запустить бота это полчаса по шагам. Сначала ты создаёшь «проект» (это твой бот) и пишешь обычным текстом инструкцию, как общаться, как себя вести. Потом отдельно даёшь ему факты про бизнес: короткое (услуги, цены, адрес) в поле «Информация о компании», объёмное (большой прайс, FAQ) в «Базу знаний». Дальше обязательно проверяешь бота в «тестовом чате»: это как поговорить с ним самому, без клиентов, если он где-то ошибается, ты просто дописываешь инструкцию или факты, пока не станет хорошо. И только когда бот толковый, подключаешь WhatsApp по QR-коду и пишешь ему с другого телефона. Если он ответил, всё, он работает сам, а заявки сами падают тебе в список. --- **Дальше:** → [Функции (научить бота действиям)](../03-tools/30-functions.md) **Связано:** [Карта кабинета](./03-cabinet-map.md) · [Системный промпт](../01-bot/11-system-prompt.md) · [Тест-чат](../01-bot/14-test-chat.md) · [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Карта кабинета (навигация) URL: https://dosai.pro/docs/guide/00-start/03-cabinet-map [Документация](../README.md) › [Старт](../00-start) › Карта кабинета # Карта кабинета (навигация) > Чтобы не теряться: что где лежит в кабинете DOS AI и как устроены два уровня меню. ⏱ 7 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Меню **два уровня**: глобальное (про аккаунт) и меню **внутри проекта** (про конкретного бота). > - Глобальное, слева всегда: Дашборд, Проекты, CRM, Биллинг, Рефералы, Поддержка. > - Зашёл в проект, слева появляется его меню, сгруппированное: Бот · Инструменты · Подключения · Мониторинг · Проект. > - Что ты видишь и можешь, зависит от [роли](../07-team/70-roles.md). ![Кабинет DOS AI: обзор проекта, слева меню разделов, в центре состояние бота и цифры](/docs-guide-img/00-start/overview.png) --- ## Два уровня навигации DOS AI устроен так: у тебя есть **аккаунт**, в нём, **проекты** (по одному на каждого бота/бизнес). Поэтому и меню два: 1. **Глобальное меню**, про весь аккаунт (все проекты, общий биллинг, рефералы). 2. **Меню проекта**: появляется, когда ты зашёл внутрь конкретного проекта; всё про этого бота. 💡 **Аналогия.** Глобальное меню, как «список всех твоих магазинов». Меню проекта, как «панель управления одним магазином». ## Глобальное меню (слева, всегда) | Пункт | Что там | Кому | |---|---|---| | **Дашборд** | Сводка по всем проектам, быстрые цифры | всем | | **Уведомления** | Важные события (заявки, проблемы) | всем | | **Мои проекты** | Список ботов + кнопка «Создать» | всем | | **CRM** | Общая воронка по всем проектам | всем | | **Биллинг** | Общий счёт, подписки, история оплат | всем | | **Поддержка** | Связь с командой DOS | всем | | **Обновления** | Что нового на платформе | всем | | **Рефералы** | Приглашай и зарабатывай | всем | | **Документация / API / Для разработчиков** | Справка и технические доки | всем | | **Админ-панель** | Управление платформой | только DOS | ## Меню проекта (когда зашёл в бота) Открываешь проект → слева появляются его разделы, по группам: **Обзор**, самый верхний пункт: главная страница проекта, общее состояние бота и быстрые цифры. Видна всем (от viewer). Ниже, разделы по группам: ### Бот: «мозг» и настройка | Раздел | Что делаешь | Минимальная роль | |---|---|---| | **Бот** | Системный промпт (характер и правила) + поле «Информация о компании». Модель ИИ, лимиты истории и тонкие настройки спрятаны тут же: в раскрывающемся блоке **«Расширенные настройки»** | admin | | **База знаний** | Загрузить факты/прайс/документы | viewer (правка: editor+) | | **Тестовый чат** | Проверить бота в песочнице | editor | 📌 Отдельных пунктов «AI-модель» и «Продвинутое» в меню больше нет, всё это собрано внутри раздела **«Бот»**, в блоке «Расширенные настройки». ### Инструменты, что бот умеет | Раздел | Что делаешь | Роль | |---|---|---| | **Функции** | Действия бота (записать, счёт, уведомить) → [гайд](../03-tools/30-functions.md) | editor | | **Дожимные** | Автонапоминания «потеряшкам» | editor | | **Медиа** | Библиотека фото/видео для отправки | editor | ### Подключения, где и с чем | Раздел | Что делаешь | Роль | |---|---|---| | **Каналы** | Подключить [WhatsApp](../02-channels/21-whatsapp-wazzup.md) и Telegram | editor | | **Рассылки** | Массовая отправка сообщений по сегменту клиентов | admin | | **Интеграции** | Google, CRM, вебхуки | editor | ### Мониторинг, что происходит | Раздел | Что смотришь | Роль | |---|---|---| | **Диалоги** | Все переписки, перехват вручную | viewer | | **Лиды** | Заявки и их статусы | viewer | | **Метки (теги)** | Справочник тегов для лидов | editor | | **Аналитика** | Метрики, конверсия, расход | viewer | | **Отчёты** | Регулярные сводки владельцу (на почту/в Telegram) | owner | | **Логи** | События по проекту | editor | ### Проект: управление | Раздел | Что делаешь | Роль | |---|---|---| | **Основное** | Имя, базовые настройки проекта | admin | | **Участники** | Команда и роли | viewer (правка: admin) | | **Биллинг** | Баланс токенов, пополнить | viewer (пополнить, можно) | | **Приём оплат** | Настроить счета клиентам (Kaspi-push) | owner | | **Мои настройки** | Личные уведомления, выйти из проекта | участник (кроме owner) | | **Удаление** | Удалить/передать/архивировать проект | owner | ⚠️ **Не нашёл раздел / всё серое?** Скорее всего, у тебя [роль](../07-team/70-roles.md) ниже нужной. Например, промпт правит только **admin**, приём оплат и отчёты, только **owner**. Попроси владельца проекта повысить роль. ## Куда идти под частую задачу | Хочу… | Иду в… | |---|---| | Изменить, как бот общается | Бот → Промпт | | Добавить цены/услуги | База знаний | | Научить бота записывать/считать | Функции | | Подключить WhatsApp | Каналы → [WhatsApp](../02-channels/21-whatsapp-wazzup.md) | | Посмотреть переписки | Диалоги | | Посмотреть заявки | Лиды | | Пополнить баланс | Биллинг | | Проверить бота безопасно | Тестовый чат | | Догнать ушедших клиентов | Дожимные | --- ## Простыми словами В кабинете два меню, и это не запутанно, если понять логику. Слева всегда висит «общее» меню это про весь твой аккаунт: все боты, общий счёт, приглашения друзей. А как только ты заходишь внутрь конкретного бота, слева добавляется его собственное меню, разбитое на понятные группы, где настроить характер бота, где научить его действиям, где подключить WhatsApp, где смотреть переписки и заявки. Если какой-то раздел не открывается или кнопки серые, почти всегда дело в правах: например, менять «характер» бота разрешено не всем, а только администратору. Тогда просто попроси владельца дать тебе доступ повыше. --- **Дальше:** → [Быстрый старт: первый бот за 30 минут](./02-quickstart.md) **Связано:** [Что такое DOS AI](./00-what-is-dosai.md) · [Роли и права](../07-team/70-roles.md) · [Глоссарий](./04-glossary.md) --- ## Глоссарий URL: https://dosai.pro/docs/guide/00-start/04-glossary [Документация](../README.md) › [Старт](../00-start) › Глоссарий # Глоссарий > Все термины платформы простым языком. Сюда ведут ссылки из других статей, если встретил незнакомое слово, ищи его здесь. ⏱ 6 мин (как справочник) · 👤 для всех · 🟢 live > **Как пользоваться:** жми Ctrl/Cmd+F и ищи слово. Каждый термин даёт короткое определение и ссылку на полную статью. --- ## Основные понятия ### Проект Один бот для одного бизнеса (или точки). Внутри проекта: промпт, каналы, функции, CRM. У тебя может быть много проектов. → [Что такое DOS AI](./00-what-is-dosai.md) ### Бот / агент AI-ассистент проекта, который отвечает клиентам. Его поведение задаёшь ты, текстом в промпте. «Бот» и «агент», синонимы. ### Системный промпт Текст, описывающий «характер» и правила бота: как общаться, что предлагать, что запрещено. Главная настройка бота. → [Промпт](../01-bot/11-system-prompt.md) ### Канал Мессенджер, через который бот общается: WhatsApp или Telegram. Один канал = один номер/бот = один проект. → [Каналы](../02-channels/20-channels-overview.md) ### Функция (инструмент / tool) Действие, которое бот может выполнить: записать в календарь, посчитать, выставить счёт, уведомить владельца. Бот сам решает, когда вызвать. → [Функции](../03-tools/30-functions.md) ### Параметр (функции) Данные, которые бот собирает у клиента и передаёт в функцию (имя, телефон, дата, сумма). → [Функции](../03-tools/30-functions.md#6-параметры-подробно) ### База знаний (RAG) Документы и факты, которые ты загружаешь (прайс, услуги, условия). Бот автоматически подмешивает нужные куски в ответ. RAG = технология поиска по этим документам. → [База знаний](../03-tools/31-knowledge-base.md) ### Дожим (follow-up) Автоматическое напоминание клиенту, который заинтересовался и пропал. Бот мягко возвращает его в диалог. → [Дожимы](../03-tools/33-drip.md) ### Медиа-библиотека Хранилище фото/видео/отзывов проекта, которые бот может отправить клиенту в нужный момент. → [Медиа](../03-tools/32-media-library.md) ## CRM и клиенты ### Диалог (conversation) Одна переписка с одним клиентом в канале. Все диалоги видны в разделе «Диалоги». → [Диалоги](../04-crm/40-dialogs.md) ### Лид Потенциальный клиент: человек, который написал и которого стоит «вести». Каждый диалог может стать лидом с данными (имя, телефон, что хочет). → [Лиды](../04-crm/41-leads.md) ### Статус лида Где клиент в воронке: новый / в работе / целевой / купил / отказ и т.п. Бот ставит статус сам по ходу разговора. → [Лиды](../04-crm/41-leads.md) ### Стадия диалога Этап разговора (приветствие → выяснение → предложение → закрытие). Помогает аналитике и боту понимать контекст. → [Стадии](../04-crm/42-stages.md) ### Тег / метка Пометка на лиде для фильтрации (VIP, опт, жалоба). Бот или оператор ставит вручную/функцией. → [Теги](../03-tools/34-tags.md) ### Перехват (ручной режим) Когда оператор сам вступает в диалог. Бота на этом чате можно поставить на паузу, чтобы он не встревал. → [Диалоги](../04-crm/40-dialogs.md) ### AI на паузе Состояние диалога, когда бот временно молчит (оператор работает вручную или клиент попросил не писать). → [Диалоги](../04-crm/40-dialogs.md) ## Деньги ### Токен Единица расхода ИИ. Каждое сообщение бота тратит токены (зависит от длины и модели). Баланс токенов пополняешь в Биллинге. → [Сколько стоит сообщение](../06-money/61-message-cost.md) ### Подписка Регулярная оплата за работающий канал (например WhatsApp). Без активной подписки канал после триала отключается. → [Биллинг](../06-money/60-billing.md) ### Триал (пробный период) Бесплатные дни работы WhatsApp-канала: **14 дней** с момента подключения номера, **30 дней**, если к проекту применён промокод. Число диалогов не ограничено, ответы бота всё это время идут с баланса проекта. → [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md#сколько-это-стоит) ### Окно активации 14 дней после подключения канала, когда подписку можно купить со сниженной ценой (месяц −20%, 3 мес −15%, 6 мес −25%, год −30%). Даётся один раз на проект. → [Биллинг](../06-money/60-billing.md#скидка-первых-двух-недель) ### Приём оплат (Flow B) Функция, когда бот выставляет твоему клиенту счёт прямо в чате (Kaspi-push), деньги идут на твою кассу. → [Приём оплат](../06-money/62-accept-payments.md) ### Реферал Приглашённый тобой пользователь; за него начисляется комиссия. → [Рефералы](../06-money/63-referrals.md) ## Роли ### viewer / tester / editor / admin / owner Уровни доступа в проекте: **viewer**, только смотреть, **tester**, то же + тест-чат (гонять бота, без правок), **editor**, менять промпт/функции/каналы и вести диалоги, **admin**, + настройки проекта и приглашения, **owner**: всё + удаление/оплаты. → [Роли и права](../07-team/70-roles.md) ## Технические термины ### QRDOS (подключение WhatsApp) Самохостинг-механизм, которым платформа подключает WhatsApp: привязанное устройство по QR (как WhatsApp Web), всё держится на стороне платформы: отдельный сторонний сервис не нужен. (Ранее эту роль играл сервис-посредник Wazzup; убран в 2026-06.) → [WhatsApp](../02-channels/21-whatsapp-wazzup.md#почему-по-qr-а-не-напрямую-через-api) ### Сервисный аккаунт (Google) Технический Google-аккаунт DOS AI, которому ты даёшь доступ к своей таблице/календарю, чтобы бот мог с ними работать. → [Интеграции](../05-integrations/50-integrations-overview.md) ### Вебхук (webhook) HTTP-запрос на внешний адрес: способ боту «дёрнуть» твой сервер или CRM. Основа кастомных функций. → [Вебхуки](../03-tools/30-functions.md#8-кастомные-вебхуки-простой-и-продвинутый-режим) ### Точки входа ИИ (5 штук) Места, где работает бот: тест-чат, WhatsApp, Telegram, ручная отправка, переотправка. Везде одинаково. → [Как бот думает](./01-how-bot-thinks.md) ### QStash / крон Планировщики, которые запускают регулярные задачи (дожимы, проверки). Тебе настраивать не нужно, работает само. --- ## Простыми словами Это словарик. Если в любой статье встретилось слово, которое непонятно, заходи сюда, ищи его поиском (Ctrl+F) и читай короткое объяснение. А если хочешь разобраться глубже, рядом с каждым словом есть ссылка на полную статью. --- **Дальше:** → [Быстрый старт: первый бот за 30 минут](./02-quickstart.md) **Связано:** [Что такое DOS AI](./00-what-is-dosai.md) · [Как бот думает](./01-how-bot-thinks.md) · [Карта кабинета](./03-cabinet-map.md) --- ## Как выбрать чат-бота для WhatsApp URL: https://dosai.pro/docs/guide/00-start/05-how-to-choose-whatsapp-bot [Документация](../README.md) › [Старт](../00-start) › Как выбрать чат-бота # Как выбрать чат-бота для 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 в месяц за канал. Ответы ИИ идут отдельно по факту: один доллар это примерно от 50 до 200 сообщений, в зависимости от выбранной модели. Первые 14 дней после подключения номера канал работает бесплатно, по промокоду 30 дней. При регистрации на баланс кладём $5, по промокоду $10. Карта для старта не нужна. Считать свой месяц заранее можно калькулятором на главной. **Заявки.** Встроенная CRM: стадии, теги, заметки, ответственные, вся переписка рядом. Есть интеграции с Google Таблицами и Календарём, Bitrix24, amoCRM, и произвольный вебхук, если у тебя своя система. Есть публичный API. **Запуск.** Сам, без интегратора. Первый ответ клиенту обычно уходит через 10-15 минут после регистрации. За настройку мы не берём отдельно. **Ошибки.** Бот передаёт разговор тебе, когда не знает ответа, и присылает уведомление в Telegram. Переписку видно целиком, в неё можно вмешаться в любой момент, бот при этом замолкает. ## Когда мы не подойдём Честный список, чтобы не тратить твоё время. - **Нужно разослать тысячам за день.** Отправка первым у нас есть, но с потолком в 20 сообщений в сутки на номер и разгоном в первые дни. Потолок стоит не для того, чтобы придержать тебя, а чтобы номер дожил до конца рассылки. - **Нужен официальный статус WhatsApp Business API**, галочка верификации и шаблоны, согласованные с Meta. Мы работаем иначе. - **Клиенты пишут в основном не в мессенджеры**, а звонят или приходят с сайта. Тогда начинать надо не с бота в WhatsApp. - **Нужен бот, который ходит по жёсткому сценарию с кнопками** и никогда не отклоняется от скрипта. Наш отвечает словами. ## Дальше - [Что такое DOS AI](./00-what-is-dosai.md), если хочешь понять продукт целиком - [Запуск за 10 минут](./02-quickstart.md), если хочешь просто попробовать - [Каналы](../02-channels/20-channels-overview.md), про WhatsApp и Telegram подробно - [Лимиты и цифры](../10-reference/104-limits.md), все числа в одном месте --- ## Создание проекта URL: https://dosai.pro/docs/guide/01-bot/10-create-project [Документация](../README.md) › [Проект и бот](../01-bot) › Создание проекта # Создание проекта > Первый шаг к боту: создать проект под один бизнес. Характер бота описывается на следующем шаге, своими словами. ⏱ 6 мин · 👤 для владельца · 🟢 live ![Форма создания проекта: название, название компании, сфера и цвет, внизу кнопка «Создать проект»](/docs-guide-img/01-bot/create-project.png) > **За 30 секунд:** > - Проект = один бот для одного бизнеса/точки. > - Заполняешь 3 поля: название проекта, компании и сферу. > - **Сфера** это метаданные проекта (для аналитики); промпт при создании платформа **не** заполняет, его пишешь сам в настройках бота, обычным текстом. > - После создания тебя сразу ведут в настройку бота. Новый проект: в статусе **черновик**, пока не запустишь. --- ## Зачем это нужно Проект это «папка» твоего бота: внутри живут его характер, каналы, функции, переписки и заявки. Один бизнес = один проект. Две точки или два разных бизнеса = два проекта (у каждого свой бот и свой номер WhatsApp). ## Шаги ### 1. Открой создание проекта Глобальное меню слева → **«Мои проекты» → «Создать»** (или кнопка на Дашборде). ### 2. Заполни поля | Поле | Что вписать | Обязательно | |---|---|---| | **Название проекта** | Как ты сам будешь называть его в кабинете («Стоматология Смайл») | да, до 200 символов | | **Название компании** | Официальное имя бизнеса (бот будет его использовать) | да, до 200 | | **Сфера бизнеса** | Выбор из списка (стоматология, салон, ресторан…), 25 вариантов. Нужна для учёта и подсказок, на поведение бота не влияет | нет | | **Цвет** | Метка проекта в кабинете (для глаза) | нет | 💡 **Совет.** Промпт собирается прямо в настройках бота обычным текстом, чем занимаетесь, цены, как общаться, чего нельзя. Написали, сразу проверьте в «Тест-чате», как бот отвечает, и подправьте формулировки. ### 3. Нажми «Создать проект» После создания платформа покажет короткий экран успеха и **сама переведёт тебя в настройку бота** (`Бот → промпт`), чтобы продолжить. ## Что дальше Ты в настройке бота: переходи к [Системному промпту](./11-system-prompt.md), потом [Базе знаний](../03-tools/31-knowledge-base.md), [Тест-чату](./14-test-chat.md) и [подключению WhatsApp](../02-channels/21-whatsapp-wazzup.md). Полный путь в [Быстром старте](../00-start/02-quickstart.md). ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Кнопка «Создать» неактивна | Не заполнены обязательные поля или короткие (<2 символов) | Заполни название и компанию | | Жёлтое предупреждение про баланс | Бесплатный стартовый баланс уже израсходован на прошлые проекты | Это норм, просто пополнишь [баланс](../06-money/60-billing.md) | | Красный баннер «достигнут лимит» | У тебя 50 проектов (максимум) | Удали ненужные или напиши в поддержку | | Создал, но бот «не работает» | Проект в статусе **черновик**, не настроен и не подключён | Пройди [Быстрый старт](../00-start/02-quickstart.md) | --- ## Под капотом - Новый проект создаётся со статусом **`draft`** (черновик): он не отвечает клиентам, пока не настроен и не подключён канал. - Лимит, **50 проектов** на пользователя. Бесплатный стартовый баланс даётся на **первый** проект (при регистрации по реферальной ссылке: на первые 3); дальше проект создаётся с нулевым балансом, который нужно пополнить. - Поле «Сфера бизнеса»: метаданные проекта; промпт при создании не заполняется (system_prompt намеренно edit-only, OB-D-C08). - После создания это редирект на `/projects/{id}/settings?tab=bot`. --- ## Простыми словами Создать проект это как завести отдельную «папку» под одного бота для одного бизнеса. Ты вписываешь, как он называется и в какой ты сфере. Сфера это пометка для учёта: она ничего не включает и текст за тебя не пишет. Как бот должен разговаривать, ты опишешь сам на следующем шаге, обычными словами. После этого тебя сразу ведут настраивать бота. Пока ты его не настроил и не подключил WhatsApp, он «черновик» и клиентам не отвечает. --- **Дальше:** → [Системный промпт](./11-system-prompt.md) **Связано:** [Быстрый старт](../00-start/02-quickstart.md) · [Карта кабинета](../00-start/03-cabinet-map.md) --- ## Системный промпт (характер бота) URL: https://dosai.pro/docs/guide/01-bot/11-system-prompt [Документация](../README.md) › [Проект и бот](../01-bot) › Системный промпт # Системный промпт (характер бота) > Самая важная настройка: текст, который задаёт, **как** бот общается и по каким правилам. От него зависит 80% качества бота. ⏱ 10 мин · 👤 для владельца · 🟢 live ![Редактор системного промпта: роль, задачи и тон бота, справа счётчик символов и кнопка «Сохранить»](/docs-guide-img/01-bot/system-prompt.png) > **За 30 секунд:** > - Промпт это инструкция боту, как новому сотруднику: тон, что предлагать, что запрещено, какая цель. > - Пиши **правила и поведение** в промпт; **факты и прайс** в [Базу знаний](../03-tools/31-knowledge-base.md); **действия** в [Функции](../03-tools/30-functions.md). > - Есть история версий промпта, оценка стоимости и токенов. > - Любую правку сразу проверяй в [Тест-чате](./14-test-chat.md). --- ## Зачем это нужно Бот не знает твой бизнес и не имеет «характера» по умолчанию. Системный промпт это то, что превращает абстрактный ИИ в **твоего администратора**: вежливого или дружелюбного, продающего или консультирующего, с твоими правилами и запретами. Плохой бот почти всегда = неполный промпт, а не «глупый ИИ» (см. [Как бот думает](../00-start/01-how-bot-thinks.md)). ## Где это настраивается Меню проекта → **«Бот»** (вкладка `settings?tab=bot`). Здесь несколько полей: | Поле | Что задаёт | Лимит | |---|---|---| | **Системный промпт** | Главная инструкция: характер, правила, цель | до 100 000 символов | | **Информация о компании** | Доп. контекст о бизнесе | до 40 000 | | **Статус бота** | Включён/выключен (рубильник) | - | | **Воронка продаж** | Вести ли лида по стадиям и статусам | вкл/выкл | | **Итоговый промпт** | Предпросмотр того, что реально уйдёт модели | только чтение | 💡 Поля **сохраняются автоматически** при правке (через ~1 секунду). Есть **история версий**: можно откатиться к прошлой формулировке. ## Как написать хороший промпт Думай как про инструктаж нового администратора. Структура, которая работает: 1. **Кто ты.** «Ты: администратор стоматологии "Смайл" в Астане». 2. **Тон.** «Общайся вежливо на "вы", коротко, без канцелярита. Эмодзи: редко». 3. **Что делаешь.** «Отвечай на вопросы об услугах и ценах, помогай записаться». 4. **Цель.** «Главная задача, записать клиента: узнай услугу, предложи время, возьми имя и телефон». 5. **Правила и запреты.** «Не ставь диагнозы. Не обещай скидок без согласования. Если не знаешь, предложи перезвонить». 6. **Что делать при неясности.** «Если клиент пишет не по теме, мягко верни к записи». 💬 **Приветствие пишется здесь же, в промпте.** Отдельного поля «Приветственное сообщение» у проекта больше нет (убрано 2026-08-06): один и тот же текст в двух местах разъезжался, а поле к тому же намекало на автоотправку, которой никогда не было. Хочешь, чтобы бот здоровался определённым образом, скажи это строкой промпта: «Первым сообщением поздоровайся и представься: "Здравствуйте! Это Айнур из центра Профи"». У проектов, где поле было заполнено, текст уже перенесён в начало промпта. 📌 **Пример мини-промпта (барбершоп):** > Ты это администратор барбершопа BroozMan. Общайся дружелюбно на «ты», коротко. Помогай записаться к мастеру: узнай услугу (стрижка/борода/комплекс), предложи свободное время, возьми имя и телефон. Цены бери из базы знаний, не выдумывай. Если клиент сомневается, предложи показать работы. Не груби, не спорь. ⚠️ **Не пихай в промпт большие списки фактов** (весь прайс на 80 позиций, расписание на месяц). Для этого есть [База знаний](../03-tools/31-knowledge-base.md): она дешевле и бот не путает цифры. Промпт = поведение, база знаний = факты. 📌 Не уверен, что в промпт, что в «Информацию о компании», а что в базу знаний? Цельный разбор: в статье [Загрузить знания о бизнесе в бота](./16-feed-knowledge.md). ## Воронка продаж: статусы и стадии Если включить **«Воронку продаж»**, бот по ходу разговора сам определяет: - **Статус лида**, насколько клиент «горячий»: потенциальный → квалифицирован → горячий → конвертирован (или потерян). Когда статус становится «квалифицирован/горячий/резерв» **и** есть имя+телефон, автоматически создаётся [лид](../04-crm/41-leads.md). - **Стадию диалога**, этап разговора: приветствие → выяснение → презентация → возражения → закрытие → готово. Тебе не нужно это программировать, бот ставит сам. Можно подсказать ему в промпте: *«Когда клиент согласился записаться, считай его квалифицированным»*. Технические детали формата: в статье [JSON-ответ бота](./12-json-response.md). 💡 Если воронка не нужна (например, бот только консультирует), выключи её, чтобы не усложнять. ## Проверь, что работает После правки промпта **обязательно** иди в [Тест-чат](./14-test-chat.md) и прогони реальные вопросы. Промпт это не «написал и забыл», а «написал → проверил → подправил», пока бот не отвечает как надо. ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Бот сухой/формальный | Не задан тон | Добавь «общайся дружелюбно/на ты», примеры фраз | | Бот выдумывает цены | Цен нет в базе знаний, есть только в промпте размыто | Перенеси прайс в [Базу знаний](../03-tools/31-knowledge-base.md) | | Бот не ведёт к записи | Не задана цель | Пропиши «главная задача, записать: узнай X, возьми телефон» | | Бот делает запрещённое | Нет явных запретов | Добавь раздел «Нельзя: …» | | Не вижу вкладку «Бот» | Роль ниже **admin** | Промпт правит только admin/owner → [Роли](../07-team/70-roles.md) | ## Вопросы, которые обычно возникают **Насколько длинным должен быть промпт?** Столько, сколько нужно для ясных правил. Обычно 1-3 экрана. Длиннее ≠ лучше: чёткость важнее объёма. Большие факты: в базу знаний. **Можно откатить, если испортил?** Да, есть история версий: вернёшь прошлую формулировку. **Промпт виден клиенту?** Нет. Клиент видит только ответы бота. Промпт: внутренняя инструкция. --- ## Под капотом - Промпт хранится в проекте; правки автосейвятся (debounce ~1.2 c для промпта, ~900 мс для коротких полей). История версий: локальная (последние 5) + серверная. - «Итоговый промпт» = системный промпт + подмешанные блоки (инфо о компании, инструкции воронки/стадий, доступные функции). Именно он уходит модели. - Воронка (`funnel_enabled`) включает в ответе модели поля `lead_status` (7 значений) и `stage` (6 значений, без отката назад). Создание лида: авто при переходе в `qualified/hot/reserve` + наличии имени и телефона. Полный формат, статья [JSON-ответ бота](./12-json-response.md). - «Статус бота», kill-switch: выключение требует подтверждения и глушит ответы во всех каналах. - Тонкие настройки (расписание, буферизация, расщепление ответов, распознавание медиа, пауза на оператора, антиспам): в раскрывающемся блоке **«Расширенные настройки»** внутри вкладки **«Бот»** (отдельной вкладки «Продвинутое» больше нет). --- ## Простыми словами Системный промпт это просто текст, которым ты объясняешь боту, как себя вести, как разговаривать, что предлагать, чего нельзя и к чему вести клиента. Пиши его как инструкцию новому сотруднику в первый день. Главное правило: «как общаться» в промпт, а «сколько стоит и что у нас есть» в отдельную Базу знаний, чтобы бот не путал цифры. Написал промпт: сразу проверь бота в тестовом чате и поправь, если где-то не так. Это нормально подкручивать несколько раз: так и получается хороший бот. --- **Дальше:** → [Тестовый чат](./14-test-chat.md) **Связано:** [Как бот думает](../00-start/01-how-bot-thinks.md) · [База знаний](../03-tools/31-knowledge-base.md) · [Функции](../03-tools/30-functions.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## JSON-ответ бота (статусы, стадии, флаги) URL: https://dosai.pro/docs/guide/01-bot/12-json-response [Документация](../README.md) › [Проект и бот](../01-bot) › JSON-ответ бота # JSON-ответ бота (статусы, стадии, флаги) > `[для продвинутых]` Бот отвечает **структурированным JSON**, а не голым текстом: текст ответа + что он понял про клиента (имя, телефон, стадия, статус лида). Эта статья, что внутри и зачем. ⏱ 8 мин · 👤 для разработчика и любопытного владельца · 🟢 live > **За 30 секунд:** > - Бот возвращает **JSON**, не «голый текст»: поле `answer` (ответ) + метаданные диалога. > - Из JSON платформа достаёт: **имя/телефон/email** клиента, **стадию воронки**, **статус лида**, нужно ли **продолжать диалог**. > - **Никакого стриминга**: ответ приходит целиком; «эффект печатания» делается разбивкой на части на стороне клиента. > - Удалённые поля (`selected_service`, `services`) бот иногда всё ещё шлёт, платформа их молча выкидывает. --- ## Зачем боту JSON, а не текст Если бы бот возвращал просто текст, платформа не знала бы, *что произошло* в разговоре, как зовут клиента, на каком он этапе, стоит ли заводить лида. Поэтому модель отвечает **структурой**: текст для клиента **плюс** «понятое» про диалог. Это и позволяет автоматически заполнять [карточку лида](./../04-crm/41-leads.md), двигать [стадию воронки](../04-crm/42-stages.md), решать про [дожимы](../03-tools/33-drip.md). --- ## Поля ответа Ответ проверяется по схеме (`ai-response-schema.ts`). Основные поля: | Поле | Тип | Что значит | |---|---|---| | `answer` | строка (обязательно) | основной текст ответа клиенту | | `message_parts` | массив строк | ответ, разбитый на части (эффект печатания) | | `client_name` | строка | имя клиента, если бот его узнал | | `phone` | строка | телефон, если назвали | | `email` | строка | email, если назвали | | `stage` | строка | [стадия воронки](../04-crm/42-stages.md) (`greeting`…`done`) | | `lead_status` | строка | [статус лида](./../04-crm/41-leads.md) | | `summary` | строка | краткое резюме разговора для карточки лида | | `full_data` | объект | произвольные собранные поля (кастомные данные) | | `deal_value` | число или строка | сумма сделки, названную клиентом в разговоре («полтора миллиона» тоже понимается). Пишется в карточку лида, только вверх: случайно занизить сумму бот не может | | `deal_currency` | `kzt` / `usd` | валюта суммы. Если бот её не назвал, определяется по маркеру в самом значении (`$`, `usd`, «долл»), иначе тенге | | `triggered_events` | массив строк | какие события/функции инициировать (до 50) | | `buttons` | массив | кнопки под ответом (только Telegram, до 8 после обрезки; в WhatsApp деградируют в текст) | > 📌 `stage` и `lead_status`, **обычные строки**, а не жёсткий список, потому что проект может задать свой набор стадий/статусов. Платформа проверяет значение по разрешённому набору проекта; если значение «чужое», пишет предупреждение и **оставляет старое**, а не ломает диалог. Если воронка у проекта выключена, `stage`/`lead_status` из ответа игнорируются. > 🛑 **Бот НЕ останавливает диалог сам.** Раньше бот мог сам решить «разговор окончен» и уйти на паузу (поля `continue_to_talk`/`stage=done`): это убрали, потому что модель делала это преждевременно (замолкала прямо после записи, игнорируя следующий вопрос клиента). Теперь диалог завершается **только явной функцией**: [«Остановить диалог»](../03-tools/30-functions.md) или любой функцией с галочкой «Завершать диалог после выполнения». Так бот всегда дообщается, пока вы сами (или функция) его не остановите. --- ## Разбивка на части (эффект печатания) Бот может прислать `message_parts`, несколько коротких сообщений вместо одного длинного. Платформа отправляет их **по очереди с паузой** между ними (по умолчанию ~2 сек), создавая ощущение «человек печатает». > ⚠️ **Это НЕ стриминг.** Ответ модели приходит **целиком и сразу**; «постепенность» это клиентская пауза (`setTimeout`) между уже готовыми частями. Стриминг в платформе не используется (он ломал бы подсчёт токенов и возвраты). Управление разбивкой: в [продвинутых настройках](./15-advanced-settings.md) (`split_*`). --- ## Игнорируемые поля Модель по привычке иногда возвращает `selected_service` / `services`: это поля **удалённой** фичи «Услуги» (убрана 2026-04-22). Схема их **принимает и молча отбрасывает**, чтобы старый «мусор» от модели не ломал разбор ответа. Это не ошибка. --- ## Простыми словами Когда бот отвечает, он отдаёт не фразу, а небольшую «анкету»: вот мой ответ клиенту, а вот что я про него понял, как зовут, какой телефон, на каком мы этапе разговора, считать ли его горячим лидом. Платформа читает эту анкету и сама заполняет карточку клиента, двигает его по воронке, решает, нужно ли потом напомнить о себе. Тебе как владельцу в это лезть не нужно, всё работает само. Знать про это полезно в одном случае, если хочешь, чтобы бот точнее определял стадии и статусы под твой бизнес, опиши правила в [промпте](./11-system-prompt.md), и он будет аккуратнее заполнять эту «анкету». --- **Дальше:** → [Выбор AI-модели](./13-model.md) **Связано:** [Системный промпт](./11-system-prompt.md) · [Стадии воронки](../04-crm/42-stages.md) · [Лиды](../04-crm/41-leads.md) · [Продвинутые настройки](./15-advanced-settings.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Выбор AI-модели URL: https://dosai.pro/docs/guide/01-bot/13-model [Документация](../README.md) › [Проект и бот](../01-bot) › Выбор AI-модели # Выбор AI-модели > Бот работает на одной из моделей OpenAI. По умолчанию: быстрая и недорогая, её хватает 90% бизнесов. Можно поставить «умнее», но каждое сообщение будет дороже. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Модель выбирается **на проект** (не на каждый чат). > - По умолчанию, **`gpt-5.4-mini`**: быстрая, недорогая, для большинства задач достаточно. > - Есть модели **мощнее** (лучше рассуждают на сложных диалогах) и **легче** (ещё дешевле/быстрее). > - **Чем мощнее модель, тем дороже каждое сообщение** (быстрее тратится баланс). См. [Сколько стоит сообщение](../06-money/61-message-cost.md). ![Настройки бота: выбор AI-модели, влияющей на качество и стоимость ответа](/docs-guide-img/01-bot/advanced-settings.png) --- ## Как это работает У проекта есть настройка модели (`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` справляется не хуже, а баланс тратит в разы медленнее. Бери мощную, только если видишь, что бот реально «тупит» на твоих диалогах в [тест-чате](./14-test-chat.md). > ⚠️ **Стоимость.** Более мощная модель = больше списание за каждое сообщение. На потоке (сотни диалогов) разница в балансе ощутима. Прежде чем переключать весь проект, прогони сложные кейсы в [тест-чате](./14-test-chat.md) и реши, стоит ли качество денег. --- ## Модель для дожимов отдельно Для [дожимов](../03-tools/33-drip.md) можно задать **свою** модель (обычно дешевле основной: дожимы проще). Если не задана, наследуется модель проекта. --- ## Простыми словами «Модель» это мозг бота. Их несколько: попроще-побыстрее-подешевле и поумнее-помедленнее-подороже. По умолчанию стоит средне-лёгкая (`gpt-5.4-mini`), и для большинства задач: записать клиента, ответить по прайсу, снять простое возражение, её за глаза. Включать самую мощную «чтобы наверняка» не надо: она будет отвечать так же, но баланс съест заметно быстрее. Менять модель есть смысл, только если ты в [тест-чате](./14-test-chat.md) видишь, что бот реально не вывозит сложные разговоры. Тогда поставь мощнее, но имей в виду, что каждое сообщение станет дороже. --- **Дальше:** → [Тестовый чат](./14-test-chat.md) **Связано:** [Системный промпт](./11-system-prompt.md) · [Продвинутые настройки](./15-advanced-settings.md) · [Сколько стоит сообщение](../06-money/61-message-cost.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Тестовый чат URL: https://dosai.pro/docs/guide/01-bot/14-test-chat [Документация](../README.md) › [Проект и бот](../01-bot) › Тестовый чат # Тестовый чат > Песочница, где ты говоришь с ботом сам: проверить промпт, функции и знания до того, как он попадёт к живым клиентам. ⏱ 7 мин · 👤 для владельца и оператора · 🟢 live ![Тест-чат: слева настройки бота, в центре переписка с ответом бота и его стоимостью, справа панель «Что понял бот»: стадия, лид, действия](/docs-guide-img/01-bot/test-chat.png) > **За 30 секунд:** > - Тест-чат = безопасная репетиция: бот думает как в бою, но без реальных клиентов. > - Справа панель **«Что понял бот»**: стадия, статус лида, что узнал о клиенте, какие функции вызвал, токены. > - Меню **«Инструменты теста»**: сценарии, загрузить переписку, показать промпт, экспорт. > - Рубильник ИИ отсюда **убран**: здесь только индикатор; включается бот в Настройках. > - Проверяй тут **каждое** изменение промпта/функций/знаний. --- ## Зачем это нужно Менять промпт и сразу выпускать в WhatsApp, рискованно: ошибку увидят живые клиенты. Тест-чат даёт «прогнать» бота на реальных вопросах в безопасной среде. Это тот же самый «мозг», что и в бою (см. [5 точек входа](../00-start/01-how-bot-thinks.md)), что работает здесь, так же сработает у клиента. ## Где это Меню проекта → **«Тестовый чат»**. Нужна роль **editor** и выше. ## Что ты видишь **Слева, обычный чат:** пишешь боту как клиент, он отвечает. **Справа: панель «Что понял бот»** (главная ценность теста). Показывает «изнанку» каждого ответа: | Секция | Что показывает | |---|---| | **Этап** | На какой стадии диалога бот (приветствие → … → готово) | | **Лид** | Какой статус лида проставил | | **Что узнал о клиенте** | Собранные данные (имя, телефон…) с индикатором заполненности «3/5» | | **Действия бота** | Какие [функции](../03-tools/30-functions.md) вызвал, с аргументами и результатом | | **Распознано из медиа** | Расшифровка голосовых, текст с картинок/PDF | | **Технические детали** (под спойлером) | Токены, стоимость запроса, сырой JSON-ответ | | **Проверить дожим** | Симулировать, что бот отправит как [напоминание](../03-tools/33-drip.md) | **Сверху, шапка:** модель, индикатор **«ИИ включён / выключен»** (только показывает; управление: в Настройках) и меню **«Инструменты теста»**. ## Инструменты теста В меню **«Инструменты теста»**: - **Сценарии**: готовые наборы сообщений для типовых проверок; - **Загрузить переписку**: подставить реальный диалог, чтобы проверить на нём; - **Показать промпт**: увидеть итоговый промпт, который уходит модели; - **Экспорт диалога**: выгрузить тестовую переписку. Кнопка **«Очистить»** сбрасывает тестовый диалог. ## Как тестировать правильно 1. Внёс правку в [промпт](./11-system-prompt.md) / [функцию](../03-tools/30-functions.md) / [базу знаний](../03-tools/31-knowledge-base.md); 2. Открой тест-чат, прогони **реальные** вопросы клиентов: - типичный («сколько стоит?»), - целевой («запишите меня на завтра»), - каверзный («а если опоздаю?», «дорого»), - не по теме («а вы где находитесь?»); 3. Смотри панель справа: правильная ли стадия, вызвал ли нужную функцию, что собрал; 4. Не так → правь → повторяй, пока не понравится. 💡 **Совет.** Если бот должен вызывать функцию (записать, посчитать), проверь в «Действиях бота», что вызов был, а не только слово «записал» в ответе. **Пометка «в WhatsApp сработает».** Часть функций работает с карточкой конкретного клиента: проставить теги, поставить напоминания на паузу, остановить диалог, отправить макет из медиатеки, выставить счёт. В тест-чате такого диалога нет (ты пишешь сам себе), поэтому записывать некуда, и вызов помечается серым **«в WhatsApp сработает»**. Это не ошибка: сам вызов бот сделал правильно, а в подключённом канале функция отработает по-настоящему. Красная пометка **«ошибка»** означает настоящий сбой, её нужно разбирать. ⚠️ **Важно: тест-чат, песочница, а не показатель готовности к бою.** Здесь бот отвечает **даже при нулевом балансе и выключенном для клиентов состоянии**. Поэтому: - если вверху «ИИ выключен» в тест-чате бот может отвечать, но **реальные клиенты в WhatsApp ответа не получат**; - если баланс на нуле в тесте бот отвечает, но **в бою клиентам не ответит**. То есть «в тесте работает» ≠ «в бою работает». Перед запуском проверь, что бот **включён** и есть [баланс](../06-money/60-billing.md). ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | В тесте отвечает, клиентам, нет | Бот выключен или нулевой [баланс](../06-money/60-billing.md) | Включи бота в Настройках, пополни баланс | | Бот «говорит», что записал, но записи нет | Вызвал не функцию, а просто текст | Проверь «Действия бота»; поправь описание [функции](../03-tools/30-functions.md) | | Не вижу тест-чат | Роль **viewer** | Нужна роль **editor+** → [Роли](../07-team/70-roles.md) | | Хочу включить бота прямо тут | Рубильник перенесён | Управление ботом: в Настройках (`Бот`) | --- ## Под капотом - Тест-чат работает в sandbox-режиме: читает баланс, но **не блокирует** ответы по нему (предупреждения о нуле/выключенном, только для прод-контекста). Стоимость считается для аналитики/логов, не списывается как в бою «жёстко». - Панель «Что понял бот» рендерит реальный структурированный ответ модели: стадия, lead_status, собранные переменные (с % заполнения), tool-calls (имя/аргументы/результат), RAG-источники с % похожести, токены и стоимость (USD + ₸), сырой JSON. - Рубильник ИИ из тест-чата убран осознанно (редизайн 2026-06-05): здесь индикатор + ссылка, управление, на `settings?tab=bot` (единый источник). - «Проверить дожим» дёргает превью следующего [follow-up](../03-tools/33-drip.md)-сообщения. --- ## Простыми словами Тестовый чат это как поговорить с ботом самому, прежде чем пускать его к клиентам. Ты пишешь ему как покупатель, а он отвечает, и справа ты видишь «что у него в голове»: на каком он этапе разговора, что понял про клиента, какие действия сделал. Очень удобно: поменял что-то в боте, тут же проверил, не так, поправил. Только помни одну вещь: в тесте бот отвечает всегда, даже если для реальных клиентов он выключен или баланс пустой. Поэтому перед запуском убедись, что бот включён и на счету есть деньги: иначе в тесте он милый, а живым клиентам молчит. --- **Дальше:** → [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) **Связано:** [Системный промпт](./11-system-prompt.md) · [Функции](../03-tools/30-functions.md) · [База знаний](../03-tools/31-knowledge-base.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Продвинутые настройки бота URL: https://dosai.pro/docs/guide/01-bot/15-advanced-settings [Документация](../README.md) › [Проект и бот](../01-bot) › Продвинутые настройки # Продвинутые настройки бота > Помимо промпта, поведение бота тонко настраивается, как он разбивает ответы, ждёт ли, пока клиент допишет, в какие часы работает, как реагирует на оператора, что делает со спамом. Эта статья: карта всех рычагов. ⏱ 11 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Бот «печатает по частям», ждёт, пока клиент допишет, может работать **по расписанию**, уступать оператору, защищаться от спама. > - Всё это, настройки проекта (`agent_config`), у каждой есть разумное значение по умолчанию. > - Трогай по необходимости: дефолты подобраны так, чтобы работало «из коробки». > 📍 **Где найти.** Все эти настройки: в проекте → вкладка **«Бот»** → раскрывающийся блок **«Расширенные настройки»** (вместе с выбором модели ИИ и лимитами истории). Отдельной вкладки «Продвинутое» больше нет. ![Расширенные настройки бота: часы работы, буферизация, антиспам, контроль оператора и лимиты](/docs-guide-img/01-bot/advanced-settings.png) --- ## Ответы: разбивка и темп | Настройка | По умолчанию | Что делает | |---|---|---| | `split_messages` | вкл | разбивать длинный ответ на несколько коротких сообщений | | `split_delay_seconds` | 2 сек | пауза между частями (эффект печатания) | | `split_threshold` | 300 симв. | с какой длины начинать разбивать | | `split_max_length` | 500 симв. | макс. длина одной части | | `split_max_parts` | 5 | макс. число частей | > 💡 Разбивка делает бота «живее»: клиент видит несколько коротких реплик вместо стены текста. Подробнее про механику: [JSON-ответ бота](./12-json-response.md). --- ## Буферизация: дождаться, пока клиент допишет Клиенты часто пишут мысль несколькими сообщениями подряд («Здравствуйте» / «хочу записаться» / «на завтра»). Чтобы бот не отвечал на каждое по отдельности, есть **буфер**: | Настройка | По умолчанию | Что делает | |---|---|---| | `buffer_delay_seconds` | 1 сек | сколько ждать новых сообщений перед ответом | | `buffer_delay_media_seconds` | 5 сек | доп. ожидание для медиа (фото/голос) | Бот ждёт паузы в наборе и отвечает на всё разом, как живой человек. --- ## Кому отвечает бот Одна настройка (`engage_mode`) с тремя взаимоисключающими вариантами. Живёт в **Настройки бота → Расширенные настройки → Оператор**. | Вариант | Кому бот отвечает | |---|---| | **Только новым обращениям** | Тем, кто написал впервые после подключения номера. Контакты, которые были в телефоне раньше, остаются за вами: их сообщения видны в «Диалогах», но бот в них не пишет | | **Всем, кто напишет** (по умолчанию у проектов, созданных с 9 августа 2026) | Плюс клиентам, которые были в телефоне до подключения. Диалоги, где бот уже замолчал, он подхватывает сам, когда клиент пишет снова | | **Только лидам с рекламы** | Только тем, кто пришёл с рекламы «Написать в WhatsApp» (Click-to-WhatsApp). Для номера, где параллельно работают живые менеджеры: обычные и личные чаты бот не трогает, показывает их вам без ответа | Новые проекты создаются сразу в режиме **«Всем, кто напишет»**: подключают обычно рабочий номер, по которому люди уже пишут, и в строгом режиме почти весь этот поток шёл бы мимо бота. У проектов, созданных до 9 августа 2026, режим остался прежним, менять его за владельца мы не стали. Что важно знать про режим **«Всем, кто напишет»**: - переключение ничего не рассылает: бот подключается к старому диалогу только когда клиент сам напишет следующее сообщение; - бот не отличает давнего клиента от личного контакта. Если номер рабочий и личный одновременно, он ответит и знакомым; - чаты, где вы отвечаете сами, бот по-прежнему уступает вам (пауза при ответе оператора), а диалоги, из которых бота убрали руками или которые закрыты передачей менеджеру, режим не будит; - расход баланса вырастет: старая база это дополнительные диалоги. **На сообщения, отправленные до подключения номера, бот не отвечает ни в одном режиме.** Иначе после каждого сканирования QR он разослал бы ответы на старую переписку, а WhatsApp блокирует номера именно за такой всплеск. ### Настройки рекламного фильтра | Настройка | По умолчанию | Что делает | |---|---|---| | `engage_mode` | `existing_too` (всем, кто напишет) у проектов с 9 августа 2026, `all` у созданных раньше | `all` = только новые обращения; `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` | выкл | не паузить на **первом** сообщении оператора | | `exception_phrases` | - | фразы-исключения, после которых пауза **не** ставится | | `auto_resume_enabled` + `auto_resume_*` | выкл | авто-возврат ИИ через N дней/часов/минут оператора | | `resume_message` | «Добрый день!» | что бот пишет при авто-возврате | Подробно про перехват, [Диалоги](../04-crm/40-dialogs.md). --- ## Расписание работы (рабочие часы) | Настройка | По умолчанию | Что делает | |---|---|---| | `schedule_enabled` | выкл | включить рабочие часы | | `schedule` | Пн-Пт 09:00-20:00, Сб 09:00-18:00, Вс выкл | график по дням | | `timezone` | Asia/Almaty | пояс для расписания | | `offline_message` | дежурный текст | автоответ вне рабочих часов | Вне рабочих часов бот **не тратит токены**: сохраняет сообщение клиента (оператор увидит его в CRM) и **один раз** на диалог шлёт автоответ «сейчас нерабочее время». --- ## Память диалога | Настройка | По умолчанию | Что делает | |---|---|---| | `history_message_limit` | 30 | сколько последних сообщений бот «помнит» | | `history_time_limit` | 2 недели | за какой период берётся история | --- ## Защита от спама | Настройка | По умолчанию | Что делает | |---|---|---| | `spam_protection_enabled` | выкл | включить лимиты | | `spam_message_limit` / `spam_duration_seconds` | 5 / 60 сек | сколько сообщений за окно допустимо | | `spam_daily_limit` | 100 | макс. сообщений в день от одного | | `spam_response_message` | «Пожалуйста, подождите…» | ответ при срабатывании | --- ## Распознавание медиа | Настройка | По умолчанию | Что делает | |---|---|---| | `recognize_audio` | вкл | расшифровывать голосовые | | `recognize_images` | вкл | «видеть» картинки | | `recognize_pdf` | вкл | читать PDF | | `recognize_documents` | вкл | читать документы (DOCX и т.п.) | > ⚠️ Распознавание голоса и картинок **тратит баланс** (это отдельная обработка). Если не нужно, выключи. См. [Сколько стоит сообщение](../06-money/61-message-cost.md). --- ## Запись на приём (календарь) Настройки записи живут **не здесь**, а внутри самой функции записи: открой [Функции](../03-tools/30-functions.md) → функцию записи → её конфиг. Там задаются длительность приёма (по умолчанию 60 мин), горизонт показа свободных окошек (7 дней), рабочие часы и дни записи, перерыв между приёмами и минимальное предупреждение (60 мин). > ⚠️ Раньше эти же параметры дублировались настройками проекта `calendar_*`. Их убрали 2026-06-13, потому что редактор писал в одно место, а бот читал другое, и половина настроек молча не работала. Сейчас источник один, конфиг функции. Если встретишь `calendar_*` в старых заметках, это уже мёртвые ключи. Подробно: [Запись на приём](../03-tools/36-booking.md) и [Google Календарь](../05-integrations/52-google-calendar.md). --- ## Простыми словами Думай об этих настройках как о «характере» бота помимо промпта. Можно сделать так, чтобы он отвечал короткими репликами, как в живом чате, а не стеной текста. Можно научить его не торопиться с ответом, пока клиент дописывает мысль в несколько сообщений. Можно задать рабочие часы, и ночью он будет вежливо отвечать «мы на связи с утра», не тратя при этом деньги. Можно настроить, чтобы он уступал, как только в чат заходишь ты, и сам возвращался к работе через заданное время. Хорошая новость: всё это уже настроено по уму «из коробки». Лезть туда стоит, только когда хочешь что-то конкретное, например, включить рабочие часы или защиту от спама. Остальное спокойно оставляй как есть. --- **Дальше:** → [Обзор каналов](../02-channels/20-channels-overview.md) **Связано:** [Системный промпт](./11-system-prompt.md) · [Выбор модели](./13-model.md) · [Дожимы](../03-tools/33-drip.md) · [Диалоги](../04-crm/40-dialogs.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Загрузить знания о бизнесе в бота (что куда) URL: https://dosai.pro/docs/guide/01-bot/16-feed-knowledge [Документация](../README.md) › [Проект и бот](../01-bot) › Загрузить знания о бизнесе # Загрузить знания о бизнесе в бота (что куда) > После этой статьи ты разложишь всю свою документацию, прайсы, регламенты, FAQ, скрипты по трём «карманам» бота так, чтобы он отвечал точно и не выдумывал. ⏱ 9 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - У бота **три места для знаний**, и у каждого своя работа: **промпт** (как себя вести + всегда-нужное продающее), **«Информация о компании»** (факты о тебе), **База знаний** (большие и меняющиеся справочники). > - Главная ошибка новичка: свалить **всё** в одно место. От этого бот тупеет: либо «деревянный», либо выдумывает, либо не находит нужное. > - Правило в одну строку: **поведение → промпт, факты о компании → описание, толстые справочники → база знаний.** > - Ничего не нужно «вызывать», бот сам подмешивает всё это в каждый ответ (база знаний по релевантности, остальное: всегда). --- ## Зачем это нужно Бот знает ровно то, что ты ему дал, и **где** ты это дал. Один и тот же факт, положенный не в тот «карман», либо раздувает стоимость каждого ответа, либо вообще не доходит до бота. Поэтому «закинуть документацию в ИИ» это не «вставить всё в одно поле», а **разложить её правильно**. Сделаешь это один раз грамотно, бот сразу отвечает как живой менеджер, который выучил твой бизнес. ## Три «кармана» бота, и что в каждый класть | Карман | Что туда | Когда применяется | Объём | |---|---|---|---| | 🧠 [**Системный промпт**](./11-system-prompt.md) | **Поведение** (тон, характер, правила) + **всегда-нужное продающее**: как презентовать, как отрабатывать возражения, фирменные фишки, спец-кейсы | В **каждом** ответе, целиком | Компактно | | 🏢 **«Информация о компании»** (поле в настройках) | **Факты о тебе**: кто вы, перечень услуг, адреса, часы работы, условия, контакты, гарантии | В **каждом** ответе, целиком | До 40 000 символов | | 📚 [**База знаний**](../03-tools/31-knowledge-base.md) (RAG) | **Большое, меняющееся, нужное изредка**: полный прайс на 100 позиций, детальные регламенты, обширный FAQ, длинные документы и PDF | Бот достаёт **только релевантный кусок** под конкретный вопрос | До 100 записей, 40 000 символов/документ | 💡 **Простое правило выбора.** Спроси себя про каждый кусок информации: > 1. Это про то, **как бот себя ведёт и продаёт**? → **промпт.** > 2. Это **факт о компании**, нужный почти в любом разговоре (услуги, адрес, часы)? → **«Информация о компании».** > 3. Это **большой справочник**, из которого в одном ответе нужна одна строка (полный прайс, регламент)? → **база знаний.** ## Шаги ### 1. Раздели свою документацию на три стопки Собери всё, что есть про бизнес: сайт, прайс в Excel, скрипты продаж, регламенты, FAQ, презентации, и мысленно разложи по трём карманам выше. Это самый важный шаг: 10 минут сортировки экономят недели «бот тупит». 📌 **Пример (барбершоп).** > - *Промпт:* «Ты это администратор барбершопа BRUTAL. Дружелюбный, на «ты», всегда предлагаешь записаться. Если клиент сомневается, расскажи про бесплатную коррекцию через 2 недели.» > - *Информация о компании:* «Барбершоп BRUTAL, Астана, пр. Достык 5. Часы: 10:00-21:00 без выходных. Услуги: мужская стрижка, борода, камуфляж седины. Мастера: Арман, Данияр.» > - *База знаний:* полный прайс на 40 позиций + детальный FAQ по уходу. ### 2. Поведение и продающие приёмы → в промпт Открой [Системный промпт](./11-system-prompt.md) и опиши **как** бот работает: характер, тон, правила, шаги продажи, отработку частых возражений. Продающий контент, который нужен **почти всегда** (короткая презентация, ответ на «дорого»), держи **прямо в промпте**: так бот выдаёт его уверенно. 🚫 **Не делай так.** Не прячь характер и презентацию в базу знаний: оттуда бот достаёт текст только если вопрос «похож», и в половине диалогов промахнётся → бот выйдет деревянным. ### 3. Факты о компании → в «Информацию о компании» В настройках проекта есть отдельное поле **«Информация о компании»** (не путай с промптом). Сюда, сухие факты: услуги, адреса, часы, условия, контакты. Платформа сама вставит это в каждый ответ отдельным блоком «О КОМПАНИИ», тебе не надо дублировать их в промпт. ⚠️ **Важно.** Не оставляй это поле пустым «потому что напишу в промпте». Поле сделано именно под факты и вмещает до **40 000 символов**: это правильный дом для них. Пустое поле → бот чаще выдумывает детали. ### 4. Толстые и меняющиеся справочники → в базу знаний Полный прайс, длинные регламенты, большой FAQ, документы и PDF: в [Базу знаний](../03-tools/31-knowledge-base.md). Бот на каждый вопрос сам находит там самые подходящие куски и подмешивает в ответ (это RAG, автоматически). Туда же, то, что **часто меняется**: обновил одну запись, и бот сразу отвечает по-новому, промпт трогать не надо. 📌 **Пример (интернет-магазин).** Каталог на 300 товаров в базу знаний. Клиент спрашивает про одну модель, бот достаёт именно её строку, а не зачитывает весь каталог. ## Проверь, что работает 1. Прогони реальные вопросы клиентов в [Тест-чате](./14-test-chat.md). В «технических деталях» ответа видно, **какие источники** бот подтянул, так проверишь, что факт дошёл. 2. Для базы знаний есть **«Тест поиска»**: вводишь вопрос → видишь, какие фрагменты бот найдёт и с каким % похожести. 3. Признак, что разложил верно: бот отвечает фактами **точно** (цены, адрес), звучит **в своём характере** и не «зачитывает простыню». ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Бот «деревянный», не продаёт | Характер/презентацию убрали в базу знаний, RAG их не всегда достаёт | Перенеси персону и всегда-нужный продающий текст в [промпт](./11-system-prompt.md) | | Бот выдумывает услуги/цены | Факты нигде не заданы или поле «Информация о компании» пустое | Заполни «Информацию о компании»; крупный прайс: в [базу знаний](../03-tools/31-knowledge-base.md) | | Ответы дорогие и медленные | Огромный прайс вставили целиком в промпт | Перенеси объём в базу знаний: бот будет брать только нужный кусок | | Факт есть, но бот его игнорирует | В промпте нет указания опираться на знания | Допиши в промпт: «цены и факты бери из базы знаний и информации о компании, не выдумывай» | ## Вопросы, которые обычно возникают **Можно всё засунуть в промпт и не морочиться?** Маленький бизнес с парой услуг: да, проживёт. Но большой прайс в промпте = дорогой и «путающийся» бот: он тащит весь текст в каждый ответ. Факты в «Информацию о компании», объём: в базу знаний. **В чём разница между «Информацией о компании» и базой знаний?** «Информация о компании» идёт в ответ **целиком и всегда** (для коротких всегда-нужных фактов). База знаний, **большая**, и бот берёт из неё **только релевантный кусок** под вопрос. Прайс на 3 услуги в описание; прайс на 100 в базу. **Я обновил прайс, где менять?** Там, куда положил. Если в базе знаний, отредактируй запись (бот сразу учтёт). Если в «Информации о компании», поправь поле. Поэтому меняющееся удобнее держать в базе знаний. --- ## Под капотом - Финальный системный промпт собирается из блоков: твой **системный промпт** + блок **«## О КОМПАНИИ»** (из поля «Информация о компании», `projects.description`, лимит ввода **40 000** символов) + подмешанные на лету **топ-5 чанков базы знаний** (суммарно до **8 000** символов, семантический поиск под текущее сообщение). - Промпт и «Информация о компании» идут в **каждый** запрос целиком, поэтому их размер прямо влияет на стоимость ответа. База знаний платится отдельно (≈1¢ за поиск) и тащит только релевантное. - «Информация о компании» ограничена **40 000** символов на ввод; если фактуры больше, выноси объём в базу знаний (до 100 записей × 40 000 символов на документ). - Персона/продающие приёмы держим **inline в промпте**, а не в RAG: RAG возвращает контент только при семантическом совпадении с сообщением, а характер нужен в каждом ответе. --- ## Простыми словами Представь, что нанял нового продавца. Есть три способа его обучить. Первое, объяснить, **как себя вести**: будь вежлив, всегда предлагай записаться, на «дорого» отвечай так-то. Это «системный промпт». Второе, дать **визитку компании**: кто мы, где, во сколько работаем, что продаём. Это «Информация о компании». Третье, положить на стол **толстую папку с прайсом и регламентами**, в которую он заглядывает, когда нужен конкретный пункт. Это «база знаний». Если всё свалить в папку, продавец будет рыться в ней даже на «привет» и звучать как робот. Если папку не дать, начнёт выдумывать цены. Разложишь правильно, и бот с первого дня отвечает как менеджер, который выучил твой бизнес. --- **Дальше:** → [База знаний (RAG)](../03-tools/31-knowledge-base.md) **Связано:** [Системный промпт](./11-system-prompt.md) · [Как бот думает](../00-start/01-how-bot-thinks.md) · [Тестовый чат](./14-test-chat.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Обзор каналов URL: https://dosai.pro/docs/guide/02-channels/20-channels-overview [Документация](../README.md) › [Каналы](../02-channels) › Обзор каналов # Обзор каналов > Канал это мессенджер, через который клиенты пишут боту. Один и тот же бот может отвечать **и в WhatsApp, и в Telegram одновременно**, мозг у него общий, меняется только «дверь». ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Платформа поддерживает **2 рабочих канала**: **WhatsApp** (по QR, привязанное устройство) и **Telegram** (свой бот). Плюс **тест-чат** это песочница, не настоящий клиентский канал. > - **Один проект = оба канала разом.** Можно подключить только WhatsApp, только Telegram или сразу два. > - **Мозг бота один на все каналы**: промпт, база знаний, функции, дожимы работают одинаково везде. > - **WhatsApp платный** (подписка проекта + пробный период), **Telegram бесплатен в подключении**: за подключение Telegram-канала отдельно платить не нужно. ![Раздел «Каналы»: подключение WhatsApp и Telegram к одному боту](/docs-guide-img/02-channels/channels.png) --- ## Какие каналы есть В коде платформы канал диалога это одно из трёх значений (`apps/web/src/types/integration.ts`): `whatsapp`, `telegram`, `test_chat`. | Канал | Что это | Кому видно | Платный? | |---|---|---|---| | **WhatsApp** | Личный/рабочий WhatsApp по QR (привязанное устройство, самохостинг) | Реальным клиентам | Да: подписка проекта (есть бесплатные 14 дней, диалоги не ограничены) | | **Telegram** | Свой бот, созданный в @BotFather | Реальным клиентам | Подключение бесплатно; платишь только за сообщения с баланса | | **Тест-чат** | Песочница внутри кабинета | Только тебе | Не списывает с баланса | → Подробно: [Подключить WhatsApp](./21-whatsapp-wazzup.md) · [Подключить Telegram](./22-telegram.md) · [Тест-чат](../01-bot/14-test-chat.md) > 💡 **Тест-чат, не клиентский канал.** Это «репетиция»: бот думает точно как в бою, но без реальных людей и списаний. Используй его, чтобы проверить бота **перед** подключением WhatsApp/Telegram. См. [Тестовый чат](../01-bot/14-test-chat.md). --- ## Один бот: два канала сразу Можно подключить к проекту **и WhatsApp, и Telegram одновременно**. Бот будет отвечать в обоих, используя один и тот же промпт, базу знаний и функции. Как платформа их различает: - у каждого диалога есть поле `channel` (`whatsapp` / `telegram` / `test_chat`); - идентификатор чата начинается с префикса: **`wz_…`** для WhatsApp, **`tg_…`** для Telegram (`packages/@dos/workers/src/maintenance.ts`); - поле `wazzup_channel_id` заполнено только у WhatsApp-диалогов (у Telegram оно пустое: `apps/web/src/types/conversation.ts`). Для тебя это значит: в [Диалогах](../04-crm/40-dialogs.md) видно, из какого канала пришёл клиент, а лиды и аналитика собираются вместе, независимо от канала. --- ## Почему мозг общий У бота **одна «голова» на все каналы**, это и есть [5 точек входа](../00-start/01-how-bot-thinks.md), которые ведут в один и тот же AI-конвейер: 1. **тест-чат**: песочница в кабинете; 2. **WhatsApp** (вебхук gateway Baileys, `/api/webhook/baileys`): входящие из WhatsApp; 3. **Telegram** (вебхук Telegram): входящие из Telegram-бота; 4. **демо-чат**: публичное демо на лендинге; 5. **фоновые задачи** (кроны/очередь): дожимы, переотправки. Что бы ты ни поменял в промпте, базе знаний или функциях: это сразу применяется во **всех** каналах. Не нужно настраивать бота для WhatsApp и Telegram по отдельности. --- ## Чем каналы отличаются на практике | | WhatsApp | Telegram | |---|---|---| | Как подключается | QR-код (как WhatsApp Web) | токен от @BotFather | | Риск бана номера | **есть**: Meta банит «холодные» номера, нужен [антибан-чек-лист](./23-anti-ban.md) | нет: это официальный Bot API | | Стоимость подключения | подписка проекта (после триала) | бесплатно | | Что нужно от тебя | «живой» прогретый номер | создать бота в Telegram за минуту | | Медиа | голос/фото/файлы | голос/фото/файлы (до 20 МБ) | > ⚠️ **Главная разница, риск.** WhatsApp требует осторожности: неправильно подключённый номер забанят за минуты (см. [Гигиена и антибан](./23-anti-ban.md)). Telegram такого риска не несёт, там официальный бот, банить нечего. --- ## Где управлять каналами Меню проекта → **«Каналы»** (`/projects//channels`). Там обе секции, WhatsApp и Telegram с кнопками «Подключить» / «Отключить» и индикатором статуса. --- ## Простыми словами Канал это просто мессенджер, в котором сидят твои клиенты. У платформы их два: **WhatsApp** и **Telegram**. Можешь включить любой или оба сразу: бот один, а «дверей», через которые к нему заходят, может быть две. Самое удобное: настраиваешь бота **один раз**, характер, базу знаний, функции, и это работает и в WhatsApp, и в Telegram. Не надо ничего дублировать. Разница только в двух вещах. Первое, деньги: WhatsApp платный (есть бесплатные 14 дней на попробовать), Telegram подключается бесплатно. Второе и более важное, безопасность: WhatsApp легко «обжечь», если подключить новый пустой номер, его забанят как спам, поэтому там есть [чек-лист перед подключением](./23-anti-ban.md). Telegram такого не боится. Если не уверен, с чего начать, начни с Telegram (быстро и без рисков) или сразу с WhatsApp, но внимательно прочитав про антибан. --- **Дальше:** → [Подключить WhatsApp](./21-whatsapp-wazzup.md) **Связано:** [Подключить Telegram](./22-telegram.md) · [Гигиена и антибан](./23-anti-ban.md) · [Как бот думает](../00-start/01-how-bot-thinks.md) · [Биллинг](../06-money/60-billing.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) · [Канал отвалился](../09-troubleshooting/92-channel-down.md) --- ## Подключить WhatsApp (по QR) URL: https://dosai.pro/docs/guide/02-channels/21-whatsapp-wazzup [Документация](../README.md) › [Каналы](../02-channels) › Подключить WhatsApp # Подключить WhatsApp (по QR) > После этой статьи твой бот будет сам отвечать клиентам в WhatsApp: **14 дней бесплатно, без ограничения по числу диалогов**, без карты и предоплаты. ⏱ 12 мин · 👤 для владельца и оператора · 🟢 live ![Раздел «Каналы»: подключение WhatsApp по QR-коду (3 шага) и Telegram по токену от @BotFather](/docs-guide-img/02-channels/whatsapp-qr.png) > **За 30 секунд:** > - WhatsApp подключается сканированием **QR-кода**, как обычный «WhatsApp на компьютере». Платформа держит привязанное устройство сама (самохостинг), отдельный сторонний сервис не нужен. > - Нужен **«живой» рабочий номер** (на котором уже переписывались), иначе WhatsApp забанит за спам. > - Перед сканом обязательный **чек-лист из 5 галочек** (защита номера от бана). > - **Бесплатно: 14 дней, сколько угодно диалогов.** Единственный ограничитель это [баланс проекта](../06-money/60-billing.md): при регистрации мы кладём на него $5, и бот отвечает, пока эти деньги не кончатся. Дальше нужна [подписка проекта](../06-money/60-billing.md). > - Телефоном можно **продолжать пользоваться**, бот работает как привязанное устройство, не вместо тебя. --- ## Зачем это нужно WhatsApp это канал, через который твои клиенты уже пишут. Подключив его, ты отдаёшь боту входящие сообщения: он отвечает на вопросы, считает цены, собирает заявки, записывает на услуги: круглосуточно, без твоего участия. Это самый частый первый канал на платформе. Каждая входящая переписка превращается в [диалог](../04-crm/40-dialogs.md), а заинтересованный клиент: в [лида](../04-crm/41-leads.md) в твоей CRM. Ты в любой момент можешь перехватить разговор вручную (см. [Диалоги](../04-crm/40-dialogs.md)). ### Почему по QR, а не напрямую через API У WhatsApp нет «кнопки подключить бота» для обычного аккаунта. Платформа привязывается к твоему WhatsApp как ещё одно устройство, **точно так же, как WhatsApp Web на компьютере**, и держит это привязанное устройство у себя (самохостинг). Тебе ничего настраивать не нужно: ты только сканируешь QR. Главное помнить, подключается **обычный личный/рабочий WhatsApp по QR**, а не official Business API. ⚠️ **Важно с самого начала.** WhatsApp очень не любит, когда «свежий» номер вдруг начинает отвечать как привязанное устройство. Подключишь «холодный» номер, Meta забанит его за минуты (так называемый **qridle-бан**). Поэтому подключение защищено обязательным чек-листом (шаг 2). Не пропускай его, по опыту, бóльшая часть банов: именно из-за этого. ## Что понадобится - [ ] **Создан проект** → [Создание проекта](../01-bot/10-create-project.md) - [ ] **Написан промпт бота**, хотя бы черновой (иначе боту нечем отвечать) → [Системный промпт](../01-bot/11-system-prompt.md) - [ ] **Телефон с WhatsApp** на номере, который **уже использовался** для обычной переписки (не только что куплен/зарегистрирован) - [ ] Этот телефон **под рукой**: на нём надо открыть камеру для скана QR - [ ] Роль в проекте **admin** или **owner**. Роль **editor** видит страницу, но кнопку подключения нажать не сможет → [Роли и права](../07-team/70-roles.md) ### Какой номер выбрать | ✅ Подойдёт | 🚫 Не подойдёт | |---|---| | Рабочий номер компании, с которого месяцами переписывались | Купленная сегодня «симка под бота» | | Личный номер с реальной историей чатов | Номер из эмулятора / виртуальный | | Обычный WhatsApp **или** WhatsApp Business: оба ок | Номер, уже подключённый к другому сервису рассылки | 💡 **Совет.** Один номер = один проект. Если у тебя два бизнеса (две стоматологии): это два проекта и два разных номера. Подключить два WhatsApp-номера в один проект нельзя. ## Шаги ### 1. Открой раздел «Каналы» В меню проекта слева → **«Каналы»**. Подзаголовок страницы: *«Подключение WhatsApp и Telegram к боту проекта».* В блоке WhatsApp видно текущее состояние, **«Не подключён»**. Под ним кнопка **«Подключить WhatsApp»** и памятка из трёх шагов: 1. *«Подключите бесплатно»*, 14 дней без оплаты и без лимита диалогов; 2. *«Сканируйте QR»*: откройте WhatsApp → Связанные устройства → Привязать; 3. *«Готово!»*: бот начнёт отвечать клиентам автоматически. ### 2. Пройди чек-лист безопасности (антибан) После нажатия откроется окно с **5 галочками**: это защита твоего номера от бана. Отметь честно **все пять** (иначе кнопка продолжения остаётся серой): | Галочка | Что подтверждаешь | Зачем | |---|---|---| | **Прогрей номер** | На номере уже была обычная переписка в WhatsApp | «Пустой» номер = сигнал спама | | **Есть переписка** | В WhatsApp есть реальные диалоги с людьми | Подтверждает «живость» номера | | **Удали с другого** | Номер не висит в других сервисах рассылки одновременно | Два сервиса на номере = бан | | **Не эмулятор** | WhatsApp на настоящем телефоне, не в эмуляторе | Эмулятор Meta вычисляет | | **Не забанен** | Номер сейчас не в блокировке | Подключать забаненный бессмысленно | 🚫 **Не делай так.** Не подключай номер, купленный сегодня «специально под бота». Для WhatsApp это сигнал спама → мгновенный бан. ✅ **А так правильно.** Возьми номер, с которого ты или сотрудники реально переписывались хотя бы пару недель. Идеально, рабочий номер компании. ### 3. Отсканируй QR-код После подтверждения чек-листа платформа создаёт подключение и показывает **QR-код**. Статус меняется на **«Ожидаем QR»**. На телефоне с нужным номером: 1. Открой **WhatsApp**; 2. **Настройки → Связанные устройства** (Linked Devices); - на iPhone: вкладка «Настройки» → «Связанные устройства»; - на Android: «⋮» (три точки) → «Связанные устройства»; 3. **«Привязать устройство»** → наведи камеру на QR-код на экране компьютера. 💡 **Совет про «живой» QR.** QR-код действует ограниченное время. Если он не появился за ~минуту, увидишь жёлтую подсказку, что QR-код загружается дольше обычного: это нормально, подожди или обнови страницу. Если статус стал **«QR истёк»**, просто запусти подключение заново, сгенерируется свежий код. ### 4. Дождись статуса «Подключён» Как только телефон привяжется, статус **сам** сменится на **«Подключён»**, и рядом появится номер телефона. Перезагружать страницу не нужно, она обновляется в реальном времени. 📌 **Пример (стоматология).** Подключают рабочий `+7 705…`. Через ~10 секунд после скана статус, «Подключён (+7 705…)». Клиент пишет «сколько стоит чистка?», бот отвечает сам, заявка падает в [Лиды](../04-crm/41-leads.md). 📌 **Пример (барбершоп).** Мастер боится, что после подключения «телефон отвалится». Ничего подобного: он дальше переписывается в WhatsApp как обычно, а бот просто параллельно отвечает новым клиентам. Если мастер сам вступит в диалог, бота на этом чате можно поставить на паузу. ## Проверь, что работает 1. Статус в блоке WhatsApp = **«Подключён»** + виден номер. 2. Напиши боту с **другого** телефона в этот WhatsApp: должен прийти ответ от бота (несколько секунд). 3. Открой [Диалоги](../04-crm/40-dialogs.md): там появится твоя тестовая переписка. Если бот молчит, иди в [Бот не отвечает](../09-troubleshooting/90-bot-silent.md). ## Сколько это стоит - **Пробный период, бесплатно:** **14 дней** (или **30 дней**, если к проекту применён [промокод](../06-money/63-referrals.md)), число диалогов не ограничено. Карта не нужна. - **Внутри пробного периода** бот отвечает, пока на проекте есть деньги. При регистрации мы кладём **$5** (**$10** по промокоду), каждый ответ бота списывает с них по факту (см. [Сколько стоит сообщение](../06-money/61-message-cost.md)). - **Сразу после подключения** открывается [окно скидки](../06-money/60-billing.md#скидка-первых-двух-недель) на подписку: 14 дней, цена ниже обычной. Оплата внутри окна не съедает оставшиеся бесплатные дни, платный период начнётся после них. - **После пробного периода** канал работает, только если у проекта **активная подписка**. Если не оплатить, WhatsApp-подключение перестанет отвечать. Цены и оплата: в статье [Биллинг](../06-money/60-billing.md). 💡 **Бот замолчал раньше срока?** Значит кончился баланс, а не «пробные диалоги»: лимита на количество переписок нет. Пополни баланс, и ответы пойдут сразу же. ## Что доезжает из WhatsApp в кабинет Подключение не сводится к «текст туда, текст обратно»: в [Диалогах](../04-crm/40-dialogs.md) переписка выглядит так же, как в самом WhatsApp. | Что происходит в WhatsApp | Что видно в кабинете | |---|---| | Клиент печатает или пишет голосовое | индикатор «печатает…» в диалоге | | Твой ответ дошёл / прочитан | галочки «доставлено» и «прочитано» на сообщении бота | | Клиент поставил эмодзи-реакцию | эмодзи рядом с сообщением. Бот реакции **не читает**: 👍 это часто вежливый кивок, а не ответ, и подавать его модели как реплику дороже, чем полезнее | | Клиент удалил сообщение «у всех» | на месте текста остаётся пометка «сообщение удалено» | | Клиент исправил уже отправленное сообщение | текст обновляется, и бот отвечает на **исправленный** вариант, а не на первый | | Клиент ответил на конкретное сообщение (цитата) | цитата видна и оператору, и боту, в том числе в группах | | Клиент переслал чужое сообщение | пометка **«Переслано»**, чтобы не принять его за слова самого клиента | | Клиент прислал фото, документ, голосовое | файл в диалоге, голосовое расшифровано в текст (если [распознавание](../01-bot/15-advanced-settings.md) включено) | 💡 Если файл почему-то не скачался, на его месте будет прямая подпись, почему именно: молчаливого пустого места не остаётся. ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Кнопка продолжения серая | Отмечены не все 5 галочек чек-листа | Отметь все пять | | Статус «QR истёк» | QR-код просрочился до скана | Запусти подключение заново: будет свежий QR | | «QR загружается дольше обычного» | Подключение готовится дольше обычного | Подожди ~минуту / обнови страницу | | «Пробный период WhatsApp завершён. Для повторного подключения требуется оплата подписки.» | Триал кончился, подписки нет | Оплати подписку → [Биллинг](../06-money/60-billing.md), потом переподключи | | Бот подключился и вдруг замолчал | Кончился баланс проекта (лимита на число диалогов нет) | Пополни баланс → [Биллинг](../06-money/60-billing.md) | | Бот подключился, но не отвечает вообще | Пустой промпт или нет [баланса токенов](../06-money/60-billing.md) | Проверь промпт и баланс | | Бот ответил **один раз** и замолчал в чате | У номера включён авто-ответ **WhatsApp Business** (приветствие / «нет на месте»): он уходит от твоего имени и ставит бота на паузу | Отключи авто-ответы в WhatsApp Business → Настройки → Инструменты для бизнеса | | Кнопки «Подключить» нет, всё серое | У тебя роль **editor/viewer** | Попроси **admin/owner** подключить → [Роли](../07-team/70-roles.md) | | WhatsApp забанил номер | Подключили «холодный» номер | См. [Канал отвалился / бан](../09-troubleshooting/92-channel-down.md) | ### Если WhatsApp отвалился WhatsApp может разорвать связь (телефон надолго офлайн, устройство разлогинило). Тогда в блоке появится кнопка **«Переподключить»**, она снова проведёт через чек-лист и QR. Это штатная операция. ⚠️ **Никогда не отключай номер «вручную через телефон», чтобы потом подключить заново «по-новому».** Всегда пользуйся кнопкой «Переподключить» на платформе: она правильно отвязывает старое устройство (с очисткой чатов). Иначе WhatsApp увидит «то же устройство с теми же контактами» и расценит это как уклонение от бана. Подробнее: [Гигиена и антибан](./23-anti-ban.md). ## Вопросы, которые обычно возникают **Смогу ли я дальше пользоваться WhatsApp на телефоне?** Да. Бот работает как *привязанное устройство* (как WhatsApp Web). Твой телефон остаётся главным, ты переписываешься как обычно. Бот отвечает параллельно на новые входящие. **Что будет с моими старыми чатами и контактами?** На твоём телефоне: ничего, всё остаётся. Подключение только «читает» новые входящие и отвечает на них. **А если я сам отвечу клиенту, бот не перебьёт?** Когда оператор вступает в диалог, бота на этом чате можно поставить на паузу, он не будет встревать. Подробно, [Диалоги](../04-crm/40-dialogs.md). **Подойдёт WhatsApp Business?** Да. И обычный WhatsApp, и WhatsApp Business подключаются одинаково по QR. Главное: «живой» номер. ⚠️ **Если у тебя WhatsApp Business, отключи встроенные авто-ответы** (приветственное сообщение и «сообщение об отсутствии»). Найти: в приложении WhatsApp Business → **Настройки → Инструменты для бизнеса → Приветственное сообщение / Сообщение в нерабочее время** → выключить. Зачем: эти авто-ответы уходят **от твоего имени**, и платформа считает их за «оператор сам вступил в диалог» → ставит бота на **паузу** в этом чате (он ответит один раз и замолчит). Бот и так сам здоровается с клиентами, поэтому родной авто-ответ WhatsApp Business только мешает, два приветствия конфликтуют. **Захожу в WhatsApp: все сообщения уже помечены прочитанными, и телефон не присылает уведомления. Почему?** Бот: привязанное устройство, а WhatsApp синхронизирует «прочитано» между всеми твоими устройствами. Когда бот по умолчанию «прочитывает» входящее (собеседник видит синие галочки), телефон считает сообщение уже прочитанным и **не показывает уведомление**. Если хочешь получать уведомления на телефон, открой блок WhatsApp в разделе **«Каналы»** и **выключи тумблер «Отмечать входящие прочитанными»**. Тогда входящие останутся непрочитанными (уведомления и значок «новое» вернутся), а собеседники будут видеть только серые галочки «доставлено», без синих «прочитано». Настройка действует на этот проект и применяется сразу, переподключать номер не нужно. **Можно один номер на два проекта?** Нет. Один номер = один канал = один проект. Для второго бизнеса: отдельный проект и отдельный номер. **Нужно ли держать телефон постоянно онлайн?** Желательно. Как и у WhatsApp Web, привязанное устройство какое-то время работает и без телефона, но если телефон надолго пропадёт из сети, WhatsApp может разлогинить устройство, и придётся «Переподключить». ## Справка: состояния подключения WhatsApp | Что видишь | Значит | Что делать | |---|---|---| | **Не подключён** | Канал ещё не создан | Нажми «Подключить WhatsApp» | | **Подключаемся** | Платформа создаёт подключение | Подожди несколько секунд | | **Ожидаем QR** | QR показан, ждём скан | Сканируй с телефона | | **QR истёк** | Код просрочился | Запусти заново | | **Проверяем подключение** | Платформа сверяет статус | Подожди | | **Подключён (номер)** | Всё работает, бот в эфире | Готово ✅ | --- ## Под капотом (для разработчиков и любопытных) Что происходит автоматически, пока ты сканируешь QR. **Где живёт WhatsApp.** WhatsApp это **самохостинг через Baileys (QRDOS)**: платформа держит привязанное к твоему номеру устройство на своём gateway-сервере (как WhatsApp Web, только всегда онлайн). Сторонний White-Label-провайдер больше не используется (`@dos/wazzup` удалён, A22 2026-06-15). Инвариант: **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 шлёт inbound-вебхук `/api/webhook/baileys` → в `projects` ставится `wazzup_authorized = true` (колонка-имя осталось от старой схемы, TIER-3); polling это видит и рисует «Подключён». **Пробный период (с 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) pre-connect чек-лист обязателен (BAN-EVASION-4); (2) отвязка идёт полным logout на шлюзе с зачисткой авторизации, офсайтной копии сессии и памяти о чатах (`connectionManager.disconnect(id, logout=true)`): иначе контакты «переедут» на следующее подключение, Meta увидит «новое устройство, те же контакты» = уклонение = мгновенный qridle; (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 примет за спам и заблокирует. Поэтому те пять галочек перед сканом, не бюрократия, а защита твоего номера. И если связь когда-нибудь оборвётся, не отключай ничего руками на телефоне, просто нажми на сайте «Переподключить». --- **Дальше:** → [Функции (инструменты бота)](../03-tools/30-functions.md) **Связано:** [Обзор каналов](./20-channels-overview.md) · [Подключить Telegram](./22-telegram.md) · [Биллинг](../06-money/60-billing.md) · [Диалоги](../04-crm/40-dialogs.md) · [Антибан](./23-anti-ban.md) **Не получилось?** → [Канал отвалился / WhatsApp забанили](../09-troubleshooting/92-channel-down.md) · [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Подключить Telegram-бота URL: https://dosai.pro/docs/guide/02-channels/22-telegram [Документация](../README.md) › [Каналы](../02-channels) › Подключить Telegram # Подключить Telegram-бота > Самый быстрый и безопасный канал: создаёшь бота в **@BotFather**, копируешь токен, вставляешь в кабинет, и бот отвечает клиентам в Telegram. Подключение **бесплатное**, без риска бана. ⏱ 8 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Напиши **@BotFather** в Telegram → `/newbot` → получи **токен** вида `1234567:AAE…`. > - Кабинет → проект → **«Каналы»** → секция **Telegram** → вставь токен → **«Подключить»**. > - Один бот = **один проект**. Подключение **бесплатно** (платишь только за ответы бота с баланса). > - Токен хранится **в зашифрованном виде**, входящие проверяются секретом: чужой к боту не подключится. > - Отключение не трогает токен в @BotFather и сохраняет историю, лиды и дожимы. ![Раздел «Каналы»: подключение Telegram-бота по токену](/docs-guide-img/02-channels/channels.png) --- ## Зачем это нужно Telegram: второй канал платформы рядом с [WhatsApp](./21-whatsapp-wazzup.md). В отличие от WhatsApp, здесь используется **официальный Bot API**: значит, нет риска бана номера, нет «прогрева», нет подписки за сам канал. Это самый простой способ запустить бота в бою за пару минут. Мозг у бота общий: тот же [промпт](../01-bot/11-system-prompt.md), [база знаний](../03-tools/31-knowledge-base.md), [функции](../03-tools/30-functions.md) и [дожимы](../03-tools/33-drip.md) работают в Telegram точно так же, как в WhatsApp (см. [Обзор каналов](./20-channels-overview.md)). --- ## Шаг 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//telegram/connect`): - токен проверяется по формату `^\d+:[A-Za-z0-9_-]+$` (цифры, двоеточие, буквы/цифры), если не подходит, увидишь *«Неверный формат токена. Скопируйте токен из @BotFather без пробелов и лишних символов»*; - платформа дёргает Telegram `getMe`: убеждается, что бот живой, и подтягивает его **@username**; - вызывается **`setWebhook`**, платформа говорит Telegram «слать все сообщения сюда»; при этом задаётся **секретный токен** (случайный), которым Telegram подписывает каждый входящий запрос; - проект из статуса **«черновик» автоматически переходит в «активен»**: бот сразу в эфире. После успеха: тост *«Telegram бот подключён!»*, в секции отображается **@username** бота. > 📌 **Защита от случайной перепривязки.** Если токен такой же, как уже стоит, ничего не ломается. Если другой, старому боту платформа сначала снимет вебхук, потом поставит новый. --- ## Шаг 3. Проверить Рядом есть кнопка **«Проверить подключение»** (`/api/projects//telegram/status`): - *«Бот подключён и работает»*, всё ок; - *«Бот не отвечает. Проверьте токен.»*: токен отозван или неверен, переподключи. Дальше открой своего бота в Telegram (по его @username), напиши ему: он должен ответить как настроен в [промпте](../01-bot/11-system-prompt.md). > ⚠️ **Если бот молчит**, проверь, что [ИИ включён](../01-bot/14-test-chat.md) и на балансе есть деньги: Telegram-подключение бесплатно, но **каждый ответ бота списывает токены** с баланса проекта, как и в WhatsApp. → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Что умеет бот в Telegram - **Текст**: основной режим. - **Голосовые**: расшифровываются в текст, бот отвечает по смыслу. - **Видео и видео-кружки**: звуковая дорожка расшифровывается, бот отвечает по содержанию. - **Фото**: бот «видит» картинку (описание изображения) и реагирует. Подпись под фото учитывается как вопрос клиента. - **Альбомы (несколько фото разом)**: собираются в один запрос, бот отвечает одним сообщением, а не на каждое фото отдельно. - **Файлы**: принимаются до **20 МБ**. - **Пересланные сообщения**: бот понимает, что это форвард, и учитывает откуда. - **Стикеры**: бот считывает эмодзи стикера как настроение и отвечает по-человечески (раньше отвечал «не умею со стикерами»). - **Telegram Business**: поддерживаются бизнес-сообщения (если у тебя Telegram Business-аккаунт, бот отвечает и там). - **Кнопки под ответом** *(опция)*: бот может предлагать клиенту нажимаемые кнопки выбора (записаться / узнать цену / да-нет). Включается в **Настройки → Разбивка ответов → «Кнопки под ответом бота»**. Нажатие кнопки бот воспринимает как ответ клиента и продолжает диалог. - **Группы и супергруппы** *(опция)*, бот может отвечать в групповых чатах, но **только когда к нему обращаются**: упомянули через `@имя_бота` или ответили на его сообщение. На остальную переписку он не реагирует. Включается в **Настройки → Разбивка ответов → «Отвечать в Telegram-группах»**. - **Реакции (👍/❤️)**: видны рядом с сообщением и попадают в аналитику вовлечённости. Боту их не показываем: эмодзи чаще означает вежливый кивок, чем ответ, и как реплику его читать нельзя. - **Меню команд**: при подключении у бота автоматически появляются команды `/start` и `/help` (кнопка «/» в Telegram). Всё это, тот же [конвейер](../00-start/01-how-bot-thinks.md), что и в других каналах: функции, база знаний, лиды, дожимы. --- ## Кампании и рассылки Когда бот подключён, в разделе **Каналы → Telegram** появляется **«Ссылка для рекламной кампании»**: вводишь название кампании (например `instagram_jan`): получаешь ссылку вида `t.me/твойбот?start=instagram_jan`. Дай её в рекламе/постах: кто перейдёт и нажмёт «Старт», попадёт в **Аналитику → раздел «Кампании»**: увидишь по каждой кампании диалоги, лиды, конверсию и выручку. Это как [реклама-атрибуция для WhatsApp](./21-whatsapp-wazzup.md), только для Telegram-ссылок. **Рассылки** (раздел **«Рассылки»** в меню проекта, нужны права администратора): отправь сообщение сразу всей своей базе контактов. **Только Telegram:** массовая отправка в WhatsApp грозит баном номера, поэтому рассылки работают исключительно по Telegram-контактам. Что умеет рассылка: - **Кнопки под сообщением**: добавь к рассылке нажимаемые кнопки (ответ боту или ссылка). Рядом, **живой предпросмотр**, как сообщение увидит клиент. - **Сужение базы**: можно сузить по статусу лида, тегу или **рекламной кампании** (кто пришёл по конкретной deep-link ссылке). Рядом сразу показывается **сколько контактов** попадёт под условия: видно охват ещё до отправки. - **Запланировать на потом**: выбери «Запланировать» и укажи дату/время; рассылка сама уйдёт в нужный момент (до этого её можно отменить). - **Бережная доставка**: сообщения уходят **постепенно** (анти-бан), а кто написал боту «стоп»/«отписаться», исключается автоматически. - В истории видно, сколько отправлено, сколько ошибок, и можно **остановить** рассылку (или запланированную, и идущую) на ходу. **Профиль бота.** В разделе **Каналы → Telegram** (когда бот подключён) есть свёрнутый блок **«Профиль бота в Telegram»**, прямо из кабинета можно задать **короткое описание** (строка под именем бота) и **описание** (текст «Что умеет этот бот?», который клиент видит в пустом чате до первого сообщения). Не нужно открывать @BotFather. **Кнопки и аналитика вовлечённости.** Если включены [кнопки под ответом](#что-умеет-бот-в-telegram), оператор видит их прямо в диалоге, а когда клиент нажимает кнопку в переписке появляется пометка **«🔘 Нажал кнопку»** (видно, что это нажатие, а не набранный текст). В Аналитике появляется блок **«Вовлечённость в Telegram»**: показы кнопок, нажатия, кликабельность (CTR), **какие кнопки нажимают чаще**, реакции клиентов (👍/❤️) и разбивка диалогов на **личные и групповые**. --- ## Отключить Telegram Секция Telegram → **«Отключить»**. Подтверждение предупредит: *«Бот перестанет отвечать клиентам в Telegram. История диалогов, лиды и подписчики drip сохранятся. Подключить можно тот же или новый бот: токен в @BotFather не пострадает.»* При отключении (`/api/projects//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/` с заголовком `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 никуда не девается. --- **Дальше:** → [Функции (инструменты бота)](../03-tools/30-functions.md) **Связано:** [Обзор каналов](./20-channels-overview.md) · [Подключить WhatsApp](./21-whatsapp-wazzup.md) · [Системный промпт](../01-bot/11-system-prompt.md) · [Биллинг](../06-money/60-billing.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Гигиена и антибан (WhatsApp) URL: https://dosai.pro/docs/guide/02-channels/23-anti-ban [Документация](../README.md) › [Каналы](../02-channels) › Гигиена и антибан # Гигиена и антибан (WhatsApp) > WhatsApp подключается через WhatsApp Web, а Meta **жёстко банит «холодные» номера** в первые минуты. Эта статья, как не потерять номер. Касается **только WhatsApp**; Telegram банить нечего. ⏱ 9 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Бан грозит **только WhatsApp** (там WhatsApp Web). [Telegram](./22-telegram.md): официальный бот, риска нет. > - Главное правило: **подключай только «живой», прогретый номер**, на котором уже была реальная переписка. Новый/пустой номер забанят за минуты. > - Перед сканом QR обязателен **чек-лист из 5 пунктов**: это требования Meta, не наша бюрократия. > - **Первые 15 минут после привязки бот молчит** (прогрев номера). Сообщения клиентов при этом принимаются и видны в Диалогах, отвечает бот сам, когда окно пройдёт. > - Если номер **уже банился** или проект уже ловил баны, заводи **новый проект и новый прогретый номер**, не реконнекть старый. --- ## Почему WhatsApp вообще банит WhatsApp не даёт обычному аккаунту «кнопку бота». Платформа привязывается к твоему WhatsApp как **WhatsApp Web** (ещё одно устройство) и держит это устройство у себя (самохостинг). А Meta давно научилась ловить автоматизацию, если на свежеподключённом устройстве вдруг начинается рассылка незнакомым людям: это классический признак спам-бота, и номер улетает в бан (состояние `qridle`) за минуты. Поэтому антибан это не про «обойти» правила Meta (это невозможно), а про то, чтобы бот вёл себя **как живой человек с прогретого номера**. Часть защиты делает платформа автоматически, часть зависит от тебя: выбора правильного номера. > 🚫 **Эмуляторы: мгновенный бан навсегда.** Не подключай номер, который заводился на Android-эмуляторе (BlueStacks/NoxPlayer). Meta их детектит и банит без шансов на разбан. --- ## Чек-лист перед подключением (5 пунктов) Перед сканированием QR платформа **обязательно** показывает окно с пятью галочками (pre-connect чек-лист). Поставить их, значит подтвердить, что номер готов. Вот они дословно: 1. ✅ **Номер использовался в обычном WhatsApp минимум 24 часа** с реальной перепиской. 2. ✅ **За последние сутки прошло 10-15 живых чатов** на этом номере. 3. ✅ Если номер уже был в WhatsApp, **удалили аккаунт через настройки приложения** (перед привязкой). 4. ✅ **Не использовали Android-эмуляторы** (BlueStacks/NoxPlayer), Meta их детектит и банит навсегда. 5. ✅ Этот номер **раньше не был забанен** в WhatsApp (забаненные не разбанивают). Вступление к окну честно предупреждает: подключение работает через **WhatsApp Web (привязанное устройство)**, а Meta активно банит «холодные» номера в первые минуты после подключения. Это рекомендации, проверенные на практике, что именно сделать с номером, решаешь ты. > ⚠️ **Если проект уже ловил баны.** Окно прямо предупреждает: *«Meta помнит chat-graph даже после нашей чистки канала. Надёжнее создать новый проект и подключить там совершенно новый прогретый номер, который раньше не использовался в DOS AI, чем reconnect здесь.»* Тот же номер на том же проекте: на твой страх и риск. --- ## Что платформа делает за тебя Несколько защит встроены в код и работают автоматически: - **Прогрев номера: первые 15 минут бот молчит.** Сразу после привязки (и после каждого переподключения) платформа держит паузу **15 минут** и не даёт боту автоматически отвечать (`isOutboundGatedOnReconnect`, `OUTBOUND_RECONNECT_COOLDOWN_MINUTES = 15`). Свежеавторизованный номер, который тут же начинает писать многим людям, для Meta красный флаг. Окно снимается **по времени**, а не «когда пойдут входящие»: сообщения клиентов всё это время принимаются, сохраняются и помечаются для оператора, просто ответ идёт после паузы. Исключение одно: если ты вручную включил ИИ в конкретном диалоге, там бот ответит сразу (это ровно случай «отсканировал QR и хочу проверить бота»). - **Чистая отвязка канала.** Кнопка «Отключить» делает на нашем шлюзе полный выход из аккаунта (logout) и стирает и авторизацию, и память о чатах: список известных контактов, буфер последних сообщений, офсайтную копию сессии. Иначе прежние контакты «переехали» бы на следующее подключение, и Meta увидела бы «новое устройство, те же контакты» = уклонение = мгновенный `qridle`. - **Защита от одинаковых рассылок.** Платформа не даёт слать один и тот же шаблон пачкой: троттлинг **1 шаблонное сообщение на диалог в 5 секунд**, а служебные автоответы («нет баланса», «нерабочее время» и т.п.) уходят **один раз на диалог** и повторяются не чаще раза в сутки. Одинаковые массовые сообщения: типовой триггер бана. - **Жёсткие потолки отправки на самом шлюзе** (страховка на случай, если что-то пойдёт вразнос выше по цепочке): | Потолок | Значение | Зачем | |---|---|---| | Разных собеседников в минуту | **8** | главная защита от «блеска»: рассылка 20 незнакомцам в минуту не пройдёт. Ответ из 5 частей одному человеку стоит **одного** слота, а не пяти | | Всего отправок в минуту | **30** | предохранитель от зацикливания | | Отправок в час | **200** | ровный дневной темп | | Отправок в сутки | **3000** | верхняя граница на сессию | | Пауза между отправками | **1,5-5 сек** (случайная, «человеческая») | вместе с индикатором «печатает» | | Одинаковый текст подряд в один чат | **3-й блокируется** | ловит случайную петлю-эхо | Прогрева «в первый день можно меньше» у нас нет намеренно: бот всегда **отвечает** тем, кто написал первым, а это низкорисковое поведение. Лимит первого дня только заставлял бы бота замолкать посреди разговора. - **Лимит к API.** Запросы на подключение и ручную отправку ограничены **30 в минуту на аккаунт**: ровный темп вместо всплесков. > 📌 **Состояние `qridle`** платформа считает «жёстким» сбоем (реальный обрыв, а не временная заминка), то есть это сигнал, что номер, скорее всего, поймал бан, а не просто «отвалился на секунду». --- ## Если связь оборвалась - **Не отключай и не переподключай руками на телефоне.** На сайте в разделе «Каналы» нажми «Переподключить», платформа проведёт реконнект безопасно. - **На неоплаченном истёкшем пробном периоде реконнект заблокирован** до оплаты (`isWhatsAppReconnectBlocked`): пока окно просрочено, новый QR не выдаётся, сначала [подписка](../06-money/60-billing.md). - **Поймал бан (`qridle`) на холодном номере**: реконнект того же номера обычно бесполезен. Заведи [новый проект](../01-bot/10-create-project.md) и подключи **новый прогретый** номер. → Подробный разбор сбоев: [Канал отвалился / WhatsApp забанили](../09-troubleshooting/92-channel-down.md) --- ## Telegram: без этих забот Всё выше, **только про WhatsApp**. [Telegram](./22-telegram.md) работает через официальный Bot API: там нет «прогрева», нет WhatsApp Web, нет банов за автоматизацию. Если риск бана для тебя критичен, а номер прогреть негде, начни с Telegram. --- ## Простыми словами WhatsApp подключается так же, как «WhatsApp на компьютере». И у этого есть одна опасность: WhatsApp очень не любит, когда с **нового, пустого** номера вдруг начинается рассылка незнакомым людям, он сразу решает «это спам-бот» и блокирует номер за пару минут. Разбана почти не бывает. Поэтому правило простое: **подключай только тот номер, которым реально пользовались** с которого писали людям хотя бы сутки, где есть живые переписки. Перед сканированием QR платформа покажет пять галочек: это и есть проверка «номер живой?». Не относись к ним как к формальности: они спасают твой номер. Многое платформа делает сама: например, сразу после подключения она держит бота молча первые 15 минут, чтобы не насторожить WhatsApp (сообщения клиентов в это время не теряются, они видны в Диалогах), и не даёт ему писать слишком многим людям за минуту. Но выбор номера: на тебе. Никогда не подключай номера с эмуляторов (BlueStacks и подобных): это бан навсегда. И если номер уже когда-то банился, не пытайся его реанимировать, возьми новый. А если все эти сложности не хочется, просто используй **Telegram**: там ничего не банят, подключается за минуту. --- **Дальше:** → [Функции (инструменты бота)](../03-tools/30-functions.md) **Связано:** [Обзор каналов](./20-channels-overview.md) · [Подключить WhatsApp](./21-whatsapp-wazzup.md) · [Подключить Telegram](./22-telegram.md) **Не получилось?** → [Канал отвалился / WhatsApp забанили](../09-troubleshooting/92-channel-down.md) --- ## Функции (инструменты бота) URL: https://dosai.pro/docs/guide/03-tools/30-functions [Документация](../README.md) › [Инструменты бота](../03-tools) › Функции # Функции (Инструменты бота): полный гайд > Раздел **«Функции»** в проекте DOS AI. Путь: `Проект → Функции` (`/projects//functions`). > Подзаголовок раздела: **«Инструменты, которые ИИ сам решает когда использовать».** ![Каталог встроенных функций: Google Sheets, Google Calendar, Gmail, Telegram-уведомления, HTTP API, сегментация лидов, приём оплаты, пауза дожимов, отправка медиа](/docs-guide-img/03-tools/functions-list.png) Этот документ объясняет фичу целиком, что это, как бот ими пользуется, как их создавать и настраивать, какие бывают, все встроенные функции с параметрами, кастомные вебхуки, лимиты, безопасность, тестирование и все крайние случаи. Написан для человека, который настраивает бота, а не только для программиста, но с технической глубиной там, где она нужна. > 🆕 **Обновление каталога (2026-06-13).** Шаблоны теперь сгруппированы по задаче: **Уведомления владельцу** (Telegram, почта), **Запись на время** ([Calendar + движок окошек](./36-booking.md)), **Google Таблицы**, **Приём оплаты (Kaspi)** ([как работает](./37-payments-bot.md)), **Поведение бота** (теги, пауза дожимов, стоп-диалог), **Фото и видео**, **Письмо клиенту** ([гайд](./38-email-customer.md)). Что ещё изменилось: > - В модалке создания есть **поиск** по шаблонам: напишите «оплата», «запись», «уведомление». > - У каждого шаблона на карточке видно «цену входа» (сколько полей, сколько минут, что понадобится) и ссылку **📖 Инструкция**. > - У шаблонных полей человеку показывается короткая подпись, а полная инструкция для ИИ спрятана в спойлер «Инструкция для ИИ». > - **Проверить функцию** можно прямо в мастере (кнопка «Проверить»), не закрывая его. > - **Письмо клиенту** через обычную почту теперь доступно как шаблон (см. [«Письмо клиенту»](./38-email-customer.md)); Gmail остался продвинутым вариантом. > - **HTTP-запрос** это не шаблон, а путь «Своя интеграция по API» (для разработчика). См. [Кастомные вебхуки](../08-developers/81-custom-webhooks.md). --- ## Оглавление 1. [Что такое функции и зачем они](#1-что-такое-функции-и-зачем-они) 2. [Как бот ими пользуется (механика)](#2-как-бот-ими-пользуется-механика) 3. [Страница «Функции»: весь интерфейс](#3-страница-функции-весь-интерфейс) 4. [Как создать функцию](#4-как-создать-функцию) 5. [Анатомия функции (из чего состоит)](#5-анатомия-функции-из-чего-состоит) 6. [Параметры: подробно](#6-параметры-подробно) 7. [Каталог встроенных функций](#7-каталог-встроенных-функций) 8. [Кастомные вебхуки: простой и продвинутый режим](#8-кастомные-вебхуки-простой-и-продвинутый-режим) 9. [Управление диалогом и лидом (теги, пауза, стоп, медиа, оплата)](#9-управление-диалогом-и-лидом) 10. [Тестирование, версии, лог, импорт/экспорт](#10-тестирование-версии-лог-импортэкспорт) 11. [Связь функций с промптом бота](#11-связь-функций-с-промптом-бота) 12. [Лимиты и ограничения](#12-лимиты-и-ограничения) 13. [Безопасность и приватность](#13-безопасность-и-приватность) 14. [Все статусы и состояния](#14-все-статусы-и-состояния) 15. [Лучшие практики и чек-лист](#15-лучшие-практики-и-чек-лист) 16. [FAQ и крайние случаи](#16-faq-и-крайние-случаи) 17. [Глоссарий](#17-глоссарий) --- ## 1. Что такое функции и зачем они **Функция (инструмент)** это действие, которое бот может выполнить во время диалога с клиентом. Сам по себе ИИ умеет только писать текст. Функции дают ему «руки»: записать клиента в календарь, добавить строку в Google-таблицу, выставить счёт на оплату, уведомить владельца в Telegram, поставить тег лиду и так далее. **Главная идея:** вы не программируете «если клиент написал X, сделай Y». Вы просто **описываете боту что умеет каждая функция и когда её вызывать**, а ИИ сам решает в нужный момент диалога, какую функцию вызвать и с какими данными. Это принципиально отличается от жёстких сценариев-кнопок. > 📌 **Функция не создаёт лида.** Карточку лида заводит [статус лида](../04-crm/41-leads.md#кто-создаёт-лида-статус-а-не-функция), который бот ставит сам по ходу диалога: на уровне промпта, без функций. Функция «Уведомление владельцу» лишь сообщает вам о заявке; сам лид в 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](#11-связь-функций-с-промптом-бота)). --- ## 3. Страница «Функции»: весь интерфейс ### 3.1 Шапка - **Заголовок:** «Функции». - **Подзаголовок:** «Инструменты, которые ИИ сам решает когда использовать». - **Кнопка «Импорт»**: загрузить функции из JSON (см. [10.5](#105-импорт-экспорт)). - **Кнопка «+ Новая функция»**: создать новую (см. [раздел 4](#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 Sheets, Google Calendar, Telegram, Gmail, приём оплаты, медиа и т.д. Параметры уже настроены правильно, вам остаётся заполнить подключение. **Рекомендуется в 90% случаев.** - **«Кастомная»**: свой запрос на любой сервер (вебхук). Для интеграции с вашей CRM, n8n, Zapier или собственным API. ### Шаг 2. Выбор системы (для шаблона) Показываются группы: **Google Sheets, Google Calendar, Gmail, Telegram уведомления, HTTP API, Сегментация лидов, Приём оплаты (Kaspi), Пауза дожимов, Остановить диалог, Отправка фото и видео.** У каждой: иконка, описание, число шаблонов. ### Шаг 3. Выбор конкретного действия Внутри группы, список шаблонов (например в Sheets: «Узнать структуру», «Прочитать», «Найти», «Добавить строку», «Обновить строку», «Удалить», «Раскрасить», «Создать лист»). ### Шаг 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](#8-кастомные-вебхуки-простой-и-продвинутый-режим)). **3) «Что бот спросит у клиента»**: конструктор параметров (см. [раздел 6](#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`) | Доступна ли боту прямо сейчас | вы (переключатель) | | **Таймаут** | Сколько ждать ответа: 1000-30000 мс (до 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 Gmail (`builtin_gmail`) Отправляет письмо с рабочего Gmail-адреса. Требует подключённый Google Workspace с доступом для сервисного аккаунта. Config-полей нет. **`send_gmail`:** `to`*🔒 (можно несколько через запятую), `subject`*🔒, `body`*🔒, `html`🔒 (оформление), `cc`🔒, `reply_to`🔒. ### 7.4 Telegram уведомления (`builtin_telegram`) Шлёт уведомление в Telegram-чат (например владельцу о новой заявке). Config: **`bot_token`** *, **`chat_id`** *, **`message_template`** * (шаблон сообщения с подстановкой переменных). Параметров нет, сообщение собирается из шаблона. > Это типичный способ **«уведомить владельца / передать оператору»**: бот зовёт `notify_telegram`, и вам в Telegram падает заявка с данными клиента. ### 7.5 Своя интеграция по API (`webhook`) Бот умеет дёргать **ваш собственный сервис** по HTTP (GET/POST): получить данные с вашего сервера/CRM или отправить заявку во внешнюю систему. Это путь **«Своя интеграция по API»** в мастере создания функции: метод, URL, заголовки и параметры вы задаёте сами. Подробности: в [разделе 8](#8-кастомные-вебхуки-простой-и-продвинутый-режим). Разобранный пример с настоящим сервисом: [МойСклад: наличие и цены](../05-integrations/56-moysklad.md). ### 7.6 Сегментация лидов (`builtin_lead_meta`) Бот сам помечает текущего лида тегами прямо в диалоге. Работает с лидом, привязанным к этому диалогу. Подробно в статье [Теги и сегментация](./34-tags.md). | Функция (имя) | Что делает | Параметры / настройка | |---|---|---| | **Работа с тегами** (`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](#95-приём-оплаты-create_payment_invoice). ### 7.8 Пауза дожимов (`builtin_lead_meta`) **`pause_followups`**: клиент сказал «свяжусь сам в четверг» / «подумаю». Бот ставит автонапоминания на паузу, **не выключая себя**: в чате он продолжит отвечать, замолкает только авто-дожим. - `until`🔒: дата `YYYY-MM-DD`, до которой пауза. Пусто = пауза 3 дня. - `reason`: причина для истории. Подробное поведение: [раздел 9.3](#93-пауза-дожимов-pause_followups). ### 7.9 Остановить диалог (`builtin_lead_meta`) **`stop_dialog`**: клиент явно просит не писать («не пишите», «отстаньте», «stop») или окончательно отказался. Бот выключается на этом диалоге **навсегда** (до ручного включения оператором) и **отменяет все дожимы**. - `reason`: причина для истории. Это «липкая» остановка, авто-возобновление её не оживит. Подробно, [раздел 9.4](#94-остановить-диалог-stop_dialog). > 🛑 **Как вообще останавливается диалог.** Бот **никогда не решает остановиться сам**, он всегда дообщается с клиентом, пока его не остановят явно. Остановить можно тремя способами: (1) функцией **«Остановить диалог»** (её вызывает бот, когда клиент просит не писать); (2) галочкой **«Завершать диалог после выполнения этой функции»**, она есть у **любой** функции (в настройках функции, внизу), когда функция успешно отработала, бот выключается на этом чате и отменяет дожимы (удобно, например, после записи на приём или передачи заявки менеджеру); (3) вручную: тумблером AI в шапке диалога. Во всех случаях бот молчит, пока вы не включите AI обратно вручную. ### 7.10 Отправка фото и видео (`builtin_send_media`) **`send_media`**: бот шлёт материал из медиа-библиотеки проекта (видео, фото, отзывы, прайс) прямо в чат, когда это уместно. **Сначала загрузите материалы в разделе «Медиа».** - `media_key`*🔒: ярлык материала (список реальных ярлыков и подсказки «когда слать» подставляются автоматически); - `caption`: короткая подпись. Ограничение: не более 3 медиа за 60 секунд на диалог (защита от спама). Подробно, [раздел 9.6](#96-отправка-медиа-send_media). --- ## 8. Кастомные вебхуки: простой и продвинутый режим Кастомная функция это HTTP-запрос на ваш адрес. Используйте, когда нужной встроенной функции нет: своя CRM, n8n, Zapier, собственный API. ### 8.1 Простой режим (по умолчанию) - Только **POST**. - Тело, JSON со всеми параметрами одним объектом. - Стандартные заголовки. - Таймаут до 30 секунд. Этого хватает для большинства интеграций «отправить данные на сервер». ### 8.2 Продвинутый режим (`mode: advanced`) Включается, когда нужен полный контроль над запросом: - **URL** (`webhook_url`): обязателен. Проверяется на безопасность (нельзя внутренние адреса `127.0.0.1`, `10.x`, `192.168.x` и т.п.: защита от SSRF). - **HTTP-метод**: GET / POST / PUT / PATCH / DELETE / HEAD / OPTIONS. - **Таймаут**: до 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, заголовках и теле можно подставлять собранные параметры через `{{имя_параметра}}` (а также системные переменные). Пример тела: ```json { "name": "{{client_name}}", "phone": "{{client_phone}}", "source": "whatsapp" } ``` ### 8.4 Что важно про ответ ИИ увидит то, что вернул ваш сервер (с учётом маппинга). Поэтому ваш ответ должен быть **понятен модели**: лучше вернуть `{ "status": "ok", "booking_id": 123 }`, чем сырой дамп БД. На основе этого бот сформулирует ответ клиенту. --- ## 9. Управление диалогом и лидом Эти встроенные функции не «делают запрос наружу», а управляют **поведением бота и состоянием лида**. Это ключевые продуктовые сценарии: разберём детально. ### 9.1 Теги (`set_lead_tags`) - Бот **добавляет** теги к уже стоящим (merge), не затирая операторские. Снять тег может оператор. - Выбирает из словаря проекта (со страницы «Теги», с описаниями) или создаёт новый, если включён тумблер «Разрешить боту создавать новые теги». - Максимум 20 тегов на лида. Теги видны и фильтруются в CRM/лидах, считаются в отчётах. Подробно, [Теги и сегментация](./34-tags.md). ### 9.2 Пауза дожимов (`pause_followups`) Когда вызывать (по описанию для ИИ): клиент написал «напишу в четверг», «наберу после 15-го», «свяжусь сам», «подумаю», «позже». Что происходит: - ставится `snoozed_until` (на 09:00 по Алматы, если указана только дата; либо точное время); - если даты нет или она в прошлом → пауза **+3 дня** от текущего момента; - счётчики дожимов сбрасываются, чтобы по истечении паузы пришло **одно мягкое напоминание**; - **бот в чате НЕ выключается**, если клиент напишет раньше, ответит как обычно; - пауза соблюдается **даже если раздел «Дожимы» у проекта выключен**: в назначенный срок бот всё равно вернётся с одним сообщением о договорённости, без запуска лестницы касаний. Отличие от стоп-диалога: пауза = «помолчи с напоминаниями до даты», стоп = «замолчи совсем». ### 9.3 Остановить диалог (`stop_dialog`) Когда вызывать: клиент **явно** просит не писать или окончательно отказался **после отработки возражений**. **НЕ** вызывать на первое «дорого/подумаю»: это возражение (его отрабатывают или ставят `pause_followups`). Что происходит: - `ai_on = false` на диалоге, фиксируется время паузы; - причина `client_stop`, «липкая»: авто-возобновление бота **не оживит** этот диалог; - все дожимы по диалогу **отменяются автоматически** (триггер БД); - заново включить может **только оператор** из дашборда. Зачем так строго: защита от назойливости и от **блокировок WhatsApp** за спам. ### 9.4 Приём оплаты (`create_payment_invoice`) Поток: клиент согласился платить → бот вызывает функцию с суммой, телефоном и описанием → создаётся счёт в apipay → клиенту приходит **Kaspi-push** → он подтверждает в приложении. **Успех** возвращает боту: `invoice_id`, `apipay_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: нужно переподключить | | `apipay_4xx` / `apipay_5xx` / `apipay_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](#35-баннер-рассинхрона-с-промптом)) с кнопкой создать её. - Полоса готовности предупреждает: **«N не упомянуты в промпте»**, это намёк, что функция есть, но бот может про неё «забыть», если в промпте нет подсказки. Для важных функций стоит и хорошее описание, и упоминание в промпте. **Правило большого пальца:** описание для понимания «что это», промпт для управления «в какой момент сценария это использовать». --- ## 12. Лимиты и ограничения | Ограничение | Значение | |---|---| | Функций на проект | **20** | | Имя функции | 2-64 символа, `^[a-z][a-z0-9_]*$`, без зарезервированных слов | | Описание | 5-1000 символов | | Параметров на функцию | 20 | | Значений enum на параметр | 50 | | Описание параметра | до 500 символов | | Таймаут | 1000-30000 мс (простой), до 60000 мс (продвинутый) | | Заголовков | по стандарту HTTP; имя 1-200 символов, без переносов строк | | Полей маппинга ответа | 50, путь 1-200 символов, обрезка 500-20000 символов | | Параметров URL (query) | 30 | | Шаблон тела | 50 КБ | | Повторов (retry) | 1-5 | | Страниц пагинации | 1-10 | | Версий на функцию | ~50 | | Медиа на диалог | 3 / 60 сек | | Тегов на лида | 20 | | Лог вызовов (хранение) | ~90 дней | При попытке создать 21-ю функцию кнопка заблокируется, а импорт вернёт ошибку «лимит достигнут». --- ## 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](#37-пустое-состояние)), ошибка загрузки (инлайн-сообщение, не белый экран). --- ## 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`: служебный поиск по базе знаний, он работает автоматически, настраивать его как функцию не нужно. **Удалил фичу «Услуги» / Flow Builder / Automation Rules: почему grep их находит?** Эти сущности удалены из продукта и к функциям отношения не имеют (см. `CLAUDE.md` → «Удалённые фичи»). Не путайте с живым CRM-микродвижком (`crm_automations`). --- ## 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). - Всё новое **проверяй в тест-чате**: там видно, вызвал ли бот функцию или только написал «записал» словами. - Функций можно сделать **до 20** на проект. - Секреты (токены, пароли) платформа прячет и шифрует, участники их не видят. - Не получается? Загляни в **«Лог вызовов»** функции: там видно, что именно пошло не так. Если в двух словах: **функции превращают болтливого бота в работающего сотрудника**, который не только отвечает, но и записывает, считает и принимает оплату, а ты лишь объясняешь ему словами, что и когда делать. --- *Документ описывает раздел «Функции» DOS AI по состоянию на июнь 2026. Каталог встроенных функций, источник истины: `packages/@dos/admin/src/function-templates.ts`. Логика выполнения: `packages/@dos/ai-pipeline/src/pipeline/tool-executor.ts`.* --- ## База знаний (RAG) URL: https://dosai.pro/docs/guide/03-tools/31-knowledge-base [Документация](../README.md) › [Инструменты бота](../03-tools) › База знаний # База знаний (RAG) > Сюда грузишь факты о бизнесе (прайс, услуги, условия): бот сам подмешивает нужное в ответы и перестаёт выдумывать. ⏱ 8 мин · 👤 для владельца и оператора · 🟢 live ![База знаний: загрузка документов (FAQ, прайс, описание услуг), бот использует их для точных ответов через векторный поиск](/docs-guide-img/03-tools/knowledge-base.png) > **За 30 секунд:** > - База знаний = факты, на которые опирается бот: прайс, услуги, FAQ, условия. > - Грузишь текст, файл (TXT/CSV/PDF/DOCX) или ссылку (URL): система сама разбивает и индексирует. > - Бот на **каждое** сообщение ищет подходящие куски и добавляет их в ответ (это RAG, автоматически). > - Лимит: **100 записей** на проект (всего, не только активных), до **1 000 000 символов** при вставке текстом, из файла и со страницы по ссылке извлекается до **500 000**, файл до **4 МБ**. > - Статичные мелочи дешевле держать в [промпте](../01-bot/11-system-prompt.md); большое/меняющееся, сюда. --- ## Зачем это нужно Бот знает только то, что ты ему дал. Если прайс есть лишь «в голове» у тебя, бот начнёт выдумывать цифры. База знаний даёт ему **точные факты**: он ищет в них релевантное под вопрос клиента и отвечает по делу, а не фантазирует. Это разница между «кажется, около 20 тысяч» и «чистка, 18 000 ₸». ## Промпт или База знаний? | Кладём в… | Что | |---|---| | 🧠 [Промпт](../01-bot/11-system-prompt.md) | Как себя вести, тон, правила, небольшие неизменные факты (адрес, часы) | | 📚 База знаний | Объёмное и меняющееся: полный прайс, описания услуг, FAQ, условия доставки | 💡 **Правило.** Маленький статичный факт (адрес) в промпт (бесплатно). Большой список (прайс на 50 позиций) в базу знаний (бот достанет только нужное). 📌 Полный разбор «что в промпт, что в «Информацию о компании», что в базу знаний»: в отдельной статье [Загрузить знания о бизнесе в бота](../01-bot/16-feed-knowledge.md). ## Как добавить Меню проекта → **«База знаний» → «Добавить базу знаний»**. 1. **Название**: понятное («Прайс услуг», «FAQ доставки»); 2. **Тип**, выбери источник: - **Текст**: вставь напрямую (до 1 000 000 символов); - **Файл**: TXT, CSV, PDF, DOCX (до 4 МБ, текст извлечётся сам); - **URL**, ссылка на страницу сайта (можно с глубиной сканирования: только страница / +ссылки 1-2 уровня / максимум); 3. (для URL) **Автообновление**, нет / еженедельно / ежемесячно; 4. **«Добавить»**: пойдёт загрузка → индексация → готово. ⚠️ Обработка документа стоит немного (около $0.01 за документ на индексацию, минимальное списание, 1¢), спишется с [баланса](../06-money/60-billing.md). При добавлении показывается оценка токенов. ## Как бот это использует Тебе ничего вызывать не надо, это работает **само**: 1. Клиент пишет вопрос; 2. Бот ищет в базе знаний **самые похожие по смыслу** куски (семантический поиск, не по точным словам); 3. До 5 лучших фрагментов (в сумме до 8 000 символов) добавляются в контекст ответа; 4. Бот отвечает, опираясь на них. 📌 **Пример.** В базе это прайс и условия. Клиент: «делаете отбеливание и сколько?». Бот находит строку про отбеливание → отвечает с точной ценой. Про услугу, которой в базе нет, он честно скажет, что уточнит. ## Проверь, что работает В разделе есть **«Тест поиска»**: вводишь вопрос клиента → видишь, какие фрагменты база вернёт боту и с каким % похожести. Это ровно тот поиск, что бот делает на каждое сообщение. Если по важному вопросу ничего не находит, переформулируй контент или добавь похожий. Плюс прогони реальные вопросы в [Тест-чате](../01-bot/14-test-chat.md): там в «технических деталях» видно, какие источники бот подтянул. ## Управление записями - **Фильтры:** Все / Активные / Неактивные, поиск по названию; - **Включить/выключить** запись (выключенная не участвует в поиске); - **Массовые действия:** включить/выключить/удалить выбранные; - Большие документы система бьёт на **фрагменты**: их можно посмотреть и отредактировать. ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Бот не знает то, что я загрузил | Запись выключена или вопрос непохож на текст | Включи запись; проверь «Тест поиска», переформулируй контент | | «Почти лимит» / не добавляется | Близко к 100 записям | Удали ненужные, объедини мелкие | | Загрузил, но бот выдумывает | Факт есть в базе, но промпт не велит на неё опираться | В [промпте](../01-bot/11-system-prompt.md): «цены и факты бери из базы знаний, не выдумывай» | | Файл не грузится | Больше 4 МБ или не тот формат | Сократи / используй TXT, CSV, PDF, DOCX | ## Вопросы, которые обычно возникают **Чем это отличается от промпта?** Промпт, поведение (всегда в каждом ответе). База знаний, факты (бот достаёт только релевантное под конкретный вопрос). Большие данные в промпте = дорого и бот путается. **Это платно?** Да, чуть-чуть: и индексация документа, и каждый поиск стоят примерно по 1¢ ($0.01). Поиск идёт на каждое сообщение, это учитывается в расходе. **Бот читает весь документ каждый раз?** Нет. Только несколько самых подходящих фрагментов (до 5) под текущий вопрос. --- ## Под капотом - **RAG** (Retrieval-Augmented Generation): документы режутся на чанки, для каждого считаются векторные embeddings. На каждое сообщение клиента: семантический поиск по векторам, топ-5 чанков подмешиваются в контекст (он обрезается до 8 000 символов). - Лимиты: **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 это **не функция**, а внутренний шаг пайплайна; включать/вызывать не надо. --- ## Простыми словами База знаний это справочник твоего бизнеса для бота: цены, услуги, условия, частые вопросы. Ты загружаешь туда текст, документ или ссылку на сайт, а бот сам, на каждый вопрос клиента, достаёт оттуда нужный кусочек и отвечает точно, не выдумывая. Маленькие вещи (адрес, часы работы) проще написать прямо в инструкции бота, а вот большой прайс или список услуг: сюда. Есть кнопка «Тест поиска»: вводишь вопрос и видишь, что бот найдёт, удобно проверить, что он не промахнётся. --- **Дальше:** → [Дожимы](./33-drip.md) **Связано:** [Системный промпт](../01-bot/11-system-prompt.md) · [Как бот думает](../00-start/01-how-bot-thinks.md) · [Тест-чат](../01-bot/14-test-chat.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Медиа-библиотека URL: https://dosai.pro/docs/guide/03-tools/32-media-library [Документация](../README.md) › [Инструменты бота](../03-tools) › Медиа-библиотека # Медиа-библиотека > Бот умеет не только писать, но и **показывать**: отправить клиенту видео, фото работ, отзыв или прайс, в нужный момент диалога. Для этого ты заранее складываешь материалы в медиа-библиотеку. ⏱ 7 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Раздел **«Медиа»** проекта: твоя библиотека видео/фото/отзывов/прайсов. > - Каждому файлу даёшь **ярлык** (`media_key`), по нему бот его и отправляет. > - Бот сам решает, когда показать материал (через функцию **«Отправить медиа»**), если клиент сомневается или просит показать. > - Лимиты: до **60 файлов** на проект, до **50 МБ** каждый. Работает в WhatsApp и Telegram. ![Раздел «Медиа»: предзагруженные фото, видео и файлы, которые бот отправляет по контексту](/docs-guide-img/03-tools/media.png) --- ## Зачем это нужно Слова не всегда убеждают. «Покажите работы», «есть видео?», «скиньте прайс»: на такие моменты у бота должны быть готовые материалы. Медиа-библиотека (раздел **«Медиа»**, `/projects//media`) это склад фото, видео, отзывов и прайсов, которые бот отправляет клиенту **прямо в чат** в подходящий момент: в диалоге и в [дожимах](./33-drip.md). --- ## Как загрузить 1. Раздел проекта → **«Медиа»** → загрузи файл (нужна роль **редактор+**). 2. Задай **ярлык** (`media_key`) и, при желании, подпись и описание «когда отправлять». 3. Сохрани. Готово: материал доступен боту. **Лимиты и форматы:** - до **60 материалов** на проект (превысишь, *«Достигнут лимит медиа на проект (60). Удали ненужное и попробуй снова.»*); - до **50 МБ** на файл (больше, *«Файл больше 50 МБ»*); - форматы: изображения (JPEG/PNG/GIF/WebP/HEIC), аудио (MP3/OGG/WAV/MP4), видео (MP4/WebM/MOV), документы (PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX/ZIP). --- ## Как бот отправляет Бот выбирает материал по **ярлыку** через функцию **«Отправить медиа»** (`send_media`). Ты включаешь эту функцию и описываешь, **что и когда** показывать, а бот сам решает момент: клиент сомневается → показать видео-отзыв; просит прайс → отправить файл; нужно снять возражение наглядно → фото работ. > 💡 **Описывай ярлыки понятно.** Бот выбирает материал по описанию, «когда отправлять». Чем понятнее опишешь (`video_otziv`, «когда клиент сомневается в качестве»), тем точнее бот будет показывать нужное. Это как с [функциями](./30-functions.md): хорошее описание = верный выбор. > 📌 После отправки бот ссылается на материал словами («посмотрите видео выше 👆»), а не пересказывает его. Работает и в WhatsApp, и в Telegram. --- ## Стоит ли это денег **Отправка готового материала из библиотеки: бесплатна** (не списывает баланс). Деньги тратятся только когда бот **распознаёт** входящее медиа от клиента (расшифровка голоса, «разглядывание» картинки): см. [Сколько стоит сообщение](../06-money/61-message-cost.md). --- ## Простыми словами Представь, что у бота есть папка с «продающими материалами»: видео твоих работ, фото до/после, отзывы клиентов, прайс в PDF. Ты один раз туда всё загружаешь и подписываешь, что это и когда показывать. Дальше бот сам, по ходу разговора, достаёт нужное: клиент засомневался, кинул видео-отзыв, попросил цены, отправил прайс. Это работает гораздо убедительнее, чем расписывать всё словами. Загрузить можно до 60 файлов, каждый до 50 МБ, в WhatsApp и Telegram одинаково. И приятный момент: отправлять эти материалы клиентам, бесплатно, баланс на это не тратится. --- **Дальше:** → [Дожимы](./33-drip.md) **Связано:** [Функции](./30-functions.md) · [База знаний](./31-knowledge-base.md) · [Сколько стоит сообщение](../06-money/61-message-cost.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Дожимы (follow-up) URL: https://dosai.pro/docs/guide/03-tools/33-drip [Документация](../README.md) › [Инструменты бота](../03-tools) › Дожимы # Дожимы (follow-up) > Клиент заинтересовался и пропал? Бот сам напомнит о себе через заданное время, и вернёт часть «потеряшек». ⏱ 9 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Дожим = автонапоминание клиенту, который замолчал. > - Настраиваешь **последовательность касаний** с задержками (минуты/часы/дни/недели). > - Каждое касание это либо **ИИ с учётом истории** диалога, либо **фиксированный текст**. > - Бот сам ставит дожимы на паузу, если клиент сказал «свяжусь сам», и отменяет, если просил не писать. > - Минимальная задержка, **15 минут**. ![Раздел «Дожимы»: конструктор шагов-напоминаний с задержками для замолчавших клиентов](/docs-guide-img/03-tools/drip.png) --- ## Зачем это нужно Большинство клиентов не отвечают сразу: «подумаю», «спрошу мужа», просто отвлеклись. Без напоминания половина из них теряется навсегда. Дожимы возвращают их мягким сообщением через нужное время: без твоего участия и без навязчивости. Это один из самых окупаемых инструментов. ## Где это Меню проекта → **«Дожимные»**. Нужна роль **editor+**. ## Как настроить последовательность Дожим это **цепочка касаний**. Например: через 2 часа → через 1 день → через 3 дня. Для каждого касания задаёшь: | Параметр | Варианты | |---|---| | **Задержка** | Число + единица: минуты / часы / дни / недели (минимум 15 минут) | | **Тип** | **ИИ + история диалога** (бот сам сочинит уместное напоминание) или **Фиксированный текст** (твой готовый текст) | | **Текст** | Сообщение (для фикс.) или подсказка для ИИ | | **Медиа** | Можно прикрепить фото/видео | | **Модель** | Своя модель для дожимов или общая | 💡 **Совет.** Первое касание делай быстрым и мягким (через 1-2 часа: «Подскажите, остались вопросы?»), дальше реже. Тип **«ИИ + история»** обычно работает лучше шаблона: напоминание получается живым и в контексте разговора. 📌 **Пример (мотошкола).** Касание 1 через 2 часа: «Остались вопросы по обучению? С радостью подскажу 🙂». Касание 2 через 1 день: напоминание про ближайший набор. Касание 3 через 3 дня: предложение пробного занятия. ## Кто попадает в дожимы и кто выходит - **Попадает:** клиент, который квалифицировался, но не довёл до конца (можно настроить авто-зачисление по статусу лида). - **Бот сам ставит на паузу:** если клиент сказал «свяжусь сам в четверг», дожимы молчат до этой даты (функция [пауза дожимов](./30-functions.md#93-пауза-дожимов-pause_followups)), но бот в чате продолжает отвечать. - **Бот сам отменяет:** если клиент попросил не писать или отказался, дожимы отменяются ([стоп-диалог](./30-functions.md#94-остановить-диалог-stop_dialog)). - **Заявка передана, дожимы закрываются автоматически.** Как только бот вызвал функцию передачи заявки тебе (уведомление в Telegram, на почту или в WhatsApp), дожимы по этому клиенту прекращаются: он уже всё рассказал и услышал «передал, скоро свяжутся», напоминать ему «вы, наверное, заняты» больше не нужно. Бот при этом остаётся на связи: напишет клиент, ответит. Если хочешь продолжить дожимать именно этого человека, просто добавь его в дожимы вручную из таблицы. - **Вручную:** ты можешь поставить на паузу, возобновить или отписать клиента в таблице дожимов. ## Статусы подписчиков | Статус | Значит | |---|---| | **Активный** | В работе, дожимы идут | | **Пауза** | Временно остановлен (тобой или «свяжусь сам») | | **Завершён** | Все касания отправлены | | **Отменён** | Отписан вручную | | **Отписался** | Клиент попросил не писать | ## Проверь и подсмотри, что отправится В таблице у каждого клиента есть **превью**: показывает, отправится ли следующее касание, какое по счёту, когда, и текст (для фиксированных, точный, для ИИ: пометка, что текст сгенерируется). Удобно проверить логику до боя. Также можно проверить дожим прямо в [Тест-чате](../01-bot/14-test-chat.md) («Проверить дожим»). ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Дожимы не идут вообще | Follow-up выключены на уровне проекта | Включи «Follow-up включены» в разделе | | Клиент получил дожим, хотя просил не писать | Не сработал стоп | Проверь, что у бота есть функция [stop_dialog](./30-functions.md#94-остановить-диалог-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`](./30-functions.md#93-пауза-дожимов-pause_followups) ставит snooze; [`stop_dialog`](./30-functions.md#94-остановить-диалог-stop_dialog) выключает бота + отменяет дожимы (триггер БД). --- ## Простыми словами Дожимы это вежливые напоминания тем, кто заинтересовался и пропал. Ты заранее настраиваешь: через сколько и что написать. Например, через два часа, «остались вопросы?», через день, ещё разок, через три дня: предложение попробовать. Можно дать боту самому придумывать текст по ходу разговора: так живее. Бот умный, если клиент сказал «напишу сам в четверг», напоминания подождут до четверга, а если попросил «не пишите», бот их отменит, чтобы не злить человека. В итоге ты возвращаешь часть клиентов, которые иначе бы просто потерялись. --- **Дальше:** → [Лиды](../04-crm/41-leads.md) **Связано:** [Функции](./30-functions.md) · [Лиды](../04-crm/41-leads.md) · [Диалоги](../04-crm/40-dialogs.md) --- ## Теги и сегментация URL: https://dosai.pro/docs/guide/03-tools/34-tags [Документация](../README.md) › [Инструменты бота](../03-tools) › Теги и сегментация # Теги и сегментация > Теги это ярлыки на клиентах («VIP», «опт», «недозвон»), которые бот ставит сам по ходу разговора. По ним потом удобно фильтровать лидов и понимать, кто есть кто. ⏱ 6 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - **Теги**, свободные ярлыки на лиде (до **20** на одного): `VIP`, `опт`, `Астана`, `недозвон`. > - Чтобы бот тегал сам, включите функцию **«Работа с тегами»** (раздел [Функции](./30-functions.md)). Без неё теги ставит только оператор вручную. > - На странице **«Теги»** заводите теги с **описанием**, его видит и оператор, и бот (бот тегает осмысленнее). > - Бот **сначала выбирает из существующих тегов**, и только если ничего не подходит, создаёт новый (если это разрешено под-флагом). Новый тег бота помечается бейджем **«создано ИИ»**. > - Бот **добавляет** теги, **не стирая** уже стоящие. Снять тег может оператор. > - В разделе **«Лиды»** можно **фильтровать** по тегам (логика «И»); на странице **«Отчёты»** виден весь список тегов с числом лидов за период и **выгрузкой в CSV**. ![Раздел «Теги»: авто-разметка клиентов ботом для сегментов и фильтров](/docs-guide-img/03-tools/tags.png) --- ## Шаг 1. Заведите теги (с описанием) Откройте страницу **«Теги»** проекта и создайте нужные ярлыки. У каждого тега, кроме имени и цвета, есть **описание**: короткое пояснение, что этот тег значит («VIP = чек от 1 млн», «Недозвон = не берёт трубку 2+ раза»). Описание важно вдвойне: его читает **бот**, и тегает осмысленнее, а не угадывает по одному имени. Описание можно добавить при создании или отредактировать позже (иконка ✎). Теги бывают двух «авторов»: заведённые **оператором** и созданные **ботом** (бейдж **«создано ИИ»**), но в работе это один общий набор. --- ## Шаг 2. Включите функцию «Работа с тегами» Чтобы бот ставил теги сам, добавьте в проект функцию **«Работа с тегами»** (раздел [Функции](./30-functions.md)). Пока она выключена, бот теги не трогает, их ставит только оператор. У функции есть один переключатель, **«Разрешить боту создавать новые теги»**: - **включён**, если подходящего тега в списке нет, бот заведёт новый (коротко, 1-3 слова) и сам добавит ему описание; тег появится на странице «Теги» с бейджем «создано ИИ»; - **выключен**: бот выбирает **только** из тегов, которые вы уже завели; ничего нового не придумывает. После этого опишите в [промпте](../01-bot/11-system-prompt.md), что отслеживать («определяй город клиента», «помечай тип запроса»). Дальше бот вешает теги **по ходу разговора сам**. **Важно:** бот **добавляет** теги к уже стоящим и **не стирает** чужие (в том числе ваши, поставленные вручную). Регистр выравнивается автоматически: «астана» от бота и «Астана» из списка станут одним тегом. Снять тег может оператор в карточке лида. --- ## Шаг 3. Сегментация: фильтр и отчёты **В разделе «Лиды»** фильтруйте список **по тегам**: выберите несколько, покажутся лиды, у которых есть **все** выбранные теги (логика «И»). Фильтр учитывается и при [экспорте](../04-crm/41-leads.md): выгрузите именно нужный сегмент, а в CSV будет колонка **«Теги»**. **На странице «Отчёты»** видны **все теги проекта** с числом лидов по каждому за выбранный период (теги с нулём тоже видны), и есть кнопка **«Выгрузить CSV»**: список тегов с описаниями и количеством за период. Блок «По тегам» по умолчанию включён и в письме-отчёте владельцу. В настройках отчёта можно выбрать, **какие теги** в него попадут: - **Топ-N**: N самых частых тегов за период (по умолчанию топ-5; число задаёте сами); - **Все**: все теги, которые встречались за период, от частых к редким; - **Выбранные**: только отмеченные вами теги (даже с нулём, удобно следить, что какой-то тег пока не присваивается). > 💡 **Зачем это на практике.** Навесил ботом тег `опт` на оптовиков, отфильтровал, выгрузил, сделал им отдельное предложение. Или отметил `недозвон`, и [дожимаешь](./33-drip.md) именно их. Теги превращают «кучу диалогов» в управляемые группы. --- ## Простыми словами Теги это стикеры, которые лепятся на клиентов. Сначала ты заводишь нужные стикеры на странице «Теги» и подписываешь, что каждый значит. Потом включаешь функцию «Работа с тегами», и бот начинает развешивать их сам прямо во время разговора: поговорил с оптовиком, повесил «опт», клиент из Астаны, «Астана». Что именно отслеживать, ты говоришь боту в промпте обычными словами. Бот не плодит дубли: сперва смотрит, какие стикеры уже есть, и берёт существующий. Можно разрешить ему придумывать новые (он сам и подпишет их) или запретить, тогда он клеит только из твоего списка. Чужие стикеры бот не срывает, только добавляет; снять может оператор. На одного человека до 20 стикеров. Зачем всё это? Чтобы потом в «Лидах» одним кликом отфильтровать, например, всех оптовиков или всех, кому не дозвонились, и поработать с ними отдельно. А на «Отчётах» видно сразу весь список тегов с числами и можно выгрузить в файл. Без тегов у тебя просто свалка диалогов, с тегами: аккуратные группы. --- **Дальше:** → [Диалоги](../04-crm/40-dialogs.md) **Связано:** [Лиды](../04-crm/41-leads.md) · [Дожимы](./33-drip.md) · [Аналитика](../04-crm/43-analytics.md) · [Функции](./30-functions.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Уведомления владельцу (Telegram и почта) URL: https://dosai.pro/docs/guide/03-tools/35-notifications [Документация](../README.md) › [Инструменты бота](../03-tools) › Уведомления владельцу # Уведомления владельцу > Бот сам пишет вам, как только появился горячий лид или нужно вмешаться в Telegram или на почту. ⏱ 8 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Это функция №1: бот ловит заявку в чате и сразу сообщает вам. > - Два способа: **Telegram** (мгновенно, в телефоне) или **Email** (на почту, без настройки). > - В тексте уведомления можно подставлять данные клиента: `{name}`, `{phone}` и т.п. > - Telegram-уведомление умеет ещё и **завершить диалог**: передать клиента вам в руки. ![Каталог функций: шаблоны уведомлений владельцу в Telegram, email и WhatsApp](/docs-guide-img/03-tools/function-notify.png) --- ## Зачем это нужно Бот отвечает клиентам круглосуточно, но решение: за вами. Уведомление это «звоночек»: клиент назвал имя и телефон, готов записаться или платить, вам приходит сообщение, и вы подключаетесь в нужный момент, а не читаете все диалоги подряд. 📌 **Пример (барбершоп).** Клиент пишет ночью: «запишите на завтра на 14:00». Бот предлагает время, фиксирует заявку и шлёт вам в Telegram: «Новая запись: Асан, +7 705…, завтра 14:00». Утром вы уже знаете о записи. --- ## Способ 1. Уведомление в Telegram ### Что понадобится - [ ] Телеграм-бот (создаётся за минуту через **@BotFather**) - [ ] ID чата, куда слать (ваш личный чат или группа команды) ### Шаги #### 1. Создайте бота в Telegram Откройте в Telegram **@BotFather** → команда `/newbot` → придумайте имя и username. BotFather пришлёт **токен** вида `123456789:AAExxxxxxxxxxxxxxxxxxxxxx`. Скопируйте его. ⚠️ **Важно.** Токен: это пароль от бота. Не публикуйте его. В DOS AI он хранится зашифрованным. #### 2. Узнайте ID чата - **Личный чат:** напишите боту **@userinfobot**, он пришлёт ваш `id` (число вроде `512345678`). - **Группа:** добавьте вашего бота в группу, затем добавьте туда же **@userinfobot**: он покажет ID группы (число со знаком минус, например `-1001234567890`). #### 3. Создайте функцию `Проект → Функции → Создать → Из готового шаблона → Уведомления владельцу → Уведомление в Telegram`. Заполните: - **Токен бота**, из шага 1; - **ID чата**, из шага 2; - **Шаблон сообщения**: текст уведомления. Кнопками-чипами вставляйте переменные: `{name}`, `{phone}` и системные `{{date}}`, `{{time}}`. 📌 **Пример шаблона:** `🔔 Новая заявка от {name}, тел: {phone}\n{{date}} {{time}}`. #### 4. Опишите, КОГДА слать В поле «Когда боту это вызывать» опишите повод: например «когда клиент назвал имя и телефон и согласился записаться, отправь уведомление». По этому описанию ИИ решает, в какой момент дёрнуть функцию. ### Завершить диалог после уведомления В настройках Telegram-уведомления есть переключатель **«Завершить диалог после отправки»**. Если включить, после успешного уведомления бот замолкает на этом чате (передаёт клиента вам). Удобно для схемы «бот квалифицировал → дальше говорит человек». ## Способ 2. Уведомление на почту Самый простой вариант: работает сразу, ничего создавать в сторонних сервисах не нужно. `Создать → Из готового шаблона → Уведомления владельцу → Уведомление на почту`. Укажите: - **Email**: куда слать; - **Тема** и **Текст письма** это с теми же переменными `{name}`, `{phone}`, `{{date}}`. Письмо приходит вам с адреса `noreply@dosai.pro`. ## Проверь, что работает Откройте функцию → кнопка **«Проверить»** → заполните примеры значений → бот отправит тестовое уведомление вам в Telegram/на почту. В Telegram тестовое сообщение помечается префиксом «🧪 ТЕСТ». ## Частые ошибки | Симптом | Причина | Что нажать | |---|---|---| | Уведомление не приходит в Telegram | Вы не написали боту первым / неверный chat_id | Напишите боту любое сообщение; перепроверьте ID через @userinfobot | | «цель совпадает с номером бота» | В WhatsApp-уведомлении указан номер самого бота | Укажите другой номер получателя | | Письмо не приходит | Опечатка в адресе | Проверьте email в настройках функции | ## Вопросы, которые обычно возникают **Можно слать в группу, а не лично?** Да. Добавьте бота в группу и используйте ID группы (с минусом). **Бот будет слать на каждое сообщение клиента?** Нет, только когда выполнено условие из описания (например, собраны имя и телефон). Опишите повод точно. --- ## Под капотом - Telegram-уведомление: встроенная функция типа `builtin_telegram`; токен шифруется (AES-GCM), не хранится в открытом виде. - Тестовый чат помечает сообщение префиксом «🧪 ТЕСТ», чтобы не путать с боевым. - `Завершить диалог` ставит `conversations.ai_on=false` с причиной hand-off; повторно включить бота можно из дашборда. - Email-уведомление (`builtin_email`) уходит через Resend с таймаутом 15 секунд; получатель: один адрес (множественные через запятую отклоняются как защита от рассылки). --- ## Простыми словами Бот, как администратор, который сидит в чате круглосуточно. Когда приходит «горячий» клиент, бот толкает вас в плечо: «эй, тут заявка», и пишет вам в телеграм или на почту. Вы не читаете все переписки, а подключаетесь только когда реально нужно. --- **Дальше:** → [Запись на время](./36-booking.md) **Связано:** [Функции](./30-functions.md) · [Письмо клиенту](./38-email-customer.md) **Не получилось?** → [Функция не срабатывает](../09-troubleshooting/91-function-fails.md) --- ## Запись на время (Calendar и движок окошек) URL: https://dosai.pro/docs/guide/03-tools/36-booking [Документация](../README.md) › [Инструменты бота](../03-tools) › Запись на время # Запись на время > Бот сам показывает свободное время и записывает клиента: простым способом через Google Calendar или «движком окошек» для нескольких специалистов. ⏱ 12 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Три способа записи: выберите под свой бизнес (ниже шпаргалка). > - **Google Calendar**: один специалист, простой график. > - **Движок окошек**: несколько мастеров, график в таблице, обеды/отпуска/ограничения. > - **Google Таблицы**, если вы уже ведёте слоты строками в таблице. ![Каталог функций: шаблон записи на свободные окошки (Google Календарь / движок слотов)](/docs-guide-img/03-tools/function-booking.png) --- ## Как выбрать способ | Ваша ситуация | Способ | |---|---| | Один мастер/кабинет, простой график | **Google Calendar**: бот смотрит занятость календаря и записывает | | Несколько специалистов, график в таблице, есть обеды, отпуска, ограничения по дням/возрасту | **Движок окошек**: сервер сам считает свободные слоты, бот не ошибается | | Вы уже ведёте слоты строками в таблице | **Google Таблицы** (см. [статью про Таблицы](../05-integrations/51-google-sheets.md)) | --- ## Способ A. Google Calendar (один специалист) ### Что понадобится - [ ] Google-календарь - [ ] Доступ для сервис-аккаунта (одна кнопка в настройках функции) ### Шаги 1. `Проект → Функции → Создать → Из готового шаблона → Запись на время → группа «Google Calendar»`. Здесь 5 готовых действий: проверить свободное время, записать, перенести, показать записи, отменить. 2. В настройках укажите **Календарь** это **ID вашего календаря**, для основного его ID = ваш email в Google (например `ivan@gmail.com`), для отдельного: адрес вида `...@group.calendar.google.com`. Затем нажмите **«Проверить подключение»**. ⚠️ Слово `primary` **не** подойдёт, так бот попадёт в свой технический календарь, вам не видимый, и записи «пропадут»; кнопка проверки в этом случае покажет красную ошибку. 3. Откройте сервис-аккаунту доступ к календарю: на панели функции есть email сервис-аккаунта, добавьте его в доступ календаря с правами «Редактор». 4. Настройте **расписание работы**: рабочие дни, часы, обед, длительность слота, минимальный запас до записи. Это настройки самой функции: бот будет предлагать только время внутри них. ⚠️ **Важно.** Расписание работы задаётся прямо в настройках функции «Проверить свободное время». Бот предлагает слоты строго в этих рамках. 📌 **Пример (стоматология).** Функция «Записать клиента» с длительностью слота 60 минут, рабочие дни Пн-Сб 9:00-19:00, запас 60 минут. Бот не запишет на ближайший час и не предложит воскресенье. ## Способ 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» оставлена на случай тонкой правки. ## Проверь, что работает **Движок окошек:** откройте функцию → **«Проверить график»**. Это главный экран самопроверки: он показывает, что сервер понял из вашей таблицы: кого видит, что вычитал из каждого комментария, кто скрыт и почему, до какой даты заполнено расписание. Если кто-то из специалистов не появляется у клиентов, ответ будет здесь. Дальше **«Проверить»** → передайте услугу (и возраст, если нужен) → вернётся список свободных слотов. Для 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`; конструктор сериализует их за вас. --- ## Простыми словами Представьте администратора, который наизусть знает график всех мастеров: кто когда работает, у кого обед, кто в отпуске, кого нельзя ставить детям. Клиент говорит «хочу на гитару»: администратор мгновенно называет реальные свободные окошки. Движок окошек это и есть такой администратор внутри бота. А если мастер один, хватит простого календаря. --- **Дальше:** → [Бот выставляет счёт](./37-payments-bot.md) **Связано:** [Google Таблицы](../05-integrations/51-google-sheets.md) · [Google Calendar](../05-integrations/52-google-calendar.md) **Не получилось?** → [Функция не срабатывает](../09-troubleshooting/91-function-fails.md) --- ## Бот выставляет счёт (Kaspi) URL: https://dosai.pro/docs/guide/03-tools/37-payments-bot [Документация](../README.md) › [Инструменты бота](../03-tools) › Бот выставляет счёт # Бот выставляет счёт (Kaspi) > Бот сам выставляет клиенту счёт прямо в чате: клиент платит через push в Kaspi, деньги идут на вашу Kaspi-кассу. ⏱ 7 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Клиент готов платить → бот создаёт счёт → клиенту приходит push в приложение Kaspi. > - Деньги идут **напрямую на вашу Kaspi-кассу**. > - Сначала подключите платежи в разделе **«Платежи»** проекта. > - Бот сам спрашивает у клиента сумму и номер, не выдумывает. ![Раздел «Приём оплат»: онбординг Kaspi-кассы и управление счетами клиентов](/docs-guide-img/06-money/payments.png) --- ## Зачем это нужно Чтобы не уводить клиента из переписки на сторонние ссылки. Договорились, бот тут же выставил счёт, клиент подтвердил оплату в 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`: создаёт счёт через apipay (sub-merchant владельца) и шлёт Kaspi-push. Валидация суммы (50 … 10 000 000 ₸) и номера: до обращения к провайдеру. - Структурированные коды ошибок (`sub_merchant_not_connected`, `kaspi_auth_lost` и т.п.) дают боту понять, как ответить клиенту. - В тест-чате счёт не создаётся, возвращается симуляция успеха. --- ## Простыми словами Раньше, чтобы взять оплату, нужно было кидать клиенту ссылку или реквизиты и надеяться, что он дойдёт. Теперь бот прямо в чате выставляет счёт, клиенту в Kaspi прилетает «оплатить 3 500 ₸?», он жмёт «да», и всё. Деньги: сразу на вашу кассу. --- **Дальше:** → [Письмо клиенту](./38-email-customer.md) **Связано:** [Функции](./30-functions.md) **Не получилось?** → [Функция не срабатывает](../09-troubleshooting/91-function-fails.md) --- ## Письмо клиенту URL: https://dosai.pro/docs/guide/03-tools/38-email-customer [Документация](../README.md) › [Инструменты бота](../03-tools) › Письмо клиенту # Письмо клиенту > Бот сам пишет клиенту письмо: подтверждение, реквизиты, инструкцию или материалы. Ответ клиента приходит на вашу почту. ⏱ 5 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Бот отправляет письмо конечному клиенту от имени вашей компании. > - Тему и текст бот **составляет сам** по ходу разговора. > - Письмо уходит с адреса `noreply@dosai.pro`; если клиент ответит, придёт на ваш email. > - Работает сразу, без подключения почтового сервиса. ![Каталог функций: шаблон отправки письма клиенту на email](/docs-guide-img/03-tools/function-email.png) --- ## Зачем это нужно Иногда клиенту нужно прислать что-то письмом: подтверждение записи, реквизиты для оплаты, договор, инструкцию. Бот делает это сам, не отвлекая вас. 📌 **Пример (автошкола).** Клиент записался на занятие. Бот: «отправил на вашу почту памятку, что взять с собой и адрес». Клиент получает письмо, бот продолжает диалог. ## Что понадобится - [ ] Ваш 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` = имя проекта ``, `reply_to`: ваш email из настроек (пусто → email аккаунта владельца). - Гарды: один валидный адрес получателя (защита от рассылки), очистка заголовков, троттлинг 1 письмо в минуту на адрес+содержимое. - Тему/текст/получателя передаёт модель; владелец задаёт только адрес для ответа. --- ## Простыми словами Бот умеет не только писать в чат, но и отправить клиенту нормальное письмо: например, реквизиты или памятку. Письмо уходит как будто от вашей компании, а если клиент ответит, ответ придёт вам на почту. Ничего настраивать не нужно, только укажите свой email. --- **Связано:** [Функции](./30-functions.md) · [Уведомления владельцу](./35-notifications.md) **Не получилось?** → [Функция не срабатывает](../09-troubleshooting/91-function-fails.md) --- ## Рассылки по базе контактов URL: https://dosai.pro/docs/guide/03-tools/39-broadcasts [Документация](../README.md) › [Инструменты бота](../03-tools) › Рассылки # Рассылки по базе контактов > Появилась акция или новость? Отправь сообщение сразу всей своей базе в Telegram, с сегментами, отложенным запуском и кнопками. ⏱ 7 мин · 👤 для владельца и админа · 🟢 live > **За 30 секунд:** > - Раздел **«Рассылки»** в меню проекта: массовое сообщение по своим контактам. > - **Только Telegram.** WhatsApp недоступен намеренно: массовая отправка грозит баном номера. > - Сегментируй по **статусу лида**, **тегу** или **рекламной кампании**; перед отправкой видно **охват** (сколько получателей). > - Можно **отложить** на будущее время и прикрепить **кнопки** (ответ/ссылка). > - Кто написал «стоп», **исключается автоматически**. Отправка идёт **постепенно** (бережно к анти-бану). ![Раздел «Рассылки»: массовая отправка по сегментам с отложенным запуском](/docs-guide-img/03-tools/broadcasts.png) --- ## Зачем это нужно Дожимы напоминают о себе одному клиенту по таймеру. А рассылка это когда нужно сказать **всем сразу**: «в субботу скидка 20%», «открылся новый филиал», «записи на январь открыты». Раньше для этого пришлось бы вручную писать каждому, теперь это одно сообщение и пара кликов. 📌 **Пример.** Барбершоп запускает акцию на стрижку. Владелец делает рассылку по тегу «постоянный клиент» в Telegram, 140 человек получают сообщение с кнопкой «Записаться», отправка растягивается на несколько минут, никто из отписавшихся не получает спам. ## Что понадобится - [ ] Подключённый [Telegram-канал](../02-channels/22-telegram.md) (рассылки работают только по нему). - [ ] Роль **владелец** или **админ** проекта (раздел доступен только им). - [ ] Желательно, настроенные [теги](./34-tags.md), чтобы точно выбрать, кому слать. ## Шаги ### 1. Открой раздел «Рассылки» В меню проекта нажми **«Рассылки»**. Создай новую это кнопка вверху. ### 2. Выбери, кому отправить (сегмент) Сузь аудиторию любым из фильтров (или оставь пустым, уйдёт всей базе Telegram): - **Статус лида**: например только «горячие» или «потенциальные». - **Тег**: например «постоянный клиент» или «был на пробном». - **Рекламная кампания**: только тем, кто пришёл по конкретной рекламной ссылке. > 💡 **Совет.** Под полем сегмента сразу показывается **охват**, сколько контактов получат сообщение. Сверься с числом перед отправкой. ### 3. Напиши сообщение и (по желанию) добавь кнопки Введи текст. Можно прикрепить до **8 кнопок**: - **Кнопка-ответ**: клиент жмёт, бот получает её как сообщение и продолжает диалог. - **Кнопка-ссылка**: открывает URL (только `http`/`https`). ### 4. Отправь сейчас или запланируй - **Сейчас**: рассылка уходит в очередь и начинает рассылаться постепенно. - **На потом**: укажи дату и время; рассылка будет ждать в статусе «запланирована» и стартует сама в нужный момент. ## Проверь, что работает Статус рассылки меняется: `черновик → запланирована → в очереди → отправляется → отправлено`. В списке видно счётчики (сколько ушло). Запущенную рассылку можно **отменить**, пока она в очереди или ещё идёт. ## Частые ошибки | Симптом | Причина | Что нажать | |---|---|---| | Нет канала для рассылки | Не подключён Telegram | [Подключить Telegram](../02-channels/22-telegram.md) | | Охват = 0 | Слишком узкий сегмент или нет Telegram-контактов | Ослабь фильтр (убери тег/статус) | | Хочу слать в WhatsApp | Намеренно недоступно (риск бана номера) | Используй Telegram | ## Вопросы, которые обычно возникают **Почему нельзя рассылать в WhatsApp?** Массовая отправка с подключённого номера WhatsApp: самый быстрый путь к его блокировке. Поэтому рассылки ограничены Telegram на уровне системы, а не спрятаны в интерфейсе. **А если человек просил больше не писать?** Контакты, которые написали «стоп» (отписались), исключаются из любой рассылки автоматически: отправлять им повторно нельзя. **Это то же самое, что дожимы?** Нет. [Дожимы](./33-drip.md): авто-напоминания одному клиенту по таймеру после его действия. Рассылка: разовое сообщение сразу многим. --- ## Под капотом (для разработчиков и любопытных) - Таблица `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 так нельзя: за массовую рассылку номер банят. --- **Дальше:** → [Лиды](../04-crm/41-leads.md) **Связано:** [Дожимы](./33-drip.md) · [Теги](./34-tags.md) · [Telegram](../02-channels/22-telegram.md) **Не получилось?** → [Канал не работает](../09-troubleshooting/92-channel-down.md) --- ## Исходящие диалоги (бот пишет первым) URL: https://dosai.pro/docs/guide/03-tools/40-outreach [Документация](../README.md) › [Инструменты бота](../03-tools) › Исходящие диалоги # Исходящие диалоги (бот пишет первым) > Есть база заявок, но руки не доходят обзвонить? Бот сам напишет первым в WhatsApp по каждому номеру, аккуратно, по капле, с паузами и лимитами, чтобы не спалить номер. ⏱ 12 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Исходящие = бот **сам инициирует** диалог с человеком из заявки (пишет первым), а не ждёт входящего. > - Работает только через **подключённый WhatsApp-канал (QRDOS)**. > - Это **серый режим**: WhatsApp может забанить номер за сообщения незнакомцам. Включает только владелец, под свою ответственность. > - Текст первого сообщения вы пишете **сами** (готовые варианты, без ИИ). Бот шлёт случайный из списка, с подстановкой имени и услуги. > - Первый запуск ведёт **мастер**: Сообщение (что писать) → Номера (кому) → Проверка и запуск, включая **тест на своём номере** одной кнопкой. > - Рассылка по списку номеров **бесплатна** (готовый текст, ИИ не тратится). --- ## ⚠️ Сначала прочтите про риск Исходящие, это **серый режим**. Вы пишете **первыми** незнакомым номерам. WhatsApp считает это спам-паттерном и может **заблокировать номер**, а это ваш основной рабочий номер: при бане теряется вся переписка с текущими клиентами. Все встроенные защиты (лимиты, паузы, прогрев, проверка номера, автопауза) только **снижают** риск, но не убирают его. 🚫 **Не включайте на главном номере**, если не готовы к риску бана. Лучше отдельный номер под холодную рассылку. Перед запуском обязательно прочтите [Гигиену и антибан](../02-channels/23-anti-ban.md). Включить Исходящие может **только владелец** проекта, поставив галку «Понимаю риск и беру ответственность на себя». --- ## Что нужно до старта 1. **Подключённый WhatsApp-канал (QRDOS).** См. [Подключение WhatsApp](../02-channels/21-whatsapp-wazzup.md). Без живого канала бот физически не сможет писать: лиды будут копиться в очереди, но не отправляться. В кабинете вы увидите красное предупреждение «WhatsApp-канал не подключён». 2. **Роль владельца.** Включение и приём ответственности доступны только владельцу. Баланс для рассылки по списку **не требуется**: первое сообщение это готовый текст, ИИ не участвует, токены не тратятся. --- ## Как устроена страница **Первый запуск: мастер.** Пока кампания ни разу не запускалась, страница показывает один экран с текущим шагом: 1 Сообщение → 2 Номера → 3 Проверка и запуск. Формы прямо в шагах, ничего искать не нужно. Мастер можно пропустить ссылкой сверху; после запуска он больше не появляется. **Дальше: кабинет кампании.** - **Пульт** (карточка сверху): статус кампании словами и, главное, **почему бот молчит прямо сейчас**: «Кампания на паузе: причина», «Защитная пауза после подключения: ещё ~N мин», «Сейчас нерабочие часы», «Дневной лимит исчерпан», «Работает: в очереди N» или «Очередь пуста». Рядом полоса **«Сегодня: X из Y»** (сколько первых сообщений уже отправлено против действующего лимита; при прогреве написано «прогрев номера, день N»). Справа всегда красная кнопка **«Стоп всё»** (мгновенная пауза), на паузе вместо неё «Снять паузу». Текст про риск свёрнут в маленькую ссылку. - **Пульс кампании**: четыре живые плитки (Новые / В очереди / Отправлено / Ответили). Обновляются сами; **клик по плитке открывает список лидов уже с этим фильтром**. - **Четыре вкладки**: «Рассылка» (номера, запуск, список лидов, ответы), «Сценарий» (тексты), «Безопасность» (лимиты), «Статистика» (воронка и доставка). - При **первом ответе** появится разовый баннер «Есть ответ!» с кнопкой к списку ответивших. --- ## Шаг 1. Сценарий: что бот пишет первым Вкладка **«Сценарий»**. Здесь вы задаёте **типы заявок** и текст первого сообщения для каждого. **Тип заявки** это категория обращений со своим текстом. Например, заявки на «SMM», «Таргет», «Сайт»: заведите три типа, для каждого свой текст. Если заявки однотипные, хватит одного типа «Основной». Как заполнить: - **Текст первого сообщения** (обязательно). Вы пишете **готовое сообщение**, бот отправит его как есть, без ИИ. - **Несколько вариантов** (по желанию, до 10). Бот каждому новому человеку отправит **случайный** из списка. Это «ротация»: снижает риск блокировки, WhatsApp не любит, когда со всех номеров летит один и тот же текст. - **Название типа** (по желанию). Только для вас. Пустое → «Основной». - **Авто-подбор типа** (по желанию). Если в данных заявки есть поле с определённым значением (например, `услуга = SMM`), бот сам выберет нужный тип. ### Подстановки В текст можно вставить переменные: - `{{имя}}`: подставится имя из заявки. - `{{услуга}}`: подставится услуга. Если в заявке имени или услуги нет, кусочек **аккуратно уберётся** (включая предлог перед ним), сырые скобки клиенту никогда не уходят. 📌 **Пример:** «Здравствуйте, {{имя}}! Вы оставляли заявку на {{услуга}}: подскажите, актуально?» → для заявки без имени и услуги превратится в «Здравствуйте! Вы оставляли заявку: подскажите, актуально?» 💡 Пока вы печатаете, рядом с полем обновляется **живое превью «Так увидит клиент»**: ваше сообщение в виде WhatsApp-пузыря с подставленным примером имени. Видно, как текст выглядит у клиента, ещё до отправки. Кнопки-примеры («пример 1», «пример 2») вставят готовый текст, чтобы отредактировать под себя, а черновик сохраняется сам и не потеряется при переходе на другую вкладку. Проверить текст на конкретном номере из вашего списка можно кнопкой **«Показать пример сообщения»** в блоке «Добавить номера» (вкладка «Рассылка»). А если заданы дожимы, внизу «Сценария» появится лента **«Вся цепочка глазами клиента»**: первое сообщение и напоминания по порядку, как их получит человек. ### Дожимы (необязательно) Тут же можно задать **напоминания** тем, кто не ответил на первое сообщение. Это тоже **готовый текст** (с подстановкой `{{имя}}`), а не ИИ. Например: первое напоминание через 24 часа, второе через 72. Дожимы работают **только пока человек молчит**. Как только он ответит, напоминания прекращаются и диалог переходит в обычный режим (подключается основной бот проекта). Подробнее про механику, [Дожимы](./33-drip.md). --- ## Шаг 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//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: полный лимит | Свежий номер разгоняется постепенно, резкий старт = красный флаг для WhatsApp. Фактический план прогрева написан прямо под переключателем. | | **Пауза между сообщениями: от / до** | 60-180 сек | Бот берёт случайное время из диапазона: разброс выглядит по-человечески, а не как робот по таймеру. | | **Только в рабочие часы** | включено | Бот пишет только в часы работы из расписания проекта (если оно задано). | **Блок «Автозащита»** (работает сама): | Защита | По умолчанию | Что делает | |---|---|---| | **Автопауза при недоставке** | 30% из последних 10 | Если много сообщений не доходит (мёртвые номера / блокировки), кампания сама встаёт на паузу и владельцу приходит уведомление. | | **Свежесть заявки** | 10 мин (только для API-лидов) | Старые заявки из API не холодятся (по разовым спискам это правило не действует). | | **Убирать из очереди** | через 7 дней | Лид, простоявший в очереди дольше, снимается сам: бот не пишет по совсем протухшей базе. | | **Требовать согласие** | включено (для API-лидов) | Писать только тем, кто отметил согласие в форме. Для списков и Telegram согласие покрыто модалкой ответственности. | Плюс защиты, которые работают всегда, без настройки: - **Пауза после подключения канала, 15 минут.** Сразу после подключения WhatsApp бот не пишет ещё 15 минут (это самое опасное окно для свежего соединения). - **Проверка номера в WhatsApp.** Перед отправкой бот проверяет, есть ли номер в WhatsApp. Нет → пропускает (отправка на несуществующий номер = сигнал бана). - **Не пишет в существующий диалог.** Если с номером уже есть переписка, бот не влезает (это уже не холодный контакт). - **Не пишет на ваш собственный номер** (тот, что подключён как канал). - **Стоп-лист.** Номер, добавленный в стоп-лист, бот больше никогда не тронет. 🚨 **Функция остановки диалога.** Чтобы бот умел остановиться по просьбе клиента («не пишите мне»), в проекте должна быть включена встроенная функция остановки. На вкладке «Безопасность» видно, включена она (✓) или нет (✗). **Стоп всё.** В любой момент кнопкой «Стоп всё» (красная, на пульте сверху) можно мгновенно поставить всю кампанию на паузу. Причина паузы будет написана на пульте, рядом появится кнопка «Снять паузу». --- ## Как читать статусы лидов Список лидов живёт внизу вкладки **«Рассылка»** и показывает, что с каждым номером. Есть **поиск** (телефон в любом формате или имя) и фильтр по статусу. Статусы отображаются цветными пилюлями (оранжевая = в работе, зелёная = успех, красная = ошибка); наведите на статус, всплывёт подсказка. Быстрый путь: клик по плитке «пульса» сразу открывает список с фильтром по этому статусу. 📌 Фильтр **«Ответил»** показывает не таблицу, а **витрину ответов**: кто ответил, **что именно написал** (первая реплика) и кнопка «Открыть диалог». Это главный экран результата: сюда стоит заглядывать каждое утро. | Статус | Значение | |---|---| | **Новый** | Загружен, но не запущен. Нажмите «Начать». | | **В очереди** | Ждёт отправки. Бот напишет по капле. | | **Открывается** | Прямо сейчас бот открывает диалог. | | **Отправлено** | Бот написал первым, ждём ответа. | | **Ответил** | Лид ответил! Диалог перешёл в обычный режим (см. [Диалоги](../04-crm/40-dialogs.md)). | | **Ошибка** | Не удалось отправить. Можно повторить. | | **Пропущен** | Номер пропущен, рядом причина (см. ниже). | | **Устарел** | Слишком долго ждал в очереди, снят автоматически. | Причины у статуса **«Пропущен»**: `нет в WhatsApp`, `это ваш номер`, `уже есть диалог`, `в стоп-листе`, `нет согласия`, `заявка устарела`. Во вкладке **«Статистика»**: - **Воронка исходящих**: Отправлено → Прочитано → Ответили, с процентами от отправленных. Сразу видно, где теряются люди: не доходит текст или доходит, но не цепляет. - Чипы **«Пропущено / Ошибки / Устарело»** под воронкой кликабельны: открывают список лидов с этим фильтром. - Оценка очереди: «В очереди N лидов, при лимите X в день это примерно Y дней». - **Доставка первого сообщения**: дошло ли до телефона (✓✓), прочитал ли лид, среднее и медианное время до прочтения, последние прочтения поимённо. Цифры обновляются сами, пока вкладка открыта. --- ## Как проверить, что всё работает Прежде чем запускать на реальной базе, прогоните тест на **своём втором номере**. Для этого в мастере (шаг «Проверка и запуск») есть блок **«Сначала проверьте на себе»**: введите номер, нажмите «Отправить тест», и статус теста будет виден тут же вживую. Три условия честного теста: 1. **Канал подключён и «на связи»** (иначе тест не уйдёт, пульт это прямо скажет). 2. **Свежий номер.** Не тот, что подключён как канал («Пропущен: это ваш номер»), и без прошлой переписки с этим ботом («Пропущен: уже есть диалог»). 3. **Терпение 5-20 минут.** Бот-рассыльщик просыпается раз в 5 минут, а первые 15 минут после подключения канала действует защитная пауза. Если сейчас что-то мешает (пауза, нерабочие часы, исчерпанный лимит), блок теста напишет это прямо под статусом, это не поломка. ✅ Сообщение пришло на телефон, а ответ с него перевёл статус в «Ответил» → связка работает от начала до конца, можно запускать базу. ❌ Тишина → посмотрите на пульт (он называет причину) и на статус тестового номера: «Пропущен» (и почему), «Ошибка» или «В очереди» (ещё не прошёл паузы/лимиты). --- ## 💬 Простыми словами Обычно бот отвечает тем, кто написал вам сам. **Исходящие** переворачивают это: бот **сам пишет первым** людям из вашей базы заявок, как будто менеджер обзванивает лиды, только в WhatsApp и автоматически. Вы делаете три вещи, и мастер сам ведёт по ним: пишете, **что** сказать (готовый текст, бот его не сочиняет), даёте список, **кому** написать, и жмёте «Запустить». Дальше бот пишет по одному, с паузами, чтобы номер не забанили, а пульт сверху показывает, что происходит, и объясняет любую задержку. Главное помнить: это рискованно для номера (WhatsApp не любит, когда пишут незнакомцам), поэтому не ставьте на свой главный номер и начинайте с маленькой свежей базы. И не ждите, что бот напишет мгновенно после подключения: первые 15-20 минут он специально молчит, это защита (пульт так и напишет). --- ## 🔧 Под капотом (для разработчика) - Отправка идёт только через self-hosted WhatsApp-канал (QRDOS). На других провайдерах проект молча пропускается. - Рассыльщик, отдельный cron-тик (раз в 5 минут). За один тик, не больше 2 сообщений на проект и не больше 6 суммарно, с паузами. - Первое сообщение собирается **без ИИ**: случайный вариант из типа заявки + подстановка `{{имя}}`/`{{услуга}}`. Ноль токенов. Поэтому рассылка по списку бесплатна. - Холодный диалог **не считается «диалогом»** в аналитике, пока лид не ответит (чтобы не портить конверсию). Как ответит, засчитывается один раз. - Telegram-ловец, единственное место, где в Исходящих участвует ИИ (классификатор «заявка / не заявка»), поэтому у него отдельный дневной лимит распознаваний и нужен баланс. --- ## Не получилось? - [Бот молчит](../09-troubleshooting/90-bot-silent.md): если сообщения не уходят. - [Канал недоступен](../09-troubleshooting/92-channel-down.md): если WhatsApp-канал отвалился. - Посмотрите на пульт сверху страницы: он словами называет, почему бот молчит прямо сейчас. Статус конкретного лида в списке «Рассылки» уточнит причину по номеру. --- ## Диалоги, лента, перехват, «AI на паузе» URL: https://dosai.pro/docs/guide/04-crm/40-dialogs [Документация](../README.md) › [Работа с клиентами](../04-crm) › Диалоги # Диалоги: лента, перехват, «AI на паузе» > «Диалоги» это центр, где ты видишь все переписки бота с клиентами в реальном времени и можешь **в любой момент вмешаться**, взять разговор на себя, поставив ИИ на паузу. ⏱ 9 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Раздел **«Диалоги»** (проект → `chats`): лента всех переписок, обновляется **сама, без F5**. > - У каждого диалога в шапке, переключатель **«AI ON / AI OFF»**: красный = ИИ выключен в этом чате. > - **Начал писать клиенту вручную → ИИ автоматически встаёт на паузу** (настраивается). Это перехват. > - Если пишешь, а ИИ ещё включён, увидишь подсказку *«ИИ всё ещё отвечает, выключите „AI" в шапке»*, чтобы не отвечать вдвоём. > - Каналы WhatsApp и Telegram видны вместе, помечены значком. ![Раздел «Диалоги»: лента переписок в реальном времени, пауза AI и перехват оператором](/docs-guide-img/04-crm/dialogs.png) --- ## Что это и зачем Бот общается с клиентами сам, но иногда нужно вмешаться: сложный вопрос, дорогой клиент, жалоба. Раздел **«Диалоги»** (route `/projects//chats`) показывает все переписки списком (`ConversationList`) + панель открытого чата (`ChatPanel`). Всё [обновляется в реальном времени](#реалтайм-без-f5): новые сообщения и статусы прилетают сами. Слева, список диалогов с фильтрами, справа, переписка с клиентом и поле ввода. Сверху чата: управление ИИ и статусом. --- ## Перехват: взять разговор на себя Главная механика раздела. Есть два способа поставить ИИ на паузу в конкретном диалоге: **1. Просто начни писать клиенту вручную.** Когда оператор отправляет сообщение из диалога, платформа (если включена настройка `pause_on_operator`) автоматически: - ставит `ai_on = false` в этом диалоге, - помечает причину `operator_joined_chat`, - запоминает время паузы. То есть бот замолкает, разговор ведёшь ты. Это самый естественный перехват, «вошёл и говоришь». Отдельно про случай, когда вы начали писать в ту же секунду, что и бот. Ответ бота идёт до клиента не мгновенно: он ждёт паузу буфера, потом думает, потом длинный ответ уходит несколькими сообщениями с человеческими паузами между ними. Если вы вступили в разговор посреди этого, платформа обрывает недосланные сообщения бота, а в переписке остаётся ровно то, что клиент действительно увидел. Одно-два сообщения, уже ушедшие в WhatsApp до вашего, отменить нельзя: они у клиента на телефоне. **2. Переключатель в шапке.** Кнопка-пилюля **«AI ON / AI OFF»** (`AITogglePill`): нажал, ИИ выключен/включён вручную в этом диалоге (через `toggle-ai`). Красная рамка = выключен. > 💡 **Тонкие настройки перехвата** (в настройках проекта, `agent_config`): > - `pause_on_operator`: ставить ли ИИ на паузу, когда оператор пишет (можно отключить, если хочешь писать «вместе» с ботом); > - `ignore_first_operator_message`, не паузить на **первом** сообщении оператора (удобно, если первое: это пометка/приветствие); > - `exception_phrases`: фразы-исключения, после которых пауза **не** ставится. ### Защита от «двойного ответа» Если ты в режиме оператора начал печатать, а ИИ в этом диалоге **ещё включён**, платформа показывает предупреждение: > *«ИИ всё ещё отвечает, выключите „AI" в шапке, чтобы вести диалог самому»* Это чтобы вы с ботом не ответили клиенту одновременно. Увидел подсказку: выключи AI в шапке. --- ## Вернуть бота Закончил разговор: снова включи **«AI ON»** в шапке диалога. Бот продолжит вести клиента дальше. Пауза снимается только вручную: платформа не включит ИИ за тебя, чтобы не влезть в твой живой разговор. --- ## Отправить позже Клиент написал в час ночи, ответ у вас готов, но будить его сообщением незачем. Нажмите на часы рядом с полем ввода, выберите время, и сообщение уйдёт само. Есть три быстрые кнопки (через час, завтра в 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`), - **отложенные**: чаты, которые вы сами отложили на потом (кнопка «Отложить чат»), со счётчиком, - **«Ждут ответа»**: диалоги, где бот **намеренно промолчал** и ответить должен человек. Так бывает со старой перепиской после переподключения канала, со знакомым контактом и с клиентом, пришедшим не с рекламы. Рядом с фильтром стоит счётчик: видно, сколько таких накопилось. Плюс **сортировка** (свежие / старые / самые длинные переписки) и **сохранённые виды**: набрал нужную комбинацию фильтров, сохранил её под именем и возвращаешься одним кликом. > 💡 **«Ждут ответа» стоит открыть прямо сейчас, если бот работает не первый день.** Раньше такие чаты были помечены значком, но собрать их в одном месте было нельзя, и они копились незамеченными: это самая частая причина «клиент писал, а ему никто не ответил». Массовые действия, например, удалить пачку диалогов, доступны через выбор нескольких чатов. > ⚠️ Часть массовых действий (например, закрыть пачкой) требует роли **администратор**, как и одиночное действие того же типа. См. [Роли и права](../07-team/70-roles.md). --- ## Реалтайм без F5 Список и открытый чат обновляются автоматически через `useRealtimeConversations` (подписка на таблицу `conversations` по проекту, события INSERT/UPDATE/DELETE). Новое сообщение клиента, смена статуса, пауза ИИ: всё появляется само. **Обновлять страницу не нужно.** --- ## Звуковые уведомления Когда вкладка с диалогами свёрнута или неактивна, платформа подаёт тихий звуковой сигнал: - **двойной сигнал**: написал новый клиент (появился новый диалог), - **короткий сигнал**: новое входящее сообщение в существующем диалоге. Ответы бота и оператора звук **не издают**, сигналит только реальный клиент. Между сигналами всегда пауза в несколько секунд, поэтому активная переписка не превращается в пулемёт. Настройки живут в списке диалогов: **Фильтры → «Звуковые уведомления»**. Можно выключить звук целиком, оставить только «новый диалог» или только «новое сообщение», а также включить звук даже при открытой вкладке. Настройки сохраняются **отдельно для каждого проекта** в этом браузере: шумный бот с трафиком можно приглушить, не трогая остальные. --- ## Каналы в одной ленте WhatsApp и Telegram показываются вместе; канал виден по значку и идентификатору (`wz_…` / `tg_…`). Подробнее: [Обзор каналов](../02-channels/20-channels-overview.md). --- ## Простыми словами «Диалоги» это твоя диспетчерская. Здесь видно всё, что бот пишет клиентам, прямо вживую: ничего не надо обновлять. Если видишь, что в каком-то чате нужно вмешаться, просто начни писать клиенту сам, и бот тут же замолкает: дальше говоришь ты. Это и есть «перехват». В шапке каждого чата есть кнопка «AI», зелёная значит бот отвечает, красная, он на паузе и ждёт тебя. Закончил разговор: включи бота обратно той же кнопкой, и он продолжит. Платформа специально не включает его сама, чтобы не влезть в твою беседу. И маленькая страховка, если ты начал печатать, а бот ещё включён, появится подсказка «выключи AI в шапке», чтобы вы случайно не ответили клиенту вдвоём. --- **Дальше:** → [Лиды и их статусы](./41-leads.md) **Связано:** [Стадии диалога](./42-stages.md) · [Логи событий](./44-event-logs.md) · [Роли и права](../07-team/70-roles.md) · [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) **Не получилось?** → [Бот не отвечает, диагностика](../09-troubleshooting/90-bot-silent.md) --- ## Лиды и их статусы URL: https://dosai.pro/docs/guide/04-crm/41-leads [Документация](../README.md) › [Работа с клиентами](../04-crm) › Лиды # Лиды и их статусы > Заявки, которые бот собрал из переписок: кто, как связаться, насколько «горячий». Твоя воронка продаж. ⏱ 8 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - Лид = потенциальный клиент с данными (имя, телефон) и статусом. > - Бот **сам** создаёт лида, когда клиент квалифицировался и оставил контакт. > - 7 статусов, от «нет»/«потенциальный» до «конвертирован»/«потерян». > - Можно фильтровать, искать, экспортировать в CSV, заводить лида вручную. > - Статус можно менять руками; «конвертирован/потерян»: финальные. ![Раздел «Лиды»: список заявок со статусами, стадиями и источниками](/docs-guide-img/04-crm/leads.png) --- ## Зачем это нужно Переписок много, а важны те, кто реально готов купить. Лиды это «выжимка»: бот вытаскивает из диалогов контакты и интерес, ставит статус, и ты видишь воронку: кому перезвонить, кто горячий, кто отвалился. Без этого заявки тонут в чатах. ## Где это Меню проекта → **«Лиды»**. Смотреть может **viewer**, менять, **editor+**. ## Что такое лид У каждого лида есть: | Поле | Что это | |---|---| | **Имя** | Как зовут клиента (бот спросил/распознал) | | **Телефон** | Контакт для связи | | **Email** | Если оставил | | **Статус** | Насколько «горячий» (см. ниже) | | **Дата** | Когда появился | | **Резюме** | Краткая выжимка диалога от бота | | **Источник** | Канал (WhatsApp/Telegram), откуда пришёл | | **Заметки оператора** | Твои пометки | ## Статусы лида | Статус | Что значит | Создаёт лида? | |---|---|---| | **Нет** | Обычный посетитель, без интереса | нет | | **Потенциальный** | Есть интерес, но нет данных/решения | нет | | **Квалифицирован** | Согласен + есть контакт | ✅ да | | **Горячий** | Готов покупать, обсуждает оплату | ✅ да | | **Резерв** | Отложил, но вернётся | ✅ да | | **Конвертирован** | Сделка закрыта (оплатил) | финальный | | **Потерян** | Окончательно отказался | финальный | 💡 **Как ставится.** В основном **бот сам** по ходу разговора (если включена [воронка продаж](../01-bot/11-system-prompt.md)). Лид автоматически создаётся, когда статус становится «квалифицирован/горячий/резерв» **и** есть имя+телефон. Ты можешь поменять статус вручную в любой момент. 📌 **Пример.** Клиент уточнил цены, согласился записаться, оставил телефон → бот ставит «квалифицирован» → появляется лид. Дошёл до оплаты → «горячий». Оплатил → ты ставишь «конвертирован». ## Кто создаёт лида: статус, а не функция Это место, где обычно путаются. Разложим по полочкам. > **Главное:** при включённой воронке лида создаёт сам бот, **статусом**, на уровне промпта. При выключенной, телефон клиента (см. ниже). Никакую функцию для этого настраивать не нужно ни в том, ни в другом случае. В каждом ответе бот (если включена [воронка](../01-bot/11-system-prompt.md)) выставляет скрытое поле, статус лида. Ты его не видишь, видит платформа. Как только бот ставит **создающий статус** («квалифицирован» / «горячий» / «резерв»), платформа **автоматически** заводит карточку лида. Имя и телефон подставляются, если бот их уже узнал (по промпту он сначала их спрашивает). То есть: - **Квалификация** это момент, когда бот сам решил «это заявка» и поставил создающий статус. Это его суждение по правилам из [системного промпта](../01-bot/11-system-prompt.md), а **не кнопка и не функция**. Откуда берётся: бот читает разговор и определения статусов из промпта, и каждый ход выбирает подходящий. - **Лид**: карточка, которая появляется в результате этого статуса. ### Если воронка выключена [Воронку продаж](../01-bot/11-system-prompt.md) можно отключить: тогда бот не раскладывает разговор по статусам, а просто консультирует и продаёт. Раньше в этом режиме карточки лидов не появлялись вовсе, и человек, оставивший телефон, оставался только в переписке. Теперь по-другому: > **Воронка выключена: карточку заводит телефон.** Как только клиент назвал номер в разговоре, платформа сама создаёт лида и присылает уведомление в колокольчик. Ни статуса, ни функции для этого не нужно. Номер самого чата в WhatsApp сигналом не считается, иначе лидом становился бы каждый написавший. Нужен именно номер, прозвучавший в переписке. Статус у такой карточки ставится «квалифицирован», дальше меняй его руками как обычно. ### Функция ≠ создание лида [Функции](../03-tools/30-functions.md) (например «Уведомление в Telegram», «Запись на время», «Приём оплаты»): это **действия**, а не создание лида: - функция **«Уведомление владельцу»** шлёт тебе сообщение в Telegram «лови заявку», но карточку лида создаёт **статус**, а не она; - можно квалифицировать клиента **без единой функции**: лид всё равно появится в разделе «Лиды». Часто статус и функция срабатывают в одном ходе (бот квалифицировал клиента **и** отправил тебе уведомление): отсюда и путаница. Но это две независимые вещи: **статус** пишет карточку в CRM, **функция** делает действие во внешнем мире. ### Нужны ли функции для аналитики?. Нет Диалоги, лиды, конверсия, источники: [аналитика](./43-analytics.md) считается **сама**, из статусов лида и факта «бот ответил». Чтобы видеть правильные цифры, **не нужно настраивать ни одной функции**. Функции добавляют только когда боту нужно реальное действие: уведомить, записать на время, принять оплату. ## Свои статусы под твой бизнес Сейчас платформа работает со **стандартными 7 статусами лида**: они покрывают путь от «потенциальный» до «конвертирован»/«потерян» (см. [справочник статусов](../10-reference/103-statuses.md)). Возможность задать собственные статусы (кастомная воронка) **временно недоступна**: редактор убран из настроек, вернём в упрощённом виде. Нужны свои этапы под бизнес, напиши в поддержку: это ускорит возврат фичи, а пока логику этапов можно описать словами в [системном промпте](../01-bot/11-system-prompt.md) и уточнять картину [тегами](../03-tools/34-tags.md). ### Два продукта (или направления) Два пути: - **Один проект + [теги](../03-tools/34-tags.md)**: бот вешает на лида тег «Продукт А» / «Продукт Б», статусы общие. В аналитике увидишь разбивку по тегам. Подходит, если процесс продажи похож. - **Отдельные проекты**, если у продуктов разные скрипты, каналы и логика квалификации, заведи отдельный проект на каждый (свой бот, своя воронка). Чище и не путается. ## Что можно делать - **Фильтр по статусу** и **поиск** по имени/телефону/email; - **Фильтр по источнику**: каналу (WhatsApp/Telegram) и для рекламных/кампанийных лидов по **конкретному объявлению / площадке (Facebook/Instagram) / кампании / UTM**, чтобы одним кликом собрать всех лидов с этого источника. Разрез появляется, когда такие лиды есть; - **Колонка «Источник»** в таблице показывает не только канал, но и **название объявления / кампанию / площадку**: видно сразу, откуда лид, без захода в карточку; - **Колонка «Сумма»** и **сортировка по сумме** (↓/↑) это крупные сделки наверх; - **Диапазон дат**; - **Экспорт CSV** (Имя, Телефон, Email, Статус, Теги, Дата): учитывает активные фильтры; для обзвона или своей таблицы; - **Завести лида вручную** (кнопка создания): если клиент пришёл не через бота; - **Карточка лида** (клик): полные данные, смена статуса, **сумма сделки** (₸/$, попадает в аналитику как выручка по объявлению/источнику, учитывает офлайн-продажи), заметки оператора, кнопки «позвонить/написать», резюме диалога и **источник вплоть до объявления** (превью, заголовок, площадка, ссылка, UTM) для рекламных лидов; - **Массовые действия** (editor+): сменить статус, удалить, экспортировать выбранных. ## Связь с дожимами Лиды, которые «зависли» (квалифицировались, но не дошли до оплаты), кандидаты на [дожимы](../03-tools/33-drip.md): бот напомнит о себе сам. Настраивается авто-зачисление по статусу. ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Лидов нет, хотя переписки идут | Выключена воронка / клиенты не оставляют контакт | Включи [воронку](../01-bot/11-system-prompt.md), в промпте проси брать имя+телефон | | Лид создался без телефона | Бот квалифицировал по интересу, контакт позже | Дозапросит в диалоге; можно вписать вручную в карточке | | Не могу сменить статус | Роль **viewer** | Нужна **editor+** → [Роли](../07-team/70-roles.md) | | Дубли лидов | Клиент писал с разных номеров | Объедини вручную / веди по основному | ## Вопросы, которые обычно возникают **Чем лид отличается от диалога?** [Диалог](./40-dialogs.md) это вся переписка. Лид: «карточка клиента» с контактом и статусом, выжимка из диалога. Не каждый диалог становится лидом. **Бот сам ставит статусы или я?** В основном бот (если включена воронка). Но ты всегда можешь переопределить вручную. **Можно выгрузить базу клиентов?** Да, «Экспорт 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 символов, автосейв). --- ## Простыми словами Лиды это список твоих потенциальных клиентов, который бот собирает сам. Пока человек просто болтает это ещё не лид. Но как только он проявил интерес и оставил телефон, бот заводит на него «карточку» и помечает, насколько он близок к покупке: просто интересуется, готов записаться или уже горячий. Ты видишь весь список, можешь кому-то перезвонить, поменять статус руками, выгрузить в табличку. Когда клиент оплатил, ставишь «конвертирован», и видно, что сделка закрыта. Это и есть твоя воронка продаж, только заполняется она сама. --- **Дальше:** → [Биллинг](../06-money/60-billing.md) **Связано:** [Диалоги](./40-dialogs.md) · [Дожимы](../03-tools/33-drip.md) · [Аналитика](./43-analytics.md) --- ## Стадии диалога (воронка) URL: https://dosai.pro/docs/guide/04-crm/42-stages [Документация](../README.md) › [Работа с клиентами](../04-crm) › Стадии диалога # Стадии диалога (воронка) > Каждый диалог проходит **воронку** из 6 стадий, от «Приветствия» до «Завершено». Бот сам двигает клиента по ним, а ты видишь, на каком этапе кто застрял. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Воронка: **Приветствие → Квалификация → Презентация → Возражения → Закрытие → Завершено**. > - **Бот сам определяет стадию** по ходу разговора: это не ручная пометка. > - Стадия хранится у диалога; новый диалог стартует с **«Приветствие»**. > - Дошёл до **«Завершено»**, ИИ может встать на паузу (диалог отработан). --- ## Шесть стадий | # | Стадия | RU-метка | Что значит | |---|---|---|---| | 0 | `greeting` | **Приветствие** | клиент только написал, идёт знакомство | | 1 | `qualification` | **Квалификация** | бот выясняет потребность (что нужно, бюджет, сроки) | | 2 | `presentation` | **Презентация** | бот предлагает решение/услугу/цену | | 3 | `objection` | **Возражения** | клиент сомневается, бот отрабатывает | | 4 | `closing` | **Закрытие** | подводим к заявке/записи/оплате | | 5 | `done` | **Завершено** | диалог отработан | Это и есть «воронка продаж» внутри переписки. По ней видно, **где клиенты отваливаются**, если много застряло на «Возражениях», слабая отработка сомнений; много на «Презентации», не доводим до закрытия. --- ## Как стадия меняется **Стадию определяет сам бот** по смыслу разговора: это часть его «мышления» (см. [Как бот думает](../00-start/01-how-bot-thinks.md)). Не нужно вручную перетаскивать клиента по этапам: модель оценивает, на каком шаге диалог, и обновляет стадию. - Стадия хранится у диалога (поле `stage`). - Новый диалог начинается со стадии **«Приветствие»** (`greeting`). - Когда диалог доходит до **«Завершено»**, у платформы есть причина автопаузы `pipeline_stage_done`, бот может замолчать, посчитав диалог отработанным (см. [почему бот молчит](../09-troubleshooting/90-bot-silent.md)). > 💡 Хочешь, чтобы бот точнее переключал стадии под твой бизнес, опиши логику в [системном промпте](../01-bot/11-system-prompt.md), когда считать клиента «квалифицированным», что такое «закрытие» в твоём случае. --- ## Стадии и внешняя CRM Если подключена [внешняя CRM](../05-integrations/54-crm.md) (Bitrix24/amoCRM), внутренние стадии можно **сопоставить** со стадиями сделки в твоей CRM: тогда при смене стадии у диалога сделка автоматически двигается по воронке в CRM (через сопоставление стадий, см. [CRM](../05-integrations/54-crm.md)). > 📌 Платформа использует **стандартный набор** из 6 стадий и 7 статусов лида: он работает «из коробки» и покрывает большинство сценариев продаж. Возможность полностью заменить набор своим (кастомная воронка) **временно недоступна**: редактор убран из настроек, вернём в упрощённом виде. Если твоему бизнесу нужны свои стадии, напиши в поддержку, это ускорит возврат фичи. --- ## Простыми словами Представь обычную продажу: сначала поздоровались, потом выяснили, что человеку нужно, показали вариант, развеяли сомнения, договорились, закрыли. Вот эти же шесть шагов бот проходит в каждой переписке, и сам понимает, на каком он сейчас. Тебе не надо ничего отмечать руками. Польза простая: ты видишь, **где клиенты застревают**. Если куча диалогов зависла на «Возражениях», значит, бот плохо отвечает на сомнения, и это сигнал поправить промпт или базу знаний. А если хочешь, чтобы переходы между этапами совпадали с твоей CRM, связываешь их один раз, и сделки сами едут по воронке. --- **Дальше:** → [Аналитика](./43-analytics.md) **Связано:** [Диалоги](./40-dialogs.md) · [Лиды](./41-leads.md) · [Системный промпт](../01-bot/11-system-prompt.md) · [CRM](../05-integrations/54-crm.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Аналитика URL: https://dosai.pro/docs/guide/04-crm/43-analytics [Документация](../README.md) › [Работа с клиентами](../04-crm) › Аналитика # Аналитика > Раздел «Аналитика» отвечает на главный вопрос владельца: **сколько диалогов, сколько из них стали лидами и какая конверсия**, за сегодня и за последние 7 дней. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Метрики: **диалоги сегодня**, **лиды сегодня**, **конверсия за 7 дней**, графики по дням. > - **Конверсия = лиды ÷ диалоги** за период (в %). > - Разбивки: лиды **по статусам** и **по источникам**. > - Период по умолчанию, **7 дней** (время Алматы). ![Раздел «Аналитика»: диалоги, лиды, конверсия, время ответа и графики активности](/docs-guide-img/04-crm/analytics.png) --- ## Что показывает Страница (`/projects//analytics`) считает всё на сервере и показывает: | Метрика | Что это | |---|---| | **Диалоги сегодня** | переписки за сегодня, **где бот реально ответил**. Старые чаты, подтянувшиеся при подключении номера, и переписки, которые с самого начала вёл живой оператор (бот не включался), в счёт не идут, считаются только настоящие диалоги ИИ | | **Лиды сегодня** | новые [лиды](./41-leads.md) за сегодня | | **Конверсия (7 дней)** | `лиды ÷ диалоги × 100%` за период: какая доля переписок превращается в лида | | **График по дням** | диалоги и лиды по дням за 7-дневное окно | | **Лиды по статусам** | распределение лидов по [статусам](./41-leads.md) (новый / в работе / закрыт и т.д.) | | **Лиды по источникам** | откуда пришли (канал/источник) | | **Реклама / Креативы** | какие объявления Facebook/Instagram приносят диалоги, лиды, покупки. Две денежные колонки: **Сумма сделок** (то, что ты проставил на карточках лидов, учитывает офлайн-продажи) и **Выручка в боте** (оплаты прошли прямо в переписке). Для лидов, пришедших по рекламе «Написать в WhatsApp» | | **Откуда лиды** (разрезы) | те же диалоги/лиды/покупки + Сумма сделок/Выручка в боте в разбивке по **площадке входа** (Facebook / Instagram / Messenger), **точке входа**, **UTM source / campaign** и внешнему источнику-каналу. Блок появляется, только когда по разрезу есть данные. Работает и для не-рекламных входов (ссылка в профиле) | > 💡 **Конверсия считается за период (7 дней), а не «за всё время»**: так цифра отражает текущую динамику, а не размывается историей. Растёт конверсия → бот/промпт работают лучше; падает → есть что чинить. --- ## Что мы называем «лидом» Везде, где в аналитике написано **«Лиды»**, считаются **карточки из раздела [Лиды](./41-leads.md)**: они создаются автоматически, когда бот доводит клиента до статуса «квалифицирован», «горячий» или «резерв». Это и есть канон: цифра «Лиды» на любой странице платформы означает одно и то же. > 📌 Для аналитики **не нужно настраивать функции**: лиды считаются из [статусов лида](./41-leads.md#кто-создаёт-лида-статус-а-не-функция), которые бот ставит сам. [Функции](../03-tools/30-functions.md) нужны только для действий (уведомить, записать, принять оплату), а не для подсчёта цифр. Единственное число с другим смыслом в блоке **«По каналам»** воронки: там у каждого канала показано, сколько **диалогов с проявленным интересом** (любой статус, включая «потенциальный»). Это шире, чем лид-карточка, поэтому число подписано «с интересом», а не «лиды». В блоке **«Когорты по неделям»** окно всегда: последние 8 недель, независимо от выбранного фильтра периода (так когорты остаются сравнимыми). > «Месяц» в карточках расходов, **календарный месяц** (с 1-го числа, время Алматы). --- ## Период По умолчанию аналитика берёт **последние 7 дней** в часовом поясе **Asia/Almaty**. Все «сегодня»/«за период» считаются по астанинскому времени, а не UTC, то есть «сегодня» совпадает с твоим днём. --- ## Разрез по каналам Сводные метрики аналитики, **по проекту целиком** (WhatsApp + Telegram вместе). Сколько диалогов в каждом канале по отдельности видно в [Диалогах](./40-dialogs.md): там список разбит по каналам. --- ## Простыми словами Аналитика отвечает на простой вопрос: «работает ли вообще?». Ты видишь, сколько людей написали и сколько из них бот довёл до заявки: это и есть конверсия. Если из 100 переписок 20 стали лидами, конверсия 20%. Растёт от недели к неделе, отлично, бот молодец. Падает, пора смотреть, на каком этапе клиенты отваливаются (тут помогают [стадии воронки](./42-stages.md)). Ещё две полезные картинки: откуда приходят люди и в каком статусе твои лиды. Считается всё по астанинскому времени, так что «сегодня»: это реально твой сегодняшний день. --- **Дальше:** → [Логи событий](./44-event-logs.md) **Связано:** [Диалоги](./40-dialogs.md) · [Лиды](./41-leads.md) · [Стадии воронки](./42-stages.md) · [Биллинг](./../06-money/60-billing.md) **Не получилось?** → напиши в саппорт с ID проекта --- ## Логи событий URL: https://dosai.pro/docs/guide/04-crm/44-event-logs [Документация](../README.md) › [Работа с клиентами](../04-crm) › Логи событий # Логи событий > «Что бот сделал за кадром»: вызовы функций, поиск по базе знаний, действия в CRM. Эти события видны прямо в ленте диалога, чтобы можно было понять, **почему** бот ответил так, а не иначе. ⏱ 7 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд:** > - В диалоге, помимо сообщений, видны **карточки событий**: вызвал функцию, искал в базе знаний, изменил сделку в CRM. > - Типы: **`function_call`** (вызов функции), **`kb_search`** (поиск по базе знаний), **`crm_inbound_*`** (события из внешней CRM). > - В карточке, что именно сделал, успех/ошибка, сколько заняло. **Секреты маскируются.** > - Это главный инструмент диагностики «почему бот так поступил». ![Раздел «Логи», что бот делал, вызовы функций, поиск по знаниям, действия CRM](/docs-guide-img/09-troubleshooting/logs.png) --- ## Зачем это нужно Сообщения показывают, *что* бот написал. Логи событий показывают, *что он делал между сообщениями*: дёрнул ли функцию записи, нашёл ли ответ в базе знаний, отправил ли сделку в CRM. Без этого «почему бот так ответил», гадание. События приходят через API диалога (`/projects//conversations//events`) и показываются **карточками в ленте** переписки, в хронологии с сообщениями. Обновляются в реальном времени. --- ## Какие события видны | Тип события | Что значит | Что в карточке | |---|---|---| | **`function_call`** | бот [вызвал функцию](../03-tools/30-functions.md) | имя функции, успех/ошибка, длительность, запрос/ответ (обрезаны) | | **`kb_search`** | бот искал в [базе знаний](../03-tools/31-knowledge-base.md) | запрос, сколько источников нашёл, не ниже ли порога релевантности | | **`crm_inbound_*`** | пришло событие из внешней [CRM](../05-integrations/54-crm.md) | смена статуса сделки / заметка / обновление контакта | Среди `crm_inbound_*`: изменение статуса сделки, обновление сделки, удаление, добавление заметки, обновление контакта. > 📌 **Где искать падения функций.** Если бот «должен был записать, но не записал», открой логи диалога и найди карточку `function_call`: там видно, вызвал ли он функцию и с какой ошибкой. → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Безопасность данных в логах - **Секреты маскируются.** Токены, ключи, авторизация в параметрах функций редактируются перед сохранением. - **Объём ограничен.** Запрос/ответ функции обрезаются до **~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», а в плашке видно, реально ли сработала функция записи или упала с ошибкой. Это лучшее место, чтобы разобраться, когда что-то идёт не так. А чувствительные данные вроде паролей и ключей в этих логах автоматически замазываются, утечки не будет. --- **Дальше:** → [Обзор интеграций](../05-integrations/50-integrations-overview.md) **Связано:** [Диалоги](./40-dialogs.md) · [Функции](../03-tools/30-functions.md) · [База знаний](../03-tools/31-knowledge-base.md) · [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Авто-отчёты владельцу (Telegram и почта) URL: https://dosai.pro/docs/guide/04-crm/45-reports [Документация](../README.md) › [Работа с клиентами](../04-crm) › Авто-отчёты владельцу # Авто-отчёты владельцу (Telegram и почта) > После этой статьи бот будет сам присылать тебе сводку по проекту, каждый день, неделю или месяц в Telegram или на почту, без захода в кабинет. ⏱ 7 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Раздел **«Отчёты»** (только для владельца), настраиваемая сводка: сколько диалогов, лидов, конверсия, расход, баланс. > - Расписание: **ежедневно / еженедельно / ежемесячно**, в выбранное время и часовой пояс. > - Доставка: **Telegram** (через бота отчётов) и/или **e-mail** уведомлений проекта. > - Можно собрать **свой текст** отчёта из `{{переменных}}` и проверить **превью** перед запуском. > - Кнопка **«Отправить сейчас»**: прислать отчёт немедленно, не дожидаясь расписания. ![Аналитика и отчёты проекта: метрики и графики для авто-отчётов владельцу](/docs-guide-img/04-crm/analytics.png) --- ## Зачем это нужно Аналитика в кабинете отвечает на вопрос «как дела?», но только когда ты сам зашёл посмотреть. Авто-отчёт переворачивает это: сводка **сама приходит** туда, где ты и так сидишь (Telegram или почта). Ты держишь руку на пульсе проекта, не открывая кабинет: видишь, что бот привёл, например, 12 лидов за вчера и потратил $3, и решаешь, что делать дальше. ## Что понадобится - [ ] Роль **владельца** проекта (раздел «Отчёты» виден только владельцу). - [ ] Для Telegram-доставки это подключённый [бот отчётов/уведомлений](../03-tools/35-notifications.md). - [ ] Для 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 | Подключи [бота отчётов](../03-tools/35-notifications.md); оставь поле чата пустым для чата по умолчанию | | Отчёт не пришёл на почту | Не задан e-mail уведомлений | Укажи адрес в «Настройки → Уведомления» | | В отчёте нули | Выбран период, где не было активности | Проверь период и что бот в это время работал | ## Вопросы, которые обычно возникают **Чем отчёт отличается от уведомлений?** [Уведомления](../03-tools/35-notifications.md) это «событие случилось прямо сейчас» (новый лид, оплата). Отчёт, **сводка за период** по расписанию (итоги дня/недели). **Можно несколько отчётов на один проект?** Да: например, ежедневная короткая сводка в 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` проекта). - Период данных: календарный (вчера / прошлая неделя / прошлый месяц) либо окно в часах: числа считаются тем же слоем метрик, что и [Аналитика](./43-analytics.md), поэтому отчёт и кабинет сходятся. - «Отправить сейчас» и крон используют **один** путь сборки+отправки: превью, ручная отправка и автоотправка дают идентичный текст. --- ## Простыми словами Это как будто у тебя есть помощник, который каждое утро кладёт на стол листок: вчера написали столько-то человек, из них столько-то оставили заявку, потрачено столько-то, на счету столько-то. Ты сам выбираешь, что в этом листке и когда он приходит, каждый день, раз в неделю или раз в месяц, в Telegram или на почту. Хочешь, соберёшь текст листка под себя. И есть кнопка «прислать прямо сейчас», чтобы проверить, что всё настроено. Клиенты этого не видят, отчёт только для тебя. --- **Дальше:** → [Логи событий](./44-event-logs.md) **Связано:** [Аналитика](./43-analytics.md) · [Лиды и статусы](./41-leads.md) · [Уведомления владельцу](../03-tools/35-notifications.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Обзор интеграций + сервисный аккаунт Google URL: https://dosai.pro/docs/guide/05-integrations/50-integrations-overview [Документация](../README.md) › [Интеграции](../05-integrations) › Обзор интеграций # Обзор интеграций + сервисный аккаунт Google > Интеграции дают боту «руки во внешнем мире»: записать в Google-таблицу, поставить событие в календарь, завести сделку в CRM. Эта статья, что есть и как подключается Google (через **шаринг доступа**, без паролей и OAuth). ⏱ 8 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Интеграции: **Google** (Таблицы, Календарь, Gmail) · **CRM** (Bitrix24, amoCRM) · **CRM для образования** (AlphaCRM) · **свои вебхуки**. > - Раздел, проект → **«Интеграции»** (нужна роль **редактор+**; «просмотр» туда не пускают). > - **Google подключается без логина/пароля:** платформа даёт тебе email сервис-аккаунта, ты **делишься** с ним своей таблицей/календарём как «Редактор», и всё. > - Каждая интеграция работает через [функции бота](../03-tools/30-functions.md). ![Раздел «Интеграции»: подключение Google и внешних CRM](/docs-guide-img/05-integrations/integrations.png) --- ## Какие интеграции есть | Интеграция | Для чего | Статья | |---|---|---| | **Google Таблицы** | запись лидов, расписание, прайс, бронь слотов | [Google Sheets](./51-google-sheets.md) | | **Google Календарь** | запись на приём, проверка свободных слотов | [Google Calendar](./52-google-calendar.md) | | **Gmail** | отправка письма от бота (ограничения: см. статью) | [Gmail](./53-gmail.md) | | **CRM: Bitrix24 / amoCRM** | сделки и контакты в твоей CRM | [CRM](./54-crm.md) | | **CRM для образования: AlphaCRM** | запись на занятия, поиск ученика | [CRM](./54-crm.md) | | **МойСклад** | наличие и цены товаров прямо в ответе бота | [МойСклад](./56-moysklad.md) | | **Свои вебхуки** | дёрнуть любой свой HTTP-эндпоинт | [Функции → Своя интеграция по API](../03-tools/30-functions.md) | Все они подключаются в разделе **«Интеграции»** проекта (доступ: роль **редактор** и выше; роль «просмотр» туда не пускается, см. [Роли](../07-team/70-roles.md)). --- ## Как подключается Google: сервисный аккаунт Это место, где новички путаются. У DOS AI **нет** «войти через Google» с паролем. Вместо этого работает **сервисный аккаунт**: служебный Google-аккаунт платформы, у которого есть свой email. **Что делаешь ты (один раз на каждую таблицу/календарь):** 1. В разделе «Интеграции» платформа показывает **email сервис-аккаунта** (скопируй его). 2. Открываешь **свою** Google-таблицу (или календарь) → **«Поделиться»** → добавляешь этот email с правами **«Редактор»**. 3. Вставляешь ID таблицы/календаря в [функцию](../03-tools/30-functions.md). Готово: бот может читать и писать. **Почему так лучше OAuth:** ты не отдаёшь платформе доступ ко **всему** своему Google-аккаунту. Ты делишься **только** конкретной таблицей или календарём, как поделился бы с коллегой. Захотел отключить, убрал email из доступа, и всё. > 💡 **Доступ: точечный.** Бот видит ровно те таблицы/календари, которыми ты с ним поделился. Не поделился, не видит. Это и безопаснее, и понятнее. > ⚠️ **Забыл поделиться → ошибка доступа.** Самая частая проблема: указал ID таблицы, но не дал сервис-аккаунту доступ. Бот честно скажет, что нужно добавить его email в «Поделиться» как Редактора. → [Google Sheets](./51-google-sheets.md) ### Что под капотом (для технических) - Аутентификация, **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](./51-google-sheets.md) **Связано:** [Google Calendar](./52-google-calendar.md) · [Gmail](./53-gmail.md) · [CRM](./54-crm.md) · [Функции](../03-tools/30-functions.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Google Sheets URL: https://dosai.pro/docs/guide/05-integrations/51-google-sheets [Документация](../README.md) › [Интеграции](../05-integrations) › Google Sheets # Google Sheets > Самая популярная интеграция: бот пишет лидов в таблицу, читает прайс/расписание, бронирует слоты. Подключается за минуту: нужно лишь **поделиться** таблицей с сервис-аккаунтом. ⏱ 8 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Подключение = **поделиться** Google-таблицей с email сервис-аккаунта как **«Редактор»** (см. [Обзор интеграций](./50-integrations-overview.md)). > - В [функцию](../03-tools/30-functions.md) вставляешь **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. **Создай/настрой функцию** (см. [Функции](../03-tools/30-functions.md)) и укажи в ней этот `spreadsheet_id`. 4. Проверь в [тест-чате](../01-bot/14-test-chat.md): попроси бота сделать то, для чего функция (например, «запиши меня»). > 💡 **Один бот, несколько таблиц.** ID таблицы, параметр функции, так что у разных функций могут быть разные таблицы (одна под лиды, другая под расписание). --- ## Частая ошибка: «нет доступа» Если указал ID, но **не поделился** таблицей с сервис-аккаунтом, бот вернёт ошибку вида: > *«Сервис-аккаунт не имеет доступа в таблицу. Откройте её → Поделиться → добавьте `` с правами Редактор»* Лечится ровно так, как написано: добавь email в «Поделиться» как **Редактора** (не «Читатель», боту нужно и писать). Другие типовые причины разобраны в [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md). --- ## Простыми словами Google-таблица это самый простой «склад данных» для бота. Он может складывать туда заявки (каждый лид: новая строчка), а может, наоборот, подсматривать в неё цены или расписание, чтобы отвечать клиентам. Подключение занимает минуту. Открываешь свою таблицу, жмёшь «Поделиться» и добавляешь туда email бота (платформа его показывает) как **Редактора**: будто делишься с коллегой. Потом копируешь из ссылки на таблицу её «номер» (кусок между `/d/` и `/edit`) и вставляешь в функцию. Готово. И главное правило, на котором спотыкаются все, если бот говорит «нет доступа к таблице», значит, ты забыл с ним поделиться или дал права только на чтение. Добавь его как Редактора, и заработает. --- **Дальше:** → [Google Calendar](./52-google-calendar.md) **Связано:** [Обзор интеграций](./50-integrations-overview.md) · [Функции](../03-tools/30-functions.md) · [Тест-чат](../01-bot/14-test-chat.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Google Calendar URL: https://dosai.pro/docs/guide/05-integrations/52-google-calendar [Документация](../README.md) › [Интеграции](../05-integrations) › Google Calendar # Google Calendar > Бот сам записывает клиентов на приём: проверяет свободные слоты и ставит событие в твой Google-календарь. Подключается так же, как Таблицы, **шарингом** календаря с сервис-аккаунтом. ⏱ 7 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Подключение = **поделиться** Google-календарём с email сервис-аккаунта (права на изменение событий). > - Бот умеет: проверить свободное время, создать/изменить/удалить событие, показать список. > - Время, по умолчанию **Asia/Almaty** (астанинское), с учётом перехода на летнее/зимнее. > - В `calendar_id` укажи **ID своего календаря** (для основного, твой email в Google; для отдельного, адрес вида `...@group.calendar.google.com`). Слово `primary` **не** подойдёт это технический календарь бота, тебе не видимый. --- ## Что бот умеет с календарём | Функция | Что делает | |---|---| | `check_slots` | проверить свободные слоты на дату | | `create_event` | создать событие (запись клиента) | | `update_event` | перенести/изменить событие | | `list_events` | показать события за период | | `delete_event` | отменить запись | Главный сценарий, **запись на приём**: клиент пишет «хочу завтра в 15:00», бот проверяет, свободно ли, и создаёт событие. Удобно для салонов, клиник, мастеров, репетиторов. **Встроенная защита записи** (работает сама, настраивать не нужно): - **Нет двойных броней.** Перед созданием события система ещё раз проверяет занятость этого времени (с учётом вместимости слота), если два клиента одновременно берут последнее окно, второй получит предложение выбрать другое время. - **Клиент видит и меняет только свои записи.** Список записей, перенос и отмена привязаны к клиенту этого чата (на всех каналах, WhatsApp и Telegram), чужие брони и ваши личные события в календаре бот клиенту не покажет и отменить не даст. - **Записать в прошлое нельзя**, если бот перепутал дату, система отклонит бронь и попросит уточнить. --- ## Как подключить 1. **Поделись календарём.** Google Календарь → настройки нужного календаря → **«Доступ для отдельных пользователей»** → добавь **email сервис-аккаунта** с правом **«Внесение изменений в мероприятия»**. 2. **Укажи `calendar_id`** в [функции](../03-tools/30-functions.md) это **ID твоего календаря**, тот же, с которым ты поделился на шаге 1. Для основного календаря его ID это **твой email в Google** (например `ivan@gmail.com`); для отдельного календаря его ID есть в настройках календаря (вид `...@group.calendar.google.com`). ⚠️ Слово `primary` **не** подойдёт, так бот попадёт в свой технический календарь, который ты не видишь, и записи «пропадут». Нажми **«Проверить подключение»**: красная ошибка сразу покажет, если календарь указан неверно или доступ не выдан. 3. **Настрой расписание работы прямо в функции** «Проверить свободное время»: рабочие дни, часы, перерыв между слотами (в минутах), длительность слота, минимальный запас до записи. Бот предлагает клиентам только время внутри этих рамок. (До 2026-06-13 этот редактор не влиял на бота: теперь сервер читает расписание из настроек функции.) - **Записей на одно время (вместимость).** По умолчанию `1`, один приём на слот, как только на это время есть событие, бот его больше не предлагает. Поставь больше, если на одно время можно записать нескольких: несколько кресел/кабинетов работают параллельно или это групповое занятие. Например `3`: бот запишет до трёх клиентов на один и тот же час, а четвёртому предложит другое время. - **Выходной/отпуск: событием «на весь день».** Создай в календаре событие на весь день (Отпуск, Выходной): бот **не предложит** записи в этот день, даже если вместимость больше 1. - **Приглашение клиенту на почту (по желанию).** Тумблер «Отправлять клиенту приглашение на почту», если включить и клиент даст email, ему придёт приглашение на встречу из Google Календаря. По умолчанию выключено (незваные приглашения часто принимают за спам). - **Напоминания клиенту (по желанию).** Тумблер «Напоминать клиенту о записи»: бот сам напишет клиенту в тот же чат перед визитом (снижает неявки). Расписание задаёте вы: добавьте одно или несколько напоминаний «за N минут/часов/дней до записи» (например «за 1 день» и «за 2 часа»). Текст можно свой, с подстановками `{{client_name}}`, `{{date}}`, `{{time}}`. По умолчанию выключено. Перенос записи сдвигает напоминания, отмена: снимает их. В тест-чате напоминания не отправляются. 4. Проверь в [тест-чате](../01-bot/14-test-chat.md): «запиши меня на завтра в 15:00». См. также пошаговый гайд: [Запись на время](../03-tools/36-booking.md). > 💡 **Часовой пояс.** По умолчанию бот считает время в **Asia/Almaty**, то есть «15:00» для клиента это 15:00 по Астане. Пояс можно переопределить в параметрах функции, переход на летнее/зимнее время учитывается автоматически. > 💡 **Обед и перерывы.** Отдельной настройки «обед» нет, просто создай в своём календаре повторяющееся событие (например «Обед» с 13:00 до 14:00 каждый день). Бот считает это время занятым и не будет предлагать его клиентам. Так же удобно блокировать отпуск или личные дела. > ⚠️ **Не поделился календарём → бот не сможет создать событие.** Как и с таблицами: сначала дай сервис-аккаунту доступ, потом указывай ID. --- ## Простыми словами Если у тебя запись по времени, салон, врач, автошкола, репетитор: календарь незаменим. Клиент пишет «можно завтра в три?», и бот сам смотрит в твой Google-календарь: свободно, записывает, занято, предлагает другое время. Тебе не надо ничего делать руками. Подключается один в один как таблицы: открываешь свой календарь, даёшь доступ email-у бота (на изменение событий) и указываешь, какой именно календарь использовать. Время бот считает по Астане, так что «три часа»: это три по-нашему, без путаницы с часовыми поясами. --- **Дальше:** → [Gmail](./53-gmail.md) **Связано:** [Обзор интеграций](./50-integrations-overview.md) · [Google Sheets](./51-google-sheets.md) · [Функции](../03-tools/30-functions.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Gmail URL: https://dosai.pro/docs/guide/05-integrations/53-gmail [Документация](../README.md) › [Интеграции](../05-integrations) › Gmail # Gmail > 📌 **Сначала прочти это.** Для большинства проще обычная отправка писем: см. [«Письмо клиенту»](../03-tools/38-email-customer.md) (работает сразу, без Google Workspace) и [«Уведомления владельцу»](../03-tools/35-notifications.md). Gmail-функция ниже, **продвинутый вариант** для тех, у кого есть Google Workspace. > Бот умеет отправлять письма через Gmail-функцию. **Но честно сразу:** для обычного `@gmail.com` это не заработает, нужен Google Workspace с особой настройкой. Чаще проще использовать [«Письмо клиенту»](../03-tools/38-email-customer.md). ⏱ 5 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Функция `gmail_send` шлёт письмо (кому / тема / текст, + копии). > - **Ограничение:** работает **только** если у тебя **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, обычно проще отправлять их другим способом. Напиши в саппорт: подскажем рабочий вариант под твой случай. --- ## Безопасность Все поля письма (получатель, тема, копии) **очищаются от спецсимволов** переноса строк: защита от подмены заголовков письма (header injection). --- ## Простыми словами Бот в принципе умеет слать письма через Gmail, но тут надо быть честным, для обычной почты `@gmail.com` это не включится. Технически Google разрешает «роботу» слать письма только если у тебя корпоративная почта Google (Workspace) на своём домене и админ специально это разрешил. У большинства малого бизнеса такого нет, и тогда бот честно ответит ошибкой 403. Поэтому если тебе просто нужно отправлять клиентам письма, не мучайся с Gmail, напиши в саппорт, подберём способ попроще. А если у тебя есть корпоративный Google на домене, тогда Gmail-функция тебе подойдёт, и админ домена включит нужный доступ. --- **Дальше:** → [CRM (Bitrix24 / amoCRM / AlphaCRM)](./54-crm.md) **Связано:** [Обзор интеграций](./50-integrations-overview.md) · [Google Sheets](./51-google-sheets.md) **Не получилось?** → напиши в саппорт, Gmail требует Google Workspace --- ## CRM, Bitrix24 / amoCRM / AlphaCRM URL: https://dosai.pro/docs/guide/05-integrations/54-crm [Документация](../README.md) › [Интеграции](../05-integrations) › 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:** изменения сделок (статус, заметки, удаление) прилетают обратно в [ленту диалога](../04-crm/44-event-logs.md): через готовую ссылку-вебхук, которую генерируешь в один клик. > - **Сопоставление стадий:** при смене стадии диалога сделка двигается по воронке CRM. > - Ключи хранятся **зашифрованными**. ![Раздел «Интеграции»: синхронизация с Bitrix24 / amoCRM / AlphaCRM](/docs-guide-img/05-integrations/integrations.png) --- ## Что синхронизируется **Основное направление, DOS → CRM:** когда появляется [лид](../04-crm/41-leads.md), бот создаёт в твоей CRM **сделку** (имя, телефон, email, сумма, воронка+стадия, кастомные поля) и/или **контакт**. **Обратное направление, CRM → DOS:** если в CRM меняют сделку, событие прилетает в DOS через входящий вебхук и показывается в [логах диалога](../04-crm/44-event-logs.md): смена статуса сделки, обновление, удаление, добавление заметки, обновление контакта. --- ## Что можно настроить (в разделе «Интеграции» → CRM) Всё ниже делается через интерфейс, роль **редактор+**. Появляется после того, как CRM подключена и прошла проверку связи. ### 1. Сопоставление стадий Связываешь [внутренние стадии воронки](../04-crm/42-stages.md) (Приветствие…Завершено) со стадиями сделки в своей CRM. Меняется стадия диалога → сделка **автоматически едет по воронке CRM**. Это основная автоматизация. > ℹ️ **Про «Неразобранное» в amoCRM.** Этой стадии в списке выбора не будет, и так задумано: amoCRM разрешает попасть в неё только новой заявке, а перевести туда существующую сделку не даёт даже вручную по API. Если бы мы её предлагали, сопоставление выглядело бы настроенным, а сделка молча никуда не ехала. Выбирай любую следующую стадию воронки. ### 2. Заполнение полей CRM данными бота Связываешь **переменную бота** (стандартные: имя, телефон, email, итог разговора, сумма; или любое поле анкеты) с **полем сделки** в твоей CRM. Когда бот собрал данные, они ложатся **прямо в поле** сделки, а не в общий комментарий. Тут же можно задать **заголовок сделки по умолчанию** и **воронку по умолчанию** для новых сделок. > ⚠️ Сначала нажми **«Синхронизировать»** метаданные CRM: платформа подтянет список реальных полей твоей воронки, чтобы было из чего выбирать. ### 3. Зеркало диалога (переписка → лента сделки) Тумблер **«Зеркалировать сообщения»**: вся переписка с клиентом копируется в ленту связанной сделки CRM как комментарии (👤 Клиент / 🤖 Бот / 👨‍💼 Оператор). Охват на выбор: **все сообщения** или **только ответы бота**. Включение не тянет старую историю: зеркалятся только сообщения **после** включения. Идёт в фоне (раз в пару минут), ответ клиенту не задерживает, дубликатов не создаёт. ### 4. Обратная синхронизация (CRM → DOS) Кнопка **«Сгенерировать ссылку»** даёт готовый URL входящего вебхука (секрет уже вшит в ссылку). Вставляешь его в исходящий вебхук своей CRM (Bitrix24: *Разработчикам → Исходящий вебхук*; amoCRM: *Настройки → API*). После этого изменения сделок из CRM прилетают обратно в [ленту диалога](../04-crm/44-event-logs.md): смена статуса, обновление, удаление, заметка. Ссылку можно скопировать или перевыпустить (старая перестанет работать). > 📌 Кроме этого под капотом есть узкий микро-движок CRM (`crm_automations`): фоновые действия по триггеру стадии. Это **не** старый «движок автоматизаций WHEN→IF→THEN» (он удалён). Основные автоматизации, доступные через интерфейс: это четыре пункта выше. --- ## Как подключить Раздел проекта → **«Интеграции»** → секция CRM (нужна роль **редактор+**). ### Bitrix24 Нужен **webhook-URL** входящего вебхука Bitrix24. Он сам несёт в себе секрет (в пути), отдельный ключ не нужен. - Вид: `https://<аккаунт>.bitrix24.ru/rest//<токен>/` - Должен быть **https** и содержать `/rest//<токен>/`. ### 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 ещё и запись на занятия с поиском ученика. --- **Дальше:** → [Роли и права](../07-team/70-roles.md) **Связано:** [Обзор интеграций](./50-integrations-overview.md) · [Лиды](../04-crm/41-leads.md) · [Стадии воронки](../04-crm/42-stages.md) · [Логи событий](../04-crm/44-event-logs.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Вебхуки и безопасность (SSRF) URL: https://dosai.pro/docs/guide/05-integrations/55-webhooks-security [Документация](../README.md) › [Интеграции](../05-integrations) › Вебхуки и безопасность # Вебхуки и безопасность (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](./../08-developers/81-custom-webhooks.md), без защиты кто-то мог бы направить его на `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`), а не резолвится заново. Окно подмены сведено к минимуму. Плюс размер ответа **ограничен**: внешний сервис не сможет «залить» гигабайты в ответ. --- ## Что это значит для тебя - Твой эндпоинт для [кастомного вебхука](../08-developers/81-custom-webhooks.md) должен быть **публичным** (не `localhost`, не внутренняя сеть) и желательно по **HTTPS**. - Не пытайся через бота ходить на внутренние адреса: это by design заблокировано. - Секреты к твоему API передавай через **заголовки авторизации** функции (они хранятся зашифрованно), а не в URL. > 📌 **Про подпись.** Входящие вебхуки (например, от платёжных провайдеров) платформа **проверяет по подписи**. А вот исходящие запросы к твоему эндпоинту платформа подписью не заверяет, если тебе нужна аутентификация входящего от бота запроса, используй секретный заголовок/токен, который задаёшь в настройке функции. --- ## Простыми словами Раз бот умеет ходить на чужие адреса в интернете, теоретически кто-то мог бы попробовать обмануть его и заставить постучаться не наружу, а «внутрь»: на служебные адреса сервера, где лежит что-то приватное. Это известный класс атак, и платформа от него защищается: перед каждым походом на внешний URL она проверяет, что это действительно публичный адрес, а не локальный/внутренний. Все `127.0.0.1`, `10.x`, `192.168.x` и подобные: мимо. Для тебя как разработчика вывод простой: твой эндпоинт, который дёргает бот, должен быть нормальным внешним адресом по HTTPS, а не локальным. А пароли к нему передавай через заголовки авторизации (они шифруются), не зашивай в ссылку. Всё это, чтобы и твои данные, и платформа были в безопасности. --- **Дальше:** → [Публичный API](../08-developers/80-public-api.md) **Связано:** [Кастомные вебхуки](../08-developers/81-custom-webhooks.md) · [CRM](./54-crm.md) **Не получилось?** → напиши в саппорт --- ## МойСклад: наличие и цены в ответах бота URL: https://dosai.pro/docs/guide/05-integrations/56-moysklad [Документация](../README.md) › [Интеграции](../05-integrations) › МойСклад # МойСклад: наличие и цены в ответах бота > Клиент спрашивает «есть ли такой товар и почём», бот в этот момент смотрит ваш МойСклад и отвечает настоящим остатком и настоящей ценой. Прайс в промпте держать не надо, дублировать товары никуда не надо. ⏱ 12 мин · 👤 для владельца магазина или сервиса · 🟢 live > **За 30 секунд:** > - Подключается [функцией](../03-tools/30-functions.md) **«Своя интеграция по 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` | | URL | `https://api.moysklad.ru/api/remap/1.2/entity/assortment` | Описание читает не человек, а бот. По нему он решает, звать функцию или нет, так что пишите словами клиента: «спрашивает про товар, цену, наличие». **Параметры запроса:** | Ключ | Значение | |---|---| | `search` | `{{товар}}` | | `limit` | `5` | `{{товар}}` это подстановка: бот сам положит туда название из вопроса клиента. `limit` держите небольшим: пяти позиций хватает, а сотня забьёт боту контекст. **Параметр функции** (раздел «Параметры»): | Имя | Тип | Описание для ИИ | |---|---|---| | `товар` | строка | Название товара из вопроса клиента, как он его назвал | **Авторизация:** тип Bearer, в значение ваш токен. Он хранится зашифрованным и вырезается из логов вместе с остальными заголовками авторизации. Адрес проверяется на безопасность, см. [Вебхуки и безопасность](./55-webhooks-security.md). --- ## Шаг 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]` это первая цена продажи. Если у вас несколько типов цен (розница, опт, для своих), нужный индекс подберите опытным путём, начните с нуля. Короткие имена справа необязательны, но с ними бот тратит меньше токенов и реже путается. **Что бот получит на выходе:** ```json { "matches": [ { "название": "StP Аэро", "цена": 490000, "остаток": 12 } ], "count": 1 } ``` Аккуратный список вместо простыни. Если совпадений окажется слишком много, ответ обрежется по границе товара и бот получит подсказку попросить клиента уточнить запрос. Максимальную длину ответа можно поднять там же, по умолчанию 8000 символов. **Про остаток.** Рядом с `stock` МойСклад отдаёт `reserve` (зарезервировано), `inTransit` (в пути) и `quantity` (доступно с учётом резерва). Если у вас часто бронируют товар, берите `rows[*].quantity`, оно честнее. Если складов несколько и нужен конкретный, добавьте в параметры запроса `stockStore` со ссылкой на нужный склад. --- ## Шаг 4. Скажите боту про копейки Это единственное место, где ошибаются все. **В МойСкладе все суммы хранятся в копейках.** Цена 4 900 ₸ лежит в базе как `490000`. Не сказать об этом значит услышать от бота «четыреста девяносто тысяч тенге», и клиент уйдёт молча, даже не написав в ответ. Допишите в системный промпт: ``` Цены из функции check_stock приходят в копейках. Перед тем как назвать цену клиенту, раздели на 100. ``` --- ## Шаг 5. Что говорить, когда товара нет Ответ «нет в наличии» заканчивает разговор. Дайте боту продолжение, отдельной строкой в промпте: ``` Если товара нет в наличии, не заканчивай на этом. Предложи похожий товар из того же ответа функции или спроси, записать ли клиента, когда товар придёт. ``` Так вопрос про отсутствующую позицию превращается в заявку. --- ## Шаг 6. Проверьте до того, как включите бота клиентам Откройте [тест-чат](../01-bot/14-test-chat.md) и спросите про товар, цену которого знаете наизусть. Что смотреть: - цена совпадает с той, что у вас в МойСкладе (если больше в сто раз, вернитесь к шагу 4); - остаток совпадает с реальным; - бот нашёл товар, когда вы назвали его так, как называют клиенты, а не так, как он записан в учёте. Третье проверьте отдельно. В учёте товар может лежать как «Шумоизоляция StP Aero 8мм», а клиент напишет «стп аэро». Поиск нечувствителен к регистру и ищет вхождение, но если расхождение сильное, добавьте в описание параметра примеры народных названий. --- ## Что ещё можно, кроме остатков Тем же способом бот дотягивается до любой части вашего МойСклада, меняется только адрес запроса: | Задача | Что дёргать | |---|---| | Наличие и цены | справочник ассортимента | | Остатки по конкретному складу | отчёт по остаткам | | Проверить, есть ли такой покупатель | справочник контрагентов | | Создать заказ прямо из переписки | создание заказа покупателя, метод POST | Заказы из переписки настраиваются так же, только методом POST и с телом запроса. Тогда пользователю, под которым выпущен токен, нужны права на создание документов. --- ## Если не работает | Симптом | Причина | Что делать | |---|---|---| | Все поля пустые | В путях забыта звёздочка | `rows[*].name`, а не `rows.name`. Шаг 3 | | Цена в сто раз больше | Копейки | Шаг 4 | | Бот говорит, что не смог проверить | Токен просрочен или перевыпущен под другую программу | Выпустите новый и вставьте в функцию. Помните: старый при этом умрёт | | Бот находит не тот товар | Клиент называет товар иначе, чем он записан в учёте | Добавьте в описание параметра примеры народных названий | | Ответ обрезается, бот просит уточнить | Слишком много совпадений | Уменьшите `limit` или поднимите максимальную длину ответа | | Функция долго думает | МойСклад отвечает медленно | Поднимите таймаут функции, повторы при сбоях уже встроены, см. [Кастомные вебхуки](../08-developers/81-custom-webhooks.md) | | Полей маппинга нет на экране | Функция в обычном режиме | Включите продвинутый режим, шаг 2 | Подробный разбор ошибок в статье [Функция не вызывается или падает](../09-troubleshooting/91-function-fails.md). --- ## Простыми словами У вас товары и цены живут в МойСкладе. Раньше, чтобы бот про них знал, пришлось бы переписывать весь прайс к нему в настройки и обновлять руками каждый раз. Теперь бот спрашивает ваш МойСклад сам, посреди разговора с клиентом. Человек пишет «есть такое?», бот за секунду смотрит ваш учёт и отвечает честной цифрой: столько-то штук, столько-то тенге. Меняете цену у себя, бот говорит новую, ничего поддерживать не надо. Чтобы это включить, нужен один ключ из вашего аккаунта МойСклад и минут двадцать настройки по шагам выше. Три вещи, которые нельзя пропустить. Первая: ключ в МойСкладе выдаётся один на человека, и новый убивает старый, поэтому заводите для бота отдельного пользователя. Вторая: цены там лежат в копейках, и об этом боту надо сказать отдельной строчкой. Третья: в путях к полям нужна звёздочка, иначе бот получит пустоту. Проверьте всё на одном знакомом товаре в тест-чате, прежде чем включать бота клиентам. --- **Дальше:** → [Вебхуки и безопасность](./55-webhooks-security.md) **Связано:** [Функции](../03-tools/30-functions.md) · [Кастомные вебхуки](../08-developers/81-custom-webhooks.md) · [Тест-чат](../01-bot/14-test-chat.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Биллинг проекта: токены, подписка, пополнение URL: https://dosai.pro/docs/guide/06-money/60-billing [Документация](../README.md) › [Деньги](../06-money) › Биллинг проекта # Биллинг проекта: токены, подписка, пополнение > Две статьи расходов: **токены** (топливо для ответов бота) и **подписка** (доступ к каналам и функциям). Здесь, как пополнять и не остаться без бота. ⏱ 9 мин · 👤 для владельца · 🟢 live ![Биллинг проекта: баланс и тариф вверху, ниже, пополнение через Kaspi или картой с готовыми суммами](/docs-guide-img/06-money/billing.png) > **За 30 секунд:** > - **Токены**, расходник: каждый ответ бота их тратит. Кончились → бот молчит в бою. > - **Подписка** ($25/мес): доступ к WhatsApp/Telegram, всем моделям, CRM, аналитике, функциям. > - Пополнить можно **картой** (TipTopPay) или **Kaspi-push** (apipay). > - Баланс показывается в **долларах**, тенге: в скобках. > - Прогноз подскажет, на сколько дней хватит при текущем расходе. --- ## Зачем это нужно Бот работает на двух «топливах». Если их перепутать или не следить, бот внезапно замолкает, и клиенты остаются без ответа. Эта статья объясняет, за что ты платишь и как держать бота в эфире. ## Где это - **По проекту:** меню проекта → **«Биллинг»**. - **По всему аккаунту:** глобальное меню → **«Биллинг»** (общий счёт, все проекты, история). Смотреть и **пополнять** может любой участник; управление подпиской: владелец. ## Две вещи, которые важно не путать | | 🔋 Токены | 🎟️ Подписка | |---|---|---| | Что это | Расходник за каждое сообщение бота | Доступ к платформе | | Как тратится | Списывается за каждый ответ ИИ | Фиксированно в месяц | | Сколько | 1 диалог ≈ $0.001-0.01 (зависит от [модели](../01-bot/13-model.md) и длины) | $25/мес (≈12 500 ₸) | | Если кончилось | Бот **молчит** в WhatsApp/Telegram | Каналы отключаются | | Что даёт | Сами ответы бота | WhatsApp + Telegram + все модели + CRM + аналитика + функции + база знаний | > 💵 **Цена в долларах, тенге считается от неё.** Подписка стоит **$25 в месяц**, и это базовая цена. Сумма в тенге (около 12 500 ₸) это пересчёт по курсу на момент выставления счёта: курс меняется, значит и сумма списания месяц к месяцу немного отличается. То же с балансом: он ведётся в долларах, а тенге показывается справочно, чтобы понимать порядок списания. Оплатить можно банковской картой из любой страны, а в Казахстане дополнительно через Kaspi. 💡 **Аналогия.** Подписка это «абонемент в зал» (доступ), токены, «вода, которую пьёшь на тренировке» (расходник). Нужны оба. ## Что показывает страница - **Баланс**: крупно, в долларах с тенге в скобках («$50.00 (~24 250 ₸)»), полоса заполнения и **прогноз на сколько дней хватит** при текущем расходе; - **Тариф**: твой план, статус проекта (Активна / Канал офлайн / Неактивна), до какой даты подписка, отсчёт триала WhatsApp; - **Счета в ожидании**: начатые, но не завершённые оплаты; - **Пополнить / Подписка**: единая панель оплаты (переключатель); - **История операций**: все пополнения и списания с фильтрами; - **Калькулятор стоимости**: прикинуть расход под модель и объём; - **Авто-пополнение**: в разработке (можно записаться на запуск). ## Как пополнить токены Меню проекта → **«Биллинг»** → вкладка **«Пополнить баланс»**: 1. Выбери сумму (готовые: $5 / $10 / $20 / $50 / $100 или впиши свою, целое число долларов, от $5 до $1000); 2. Выбери способ: - **Картой** (TipTopPay): оплата картой; - **Kaspi Push** (apipay): введи номер, придёт push в Kaspi; 3. Подтверди оплату → баланс пополнится. ## Как оформить/продлить подписку Та же панель → вкладка **«Подписка»**: - Выбери период: 1 / 3 / 6 / 12 месяцев (за длинные, скидка: 3 мес −5%, 6 мес −10%, 12 мес −20%); - Оплати тем же способом. ### Скидка первых двух недель Когда подключишь канал, на **14 дней** открывается сниженная цена: **месяц −20% ($20), 3 мес −15%, 6 мес −25%, 12 мес −30%**. Год в этом окне стоит **$210 вместо $300** по обычной цене за месяц. Сколько осталось до конца окна, написано прямо на плитках. Две вещи, которые важно знать заранее: - **Бесплатные дни не сгорают.** Оплатишь, пока они ещё идут, и оплаченный период начнётся после них, а не вместо них. Дата начала показана под кнопкой оплаты. - **Дальше цена обычная.** Скидка действует на эту покупку; следующее продление пойдёт по $25 в месяц. Окно даётся один раз на проект и только до первой оплаты подписки. ⚠️ **Без активной подписки** после триала **отключается WhatsApp** (см. [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md#сколько-это-стоит)). Telegram работает и без подписки, но для боевой работы подписка нужна. ## Проверь, что всё в порядке Перед тем как полагаться на бота в бою: 1. Статус проекта, **«Активна»**; 2. Баланс токенов **не на нуле** (прогноз показывает запас дней); 3. Подписка действует (дата в будущем). 💡 Помни: в [Тест-чате](../01-bot/14-test-chat.md) бот отвечает даже при нуле: это не показатель. Для клиентов нужны и баланс, и подписка. ### Светофор в списке проектов Открывать каждый проект не обязательно: в меню слева, в списке «Проекты», у каждого проекта горит значок-индикатор. Статус закодирован **формой значка**, а не только цветом, различимо и при дальтонизме: - **галочка** (зелёная): подписка и баланс в порядке, бот работает; - **треугольник с «!»** (жёлтый), скоро проблемы: мало токенов, подписка истекает в ближайшие 3 дня или канал WhatsApp отвалился; - **крестик** (красный), бот не отвечает клиентам: баланс на нуле и подписки нет; - **пунктирный кружок** (серый) это черновик, проект ещё не запущен. Наведи курсор на значок: подсказка скажет, что именно не так и куда идти чинить. ## Частые ошибки | Симптом | Причина | Что делать | |---|---|---| | Бот замолчал у клиентов | Кончились токены | Пополни баланс | | WhatsApp отключился | Истёк триал / нет подписки | Оформи [подписку](../02-channels/21-whatsapp-wazzup.md#сколько-это-стоит) | | Статус «Канал офлайн» | Канал отвалился | См. [Канал отвалился](../09-troubleshooting/92-channel-down.md) | | Оплатил, баланс не изменился | Платёж в обработке | Глянь «Счета в ожидании», подожди; не прошёл → [Платёж не прошёл](../09-troubleshooting/93-payment-failed.md) | | Дорого выходит | Тяжёлая модель / длинные ответы | Смени [модель](../01-bot/13-model.md) на mini, см. [Стоимость сообщения](./61-message-cost.md) | ## Автопополнение баланса На странице биллинга проекта есть секция **«Автопополнение баланса»** (видна владельцу). Включаешь, платформа каждые ~30 минут проверяет баланс, и если он упал ниже порога (по умолчанию $5), сама пополняет до целевого уровня (по умолчанию $40): - **Счёт в Kaspi**: выставляется автосчёт, тебе приходит пуш в Kaspi и уведомление «оплати». Счёт действует 24 часа; пока он висит, новый не выставляется. - **Списание с карты**, если у тебя сохранена карта (TipTopPay), сумма списывается автоматически; о каждом списании приходит уведомление. Можно задать **месячный лимит** автопополнений. Если пополнить баланс вручную (или это сделает поддержка), висящий автосчёт отменится сам: оплачивать его не нужно. После трёх неудачных списаний подряд или если карта удалена, автопополнение выключается и приходит уведомление. Там же, тумблер **«Автосчёт на продление подписки»**: за 3 дня до конца подписки придёт счёт на продление в Kaspi. ## Уведомления о балансе Платформа сама сообщает о деньгах, эти сигналы **включены всегда** (их нельзя пропустить): - **Пополнение**, как только баланс пополнен (Kaspi, картой или вручную), приходит уведомление с суммой и новым балансом. - **Низкий баланс**, когда денег осталось мало, приходит напоминание пополнить (не чаще раза в сутки). - **Бот остановлен на нуле**, если баланс кончился и бот перестал отвечать клиентам, приходит тревога, чтобы вы быстро пополнили. **Куда слать, выбираете вы.** В настройках проекта → вкладка **«Уведомления»** → блок **«Баланс проекта»** отметьте нужные каналы: Telegram-группа, Email, Webhook. **Колокольчик** в шапке сайта получает эти уведомления всегда: его отключить нельзя, это ваш гарантированный канал. ## Перенос баланса между проектами Если проектов несколько, баланс можно **перенести с одного на другой**: на странице /billing в списке «Баланс по проектам» у проекта с деньгами есть кнопка «Перенести». Перенос мгновенный и виден в истории обоих проектов. Перенос предлагается и при **удалении проекта**: диалог удаления честно предупреждает, что баланс и остаток оплаченной подписки сгорят безвозвратно, и даёт сначала перекинуть деньги на другой проект. ## Вопросы, которые обычно возникают **Почему баланс в долларах?** Расходы ИИ считаются в долларах (так считают модели). Тенге показывается в скобках по курсу для удобства. **Подписка и токены это одно и то же?** Нет. Подписка, доступ (фиксированно в месяц). Токены, расходник за ответы. Нужны оба. **Сколько стоит один диалог?** Примерно $0.001-0.01 в зависимости от модели и длины. Подробно, [Сколько стоит сообщение](./61-message-cost.md). **Это я плачу платформе. А как брать деньги с моих клиентов?** Это другое, [Приём оплат](./62-accept-payments.md): бот выставляет счёт твоему клиенту, деньги идут на твою Kaspi-кассу. --- ## Под капотом - Баланс хранится в центах; формат: `formatBalanceUSD` → `"$X.XX (~Y₸)"`, курс-фолбэк 485 ₸/$. - Подписка: базовая цена `subscription_price_usd` = $25 (сумма к оплате в тенге считается по курсу НБК в момент счёта), скидки за период 5/10/20%, в окне активации 15/25/30% (`subscription_offer_discount_*`). Цену и для витрины, и для счёта считает один серверный расчёт, он же отдаётся на `GET /api/billing/quote`. - Пополнение через `useTopup` → `/api/projects//tokens/topup` → провайдер (TipTopPay карта / apipay Kaspi-push). Kaspi показывает `ApipayPendingModal` до подтверждения. - Страница (редизайн 2026-06-05): BalanceHero + PendingInvoices + PaymentPanel (Пополнить|Подписка) + History + калькулятор. Прогноз дней, из среднего расхода по окну транзакций. - Тест-чат баланс не блокирует; в бою eligibility требует `active` + (триал ИЛИ подписка) для WhatsApp. - Автопополнение (2026-06-10): таблица `project_auto_topup`, cron `auto-topup-tick` каждые 30 мин; карта, TipTopPay charge по сохранённому токену, Kaspi, автосчёт apipay. Перенос баланса: атомарная пара журнальных проводок через клиринговый счёт. - Статусы счетов: `pending → paid / failed (отклонён банком) / cancelled (отменён вами) / expired (истёк срок)`; истёкший или отменённый счёт можно выставить заново той же суммой из истории платежей. --- ## Простыми словами У бота два счёта, и их легко не перепутать на одной аналогии. Подписка это как абонемент: платишь раз в месяц ($25, около 12 500 ₸) и получаешь доступ ко всему, WhatsApp, Telegram, все модели, CRM. А токены это топливо: каждый ответ бота немного их тратит, как бензин. Если кончится бензин (токены), бот замолчит, даже если абонемент (подписка) активен. Поэтому следи за обоими: пополняй баланс (картой или через Kaspi) и продлевай подписку. На странице есть прогноз, на сколько дней хватит денег: удобно не доводить до нуля. И помни: в тестовом чате бот отвечает всегда, а вот живым клиентам, только когда есть и баланс, и подписка. --- **Дальше:** → [Функции (научить бота действиям)](../03-tools/30-functions.md) **Связано:** [Сколько стоит сообщение](./61-message-cost.md) · [Приём оплат](./62-accept-payments.md) · [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) · [AI-модель](../01-bot/13-model.md) **Не получилось?** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) --- ## Сколько стоит сообщение URL: https://dosai.pro/docs/guide/06-money/61-message-cost [Документация](../README.md) › [Деньги](../06-money) › Сколько стоит сообщение # Сколько стоит сообщение > Бот списывает с баланса за каждый ответ. Сколько именно, зависит от длины переписки, выбранной модели и того, что бот делает (ищет в базе знаний, распознаёт голос/фото). Эта статья объясняет, от чего зависит цена. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Платишь **по факту**: за каждый ответ бота списывается с баланса (в долларах, тенге в скобках). > - Цена сообщения зависит от: **длины** диалога, **модели**, **поиска по базе знаний**, **распознавания голоса/фото**. > - Отправка готового медиа из библиотеки и ответы вне рабочих часов, **бесплатны**. > - Каждое списание видно в истории: можно посмотреть, на что ушло. --- ## От чего зависит цена У бота нет «фиксированной цены за сообщение», она складывается из нескольких факторов: | Фактор | Как влияет | |---|---| | **Длина диалога** | бот «помнит» переписку, чем длиннее история и ответ, тем дороже сообщение | | **Модель** | [мощная модель](../01-bot/13-model.md) дороже лёгкой за тот же ответ | | **Поиск по базе знаний** | если бот лезет в [базу знаний](../03-tools/31-knowledge-base.md), это добавляет к стоимости | | **Распознавание медиа** | расшифровка голосового или «разглядывание» фото, отдельная платная операция | Баланс хранится в долларах (показывается как `$X.XX (~Y₸)`), списание идёт по факту после каждого ответа. --- ## Что тратит баланс, а что нет **Тратит:** - ответ бота (основное); - расшифровка голосовых сообщений клиента; - распознавание присланных фото/картинок; - поиск по базе знаний. **Не тратит:** - отправка готового материала из [медиа-библиотеки](../03-tools/32-media-library.md); - автоответ вне [рабочих часов](../01-bot/15-advanced-settings.md); - сообщения, на которые бот не отвечает (выключен, пауза, пустой баланс). --- ## Как сэкономить - **Лёгкая модель там, где хватает.** Для записи/типовых вопросов `gpt-5.4-mini` дешевле мощных: см. [Выбор модели](../01-bot/13-model.md). - **Короткая память диалога.** Настройка `history_message_limit` (по умолчанию 30): меньше история, дешевле сообщение (но бот меньше «помнит»). См. [Продвинутые настройки](../01-bot/15-advanced-settings.md). - **Выключи ненужное распознавание.** Не принимаешь голосовые/фото, отключи их распознавание, чтобы не платить за обработку. --- ## Где смотреть расходы Каждое списание попадает в **историю транзакций**: видно, сколько стоило, когда и за что. Так можно поймать, например, что распознавание голосовых заметно тянет баланс, и решить, нужно ли оно. Общая картина баланса и пополнение: в [Биллинге](./60-billing.md). --- ## Простыми словами Тут как со счётчиком: платишь за то, что бот реально сделал. Ответил клиенту: небольшое списание. Чем длиннее у вас переписка и чем «умнее» выбранная модель, тем чуть дороже каждый ответ, бот ведь держит в голове весь разговор. Отдельно подкапывают деньги «тяжёлые» вещи: расшифровать голосовое, разглядеть фото, порыться в базе знаний. А вот показать клиенту готовое видео из библиотеки или вежливо ответить ночью «мы на связи с утра»: бесплатно. Если хочется экономить, держи лёгкую модель там, где она справляется, и выключи распознавание голоса/фото, если оно тебе не нужно. И загляни в историю списаний: там видно, на что именно уходит баланс. --- **Дальше:** → [Приём оплат от клиентов](./62-accept-payments.md) **Связано:** [Биллинг](./60-billing.md) · [Выбор модели](../01-bot/13-model.md) · [Продвинутые настройки](../01-bot/15-advanced-settings.md) · [База знаний](../03-tools/31-knowledge-base.md) **Не получилось?** → [Платёж не прошёл](../09-troubleshooting/93-payment-failed.md) --- ## Приём оплат от клиентов (Kaspi) URL: https://dosai.pro/docs/guide/06-money/62-accept-payments [Документация](../README.md) › [Деньги](../06-money) › Приём оплат от клиентов # Приём оплат от клиентов (Kaspi) > `[бета]` Бот может не только отвечать, но и **принимать оплату** от твоих клиентов: выставлять счёт прямо в переписке. Деньги идут **тебе напрямую**, не через DOS. ⏱ 8 мин · 👤 для владельца · 🟡 бета > **За 30 секунд:** > - Бот умеет выставить клиенту счёт на оплату прямо в чате (Kaspi). > - **Деньги поступают тебе напрямую**: платформа их не держит и не является посредником по деньгам. > - Подключает **только Владелец** проекта (через Kaspi-авторизацию по SMS-коду). > - **Статус, бета:** подключение проходит финальную настройку у платёжного партнёра. Если в кабинете функции ещё нет или она ругается, доступ ещё активируется, напиши в саппорт. ![Раздел «Приём оплат»: онбординг Kaspi-кассы и управление счетами](/docs-guide-img/06-money/payments.png) --- ## Что это даёт Клиент в переписке говорит «готов оплатить», и бот тут же **выставляет счёт** (функция «Счёт на оплату», `owner_payment_invoice`). Клиент платит, ты видишь оплату. Не нужно вручную скидывать реквизиты и сверять переводы. > 🔑 **Важно про деньги.** Платёж идёт **напрямую тебе** (на твой Kaspi как продавца): платформа DOS деньги клиентов **не принимает и не хранит**. DOS только помогает боту выставить счёт; расчёт между тобой и твоим клиентом. --- ## Кто подключает **Только Владелец** проекта (`requirePaymentsOwner`). Даже Администратор не может настроить приём оплат: это работа с реальными деньгами, поэтому закрыто на владельца (см. [Роли](../07-team/70-roles.md)). Если ты Администратор и тебе нужно подключить, попроси владельца. --- ## Как подключить (Kaspi-авторизация) Раздел **«Приём оплат»** → подключение в несколько шагов: 1. Укажи реквизиты своего **ИП/ТОО** (БИН, 12 цифр, email). 2. Запусти **Kaspi-авторизацию**: придёт SMS на телефон кассира (формат `7XXXXXXXXXX`). 3. Введи **код из SMS** это подтверждение. После этого бот сможет выставлять счета твоим клиентам. Включи и настрой функцию «Счёт на оплату»: опиши в [промпте](../01-bot/11-system-prompt.md), когда бот предлагает оплату. --- ## Тариф приёма оплат После подключения выбери **тариф** по количеству платежей в день (до 30 / 100 / 300) прямо на странице «Приём оплат» и оплати его: через Kaspi (счёт придёт push-уведомлением на твой телефон) или картой. Тариф **включается сразу после оплаты** и действует 30 дней. Актуальные цены видны там же при выборе. Когда срок тарифа заканчивается, мы предупредим за 3 дня, а страница предложит **продлить**: оплати снова тем же способом, и приём оплат продолжит работать. Если продлить заранее, оставшиеся дни не сгорают: новые 30 дней добавятся к текущему сроку. Если бот не смог выставить счёт (тариф не оплачен или на сегодня исчерпан дневной лимит), клиенту он отвечает, что передаёт вопрос владельцу, а тебе приходит уведомление в колокольчик, не чаще одного раза в день. Так видно, что за деньгами уже приходили. --- ## Честно про статус (бета) Функция собрана и работает, но приём оплат сейчас в **бета-режиме**: финальная активация зависит от настройки доступа у платёжного партнёра. Это значит: - у части проектов функция уже доступна; - если в твоём кабинете её нет или при подключении выходит ошибка про недоступность, **партнёрский доступ ещё активируется**, это не баг на твоей стороне. **Что делать:** напиши в саппорт, подскажем, доступно ли подключение для твоего проекта прямо сейчас. --- ## Простыми словами Это про то, чтобы бот не только болтал, но и **брал деньги**. Клиент написал «беру»: бот сразу выставил ему счёт в чате, тот оплатил через Kaspi. Удобно: не надо вручную диктовать номер карты и потом сверять, кто и сколько перевёл. Два важных момента. Первый: деньги идут **тебе напрямую**, DOS их не трогает, мы просто помогаем боту выставить счёт. Второй: настроить это может только владелец проекта, потому что это реальные деньги. Подключение: через Kaspi с подтверждением по SMS, как обычный вход. И честно: функция пока в бета-режиме у платёжного партнёра идёт финальная настройка доступа. Если у тебя её ещё нет, не пугайся, просто напиши в саппорт, мы скажем, можно ли уже подключать твой проект. --- **Дальше:** → [Рефералы и вывод](./63-referrals.md) **Связано:** [Биллинг](./60-billing.md) · [Функции](../03-tools/30-functions.md) · [Роли и права](../07-team/70-roles.md) **Не получилось?** → напиши в саппорт: приём оплат в бета-доступе --- ## Промокоды и партнёрская программа URL: https://dosai.pro/docs/guide/06-money/63-referrals [Документация](../README.md) › [Деньги](../06-money) › Промокоды и партнёрская программа # Промокоды и партнёрская программа > Промокод применяется к конкретному проекту и удваивает старт: $10 на баланс вместо $5 и 30 бесплатных дней вместо 14. Отдельно есть партнёрская программа для тех, кто продвигает DOS AI постоянно. ⏱ 4 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Промокод вводится **в проекте → раздел «Оплата» → поле «Промокод»**, а не при регистрации. > - Код удваивает старт проекта: **$10 на баланс вместо $5** и **30 бесплатных дней WhatsApp вместо 14**. Диалоги не ограничены ни с кодом, ни без него. > - Правило: **один проект = один промокод**. > - Бесплатный период привязан к номеру: один номер получает его один раз. --- ## Как применить промокод 1. Создай проект и открой раздел **«Оплата»**. 2. Введи код в поле **«Промокод»**. 3. Код сразу докидывает баланс до **$10** и привязывает проект к пригласившему партнёру. Бесплатные **30 дней** начнутся, когда подключишь номер WhatsApp (без кода их 14). > 📌 Самая частая ошибка: код вводят при регистрации. Привязки в этом случае не будет, бонус не начислится. Код применяется **внутри проекта**. > 📌 Один проект = один промокод. Применить второй к тому же проекту нельзя. --- ## Что даёт код Старт проекта удваивается, и это видно сразу: | | Без кода | По коду партнёра | |---|---|---| | Баланс при старте | $5 | **$10** | | Бесплатных дней WhatsApp | 14 | **30** | | Ограничение по диалогам | нет | нет | Баланс докидывается в момент применения кода, дни начинают идти при подключении номера. > 📌 **Код открывает бесплатный период и второму-третьему проекту.** Обычно бесплатные дни даются только первому проекту аккаунта. Проект с промокодом получает их независимо от этого: удобно, если собираешь ботов сразу нескольким клиентам. > 📌 **Окно скидки на подписку от кода не зависит:** оно всегда 14 дней с подключения канала, см. [Биллинг](./60-billing.md#скидка-первых-двух-недель). Оплата внутри окна не сжигает оставшиеся бесплатные дни, платный период начнётся после них. > 📌 Бесплатный период привязан к номеру: один номер получает его один раз. Повторное подключение того же номера на новом проекте уже потребует подписки. > ⚠️ **Бесплатен канал, а не ответы бота.** Каждый ответ списывается с [баланса проекта](./60-billing.md), и в бесплатные дни тоже. Кончится баланс раньше, чем дни, и бот замолчит посреди бесплатного периода, поэтому просто пополни счёт. --- ## Партнёрская программа **Пройди [обучающий курс](/learn) целиком и получи именной партнёрский код.** Когда все уроки отмечены пройденными, на странице курса открывается кнопка «Получить код»: он выдаётся сразу, договариваться ни с кем не нужно. Комиссия по нему **10%** с оплат приведённых клиентов (актуальная ставка всегда показана на самой странице курса). В отличие от обычного личного кода, этот доступен не дожидаясь твоей первой оплаты и имеет отдельную статистику. На собственный проект он не применяется: это инструмент для клиентов, которых ты приводишь. Для тех, кто продвигает DOS AI постоянно (медиа, агентства, сообщества), есть **именные промокоды на особых условиях**. Выдаются по договорённости: напиши нам, если хочешь стать партнёром. > 📌 **Личный код открывается после первой оплаты подписки.** До неё раздел «Рефералы» показывает условие вместо кода. Так код есть у тех, кто пользуется платформой сам и может честно её посоветовать. Если ты уже кого-то привёл или у тебя именной партнёрский код, он виден сразу, независимо от оплаты. Когда код закреплён за тобой, в кабинете появляется раздел **«Рефералы»** с блоком твоего кода: сам код с кнопкой «Копировать», сколько человек его применили, сколько из них уже оплатили и сколько начислено. Начисления копятся в кошельке. Свежая сумма **замораживается на 3 дня** после оплаты приведённого клиента: это защита на случай возврата платежа. В кошельке это видно строкой «Заморожено». **Вывод накопленного, два способа.** **1. На карту.** - Минимум **$10**. - Оформляешь заявку (нужны последние 4 цифры карты). - Заявка уходит на проверку, выплата вручную (обычно около 3 дней) на карту через Kaspi. - Статусы заявки: «в обработке», затем «выплачено». **2. В токены.** - Переводишь размороженный баланс кошелька в токены своего проекта, мгновенно и без минимума (кроме совсем мелких сумм). - Удобно, если сам активно пользуешься платформой. --- ## Простыми словами Промокод это слово-пропуск для проекта. Ввёл его в разделе «Оплата», и старт удваивается: на баланс падает $10 вместо $5, а бесплатных дней у канала становится 30 вместо 14. Число диалогов не ограничено ни с кодом, ни без него. Ввёл не там, например при регистрации, и бонуса не будет: это самая частая ошибка. А если ты рассказываешь о платформе своей аудитории, есть отдельная партнёрская программа с именным кодом. Про неё договариваются лично. --- **Дальше:** → [Роли и права](../07-team/70-roles.md) **Связано:** [Биллинг](./60-billing.md) · [Сколько стоит сообщение](./61-message-cost.md) **Не получилось?** → [Платёж не прошёл](../09-troubleshooting/93-payment-failed.md) --- ## Роли и права (viewer / tester / editor / admin / owner) URL: https://dosai.pro/docs/guide/07-team/70-roles [Документация](../README.md) › [Команда и аккаунт](../07-team) › Роли и права # Роли и права (viewer / tester / editor / admin / owner) > В проект можно пустить команду, но с разным уровнем доступа. Пять ролей: **Просмотр → Тестер → Редактор → Администратор → Владелец**. Каждая следующая включает права предыдущей. ⏱ 9 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Роли по возрастанию: **Просмотр** (viewer) → **Тестер** (tester) → **Редактор** (editor) → **Администратор** (admin) → **Владелец** (owner). > - **Просмотр**: только смотреть (без email-ов участников). **Тестер**, то же, что Просмотр, плюс **тест-чат** (гоняет бота, но ничего не меняет). **Редактор**, функции, база знаний, дожимы, интеграции и ручные ответы клиентам. **Администратор**, **промпт и настройки** + приглашать людей. **Владелец**: деньги, роли, удаление, передача. > - **Промпт правит только Администратор и выше.** Редактор настраивает всё вокруг бота, но не его характер. > - **Подписка, приём оплат и удаление проекта, только Владелец.** Даже Администратор не может. А вот **пополнить баланс может любой участник**: это только добавляет денег проекту. > - Права проверяются **и на сервере, и в интерфейсе** (кнопки чужих действий просто не видны). --- ## Пять ролей | Роль | RU | Кратко | |---|---|---| | `viewer` | **Просмотр** | смотреть переписки, лиды, аналитику: без изменений | | `tester` | **Тестер** | + **тест-чат**: гонять бота на пробных сообщениях; правки промпта/функций/настроек недоступны | | `editor` | **Редактор** | + функции, база знаний, дожимы, интеграции, медиа; вести диалог вручную; сбросить историю чата | | `admin` | **Администратор** | + **промпт и все настройки проекта**, закрывать диалоги, **приглашать участников** | | `owner` | **Владелец** | + **деньги, роли, передача и удаление** проекта | Роли **иерархичны**: тестер умеет всё, что просмотр, плюс тест-чат; редактор, всё, что тестер, плюс правки; администратор, всё, что редактор, и так далее. > 📌 **Где проходит граница между Редактором и Администратором.** Редактор настраивает всё **вокруг** бота: функции, базу знаний, дожимы, интеграции, медиа, и сам отвечает клиентам. Характер бота (системный промпт, информация о компании, модель, расширенные настройки) правит только **Администратор**: это одна правка, которая мгновенно меняет ответы во всех живых диалогах, поэтому она закрыта уровнем выше. --- ## Кто что может (матрица) | Действие | Просмотр | Тестер | Редактор | Администратор | Владелец | |---|:--:|:--:|:--:|:--:|:--:| | Смотреть диалоги, лиды, аналитику | ✅ | ✅ | ✅ | ✅ | ✅ | | Видеть список участников | ✅ | ✅ | ✅ | ✅ | ✅ | | **Тест-чат** (гонять бота на пробе) | ❌ | ✅ | ✅ | ✅ | ✅ | | Видеть **email-ы** участников | ❌ | ❌ | ✅ | ✅ | ✅ | | Функции, база знаний, интеграции, дожимы, медиа | ❌ | ❌ | ✅ | ✅ | ✅ | | Вести диалог вручную (перехват) | ❌ | ❌ | ✅ | ✅ | ✅ | | Сбросить историю чата | ❌ | ❌ | ✅ | ✅ | ✅ | | **Закрыть** диалог (статус «closed») | ❌ | ❌ | ❌ | ✅ | ✅ | | **Промпт, модель и настройки проекта** | ❌ | ❌ | ❌ | ✅ | ✅ | | **Приглашать участников** | ❌ | ❌ | ❌ | ✅ | ✅ | | Назначить роль **Администратор** | ❌ | ❌ | ❌ | ❌ | ✅ | | **Менять роли / удалять участников** | ❌ | ❌ | ❌ | ❌ | ✅ | | **Пополнить баланс проекта** | ✅ | ✅ | ✅ | ✅ | ✅ | | **Подписка, приём оплат, возвраты** | ❌ | ❌ | ❌ | ❌ | ✅ | | **Передать проект** другому | ❌ | ❌ | ❌ | ❌ | ✅ | | **Удалить проект** | ❌ | ❌ | ❌ | ❌ | ✅ | > ⚠️ **Email-ы видны только с роли Редактор.** Просмотр и Тестер видят участников, но их адреса скрыты: защита персональных данных команды. > 🧪 **Тестер для «дай пощупать бота».** Ровно один шаг над Просмотром: открывается тест-чат, где человек гоняет бота пробными сообщениями. При этом он **не может** менять промпт, функции, настройки или отвечать реальным клиентам. Удобно давать тому, кто помогает проверять качество ответов, но кого не пускаешь в настройку. --- ## Владелец против Администратора Частый вопрос: «дал админа, а он не может оплатить подписку». Это by design. **Только Владелец** может: - **платить за проект и принимать оплаты**: подписка, настройка приёма платежей (*«Только владелец проекта может управлять Kaspi-авторизацией»*), возвраты. Пополнение баланса, наоборот, открыто любому участнику: оно только добавляет проекту денег, отобрать их так нельзя; - **менять роли и удалять** участников; - **назначать роль Администратор** (*«Only the project owner can grant the admin role»*); - **передать проект** (*«Only the project owner can transfer ownership»*); - **удалить проект**. Администратор это «правая рука»: всё про бота и команду (приглашения, настройки, закрытие диалогов), но **без денег и без необратимых действий с проектом**. > 💡 **Передача проекта.** Владелец может передать проект другому: *«После подтверждения вы станете владельцем: сможете пополнять баланс, менять настройки, управлять командой и удалять проект. Текущий владелец будет понижен до администратора.»* То есть старый владелец становится Администратором. --- ## Как добавить человека Раздел проекта → **«Участники»** → пригласить по email. По умолчанию приглашённому даётся роль **«Тестер»** (самый частый кейс: «дай пощупать бота»; можно выбрать любую другую). Роль **Администратор** при приглашении может дать **только Владелец**. Подробнее: [Участники и приглашения](./71-members.md). --- ## Где права проверяются Права работают на **двух уровнях** (нельзя обойти, отключив одно): - **На сервере**: каждый запрос к API проверяет роль (`requireProjectMember` с минимальной ролью). Не хватает прав → отказ. - **В интерфейсе**: кнопки и разделы, которых тебе нельзя, **просто не показываются** (хук `useProjectRole`). Изменения роли подхватываются почти мгновенно (реалтайм). > 📌 **Платформенные админы: отдельно.** У команды DOS есть служебный доступ суперадмина (`is_superadmin`) для поддержки всей платформы: это **не** роль внутри твоего проекта и не пересекается с ролями участников. --- ## Простыми словами Когда над проектом работает несколько человек, не всем нужен полный доступ. Поэтому есть пять уровней. **Просмотр**, для тех, кто только смотрит (например, руководитель глянуть статистику). **Тестер**, для тех, кому надо просто погонять бота в тест-чате, но без права что-то менять. **Редактор**, для тех, кто настраивает всё вокруг бота (функции, базу знаний, дожимы, интеграции) и отвечает клиентам руками, но сам характер бота не меняет. **Администратор**: твоя правая рука: правит промпт и настройки и зовёт людей в команду. И **Владелец** это ты: только у тебя ключи от денег и право удалить или передать проект. Логика простая и безопасная, чем выше роль, тем больше можно. Самое важное, **оплата подписки, приём платежей и удаление проекта закрыты для всех, кроме владельца**. Даже администратор не сможет снести проект или подключить приём оплат мимо тебя. Пополнить баланс, наоборот, может любой участник: деньги при этом только приходят на проект, вынуть их обратно нельзя. А права проверяет сервер: лишние кнопки не показываются, и даже прямой запрос мимо интерфейса не пройдёт. --- **Дальше:** → [Участники и приглашения](./71-members.md) **Связано:** [Диалоги (перехват)](../04-crm/40-dialogs.md) · [Биллинг](../06-money/60-billing.md) **Не получилось?** → напиши владельцу проекта, чтобы повысил роль --- ## Участники и приглашения URL: https://dosai.pro/docs/guide/07-team/71-members [Документация](../README.md) › [Команда и аккаунт](../07-team) › Участники и приглашения # Участники и приглашения > Добавляй команду в проект по email с нужной [ролью](./70-roles.md). Приглашённому не нужен заранее созданный аккаунт: он создаст его при принятии. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Приглашение, **по email**, ссылка действует **7 дней**. > - По умолчанию даётся роль **«Тестер»** (можно выбрать любую); роль **Администратор** может выдать **только Владелец**. > - Приглашать может **Администратор и выше**. Максимум, **20 участников** на проект. > - Поменять роль в висящем приглашении нельзя, **отзови и пригласи заново**. ![Раздел «Участники»: приглашение команды и уровни доступа](/docs-guide-img/07-team/members.png) --- ## Как пригласить 1. Раздел проекта → **«Участники»** (`/projects//members`). 2. Введи **email** и выбери [роль](./70-roles.md). 3. Отправь. Человеку придёт письмо с кнопкой **«Принять приглашение»**. В письме указано: *«Ссылка действительна 7 дней. Если вы не ожидали это письмо, просто проигнорируйте его.»* Приглашённому **не нужен заранее аккаунт**: он зарегистрируется при принятии и сразу попадёт в проект с выданной ролью. > 📌 **Кто кого может звать.** Приглашать участников может **Администратор и Владелец**. Но роль **Администратор** при приглашении вправе выдать **только Владелец**: админ может звать максимум редакторов, тестеров и наблюдателей. См. [Роли](./70-roles.md). --- ## Лимит участников На один проект, **до 20 участников**. Достиг лимита, освободи место (удали неактивных) или используй отдельный проект. --- ## Управление приглашениями - **Отозвать** висящее приглашение: можно в любой момент (пока не принято). - **Сменить роль в уже отправленном приглашении нельзя.** Если ошибся с ролью, **отзови** приглашение и **отправь заново** с правильной: *«У этого пользователя уже есть отправленное приглашение. Отзовите его и пригласите заново с новой ролью.»* - Повторное приглашение с той же ролью, не плодит дубль. > ⚠️ **Сменить роль уже принятого участника** или **удалить** его может только **Владелец** (см. [Роли](./70-roles.md)). > 🔔 **Люди узнают об изменениях сами** (с 2026-08-07). Сменили роль или закрыли доступ, участник получит уведомление: раньше о снятой роли он узнавал, только упёршись в отказ посреди работы. Принял приглашение, уведомление придёт владельцу и тому, кто звал. Настройка контактов, в [Уведомлениях](./73-notifications.md), категория «Команда». --- ## Простыми словами Добавить человека в проект просто: вводишь его почту, выбираешь, что ему можно (только смотреть, настраивать бота или быть администратором), и отправляешь приглашение. Ему придёт письмо со ссылкой: нажал, завёл аккаунт (если ещё нет) и оказался внутри. Ссылка живёт неделю. Пара нюансов. Звать людей может администратор, но сделать кого-то таким же администратором, только ты как владелец. Всего в проект помещается 20 человек. И если случайно дал не ту роль в приглашении, поменять «на лету» не выйдет: просто отзови это приглашение и отправь новое с правильной ролью. --- **Дальше:** → [Профиль, пароль, безопасность](./72-profile-security.md) **Связано:** [Роли и права](./70-roles.md) · [Передача проекта](./74-project-lifecycle.md) **Не получилось?** → напиши в саппорт с ID проекта --- ## Профиль, пароль, безопасность URL: https://dosai.pro/docs/guide/07-team/72-profile-security [Документация](../README.md) › [Команда и аккаунт](../07-team) › Профиль, пароль, безопасность # Профиль, пароль, безопасность > Личные настройки твоего аккаунта (не проекта): имя, телефон, пароль, выход со всех устройств. Эта страница, про тебя, а не про конкретного бота. ⏱ 5 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - **Личный кабинет** (`/account`), всё про твой аккаунт в одном месте: вкладки **Профиль**, **Безопасность**, **Рефералы**, **Данные**, **Настройки**. > - Попасть в кабинет: клик по своему имени внизу бокового меню или пункт **«Кабинет»** в разделе «Система». > - Можно сменить **имя** и **телефон** (вкладка «Профиль»), **пароль** (вкладка «Безопасность»); **email** меняется через саппорт. > - Пароль: минимум **8 символов**; главное правило - не брать популярный (платформа сверяет с базой утёкших и отклонит слишком известный). > - Можно **выйти со всех устройств** разом, если потерял доступ или забыл выйти где-то. --- ## Что где в кабинете | Вкладка | Что внутри | |---|---| | **Профиль** | имя, телефон, email, дата регистрации, число проектов, статус пробного периода | | **Безопасность** | смена пароля, активные сессии (выход с устройств), журнал действий | | **Рефералы** | партнёрский код, кто его применил, начисления и вывод (раздел появляется у партнёров) | | **Данные** | выгрузка своих данных (GDPR) и удаление аккаунта | | **Настройки** | язык интерфейса, регион, тема оформления | --- ## Что можно изменить | Что | Как | |---|---| | **Имя** | вкладка «Профиль», кнопка «Сохранить» | | **Телефон** | вкладка «Профиль»: контактный номер, необязательно | | **Пароль** | вкладка «Безопасность»: ввести текущий + новый | | **Email** | пока **через саппорт** (не самообслуживание), напиши, поможем | | **Язык / регион / тема** | вкладка «Настройки» | --- ## Смена пароля Кабинет → вкладка **«Безопасность»** → смена пароля. Требования к новому: - минимум **8 символов** (максимум 128), без обязательных заглавных и спецсимволов: длина и редкость важнее состава; - пароль не должен быть **слишком популярным**: платформа сверяет его с базой паролей, утёкших в открытый доступ, и отклонит что-то вроде `Aidar2024!` или `Qwerty123`. Придумай редкое сочетание, которого нет в словарях. Не выполнил, увидишь подсказку, какое именно правило нарушено. После смены тебя выйдет из аккаунта на всех устройствах: это нормально, войди заново с новым паролем. > 🔔 **О смене пароля платформа сообщит** (с 2026-08-07): уведомление придёт в колокольчик, а если категория «Безопасность» включена, то и на почту с Telegram. То же самое, когда пароль меняют по ссылке восстановления из письма. Смысл простой: если пароль сменили не вы, вы узнаете об этом сразу. Настройка контактов, в [Уведомлениях](./73-notifications.md). --- ## Выход со всех устройств Если зашёл с чужого компьютера и забыл выйти, или подозреваешь, что доступ утёк, кабинет → **«Безопасность»** → можно завершить сессии: - **на других устройствах** (текущее остаётся); - **на всех** (включая текущее: тебя перекинет на вход). > 🔔 **Вход с незнакомого устройства тоже заметен.** Если в аккаунт зашли с браузера, которым раньше не пользовались, придёт уведомление с указанием устройства, сети и времени. Обновление вашего браузера за новое устройство не считается, а самый первый вход при регистрации не тревожит. > 💡 Это быстрый способ «отрезать» все активные входы, не меняя пароль (но пароль сменить тоже не помешает, если переживаешь за безопасность). > 📌 **Двухфакторной аутентификации (2FA) пока нет.** Защита аккаунта: надёжный пароль + выход со всех устройств при подозрении. --- ## Аккаунт ≠ настройки проекта Не путай: **Личный кабинет** это про **тебя** (имя, телефон, пароль, сессии, язык). Настройки конкретного бота (промпт, каналы, функции) живут в **настройках проекта** (`/projects//settings`). Один твой аккаунт может владеть несколькими проектами: их число видно во вкладке «Профиль». --- ## Простыми словами Это твой личный кабинет, всё про тебя самого собрано в одном месте, по вкладкам. Зайти просто: внизу слева кликни по своему имени. На вкладке «Профиль» меняешь имя и телефон, на «Безопасности», пароль (платформа просит минимум 8 символов и отклонит слишком популярный, чтобы аккаунт не увели). Почту пока меняем через поддержку, напиши, если надо. Полезная кнопка на «Безопасности», «выйти со всех устройств»: зашёл с чужого ноутбука и забыл выйти, или просто переживаешь, нажал, и все входы сбросились. Двухфакторной защиты по SMS пока нет, так что главная твоя броня, хороший пароль. Язык интерфейса, регион и тему меняешь на вкладке «Настройки», а свои данные можно выгрузить на вкладке «Данные». И помни: тут настройки твоего аккаунта, а характер ботов настраивается отдельно, в каждом проекте. --- **Дальше:** → [Уведомления и личные настройки](./73-notifications.md) **Связано:** [Участники](./71-members.md) · [Роли и права](./70-roles.md) **Не получилось?** → напиши в саппорт (смена email, тоже через саппорт) --- ## Уведомления и личные настройки URL: https://dosai.pro/docs/guide/07-team/73-notifications [Документация](../README.md) › [Команда и аккаунт](../07-team) › Уведомления # Уведомления и личные настройки > Платформа сообщает о важном: мало токенов, канал отвалился, пришёл платёж. Уведомления приходят в кабинет, на email, в личный Telegram или на твой вебхук. Здесь, что бывает и как задать контакты один раз на весь аккаунт. ⏱ 6 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Каналы доставки: **колокольчик в кабинете**, **email**, **личный Telegram**, свой **вебхук**. > - Контакты отсюда используются как **запасные**: если у проекта канал не заполнен, системное уведомление уйдёт по адресу из аккаунта. Настройки проекта главнее. > - **Личный Telegram** подключается через свой бот-токен и chat_id: токен хранится зашифрованным. > - Самое важное, **деньги** и **каналы связи**: именно их пропуск приводит к тому, что бот тихо замолкает. --- ## Куда приходят уведомления | Канал | Что это | |---|---| | **Колокольчик** в кабинете | список уведомлений прямо в интерфейсе (страница `/notifications`) | | **Email** | на указанную почту | | **Telegram** | алерты в твой Telegram через твоего бота | | **Вебхук** | POST-запрос с JSON на свой URL (Slack, Discord, n8n, своя система) | --- ## Какие события можно получать В настройках уведомлений включаются/выключаются 10 типов событий: | Тип | Когда присылается | |---|---| | **Оплата и баланс** | оплата, низкий баланс, подписка, автопополнение | | **Безопасность** | вход с нового устройства, смена пароля, выход на всех устройствах, создан API-ключ | | **Статус проектов** | ошибка ИИ, бот отключён из-за спама, проблема в графике записи | | **Сводка по лидам** | первая заявка проекта | | **Каналы связи** | WhatsApp отключён, канал молчит | | **Лимиты и расход** | пока событий нет | | **Команда** | приглашение, новый участник, смена роли, закрытие доступа | | **Интеграции** | пока событий нет | | **Еженедельный отчёт** | регулярный отчёт по проекту | | **Обновления платформы** | новости о новых возможностях (по умолчанию выключено) | > ✅ **Как это работает (с 2026-08-06).** Настройки проекта главнее: если у бота задан свой контакт, платформа шлёт туда. А вот **пустой канал теперь подхватывается отсюда**: не указал в проекте почту или Telegram, системное уведомление уйдёт по тому, что стоит на этой странице. Так один раз заполненный аккаунт закрывает все проекты сразу. > > Что важно помнить: > - подхват работает для **системных** событий (деньги, каналы, график, состояние бота), то есть ровно для тех, из-за которых бот замолкает; > - **тумблеры выше управляют этим подхватом**: снял «Оплата и баланс», по деньгам с аккаунта писать не будут (контакт, заданный в самом проекте, при этом продолжит получать); > - если в проекте канал **снят галочкой** (Настройки проекта → уведомления о балансе), это считается осознанным «не пиши мне сюда», и аккаунт его не воскрешает. > > Полный список событий и что из них всегда-включённое: [Типы уведомлений](../10-reference/106-notifications-reference.md). --- ## События самого аккаунта: безопасность, команда, новости Три категории выше относятся не к проекту, а к аккаунту, поэтому и работают иначе. Их подключили 2026-08-07. **Безопасность.** Приходит, когда: - в аккаунт вошли с браузера или устройства, которым раньше не пользовались (первое устройство при регистрации не считается, обновление браузера тоже); - сменили пароль, в настройках или по ссылке восстановления из письма; - нажали «выйти на всех устройствах» или «на других устройствах»; - создали API-ключ. Ключ работает без пароля и без браузера, поэтому его появление вы видите сразу. **Команда.** Приходит: - владельцу, когда администратор кого-то пригласил или добавил (сам владелец про свои действия уведомление не получает); - владельцу и пригласившему, когда человек принял приглашение; - самому участнику, когда ему сменили роль или закрыли доступ. До этого о снятой роли человек узнавал, только упёршись в отказ посреди работы. **Обновления платформы.** Это подписка на новости, а не факт о вашем аккаунте, поэтому по умолчанию она выключена и выключенная не приходит вообще никак. > 📌 **Важная разница.** Тумблеры на странице управляют **письмами, Telegram и вебхуком**. Безопасность и команда всё равно остаются в **колокольчике**: это история вашего аккаунта, и прятать из неё «пароль изменён» было бы неправильно. Для обновлений платформы выключенный тумблер значит «не присылать совсем». --- ## Личный Telegram для алертов Самый быстрый способ узнавать о проблемах, **получать уведомления в Telegram через своего бота**: 1. Создай бота в @BotFather (как для [канала](../02-channels/22-telegram.md), но отдельного, для алертов себе). 2. Укажи его **токен** и свой **chat_id**: на этой странице, чтобы алерты шли по всем твоим проектам, или в настройках конкретного проекта, если для него нужен отдельный получатель. 3. Готово: важные события будут падать тебе в Telegram. > 🔒 Токен этого бота хранится **зашифрованным**, как и все ключи на платформе. В настройках показывается только признак «токен задан»: сам токен не отображается. > 📌 Это **отдельный** бот от того, что общается с клиентами. Один, отвечает клиентам (канал), другой, шлёт алерты тебе. > 💡 **Регулярные отчёты** по проекту шлёт бот, заданный **в проекте**. Подключить или сменить его можно в настройках проекта и прямо на странице **Отчёты**: в блоке «Кто отправляет». > 📌 **Контакт проекта перебивает аккаунт.** Удобно, когда ведёшь чужие проекты: по одному алерты идут тебе, по другому, клиенту, а аккаунт остаётся подстраховкой для всего остального. --- ## Простыми словами Платформа присматривает за твоими ботами и дёргает тебя, когда что-то важное: кончаются деньги, отвалился WhatsApp, пришла оплата. Эти сигналы можно получать сразу в кабинете (колокольчик), на почту и, удобнее всего, себе в Telegram. Настроить можно двумя способами, и они дополняют друг друга. Внутри **проекта** указываешь контакты для конкретного бота: удобно, когда ведёшь чужие проекты и алерты по ним должны идти разным людям. А на **этой странице** задаёшь свои контакты один раз на весь аккаунт: их платформа возьмёт для любого проекта, где ты ничего не заполнил. Важнее всего два сигнала, «кончаются деньги» и «WhatsApp отвалился»: именно из-за их пропуска бот тихо перестаёт отвечать клиентам, а узнаёшь ты поздно. Для Telegram-алертов заведи отдельного бота в @BotFather: это не тот, что общается с клиентами, а твой личный «вестник». --- **Дальше:** → [Удаление, передача, дублирование проекта](./74-project-lifecycle.md) **Связано:** [Профиль и безопасность](./72-profile-security.md) · [Биллинг](../06-money/60-billing.md) · [Канал отвалился](../09-troubleshooting/92-channel-down.md) **Не получилось?** → напиши в саппорт --- ## Удаление, передача, дублирование проекта URL: https://dosai.pro/docs/guide/07-team/74-project-lifecycle [Документация](../README.md) › [Команда и аккаунт](../07-team) › Удаление, передача, дублирование # Удаление, передача, дублирование проекта > Три необратимых (или почти) действия с проектом: все **только для Владельца**. Удалить, передать другому человеку или склонировать готовую настройку. ⏱ 7 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - Все три действия, **только Владелец** (см. [Роли](./70-roles.md)). > - **Удаление** сносит проект и его данные (диалоги, лиды, базу знаний); финансовая история сохраняется. Необратимо. > - **Передача** делает владельцем другого человека, а тебя: администратором. > - **Дублирование** копирует настройку (промпт, функции, дожимы, базу знаний) в новый проект: без диалогов и канала. --- ## Удаление проекта Раздел **Настройки → опасная зона → Удалить проект**. Доступно **только Владельцу**. Что удаляется: сообщения, диалоги, лиды, подписчики дожимов, настройки, **база знаний**, интеграции, функции. **Сохраняется** финансовая история (платежи, транзакции), для отчётности она не сносится, а отвязывается. > ⚠️ **Это необратимо.** Восстановить удалённый проект нельзя. Перед удалением, выгрузи нужное ([экспорт лидов](../04-crm/41-leads.md)). Удаление идёт в фоне и **устойчиво к сбоям**, если процесс прервётся, система продолжит с того же места. Поэтому можно увидеть: *«Удаление уже выполняется, подождите 1-2 минуты и попробуйте снова»* или *«Удаление прервалось на этапе очистки данных. Попробуйте удалить ещё раз через 2 минуты, система продолжит с того же места.»*: это нормально, просто подожди и повтори. --- ## Передача проекта Настройки → передать владение. **Только Владелец.** 1. Указываешь **email** нового владельца: ему придёт письмо *«Принять владение»* (ссылка действует 7 дней). 2. Он принимает, и становится **Владельцем**. 3. **Ты автоматически становишься Администратором** этого проекта: *«Текущий владелец будет понижен до администратора.»* > 📌 Передача не происходит без согласия, пока человек не нажал «Принять владение», ничего не меняется. *«Если вы не ждали это письмо, проигнорируйте его, передача не произойдёт без вашего согласия.»* Зачем: продаёшь бизнес, передаёшь проект клиенту, меняешь ответственного в команде. --- ## Дублирование проекта Настройки → опасная зона → дублировать. **Только Владелец.** **Копируется:** настройки, функции, дожимы, база знаний (с содержимым). Можно задать имя новой копии (иначе добавится «(копия)»). **НЕ копируется:** подключённые каналы (WhatsApp/Telegram), история диалогов и лиды, баланс/биллинг, личный Telegram для алертов. > 💡 **Зачем дублировать.** Настроил идеального бота для одного филиала, клонируй под второй, подключи там свой номер, и не настраивай всё заново. Или держи «эталон» и экспериментируй на копии, не трогая боевой проект. --- ## Простыми словами Три «больших» действия с проектом, и все, только для тебя как владельца, чтобы сотрудник случайно ничего не натворил. **Удалить**, снести проект совсем: уйдут переписки, лиды, база знаний (платёжная история останется для отчётности). Назад не вернёшь, так что сперва выгрузи нужное. Если при удалении выскочит «подождите 1-2 минуты», не пугайся, это система аккуратно дочищает, просто повтори. **Передать**, сделать хозяином другого человека: он получает письмо, принимает, и проект, его, а ты становишься администратором. Удобно, если продаёшь бизнес или отдаёшь бота клиенту. Без его согласия ничего не произойдёт. **Дублировать**, снять копию готовой настройки: промпт, функции, база знаний переедут в новый проект, а вот канал и переписки, нет. Шикарно, когда настроил одного бота идеально и хочешь такого же под другой филиал, не собирая всё с нуля. --- **Дальше:** → [Публичный API и ключи](../08-developers/80-public-api.md) **Связано:** [Роли и права](./70-roles.md) · [Участники](./71-members.md) · [Создание проекта](../01-bot/10-create-project.md) **Не получилось?** → напиши в саппорт с ID проекта --- ## Публичный API и ключи dos_sk_live_… URL: https://dosai.pro/docs/guide/08-developers/80-public-api [Документация](../README.md) › [Для разработчиков](../08-developers) › Публичный API # Публичный API и ключи `dos_sk_live_…` > `[для разработчиков]` Дёргай платформу из своего кода: API-ключ `dos_sk_live_…` авторизует запросы **как тебя самого**, с теми же правами на проекты, что и в браузере. ⏱ 8 мин · 👤 для разработчика · 🟢 live > **За 30 секунд:** > - Ключ формата **`dos_sk_live_…`**, передаётся в заголовке **`Authorization: Bearer …`**. > - Ключ работает **от имени твоего аккаунта**: действуют те же [роли/доступы](../07-team/70-roles.md), что и в кабинете. > - Ключи бывают **read** и **read+write**, **на весь аккаунт** или **на один проект**. > - Хранится только **SHA-256-хеш**, сырой ключ показывается **один раз** при создании. Потерял, выпусти новый. ![Раздел «Для разработчиков»: выпуск и управление API-ключами](/docs-guide-img/08-developers/api.png) --- ## Создание ключа В кабинете → управление API-ключами → создать. При создании: - задаёшь **права**: только чтение (`read`) или чтение+запись (`read`+`write`); - задаёшь **область**: весь аккаунт (все твои проекты) или **один проект**; - опционально, **срок жизни** (1-365 дней). > 🔑 **Сырой ключ виден ОДИН раз.** Платформа хранит только его **SHA-256-хеш** и не может показать ключ повторно. Скопируй сразу в надёжное место. Потерял, просто **отзови** и выпусти новый. Лимиты: до **50 ключей** на аккаунт; запросы по ключу до **120 в минуту** (при превышении API вернёт `429 Too Many Requests`, сделайте паузу и повторите). Управлять ключами можно **только из браузера** (залогиненная сессия), **сам ключ не может создавать другие ключи** (защита от эскалации прав). --- ## Использование Передавай ключ в заголовке: ``` Authorization: Bearer dos_sk_live_xxxxxxxxxxxxxxxxxxxxxxxx ``` Платформа резолвит ключ в **твоего пользователя**, дальше работают **те же правила доступа**, что и в кабинете: ключ видит ровно те проекты и может ровно то, что [роль](../07-team/70-roles.md) твоего аккаунта на этих проектах. Никаких отдельных «прав ключа» сверх твоих собственных нет. | Свойство | Поведение | |---|---| | **Права** | `read`: только GET; `write`, позволяет POST/PUT/PATCH/DELETE. Ключ только для чтения на мутирующем запросе → отказ | | **Область** | account-scoped (все проекты) или project-scoped (заблокирован на один) | | **RBAC** | наследует роли твоего аккаунта на проектах, не выше | | **Отзыв** | отозванный ключ перестаёт работать сразу | Базовый адрес: **`https://dosai.pro`**. Пример запроса: ```bash 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/mcp` | MCP-сервер: тот же каталог как готовые инструменты для Claude Code, Codex и Cursor. См. [Подключить ИИ-агента](./84-ai-agents.md) | --- ## Каталог эндпоинтов Все пути, относительно `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`. Важная идея: ключ это «ты в виде кода». Он видит ровно те проекты и умеет ровно то, что и ты сам в кабинете, не больше. Хочешь дать интеграции только читать, выпусти ключ «только чтение». Хочешь ограничить одним проектом: выпусти ключ на этот проект. Главное правило безопасности: ключ показывается один-единственный раз при создании, мы храним только его «отпечаток» и заново показать не сможем. Скопировал, сохранил надёжно. Потерял или засветил, не страшно, заходишь и отзываешь, выпускаешь новый. И никогда не клади такой ключ в открытый код или фронтенд: это как пароль. --- **Дальше:** → [Кастомные вебхуки](./81-custom-webhooks.md) **Связано:** [Роли и права](../07-team/70-roles.md) · [Формат данных](./83-data-format.md) **Не получилось?** → напиши в саппорт --- ## Кастомные вебхуки (продвинутый режим) URL: https://dosai.pro/docs/guide/08-developers/81-custom-webhooks [Документация](../README.md) › [Для разработчиков](../08-developers) › Кастомные вебхуки # Кастомные вебхуки (продвинутый режим) > `[продвинутое]` Научи бота дёргать **твой** HTTP-эндпоинт: проверить остаток на складе, создать заказ в своей системе, получить данные из своей БД. Через функцию **«Своя интеграция по API»** (тип `webhook`). ⏱ 9 мин · 👤 для разработчика и владельца · 🟢 live > **За 30 секунд:** > - Функция **«Своя интеграция по API»** (тип `webhook`) даёт боту звонить на твой URL. > - Настраиваешь URL, метод, заголовки, тело; в шаблонах можно подставлять данные диалога ([выражения](./82-expressions.md)). > - Есть **повторы** при сбоях, таймаут **до 30-60 сек** (зависит от режима функции), авторизация к твоему API (Bearer/Basic/API-key): ключи хранятся **зашифрованными**. > - URL проходит [проверку безопасности (SSRF)](../05-integrations/55-webhooks-security.md): внутренние адреса заблокированы. --- ## Зачем это нужно Встроенных функций (запись в Sheets, календарь, CRM) хватает не всем. Если у тебя своя система, склад, ERP, личный бэкенд, кастомный вебхук позволяет боту **обратиться к ней прямо в разговоре**: клиент спросил «есть ли товар?» → бот дёрнул твой `/api/stock` → ответил по факту. --- ## Как настроить Создай функцию типа **«Своя интеграция по API»** (тип `webhook`, см. [Функции](../03-tools/30-functions.md)): - **URL**, твой эндпоинт (через [выражения](./82-expressions.md) можно вставить данные: `https://api.shop.kz/order?phone={{phone}}`); - **метод**: GET или POST; - **заголовки**: свои, включая авторизацию; - **тело** (для POST): шаблон с подстановкой полей диалога; - **описание**, когда боту это звать (как у любой [функции](../03-tools/30-functions.md)). Бот сам решит, когда вызвать, передаст параметры и **использует JSON-ответ** твоего сервиса в разговоре. --- ## Обратное направление: платформа сама шлёт события на твой URL Не путай с функцией выше. Функция это когда **бот идёт к тебе** посреди разговора. А в разделе **«Интеграции» → «Вебхуки»** настраивается обратное: платформа сама шлёт тебе POST, когда в проекте что-то произошло. Указываешь URL и отмечаешь события чипами. **Доставляются все десять событий** (семь из них подключены 2026-08-06): | Событие | Когда шлётся | |---|---| | `conversation_started` | бот ответил в диалоге, которого раньше не было | | `message_received` | бот ответил в уже существующем диалоге | | `lead_created` | бот создал заявку | | `payment_received` | оплата прошла | | `payment_error` | оплата не прошла | | `tokens_low` | баланс проекта на исходе | | `trial_expiring` | заканчивается бесплатный период WhatsApp | | `whatsapp_disconnected` | WhatsApp-канал отвалился | | `ai_error` | бот не смог ответить из-за ошибки ИИ | | `schedule_problem` | движок [записи](../03-tools/36-booking.md) не разобрал график | Тело запроса одинаковое: `event`, `project_id`, `project_name`, `title`, `body`, `data` (подробности события) и `fired_at`. > 📌 **Про повторы.** Событие вроде «мало баланса» может повторяться, пока причина не устранена, поэтому на своей стороне считай доставку **идемпотентной**: ориентируйся на пару `event` + `fired_at`, а не на «пришло, значит новое». Доставки видно в **«Логах событий»**: статус, код ответа, повторы. Подпись платформа на этих запросах не ставит, если нужна аутентификация, положи секрет в query или прими только с известного адреса. --- ## Надёжность: таймаут и повторы | Параметр | Поведение | |---|---| | **Таймаут** | по умолчанию ~10 сек, настраивается: до **30 сек** (стандартный режим) / до **60 сек** (расширенный режим функции) | | **Повторы** | настраиваемые: число попыток + задержка (линейная/экспоненциальная) | | **Авто-повтор** | временные коды `408, 429, 502, 503, 504, 522, 524` повторяются всегда; `429` уважает `Retry-After` | Если твой сервис «прилёг», бот не зависнет, отработает таймаут и повторы, а клиенту скажет, что не получилось (см. [Функция падает](../09-troubleshooting/91-function-fails.md)). --- ## Авторизация к твоему API Бот может авторизоваться на твоём эндпоинте: **Bearer-токен**, **Basic**, **API-ключ в заголовке** или **кастомный заголовок**. Эти секреты хранятся **зашифрованными**. Заголовки очищаются от спецсимволов (защита от инъекций), а служебные заголовки слать нельзя. > ⚠️ **URL проверяется на безопасность.** Нельзя направить бота на внутренний адрес (`127.0.0.1`, `10.x`, `192.168.x` и т.п.): это блокируется ([SSRF-защита](../05-integrations/55-webhooks-security.md)). Эндпоинт должен быть публичным и желательно по **HTTPS**. --- ## Простыми словами Это для тех, у кого есть своя программа или сайт с API. Обычный бот умеет писать в Google-таблицу или CRM, но если тебе нужно дёрнуть именно **свою** систему, например, проверить остаток на складе или создать заказ: ты настраиваешь **«Свою интеграцию по API»**. Говоришь боту: вот адрес, вот как авторизоваться, вот что отправить, и он по ходу разговора обращается к твоему сервису и отвечает клиенту по реальным данным. Сделано надёжно, если твой сервер тормозит, бот не зависнет, подождёт сколько-то секунд, попробует ещё раз, а не получилось, честно скажет клиенту. Пароли к твоему API хранятся в зашифрованном виде. Одно ограничение: адрес должен быть «внешним» на внутренние/локальные адреса бота направить нельзя, это защита от взлома. --- **Дальше:** → [Язык выражений](./82-expressions.md) **Связано:** [Функции](../03-tools/30-functions.md) · [Вебхуки и безопасность](../05-integrations/55-webhooks-security.md) · [МойСклад: готовый пример](../05-integrations/56-moysklad.md) · [Функция падает](../09-troubleshooting/91-function-fails.md) **Не получилось?** → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Язык выражений (expressions) URL: https://dosai.pro/docs/guide/08-developers/82-expressions [Документация](../README.md) › [Для разработчиков](../08-developers) › Язык выражений # Язык выражений (expressions) > Подставляй в тексты бота живые данные: `Привет, {{client_name}}!`. Выражения работают в промпте, дожимах и шаблонах: на основе Handlebars, безопасно. ⏱ 8 мин · 👤 для владельца и разработчика · 🟢 live > **За 30 секунд:** > - Синтаксис это двойные фигурные скобки: `{{client_name}}`, `{{phone}}`, `{{stage}}`. > - Работает в **системном промпте**, **дожимах**, **шаблонах уведомлений**, **тест-чате**. > - Есть помощники: даты/время, текст (`{{upper …}}`), условия (`{{#if …}}`), математика. > - Это **безопасный шаблонизатор** (Handlebars): произвольный код не выполняется. --- ## Что это и где работает Выражения это «вставки» в тексты бота, которые на лету заменяются на реальные данные диалога. Например, `Здравствуйте, {{client_name}}!` превратится в `Здравствуйте, Алмас!`. Работают в: **системном промпте**, **сообщениях дожимов**, **шаблонах уведомлений**, **тест-чате**. --- ## Переменные и помощники: живой справочник Полный список переменных (`{{client_name}}`, `{{phone}}`, `{{stage}}`, `{{data.поле}}`…) и помощников (даты, текст, условия `{{#if}}`, математика, `{{digits}}`): в **[живом справочнике выражений](/docs/expressions)**. Он строится прямо из кода движка, поэтому всегда совпадает с тем, что реально умеет бот: здесь копию не держим, чтобы она не устаревала. > 💡 `{{client_name}}` и `{{name}}`: одно и то же, оба работают. Аналогично `{{client_phone}}` и `{{phone}}`. **Пример:** ``` {{#if client_name}}Здравствуйте, {{client_name}}!{{else}}Здравствуйте!{{/if}} Сегодня {{day_of_week}}, {{date}}. Ваш статус: {{default lead_status "новый"}}. ``` --- ## Безопасность Это **безопасный шаблонизатор**, а не выполнение кода. Нельзя запустить произвольный JS, обратиться к файлам или сети. Встроены защиты от перегрузки: ограничения на длину шаблона, число и глубину условных блоков, размер данных и времени выполнения. Если шаблон «слишком тяжёлый», он вернётся как есть, не подвесив бота. > 📌 Невалидное выражение (опечатка в скобках) не ломает сообщение: подсветится/останется текстом, бот продолжит работать. --- ## Простыми словами Выражения это способ вставлять в тексты бота «живые» кусочки. Пишешь в промпте `Привет, {{client_name}}!`, и каждому клиенту бот подставит его имя. Можно вставлять телефон, текущую дату, стадию разговора и собранные данные. Есть и помощники посложнее: написать дату в нужном формате, сделать текст заглавными буквами, показать разный текст в зависимости от условия («если имя известно, поздоровайся по имени, иначе просто привет»). Звучит как программирование, но бояться нечего: это безопасные «шаблоны», а не настоящий код, сломать или взломать через них ничего нельзя, и даже если ошибёшься в скобках, сообщение не развалится. Работают они в промпте, дожимах: везде, где бот пишет текст. --- **Дальше:** → [Формат данных и интеграция фронта](./83-data-format.md) **Связано:** [Системный промпт](../01-bot/11-system-prompt.md) · [Дожимы](../03-tools/33-drip.md) · [Кастомные вебхуки](./81-custom-webhooks.md) **Не получилось?** → напиши в саппорт --- ## Формат данных и интеграция фронта URL: https://dosai.pro/docs/guide/08-developers/83-data-format [Документация](../README.md) › [Для разработчиков](../08-developers) › Формат данных # Формат данных и интеграция фронта > `[для разработчиков]` Единые правила API, как выглядят успех и ошибка, пагинация, realtime, авторизация. Если строишь интеграцию или свой фронтенд, начни отсюда. ⏱ 8 мин · 👤 для разработчика · 🟢 live > **За 30 секунд:** > - Успех: `{ "data": … }`. Ошибка: `{ "error": "текст", "code": "КОД" }`. > - Пагинация: `?page=&limit=` (по умолчанию 100, максимум 200). > - Realtime: через Supabase-каналы (INSERT/UPDATE/DELETE по таблице с фильтром проекта). > - Авторизация: **сессия-cookie** (браузер) или **API-ключ** `Bearer dos_sk_live_…` ([API](./80-public-api.md)). --- ## Конверт ответа Все ответы API это в едином формате. **Успех:** ```json { "data": { ... } } ``` HTTP `200` (или другой 2xx). **Ошибка:** ```json { "error": "Человеко-читаемое сообщение", "code": "ERROR_CODE" } ``` --- ## Коды ошибок и статусы | HTTP | code | Когда | |---|---|---| | 400 | `INVALID_INPUT` / `INVALID_UUID` | неверные/неполные данные | | 401 | `UNAUTHORIZED` | нет/невалидны учётные данные или подпись | | 403 | `FORBIDDEN` | авторизован, но нет прав ([роль](../07-team/70-roles.md)) | | 404 | `NOT_FOUND` | объект не существует или не виден | | 429 | `RATE_LIMITED` | превышен лимит (смотри заголовок `Retry-After`) | | 500 | `INTERNAL_ERROR` | необработанная ошибка (полный текст в логах и Sentry, наружу только общий) | | 500 | `DATABASE_ERROR` | сбой запроса к базе | Сообщения **безопасны**: внутренние детали (трейсы, токены) в ответ не попадают, полный текст уходит только в серверные логи. --- ## Пагинация Параметры запроса: `?page=` и `?limit=`. - по умолчанию `limit = 100`, **максимум 200**; - `page` начинается с 1 (ограничен сверху, чтобы не уехать в гигантский offset); - в ответ обычно приходит блок `pagination: { page, limit, total, has_more }`. --- ## Realtime UI обновляется без перезагрузки через **Supabase Realtime**: подписка на изменения таблицы (`postgres_changes`) с фильтром по проекту (`project_id=eq.`), события **INSERT / UPDATE / DELETE**. Что важно интегратору: - подписка возвращает статус (подключено / ошибка / закрыто) и умеет **переподключаться** после обрыва сети; - на `DELETE` приходит только первичный ключ (если не включён полный снимок строки); - глобальный индикатор «нет связи» загорается, только когда отвалились **все** каналы. > 💡 На клиенте это обёрнуто в хуки `use-realtime-*` (по одному на сущность), после любой мутации список обновляется сам. Подробнее про продукт-поведение: [Диалоги](../04-crm/40-dialogs.md). --- ## Авторизация | Способ | Для чего | |---|---| | **Сессия-cookie** | браузерный кабинет (httpOnly-cookie Supabase) | | **API-ключ** `Authorization: Bearer dos_sk_live_…` | внешние интеграции, серверный код, см. [Публичный API](./80-public-api.md) | Оба проходят **одни и те же** проверки доступа (роли/проекты): отдельной «облегчённой» авторизации нет. Ключ только для чтения на мутирующем методе → отказ. --- ## Простыми словами Это шпаргалка для тех, кто пишет код поверх платформы. Договорённости простые и одинаковые везде, если всё хорошо в ответе лежит `data` с данными; если плохо, `error` с понятным текстом и коротким `code`, по которому удобно ветвить логику. Списки отдаются порциями (постранично, до 200 за раз). Живые обновления (новое сообщение, новый лид) прилетают сами через подписку, не надо опрашивать сервер по таймеру. Заходить можно двумя дверями: обычной сессией из браузера или API-ключом для своего кода, и за обеими дверями работают одни и те же правила доступа, так что ключ не даёт ничего сверх твоих прав. Если строишь свой интерфейс или интеграцию, этих правил достаточно, чтобы начать. --- **Дальше:** → [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) **Связано:** [Публичный API](./80-public-api.md) · [Кастомные вебхуки](./81-custom-webhooks.md) **Не получилось?** → напиши в саппорт --- ## Подключить ИИ-агента: Claude Code, Codex, Cursor (MCP) URL: https://dosai.pro/docs/guide/08-developers/84-ai-agents [Документация](../README.md) › [Для разработчиков](../08-developers) › Подключить ИИ-агента # Подключить ИИ-агента (MCP) > `[для разработчиков]` Подключите Claude Code, Codex или Cursor к DOS AI одной командой и управляйте проектами прямо из своего ИИ-инструмента: «покажи вчерашних лидов», «поправь промпт», «сколько потратили за неделю». ⏱ 7 мин · 👤 для разработчика и интегратора · 🟢 live > **За 30 секунд:** > - Адрес сервера: **`https://dosai.pro/api/mcp`**, авторизация тем же ключом **`dos_sk_live_…`**, что и у [API](./80-public-api.md). > - В Claude Code подключается **одной командой**, в Codex и Cursor через конфиг. > - Агент получает **13 инструментов**: проекты, промпт, функции, лиды, диалоги, отправка сообщения, аналитика, баланс. > - **Удалять проекты и проводить платежи агент не может**: этого нет в наборе инструментов намеренно. > - Готовые команды с подставленным ключом лежат в кабинете: раздел **для разработчиков**. --- ## Что это даёт Обычный API нужно программировать. MCP (Model Context Protocol) это стандартный «разъём», через который ИИ-инструмент видит платформу как набор понятных действий и вызывает их сам, по просьбе на человеческом языке. Практический смысл для интегратора, который ведёт несколько клиентов: - «Покажи все проекты, где вчера не было ни одного лида», вместо обхода кабинетов руками. - «Прочитай промпт барбершопа, добавь правило про запись на выходные, сохрани»: правка без переключения окон. - «Сколько диалогов и лидов у стоматологии за июль, какая конверсия»: сводка в одном ответе. - «Открой последний диалог и ответь клиенту, что мастер перезвонит в 10:00»: ответ оператором из терминала. --- ## Шаг 1. Выпустить ключ Ключ выпускается в кабинете, раздел для разработчиков (`/developers`). Подробно про права и область действия написано в статье [Публичный API](./80-public-api.md). Что важно выбрать правильно: | Выбор | Когда | Что сможет агент | |---|---|---| | **Только чтение** | Аналитика, отчёты, разбор диалогов | Смотреть, но ничего не менять | | **Чтение и запись** | Правка промпта, ответы клиентам | Ещё и менять промпт, статусы лидов, отправлять сообщения | | **Один проект** | Работа по одному клиенту | Только этот проект. `dosai_list_projects` вернёт ровно его, остальные недоступны | | **Весь аккаунт** | Ведёте несколько проектов | Все проекты аккаунта | > 🔑 Ключ показывается **один раз**. Скопируйте сразу; потеряли, отзовите и выпустите новый. --- ## Шаг 2. Подключить свой инструмент Готовые команды с уже подставленным ключом появляются **в кабинете сразу после создания ключа**, проще скопировать оттуда. Ниже те же команды, если подключаете позже. ### Claude Code ```bash 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`: ```toml [mcp_servers.dosai] url = "https://dosai.pro/api/mcp" bearer_token_env_var = "DOSAI_KEY" ``` И ключ в профиль оболочки (`~/.zshrc` или `~/.bashrc`): ```bash export DOSAI_KEY="dos_sk_live_ВАШ_КЛЮЧ" ``` Так ключ не лежит в конфиге, который легко утащить в репозиторий или синхронизировать между машинами. Если ваш Codex ругается на поле `url`, он старый: обновите его, поддержка удалённых серверов там встроенная. ### Cursor В `~/.cursor/mcp.json`: ```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` (домен подтверждён, запись активна). Проверить можно так: ```bash curl "https://registry.modelcontextprotocol.io/v0/servers?search=dosai" ``` Всем остальным нужны всего две вещи: | Что | Значение | |---|---| | Адрес сервера | `https://dosai.pro/api/mcp` (транспорт streamable HTTP) | | Заголовок | `Authorization: Bearer dos_sk_live_ВАШ_КЛЮЧ` | Большинство инструментов настраиваются файлом такого вида: ```json { "mcpServers": { "dosai": { "url": "https://dosai.pro/api/mcp", "headers": { "Authorization": "Bearer dos_sk_live_ВАШ_КЛЮЧ" } } } } ``` Проверить связь до настройки инструмента можно одной командой: в ответ придёт список инструментов. ```bash 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](./80-public-api.md) с тем же ключом. > ⚠️ Веб-версии **claude.ai и ChatGPT** подключаются иначе: там нельзя просто вписать ключ, требуется вход по кнопке «Разрешить доступ» (OAuth), которого у нас пока нет. Работают инструменты, где ключ задаётся вручную: Claude Code, Codex, Cursor и подобные. --- ## Что умеет агент | Инструмент | Что делает | Права ключа | |---|---|---| | `dosai_list_projects` | Список проектов | чтение | | `dosai_get_project` | Настройки проекта: статус, канал, модель, баланс | чтение | | `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](./80-public-api.md), где вызов делается осознанно. --- ## Безопасность - **Ключ = доступ к вашим проектам.** Команда подключения содержит его в открытом виде: вставляйте только в свой терминал, не выкладывайте в репозиторий и не показывайте на экране при записи видео. - **Начните с ключа только на чтение.** Права на запись выдавайте, когда точно нужны правки. - **Клиенту или подрядчику** выдавайте ключ, привязанный к одному проекту. - **Агент действует от вашего имени.** Он видит ровно то, что видите вы, и ограничен вашей [ролью](../07-team/70-roles.md) на каждом проекте. - **Отправка сообщения необратима.** `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 убирает этот шаг для ИИ-инструментов. Вы один раз даёте своему ИИ-помощнику адрес и ключ, и дальше говорите обычными словами: «сколько заявок пришло вчера», «поправь промпт у бота стоматологии», «ответь этому клиенту, что перезвоним в десять». Помощник сам понимает, какое действие вызвать. Ключ это пароль: он даёт помощнику ровно те же возможности, что есть у вас в кабинете, не больше. Если хотите, чтобы помощник только смотрел и ничего не менял, выпустите ключ «только чтение». Если работаете с одним клиентом, выпустите ключ на один проект: до остальных помощник не дотянется. И главное, что мы решили заранее: помощник **не умеет** удалять проекты и трогать деньги. Даже если он что-то неправильно поймёт, худшее, что произойдёт, это изменённый текст промпта или одно лишнее сообщение клиенту. Всё это видно и поправимо. --- **Дальше:** → [Кастомные вебхуки](./81-custom-webhooks.md) **Связано:** [Публичный API](./80-public-api.md) · [Роли и права](../07-team/70-roles.md) **Не получилось?** → напиши в саппорт --- ## Бот не отвечает, диагностика URL: https://dosai.pro/docs/guide/09-troubleshooting/90-bot-silent [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › Бот не отвечает # Бот не отвечает: диагностика > «Бот молчит» это **9 разных причин**, а не одна. Эта статья, порядок проверки **от частого к редкому**, чтобы за 2 минуты понять, в чём дело: деньги, выключатель, подписка, канал, или это вообще не баг. ⏱ 10 мин · 👤 для владельца и оператора · 🟢 live > **За 30 секунд (проверь по порядку):** > 1. **ИИ включён?** Индикатор «ИИ выключен» это управление на [Настройках](../01-bot/14-test-chat.md). > 2. **Деньги на балансе есть?** Пусто → бот шлёт короткое «Скоро ответим» вместо нормального ответа. > 3. **Проект активен, подписка/триал в силе?** Иначе бот не отвечает по [правилам доступа](#2-проверь-доступ-подписка-триал-бан). > 4. **Отвечает ли в [тест-чате](../01-bot/14-test-chat.md)?** Да в тесте, нет в бою → проблема в канале/деньгах/доступе, **не в промпте**. > 5. Реже: **первое сообщение в новом WhatsApp-чате** (баг WhatsApp Web), **старая переписка** (бот в них не лезет), **только что переподключил канал** (пауза 15 мин), **авто-ответ WhatsApp Business** (бот ответил раз и замолчал → [п. 8](#8-бот-ответил-один-раз-и-замолчал-авто-ответ-whatsapp-business)). ![Раздел «Логи»: первое место диагностики, если бот повёл себя странно](/docs-guide-img/09-troubleshooting/logs.png) --- ## Главный принцип: не гадай, сравни и посмотри Самая частая ошибка: придумать причину и чинить не то. Правильный порядок: 1. **Сравни с другими чатами.** Бот молчит **везде** или в **одном** диалоге? Везде → деньги/доступ/канал. В одном → этот конкретный чат (старая переписка, оператор перехватил, стоп-диалог). 2. **Проверь в [тест-чате](../01-bot/14-test-chat.md).** Там бот отвечает **всегда** (даже если выключен для клиентов и баланс пуст). Отвечает в тесте, молчит в бою → дело не в боте, а в канале/деньгах/доступе. 3. **Только потом** меняй промпт, если бот реально «думает не то», а не «молчит». --- ## 1. Проверь выключатель ИИ У каждого диалога есть флаг `ai_on`. Если ИИ выключен, бот **сохраняет** входящие, но **не отвечает** (это не баг, это пауза). Бот мог встать на паузу сам у платформы есть причины автопаузы (`ai_off_reason`): | Причина (`ai_off_reason`) | Что значит | Это нормально? | |---|---|---| | `operator_joined_chat` | оператор начал печатать в диалоге (**или сработал авто-ответ WhatsApp Business**: [см. п. 8](#8-бот-ответил-один-раз-и-замолчал-авто-ответ-whatsapp-business)) | да, если это человек; если это авто-ответ WhatsApp, отключи его | | `chat_started_by_operator` | диалог начат вручную оператором | да | | `client_stop` | клиент попросил остановить бота (функция `stop_dialog`) | да | | `pipeline_stage_done` | диалог дошёл до финальной стадии воронки | да | | `pre_existing_dialog` | переписка существовала **до** подключения бота | да: [см. п. 5](#5-это-старая-переписка-до-подключения) | | `backlog_offline` | сообщение пришло в момент переподключения канала | да: временно | | `guards_violation` | сработала защита от спама | проверь, не флуд ли | > 💡 Если причина из списка «да», бот молчит **намеренно**. Включи ИИ обратно вручную в диалоге, если нужно перехватить. --- ## 2. Проверь доступ (подписка, триал, бан) Перед каждым ответом платформа проверяет «можно ли боту отвечать» (`checkProjectEligibility`). Если нет, молчит. Возможные причины (коды): | Код | Что значит | Что делать | |---|---|---| | `PROJECT_NOT_ACTIVE` | проект в статусе «черновик» | подключи канал, проект активируется сам | | `INSUFFICIENT_BALANCE` | пустой баланс | [пополни](../06-money/60-billing.md) | | `NO_SUBSCRIPTION` / `SUBSCRIPTION_EXPIRED` | нет активной подписки | оформи [подписку](../06-money/60-billing.md) | | `WHATSAPP_TRIAL_EXPIRED` | бесплатные дни WhatsApp кончились | оформи [подписку](../06-money/60-billing.md) | | `SUBSCRIPTION_NO_EXPIRY` | подписка помечена активной, но без даты окончания (сбой данных) | напиши в саппорт, сами не чините | | `ACCOUNT_BANNED` | аккаунт заблокирован | напиши в саппорт | > 📌 **Ограничения по числу пробных диалогов больше нет** (отменено 2026-08-04). Если встретишь в старых заметках код `TRIAL_CONVERSATIONS_EXHAUSTED` или «10 пробных диалогов», это неактуально: внутри бесплатных дней диалогов сколько угодно, ограничивает только баланс проекта. > ⚠️ **Telegram vs WhatsApp.** Telegram-боту для ответа нужен только активный проект + баланс. WhatsApp дополнительно требует активный триал **или** подписку (см. [Биллинг](../06-money/60-billing.md)). > ✅ **С 2026-07-23 такие блокировки видны в Диалогах.** Раньше сообщение клиента, пришедшее при истёкшей подписке / пустом балансе / проекте на паузе, вообще не попадало в CRM: полная тишина без следа. Теперь входящее **сохраняется в диалоге**, а на диалоге появляется бейдж причины («Нет подписки» / «Нет баланса» / «Проект на паузе»). После продления/пополнения бейдж снимается сам, и бот отвечает на следующее сообщение клиента. --- ## 3. Проверь баланс Это частая причина «бот вдруг замолчал». Когда баланс ниже минимума, платформа **не запускает** AI-ответ, а вместо него: - клиенту уходит короткий дежурный текст вроде *«Спасибо, что написали! Скоро ответим.»* (чтобы человек не остался без ответа); - тебе как владельцу приходит уведомление **«мало токенов»** (`tokens_low`); - в логах диалога это причина `no_token_balance`. Увидел у клиента короткое «Скоро ответим» вместо нормального ответа бота: это маркер **пустого баланса**. [Пополни](../06-money/60-billing.md). --- ## 4. Канал жив? (WhatsApp/Telegram) Если бот молчит **во всех** диалогах, возможно, отвалился сам канал, а не бот: - **WhatsApp** мог поймать `qridle` (сессия слетела) или бан; - **Telegram** мог перестать работать, если токен отозвали в @BotFather. Это отдельная тема: см. [Канал отвалился / WhatsApp забанили](./92-channel-down.md). --- ## 5. Это контакт, который был до подключения? Бот **намеренно не отвечает** в чатах, которые существовали **до** того, как ты подключил канал (`pre_existing_dialog`). Так он не влезает в давние разговоры твоих менеджеров и не «выстреливает» в личные контакты, за что WhatsApp может забанить номер. Это не баг, а настройка. Если старым клиентам отвечать НУЖНО, поменяй **«Кому отвечает бот»** на **«Всем, кто напишет»** (Настройки бота → Расширенные настройки → Оператор, подробности в [Расширенных настройках](../01-bot/15-advanced-settings.md)). После этого бот подключится к такому диалогу, как только клиент напишет снова. Разовая альтернатива для одного чата: включить ИИ вручную в шапке диалога. ⚠️ Пометка держится сама по себе: пока режим прежний, следующие сообщения этого клиента бот тоже пропустит, а не «подхватит». **На сообщения, отправленные до подключения номера, бот не ответит ни в одном режиме.** Это защита от бана: иначе после каждого сканирования QR он разослал бы ответы на всю переплывшую историю. --- ## 6. Первое сообщение в новом WhatsApp-чате (баг WhatsApp Web) Иногда **самое первое** сообщение в совершенно новом WhatsApp-чате приходит не текстом, а системной заглушкой вроде `=== SYSTEM WZ === Check this message on your device`. Это **баг WhatsApp Web** на стороне Meta: телефон сообщение видит, а привязанная сессия, нет, поэтому расшифровать его нельзя. Что делает платформа: такое нечитаемое сообщение **пропускается** (ответить на пустоту нельзя), но: - создаётся карточка диалога (чтобы лид не потерялся); - в диалог пишется внутренняя заметка о ситуации; - тебе как владельцу уходит оповещение. То есть бот «молчит» на первое сообщение не из-за поломки, а потому что физически не смог его прочитать. Обычно клиент пишет второе: на него бот уже отвечает. > 📌 Если видишь в WhatsApp сообщение клиента, которого **нет** в кабинете как текст: это та самая заглушка. Лид не потерян, карточка создана. --- ## 7. Только что переподключил канал? После подключения или переподключения WhatsApp платформа **15 минут** держит номер молча: это защита от бана, свежеавторизованный номер, который сразу начинает писать людям, Meta принимает за спам-бота. Что важно понимать про эти 15 минут: - **придерживаются любые автоответы бота**, не только дожимы и рассылки: на новое сообщение клиента бот в это окно тоже не ответит; - **сообщения не теряются**: они принимаются, сохраняются в [Диалогах](../04-crm/40-dialogs.md) и помечаются как требующие ответа, чтобы ты видел их сразу; - окно снимается **по времени**, ровно через 15 минут после подключения, а не «когда пойдут входящие»; - **проверить бота можно сразу**: открой диалог и включи в нём «AI» вручную, для такого диалога пауза не действует. Ещё быстрее, в [тест-чате](../01-bot/14-test-chat.md), он не зависит от канала вообще. Подробнее: [Антибан](../02-channels/23-anti-ban.md). --- ## 8. Бот ответил один раз и замолчал (авто-ответ WhatsApp Business) Частый случай именно для **WhatsApp Business**: бот отвечает клиенту **первый раз нормально**, а потом в этом же чате замолкает, причина паузы, `operator_joined_chat`. Что произошло: у твоего номера в WhatsApp Business включён встроенный **авто-ответ**, приветствие или «сообщение об отсутствии». Когда клиент пишет, WhatsApp сам отправляет это сообщение **от твоего имени**. Платформа видит исходящее «от владельца» и логично считает, что **оператор вступил в диалог вручную** → ставит бота на паузу, чтобы не перебивать человека. В итоге бот замолкает. **Как починить (одна настройка, один раз):** в приложении **WhatsApp Business** → **Настройки → Инструменты для бизнеса** → отключи **«Приветственное сообщение»** и **«Сообщение в нерабочее время»**. Бот и так сам здоровается с клиентами: родной авто-ответ только конфликтует с ним. > 💡 Это касается только аккаунтов **WhatsApp Business** с включёнными авто-ответами. Обычный WhatsApp такого не делает. Чтобы снова включить бота в уже «запауженном» чате, открой диалог и включи ИИ вручную. --- ## Шпаргалка: «бот молчит» за 60 секунд ``` Молчит во ВСЕХ чатах? ├─ да → 1) ИИ включён? 2) баланс не пуст? 3) подписка/триал? 4) канал жив (qridle/бан/токен)? └─ в ОДНОМ чате? ├─ контакт был до подключения? → норма; нужен ответ → «Кому отвечает бот» = «Всем, кто напишет» ├─ оператор перехватил / стоп-диалог? → норма, ai_off_reason └─ первое сообщение в новом WhatsApp? → баг WhatsApp Web, ждём второго Отвечает в тест-чате, молчит в бою → НЕ промпт. Смотри канал/деньги/доступ. ``` --- ## Простыми словами Когда бот «замолчал», не спеши лезть в его настройки, чаще всего дело вообще не в нём. Пройди по-простому, сверху вниз. Сначала глянь: **бот включён?** Бывает, его поставили на паузу, сам или оператор. Потом, **деньги на счету есть?** Если ноль, бот не отвечает, а вместо него клиенту уходит короткое «Скоро ответим» это верный знак, что пора пополнить. Дальше, **оплачен ли проект** (подписка или пробный период). И проверь, **жив ли сам WhatsApp/Telegram**: может, отвалилась связь, а не бот. Первое, что стоит сделать: открой **тест-чат** и напиши боту там. В тесте он отвечает всегда. Если в тесте отвечает, а реальным клиентам нет, значит, бот в порядке, а проблема в деньгах, подписке или канале. Не трогай промпт зря. И про **старые переписки**: отвечает ли в них бот, зависит от настройки «Кому отвечает бот». Проекты, созданные с 9 августа 2026, отвечают всем, кто напишет, включая контакты, которые были у вас до подключения. У проектов постарше по умолчанию стоит «Только новым обращениям», и тогда сообщения давних клиентов видны в «Диалогах», но бот в них молчит: переключается в настройках проекта, раздел «Оператор». Отдельная не-поломка: иногда бот молчит на **самое первое** сообщение в новом чате WhatsApp, это глюк самого WhatsApp, клиент просто пишет ещё раз, и бот отвечает. --- **Дальше:** → [Функция не вызывается / падает](./91-function-fails.md) **Связано:** [Как бот думает](../00-start/01-how-bot-thinks.md) · [Тест-чат](../01-bot/14-test-chat.md) · [Биллинг](../06-money/60-billing.md) · [Канал отвалился](./92-channel-down.md) **Не получилось?** → напиши в саппорт с ID проекта и примером чата --- ## Функция не вызывается / падает URL: https://dosai.pro/docs/guide/09-troubleshooting/91-function-fails [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › Функция не вызывается / падает # Функция не вызывается / падает > Две разные проблемы: бот **не вызвал** функцию (хотя должен был), или вызвал, но она **упала**. Чинятся они по-разному. Эта статья, как отличить и где смотреть. ⏱ 10 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - **Не вызвал?** Проверь: функция **включена**? описание понятное? не требует ли она от модели **посчитать** что-то (координаты/индексы: модель этого не умеет)? > - **Упала?** Бот **видит ошибку** и обычно переспрашивает или сообщает клиенту, не молчит. Смотри причину в [Диалогах](#где-увидеть-вызовы-функций) или [тест-чате](../01-bot/14-test-chat.md). > - **Где смотреть:** карточки вызовов функций видны в **Диалогах** и в тест-чате («Что понял бот»): там видно имя функции, аргументы, результат/ошибку. > - Частое: функция требует **подключённой интеграции** (Google Sheets/Calendar), а её нет. --- ## Сначала пойми: не вызвал или упал? | Симптом | Это | Куда смотреть | |---|---|---| | Бот «не сделал» действие, в логах вызова функции **нет** | **не вызвал** | [раздел «Не вызывается»](#бот-не-вызывает-функцию) | | В логах вызов **есть**, но с ошибкой; бот переспросил/извинился | **упал** | [раздел «Падает»](#функция-падает-возвращает-ошибку) | Открой [тест-чат](../01-bot/14-test-chat.md) → блок **«Что понял бот»**: там видно, какие функции бот дёрнул, с какими параметрами и что вернулось. Если функции в списке нет, он её **не вызвал**. --- ## Бот не вызывает функцию ### 1. Функция выключена У каждой функции есть переключатель (`is_active`). Если она **выключена**, платформа **не передаёт** её модели, бот физически не может её вызвать. Проверь в разделе **«Функции»**, что нужная функция включена. ### 2. Модель не поняла, *когда* её звать Бот решает вызвать функцию по её **описанию**. Если описание размытое («работа с таблицей»), модель не сообразит, в какой момент её применить. Чините **описанием**, а не уговорами в промпте: опиши понятно, *что* функция делает и *когда* её звать. → [Функции: как писать описание](../03-tools/30-functions.md) ### 3. Не хватает обязательного параметра Если функция требует параметр, которого в разговоре ещё нет (например, телефон для заявки), модель либо переспросит клиента, либо не вызовет. Это нормально, добавь в промпт, что нужно сперва собрать. ### 4. Функция требует «посчитать», а модель не умеет считать > 🚫 **Ключевое правило.** Языковая модель **плохо считает**: координаты ячеек, индексы строк, «какая буква колонки», арифметику. Если функция ждёт от неё вычисленный адрес (`G7`, номер строки), она будет ошибаться или не вызывать. > > ✅ **Решение архитектурное, не промптовое.** Функция должна принимать **человеческие метки** («запиши к инструктору Вячеслав на 14:00»), а адрес/ячейку **сервер вычисляет сам**. У платформы для этого есть label-based функции (например, бронь по `target_cell` с описанием строки/колонки, а не по координате). Если своя функция упирается в «модель не туда пишет», переведи её на метки. Никакие уточнения в промпте «считай внимательно» это не лечат. → Подробнее об этом классе проблем: [Функции](../03-tools/30-functions.md) --- ## Функция падает (возвращает ошибку) Хорошая новость: **ошибки не теряются**. Когда функция падает, платформа возвращает модели структурированную ошибку (`{ error, error_code }`), и бот её **видит**, обычно переспрашивает клиента или вежливо сообщает, что не получилось. Молча проглотить ошибку он не должен. ### Типичные причины | Что | Поведение бота | Как чинить | |---|---|---| | **Нет обязательного параметра** | `{ error, missing_params }` → бот переспрашивает | норма; убедись, что промпт собирает данные | | **Неверное значение** (вне допустимого набора/диапазона) | `{ error, invalid_params }` → бот пробует снова | проверь enum/границы в настройке функции | | **Интеграция не подключена** (Google Sheets/Calendar) | бот говорит «владелец не подключил…» | подключи [интеграцию](../05-integrations/50-integrations-overview.md) и укажи 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`) и показываются: - в [Диалогах](../04-crm/40-dialogs.md): карточками прямо в ленте переписки (имя функции, успех/ошибка); - в [тест-чате](../01-bot/14-test-chat.md): в блоке «Что понял бот». > 📌 **Важно:** вызовы функций живых диалогов лежат в журнале событий, а **не** среди сообщений. Поэтому в «сырой» переписке их не видно: смотри именно карточки функций в Диалогах. Секреты (токены/ключи в параметрах) в журнале **маскируются**. --- ## Под капотом - **Загрузка функций:** `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 забанили](./92-channel-down.md) **Связано:** [Функции (полный гайд)](../03-tools/30-functions.md) · [Интеграции](../05-integrations/50-integrations-overview.md) · [Тест-чат](../01-bot/14-test-chat.md) · [Бот не отвечает](./90-bot-silent.md) **Не получилось?** → напиши в саппорт с ID проекта и именем функции --- ## Канал отвалился / WhatsApp забанили URL: https://dosai.pro/docs/guide/09-troubleshooting/92-channel-down [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › Канал отвалился # Канал отвалился / WhatsApp забанили > Бот молчит во всех чатах разом, обычно дело не в боте, а в **канале**: WhatsApp потерял сессию (`qridle`), словил бан или закончился неоплаченный триал. Эта статья, как понять, что именно, и что делать. ⏱ 9 мин · 👤 для владельца · 🟢 live > **За 30 секунд:** > - **Временные сбои** (`idle`/`init`) платформа чинит сама: ничего не делай. > - **`qridle`** = сессия слетела → нужно **пере-сканировать QR** (на сайте, не на телефоне). > - **Бан** (`blocked`) = WhatsApp заблокировал номер → реконнект бесполезен, нужен **новый прогретый номер** в [новом проекте](../01-bot/10-create-project.md). > - **Не оплатил триал** → канал удаляется к концу 3-х суток; вернуть = [оплатить подписку](../06-money/60-billing.md). > - **Telegram** «падает» только если отозвали токен в @BotFather → [переподключи](../02-channels/22-telegram.md). --- ## Шаг 1. Понять состояние канала Открой проект → **«Каналы»** → секция WhatsApp. Платформа показывает состояние. Что они значат: | Состояние | Что это | Само пройдёт? | Что делать | |---|---|---|---| | `active` | канал в эфире | - | всё ок | | `idle` / `init` | сессия «спит» / поднимается | ✅ да | подожди, платформа восстановит | | `qridle` | **сессия слетела** | ❌ нет | [пере-сканируй QR](#шаг-2-qridle-пере-сканируй-qr) | | `blocked` | **бан WhatsApp** | ❌ нет | [новый номер](#бан-blocked-что-делать) | | `disabled` | канал отключён | ❌ нет | переподключи через мастер | | `no_channel` | канал не привязан | - | подключи WhatsApp | Платформа делит сбои на **мягкие** (`idle`/`init`: сами восстанавливаются, тебя не дёргают) и **жёсткие** (`qridle`/`blocked`/`disabled`: приходит оповещение, нужно действие). То есть если тебе **пришло уведомление** о канале: это уже жёсткий случай, требующий тебя. > 💡 Если в кабинете видишь сообщение, что не удалось получить свежий статус канала и показаны последние известные данные: это временная недоступность, не бан. Обнови через минуту. А если канал помечен как не привязанный, он слетел полностью, переподключи (новый QR). --- ## Шаг 2. `qridle`: пере-сканируй QR `qridle` значит, что сессия на стороне WhatsApp Web оборвалась (телефон надолго ушёл в офлайн, разлогинили связанные устройства, нестабильная сеть телефона). Бот молчит, потому что физически отключён от WhatsApp. **Что делать:** 1. На сайте, в секции WhatsApp, нажми **«Переподключить»** и отсканируй QR заново, как при первом подключении. 2. **Не** разрывай и не «чини» связь руками на телефоне: это только усугубит. 3. Держи телефон с интернетом: иначе сессия снова слетит. > ⚠️ Если `qridle` прилетает **сразу после подключения** на свежем/«холодном» номере: это, скорее всего, **бан**, замаскированный под обрыв сессии. См. ниже. --- ## Бан (`blocked`), что делать `blocked` (или мгновенный `qridle` на новом номере) = Meta заблокировала номер за подозрение в спам-автоматизации. Это происходит на стороне WhatsApp/Meta, **вне** платформы: снять бан нельзя. **Что делать:** - Реанимировать тот же номер обычно **бесполезно**, забаненные номера не разбанивают. - Заведи [новый проект](../01-bot/10-create-project.md) и подключи в нём **новый, прогретый** номер. - Перед подключением обязательно пройди [антибан-чек-лист](../02-channels/23-anti-ban.md): иначе новый номер забанят так же. > 🚫 **Почему не переподключить тот же номер на том же проекте?** Meta помнит граф контактов даже после нашей чистки канала. Надёжнее: чистый проект + чистый номер. Подробно: [Гигиена и антибан](../02-channels/23-anti-ban.md). --- ## Канал исчез после неоплаченного триала Если пробный период закончился и **подписку не оформили**, неоплаченный канал **удаляется** к концу 3-х суток жизни. Признаки: - в диалогах появляется пометка об ошибке отправки: *«WhatsApp отключён: пробный период завершён, требуется оплата подписки.»*; - тебе приходит оповещение «WhatsApp отключён»; - в секции «Каналы»: канала больше нет. **Что делать:** [оформи подписку](../06-money/60-billing.md) и подключи WhatsApp заново (новый QR). Реконнект на истёкшем неоплаченном триале **заблокирован до оплаты**, платформа не выдаст новый QR, пока нет подписки (две причины блокировки: `trial_expired`, бесплатные дни вышли, и `subscription_required`, проекту бесплатный период не полагался). --- ## Telegram «отвалился» У Telegram нет банов и `qridle`, он ломается только в одном случае: **токен отозвали или сбросили** в @BotFather. Тогда проверка (`getMe`) не проходит, и платформа помечает бот как отключённый (`telegram_bot_connected = false`). **Что делать:** 1. Кабинет → «Каналы» → Telegram → **«Проверить подключение»**. Покажет *«Бот не отвечает. Проверьте токен.»*: токен невалиден. 2. В @BotFather возьми актуальный токен (или выпусти новый через `/token`/`/revoke`). 3. Вставь и **переподключи**. → [Подключить Telegram](../02-channels/22-telegram.md) --- ## Простыми словами Если бот молчит **сразу во всех** чатах, почти всегда «упал» не бот, а канал, через который он общается. С WhatsApp бывает три ситуации. Первая, безобидная: связь ненадолго «уснула» (`idle`), платформа поднимет её сама, делать ничего не надо. Вторая: **сессия слетела** (`qridle`) это как если бы на телефоне разлогинился «WhatsApp на компьютере»; надо просто зайти на сайт и **заново отсканировать QR-код** (важно на сайте, а не ковыряться в телефоне). Третья, неприятная: **бан**, WhatsApp заблокировал номер. Тут тот же номер уже не спасти, нужно завести новый проект и подключить другой, заранее «прогретый» номер, обязательно прочитав про [антибан](../02-channels/23-anti-ban.md). Отдельный случай, когда пробный период кончился, а подписки нет: тогда бот просто перестаёт отвечать. Номер при этом остаётся привязанным, настройки и переписка на месте, и бот включится сразу после оплаты. А вот заново отсканировать QR-код без подписки уже не получится. С **Telegram** проще: он не банится и не слетает. Сломаться может только если ты сам отозвал токен бота в @BotFather, тогда возьми токен заново и переподключи. Кнопка «Проверить подключение» сразу покажет, в токене ли дело. --- **Дальше:** → [Платёж не прошёл](./93-payment-failed.md) **Связано:** [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) · [Гигиена и антибан](../02-channels/23-anti-ban.md) · [Подключить Telegram](../02-channels/22-telegram.md) · [Биллинг](../06-money/60-billing.md) **Не получилось?** → напиши в саппорт с ID проекта --- ## Платёж не прошёл URL: https://dosai.pro/docs/guide/09-troubleshooting/93-payment-failed [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › Платёж не прошёл # Платёж не прошёл > Оплатил пополнение, а баланс не вырос? В 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)](./94-faq.md) **Связано:** [Биллинг](./../06-money/60-billing.md) · [Сколько стоит сообщение](../06-money/61-message-cost.md) · [Приём оплат](../06-money/62-accept-payments.md) **Не получилось?** → напиши в саппорт с ID проекта, суммой и временем оплаты --- ## Частые вопросы (FAQ) URL: https://dosai.pro/docs/guide/09-troubleshooting/94-faq [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › FAQ # Частые вопросы (FAQ) > Короткие ответы на самые частые вопросы, с ссылками, где копнуть глубже. ⏱ 8 мин · 👤 для владельца · 🟢 live --- ## Старт и пробный период **Можно попробовать бесплатно?** Да. Проект на пробном периоде получает **$5** на баланс, а WhatsApp-канал работает бесплатно **14 дней, без ограничения по числу диалогов**. С [промокодом партнёра](../06-money/63-referrals.md) старт удваивается: **$10 и 30 дней**. Карта и предоплата не нужны. Бесплатный период открывает канал, а сами ответы бота идут с баланса: закончится он раньше дней, просто пополни. → [Что такое DOS AI](../00-start/00-what-is-dosai.md), [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) **Нужна ли карта, чтобы начать?** Нет. Пробуешь без карты; оплата нужна, только когда захочешь продолжить после триала. → [Биллинг](../06-money/60-billing.md) **Сколько проектов можно создать?** Проектов на аккаунт до 50, а вот бесплатный старт (деньги на баланс + бесплатные дни WhatsApp) даётся **первому** проекту. Если ты зарегистрировался по чьей-то партнёрской ссылке, бесплатный старт получают **первые три** проекта. И отдельно: любому проекту, где ты применил [промокод партнёра](../06-money/63-referrals.md), бесплатный период открывается независимо от очерёдности. Удобно, если пробуешь ботов сразу нескольким клиентам. --- ## Каналы **Бот может работать в WhatsApp и Telegram одновременно?** Да, в одном проекте: оба канала сразу, мозг у бота общий. → [Обзор каналов](../02-channels/20-channels-overview.md) **Что выбрать новичку, WhatsApp или Telegram?** Telegram, быстрее и без рисков (официальный бот). WhatsApp, где сидят клиенты, но нужен «прогретый» номер и осторожность с баном. → [Telegram](../02-channels/22-telegram.md), [Антибан](../02-channels/23-anti-ban.md) **Почему WhatsApp могут забанить?** Meta банит «холодные» номера за подозрение в спаме. Поэтому есть чек-лист перед подключением. → [Гигиена и антибан](../02-channels/23-anti-ban.md) **Можно пользоваться телефоном после подключения WhatsApp?** Да. Бот работает как привязанное устройство (WhatsApp Web), не вместо тебя. → [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) --- ## Поведение бота **Бот не отвечает, что делать?** Проверь по порядку: включён ли ИИ, есть ли деньги, активна ли подписка/триал, жив ли канал. → [Бот не отвечает](./90-bot-silent.md) **Можно отвечать клиенту вручную?** Да. Начни писать в диалоге, бот сам встанет на паузу. Закончил, включи «AI» обратно. → [Диалоги](../04-crm/40-dialogs.md) **Бот «тупит» на сложных вопросах, как улучшить?** Сначала поправь [промпт](../01-bot/11-system-prompt.md) и [базу знаний](../03-tools/31-knowledge-base.md). Если не помогает, поставь модель мощнее. → [Выбор модели](../01-bot/13-model.md) **Бот пишет ерунду / выдумывает.** Опиши в промпте «бери только из базы знаний, не выдумывай» и наполни [базу знаний](../03-tools/31-knowledge-base.md). Проверяй в [тест-чате](../01-bot/14-test-chat.md). **Бот не записал клиента, хотя обещал.** Смотри логи диалога: вызвалась ли функция и с какой ошибкой. → [Функция не вызывается / падает](./91-function-fails.md) --- ## Деньги **Сколько стоит одно сообщение?** Зависит от длины диалога, модели и того, что бот делает (база знаний, распознавание медиа). → [Сколько стоит сообщение](./../06-money/61-message-cost.md) **Оплатил, а баланс не вырос.** Чаще всего это задержка подтверждения. Подтверди в Kaspi, подожди 5-10 минут, обнови. → [Платёж не прошёл](./93-payment-failed.md) **Можно зарабатывать на платформе?** Да, чаще всего так: собирают ассистентов бизнесам за настройку и дальше ведут их проекты на помесячном сопровождении. Отдельно есть партнёрская программа для тех, кто продвигает DOS AI постоянно. → [Промокоды и партнёрская программа](../06-money/63-referrals.md) **Бот может принимать оплату от моих клиентов?** Да (бета): выставляет счёт в чате, деньги идут тебе напрямую. → [Приём оплат](../06-money/62-accept-payments.md) **А можно, чтобы вы настроили за меня?** Да, это отдельная разовая услуга: $50 за всю настройку, стартовая цена держится до 16.10.2026. Мы расспрашиваем про бизнес, пишем боту инструкцию, подключаем канал, загружаем прайс и частые вопросы, проверяем на живых диалогах. Дальше ты меняешь что угодно сам. Подписка на платформу оплачивается отдельно, $25 в месяц. Написать: [WhatsApp](https://wa.me/77052051992) или [Telegram](https://t.me/yernardoss). --- ## Команда и данные **Как дать доступ сотруднику?** Пригласи по email в «Участниках», выбери роль. Деньги и удаление, только у владельца. → [Роли и права](../07-team/70-roles.md) **Безопасны ли данные / ключи?** Токены и ключи хранятся в зашифрованном виде, в логах секреты маскируются. → [Логи событий](../04-crm/44-event-logs.md) **Подключается ли моя CRM / Google?** Да: Bitrix24/amoCRM/AlphaCRM и Google Таблицы/Календарь. Google: через шаринг доступа, без пароля. → [Обзор интеграций](../05-integrations/50-integrations-overview.md) --- ## Не нашёл ответа? Напиши в саппорт с **ID проекта** и описанием проблемы (а лучше: скриншотом). Если бот ведёт себя странно в конкретном диалоге, укажи, в каком. --- ## Простыми словами Это шпаргалка на «быстро спросил, быстро узнал». Если коротко по главному: попробовать можно бесплатно и без карты; бот работает в WhatsApp и Telegram сразу; если он молчит, почти всегда дело в деньгах, выключателе или канале, а не в поломке; платишь по факту за сообщения; а доступ сотрудникам даёшь с разными правами, оставляя деньги под собой. На каждый вопрос есть ссылка на подробную статью, если нужно копнуть глубже, иди по ней. А если ответа тут нет, пиши в саппорт с ID проекта, разберёмся. --- **Дальше:** → [Что такое DOS AI](../00-start/00-what-is-dosai.md) **Связано:** [Бот не отвечает](./90-bot-silent.md) · [Биллинг](../06-money/60-billing.md) · [Роли](../07-team/70-roles.md) · [Антибан](../02-channels/23-anti-ban.md) --- ## Лиды из рекламы приходят с задержкой URL: https://dosai.pro/docs/guide/09-troubleshooting/95-ad-leads-delayed [Документация](../README.md) › [Решение проблем](../09-troubleshooting) › Лиды из рекламы с задержкой # Лиды из рекламы приходят с задержкой > Клиент написал из рекламы 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:** - **Android:** Настройки → Приложения → WhatsApp → Батарея → «Без ограничений». - **iPhone:** не убивайте приложение из шторки; ночью выключите «Режим энергосбережения». 4. **Уберите лишние связанные устройства.** В телефоне: WhatsApp → Настройки → **Связанные устройства** → выйдите из всех лишних сессий WhatsApp Web/Desktop. Оставьте **только связку с платформой**. Чем меньше связанных устройств, тем стабильнее синхронизация. 5. **Идеал, отдельный телефон под канал:** всегда на зарядке, со стабильным интернетом, без посторонних приложений. После этого **бóльшая часть задержек уходит**, рекламные лиды начинают доходить за минуты, а не часы. > ⚠️ Это **сильно лучше**, но не 100% гарантия: само ограничение WhatsApp иногда задерживает первое рекламное сообщение даже при онлайн-телефоне. Полностью убрать задержку можно только переходом на официальный WhatsApp Business API: обсуждается отдельно. --- ## Что платформа уже делает за вас Чтобы лид не потерялся, пока вы настраиваете телефон: - **Предупреждение «канал онлайн, но молчит».** Если входящие перестали приходить, владелец получает уведомление в Telegram/почту, сигнал зайти и проверить телефон. Подробнее: [канал отвалился](./92-channel-down.md). - **Метка «✋ Ответьте вручную».** Лид, который приехал с задержкой и которого бот не подхватил, помечается в разделе **Диалоги**: оператор сразу видит, кому ответить руками. Так даже задержанный лид **не теряется молча**: вы либо отвечаете вручную, либо он доходит до бота, когда телефон синхронизируется. --- ## Связанные статьи - [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md), как устроено подключение по QR. - [Анти-бан и безопасность канала](../02-channels/23-anti-ban.md), почему важно не «спамить» с только что подключённого номера. - [Бот не отвечает, диагностика](./90-bot-silent.md), общий порядок проверки, если бот молчит. - [Канал отвалился / WhatsApp забанили](./92-channel-down.md), что делать при обрыве канала. --- ## Каталог встроенных функций URL: https://dosai.pro/docs/guide/10-reference/100-functions-catalog [Документация](../README.md) › [Справочники](../10-reference) › Каталог функций # Каталог встроенных функций > Готовые инструменты бота, по категориям. Как функции работают и настраиваются в [гайде по функциям](../03-tools/30-functions.md); здесь, справочная таблица «что есть». ⏱ 7 мин · 👤 справочник · 🟢 live --- ## Google Таблицы (6) | Функция | Что делает | |---|---| | `sheet_info` | структура таблицы (листы, заголовки, размеры) | | `sheet_read` | прочитать строки | | `sheet_find` | найти строку по значению | | `sheet_add_row` | добавить строку | | `sheet_update_row` | обновить строку | | `sheet_delete_row` | удалить строку | → [Google Sheets](../05-integrations/51-google-sheets.md) ## Google Календарь (5) | Функция | Что делает | |---|---| | `calendar_check_slots` | проверить свободные слоты | | `calendar_create_event` | создать событие (запись) | | `calendar_update_event` | перенести/изменить событие | | `calendar_list_events` | список событий | | `calendar_delete_event` | отменить запись | → [Google Calendar](../05-integrations/52-google-calendar.md) ## Запись на время (1) | Функция | Что делает | |---|---| | `booking_find_free_slots` | «Свободные окошки для записи»: движок собирает свободные слоты из графика с учётом ограничений и занятости | ## Сообщения и уведомления (3) | Функция | Что делает | |---|---| | `telegram_send` | уведомление в Telegram (владельцу или в группу) | | `email_notify` | уведомление на почту владельцу | | `email_send_customer` | отправить письмо клиенту | ## Работа с лидом (1) | Функция | Что делает | |---|---| | `lead_set_tags` | бот добавляет лиду [теги](../03-tools/34-tags.md) (до 20, merge, выбор из словаря или создание нового) | ## Деньги (1) | Функция | Что делает | |---|---| | `owner_payment_invoice` | выставить клиенту [счёт на оплату](../06-money/62-accept-payments.md) (бета) | ## Управление диалогом (2) | Функция | Что делает | |---|---| | `followups_pause` | поставить [дожимы](../03-tools/33-drip.md) на паузу («свяжусь сам») | | `stop_dialog` | остановить бота в диалоге (клиент попросил) | ## Медиа (1) | Функция | Что делает | |---|---| | `send_media` | отправить материал из [медиа-библиотеки](../03-tools/32-media-library.md) по ярлыку | --- ## Своя интеграция по API Кроме встроенных функций, бот умеет дёргать **твой собственный сервис** по HTTP: это путь **«Своя интеграция по API»** при создании функции (тип действия `webhook`). Подробности и формат в [Кастомных вебхуках](../08-developers/81-custom-webhooks.md). --- > ℹ️ **Что намеренно НЕ показано в кабинете.** Два шаблона помечены `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, навесить тег на клиента, выставить счёт, поставить дожимы на паузу, показать видео из библиотеки. Все инструменты разбиты по темам. Как их включать и настраивать в [гайде по функциям](../03-tools/30-functions.md), а тут, чтобы быстро глянуть, что вообще есть. --- **Дальше:** → [Справочник настроек](./101-settings-reference.md) **Связано:** [Функции (гайд)](../03-tools/30-functions.md) · [Google Sheets](../05-integrations/51-google-sheets.md) · [Статусы и типы](./103-statuses.md) --- ## Справочник настроек (agent_config) URL: https://dosai.pro/docs/guide/10-reference/101-settings-reference [Документация](../README.md) › [Справочники](../10-reference) › Справочник настроек # Справочник настроек (`agent_config`) > Полная таблица настроек бота со значениями по умолчанию. Объяснения и сценарии в [Продвинутых настройках](../01-bot/15-advanced-settings.md); здесь, справочник «всё в одном месте». ⏱ 9 мин · 👤 справочник · 🟢 live --- ## Основное | Настройка | Умолчание | Что делает | |---|---|---| | `bot_active` | `true` | главный выключатель бота | | `default_chat_active` | `true` | новые чаты с включённым ИИ | | `temperature` | `0.5` | «температура» модели (0-2): ниже = предсказуемее | | `frequency_penalty` | `0.0` | штраф за повторы | | `presence_penalty` | `0.0` | штраф за «топтание на месте» | ## Разбивка ответа | Настройка | Умолчание | Что делает | |---|---|---| | `split_messages` | `true` | разбивать ответ на части | | `split_delay_seconds` | `2` | пауза между частями | | `split_threshold` | `300` | с какой длины разбивать (символы) | | `split_max_length` | `500` | макс. длина части | | `split_max_parts` | `5` | макс. число частей | ## Буферизация | Настройка | Умолчание | Что делает | |---|---|---| | `buffer_delay_seconds` | `1` | ждать новых сообщений перед ответом | | `buffer_delay_media_seconds` | `5` | доп. ожидание для медиа | ## Перехват оператором | Настройка | Умолчание | Что делает | |---|---|---| | `pause_on_operator` | `true` | пауза ИИ, когда пишет оператор | | `ignore_first_operator_message` | `false` | не паузить на первом сообщении оператора | | `exception_phrases` | `[]` | фразы-исключения (пауза не ставится) | | `auto_resume_enabled` | `false` | авто-возврат ИИ после оператора | | `auto_resume_days` / `_hours` / `_minutes` | `0`/`0`/`3` | через сколько вернуть | | `resume_message` | «Добрый день!» | текст при авто-возврате | ## Рабочие часы | Настройка | Умолчание | Что делает | |---|---|---| | `schedule_enabled` | `false` | включить расписание | | `schedule` | Пн-Пт 09-20, Сб 09-18, Вс выкл | график по дням | | `timezone` | `Asia/Almaty` | пояс расписания | | `offline_message` | дежурный текст | автоответ вне часов | ## Память диалога | Настройка | Умолчание | Что делает | |---|---|---| | `history_message_limit` | `30` | сколько сообщений «помнит» | | `history_time_limit` | `2_weeks` | за какой период история | ## Защита от спама | Настройка | Умолчание | Что делает | |---|---|---| | `spam_protection_enabled` | `false` | включить лимиты | | `spam_message_limit` | `5` | сообщений за окно | | `spam_duration_seconds` | `60` | длина окна | | `spam_daily_limit` | `100` | сообщений в день от одного | | `spam_repeat_threshold` | `3` | сколько одинаковых сообщений подряд считать спамом | | `spam_response_message` | «Пожалуйста, подождите, я обрабатываю ваш запрос.» | ответ при срабатывании | | `spam_auto_block` | `true` | авто-блок при нарушении | ## Распознавание медиа | Настройка | Умолчание | Что делает | |---|---|---| | `recognize_audio` | `true` | расшифровывать голосовые | | `recognize_images` | `true` | «видеть» картинки | | `recognize_pdf` | `true` | читать PDF | | `recognize_documents` | `true` | читать документы | ## Дожимы | Настройка | Умолчание | Что делает | |---|---|---| | `followup_enabled` | `false` | включить [дожимы](../03-tools/33-drip.md) | | `followup_touches_count` | `3` | число касаний | | `followup_interval_hours` | `24` | интервал между касаниями | | `followup_max_silence_hours` | `72` | стоп при молчании дольше | | `followup_reset_on_reply` | `true` | сброс счётчика при ответе клиента | | `followup_send_weekends` | `false` | слать в выходные | | `followup_max_silence_mark_lost` | `false` | пометить лида «потерян» по истечении `followup_max_silence_hours` | | `followup_model` | (наследует) | модель для дожимов | ## Видимость данных клиента боту | Настройка | Умолчание | Что делает | |---|---|---| | `nickname_visibility` | `true` | бот видит имя из профиля мессенджера | | `number_visibility` | `false` | бот видит номер телефона клиента | | `messenger_visibility` | `false` | бот знает, из какого мессенджера пришёл клиент | ## Кому бот отвечает | Настройка | Умолчание | Что делает | |---|---|---| | `default_chat_active` | `true` | в новых чатах ИИ сразу включён | | `engage_mode` | `existing_too` у проектов, созданных с 9 августа 2026; `all` у созданных раньше | кому отвечает бот: `all` = только новым обращениям, `existing_too` = плюс контактам, которые писали на номер до подключения, `ad_gated` = только лидам с рекламы (Click-to-WhatsApp) | | `engage_ad_ids` | `[]` | пусто = любая реклама; список = только эти объявления | | `respond_in_groups` | `false` | отвечать в групповых чатах | | `respond_to_missed_calls` | `false` | писать после пропущенного звонка | | `inline_buttons_enabled` | `false` | разрешить боту кнопки под ответом (Telegram) | | `collect_variables` | `[]` | поля анкеты, которые бот собирает по ходу разговора | ## Дожимы: расписание отправки | Настройка | Умолчание | Что делает | |---|---|---| | `followup_schedule_enabled` | `false` | ограничить дожимы часами | | `followup_schedule_start` / `_end` | `00: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 Календарь](../05-integrations/52-google-calendar.md) и [Запись на приём](../03-tools/36-booking.md). --- ## Простыми словами Это полная «панель приборов» бота: все тумблеры и ручки в одной таблице со значениями по умолчанию. Большинство уже выставлено по уму, трогать не обязательно. Сюда удобно заглянуть, когда хочешь точно понять, как называется настройка и какое у неё значение из коробки. Одно исключение стоит запомнить: настройки записи на приём живут не здесь, а внутри самой функции записи. Что каждая делает по-человечески и когда её крутить в статье [Продвинутые настройки](../01-bot/15-advanced-settings.md). --- **Дальше:** → [Коды ошибок и состояния](./102-error-codes.md) **Связано:** [Продвинутые настройки](../01-bot/15-advanced-settings.md) · [Лимиты и квоты](./104-limits.md) --- ## Коды ошибок и состояния URL: https://dosai.pro/docs/guide/10-reference/102-error-codes [Документация](../README.md) › [Справочники](../10-reference) › Коды ошибок # Коды ошибок и состояния > Справочник кодов и состояний, которые встречаются в системе: почему бот не отвечает, какие ошибки отдаёт API, что значат состояния канала. Диагностика по шагам: в [Бот не отвечает](../09-troubleshooting/90-bot-silent.md). ⏱ 7 мин · 👤 справочник · 🟢 live --- ## Доступ к ответу бота (eligibility) Почему бот может не отвечать (проверка перед ответом): | Код | HTTP | Значение | |---|---|---| | `PROJECT_NOT_ACTIVE` | 403 | проект в черновике | | `ACCOUNT_BANNED` | 403 | аккаунт заблокирован | | `INSUFFICIENT_BALANCE` | 402 | пустой баланс | | `NO_SUBSCRIPTION` | 402 | нет подписки | | `SUBSCRIPTION_EXPIRED` | 402 | подписка истекла | | `WHATSAPP_TRIAL_EXPIRED` | 402 | бесплатный период WhatsApp кончился (14 дней с подключения номера, 30 с промокодом партнёра) | | `SUBSCRIPTION_NO_EXPIRY` | 402 | подписка есть, но у неё нет даты окончания (расходится журнал, чинится на нашей стороне) | | `TRIAL_EXPIRED_PAYMENT_REQUIRED` | 402 | попытка подключить или переподключить номер после бесплатного периода без подписки | | `PROJECT_NOT_FOUND` | 404 | проект не найден | → [Бот не отвечает, диагностика](../09-troubleshooting/90-bot-silent.md) ## Причины автопаузы ИИ (`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` | исчерпан лимит сообщений в диалоге | вручную | | `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) | Состояние | Тип | Значение | |---|---|---| | `active` | - | в эфире | | `idle` / `init` | мягкое | спит / поднимается, пройдёт само | | `qridle` | жёсткое | сессия слетела → пере-скан QR | | `blocked` | жёсткое | бан WhatsApp | | `disabled` | жёсткое | канал отключён | | `no_channel` | - | канал не привязан | → [Канал отвалился / WhatsApp забанили](../09-troubleshooting/92-channel-down.md) ## Ошибки API Единый формат ответа: `{ "error": "текст", "code": "КОД" }`. | HTTP | code | Когда | |---|---|---| | 400 | `INVALID_INPUT` / `INVALID_UUID` | неверные/неполные данные | | 401 | `UNAUTHORIZED` | нет/невалидны учётные данные | | 403 | `FORBIDDEN` | нет прав ([роль](../07-team/70-roles.md)) | | 404 | `NOT_FOUND` | объект не найден | | 409 | `CONFLICT` | конфликт (напр. параллельное изменение) | | 429 | `RATE_LIMITED` | превышен лимит (см. `Retry-After`) | | 500 | `INTERNAL_ERROR` | необработанная ошибка (полный текст в логах и Sentry, наружу только общий) | | 500 | `DATABASE_ERROR` | сбой запроса к базе | → [Формат данных](../08-developers/83-data-format.md) ## Ошибки функций Когда функция падает, она возвращает модели `{ error, error_code }`, и бот реагирует: | Пример `error_code` | Значение | |---|---| | `missing_params` | не хватает обязательного параметра | | `invalid_params` | значение вне допустимого | | `sub_merchant_not_connected` | приём оплаты не настроен | | `kaspi_auth_lost` | потеряна авторизация Kaspi | | `apipay_4xx` / `apipay_5xx` | ошибка платёжного сервиса | → [Функция не вызывается / падает](../09-troubleshooting/91-function-fails.md) --- ## Простыми словами Это «расшифровщик»: справочник всех технических кодов, которые могут попасться. Бот молчит и где-то мелькнул `WHATSAPP_TRIAL_EXPIRED`? Значит, кончился бесплатный период. Видишь у канала `qridle`? Слетела сессия, надо пере-сканировать QR. Прилетел от API `FORBIDDEN`? Не хватает прав по роли. Тут не нужно ничего настраивать, просто находишь свой код и понимаешь, что он значит и куда дальше смотреть. --- **Дальше:** → [Стадии, статусы, типы](./103-statuses.md) **Связано:** [Бот не отвечает](../09-troubleshooting/90-bot-silent.md) · [Канал отвалился](../09-troubleshooting/92-channel-down.md) · [Формат данных](../08-developers/83-data-format.md) --- ## Стадии, статусы лида, типы клиента URL: https://dosai.pro/docs/guide/10-reference/103-statuses [Документация](../README.md) › [Справочники](../10-reference) › Стадии и статусы # Стадии, статусы лида, типы клиента > Все «словари» CRM в одном месте: стадии воронки, статусы лида, типы клиента, статусы подписчика дожимов. Что это значит на практике: в [Лидах](../04-crm/41-leads.md) и [Стадиях](../04-crm/42-stages.md). ⏱ 5 мин · 👤 справочник · 🟢 live --- > ℹ️ Значения ниже, **стандартный набор**, платформа работает с ним «из коробки». Замена набора своим (кастомная воронка) временно недоступна: редактор убран из настроек, вернётся в упрощённом виде. ## Стадии воронки (по умолчанию 6) | Код | Метка | |---|---| | `greeting` | Приветствие | | `qualification` | Квалификация | | `presentation` | Презентация | | `objection` | Возражения | | `closing` | Закрытие | | `done` | Завершено | → [Стадии диалога](../04-crm/42-stages.md) ## Статусы лида (по умолчанию 7) | Код | Метка | Создаёт лид | |---|---|---| | `none` | Нет | - | | `potential` | Потенциальный | - | | `qualified` | Квалифицирован | ✅ | | `hot` | Горячий | ✅ | | `converted` | Конвертирован | это (сделка закрыта) | | `reserve` | Резерв | ✅ | | `lost` | Потерян | - | → [Лиды и их статусы](../04-crm/41-leads.md) ## Сегментация клиента: теги Отдельного фиксированного поля «тип клиента» больше нет (удалено 2026-06-13). Категория клиента (опт / розница / кафе и т.п.) теперь выражается обычными **тегами**: их бот ставит сам или оператор вручную, с описаниями. → [Теги и сегментация](../03-tools/34-tags.md) ## Статусы подписчика дожимов (5) | Код | Значение | |---|---| | `active` | активен (получает дожимы) | | `paused` | на паузе | | `completed` | прошёл все касания | | `cancelled` | отменён | | `opted_out` | отписался | → [Дожимы](../03-tools/33-drip.md) --- ## Простыми словами Это все «выпадающие списки» CRM, собранные вместе. У диалога есть стадия: на каком этапе разговор (от «приветствия» до «завершено»). У лида: статус (от «потенциального» до «горячего» или «потерянного»). Категорию клиента (розница, опт, кафе) отдельным полем больше не хранят, для этого теги. А у подписчика дожимов, свой статус (активен/на паузе/отписался). Бот заполняет всё это сам по ходу общения; тебе тут, чтобы свериться, какие вообще бывают значения. --- **Дальше:** → [Лимиты и квоты](./104-limits.md) **Связано:** [Лиды](../04-crm/41-leads.md) · [Стадии](../04-crm/42-stages.md) · [Теги](../03-tools/34-tags.md) · [Дожимы](../03-tools/33-drip.md) --- ## Лимиты и квоты URL: https://dosai.pro/docs/guide/10-reference/104-limits [Документация](../README.md) › [Справочники](../10-reference) › Лимиты и квоты # Лимиты и квоты > Все числовые ограничения платформы в одной таблице: проекты, участники, медиа, база знаний, триал, деньги, функции. ⏱ 5 мин · 👤 справочник · 🟢 live --- ## Проект и команда | Лимит | Значение | |---|---| | Проектов на аккаунт | **50** | | Участников на проект | **20** | | API-ключей на аккаунт | **50** | | Запросов по API-ключу | **120 в минуту** (плюс свой лимит у каждого эндпоинта) | | Запросов к каналу и ручных отправок | **30 в минуту на аккаунт** | | Действий ИИ-агента через MCP | примерно **60 в минуту** (один вызов инструмента = два запроса) | ## Контент бота | Лимит | Значение | |---|---| | Медиа-файлов на проект | **60** | | Размер медиа-файла | **50 МБ** | | Медиа из Telegram (входящее) | до **20 МБ** | | Тегов на лида | **20** | | Память диалога (сообщений) | **30** (по умолчанию) | ## База знаний | Лимит | Значение | |---|---| | Записей на проект | **100** | | Размер загружаемого файла (PDF/DOC) | **4 МБ** | | Текст, вставленный руками | до **1 000 000 символов** | | Текст, извлечённый из файла | до **500 000 символов** | | Текст со страницы по ссылке | до **500 000 символов** на страницу, при обходе по ссылкам до **20 страниц** на уровень | | Контекст базы знаний в промпте | **8 000 символов** (топ-5 релевантных фрагментов) | | Результатов поиска по базе знаний | **5** (по умолчанию) | → [Медиа](../03-tools/32-media-library.md) · [База знаний](../03-tools/31-knowledge-base.md) ## Пробный период (WhatsApp) | Лимит | Значение | |---|---| | Длительность бесплатного периода | **14 дней** (**30 дней**, если к проекту применён [промокод](../06-money/63-referrals.md)) | | Ограничение по числу диалогов | **нет** (отменено 2026-08-04) | | Стартовый баланс проекта | **$5** (**$10** по промокоду) | | Окно скидки на подписку | **14 дней** с момента подключения канала | | Бесплатный период на один номер | **один раз** | | Скольким проектам аккаунта даётся бесплатный старт | **первому** (первым **трём**, если ты пришёл по чьей-то партнёрской ссылке); проект с применённым промокодом получает его в любом случае | Отсчёт бесплатных дней начинается при подключении номера, а не при регистрации. Внутри периода единственный ограничитель, баланс проекта: кончились деньги, бот замолчит, даже если дни ещё идут. → [Подключить WhatsApp](../02-channels/21-whatsapp-wazzup.md) · [Промокоды](../06-money/63-referrals.md) ## Деньги | Лимит | Значение | |---|---| | Подписка проекта | **$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 дня** | → [Биллинг](../06-money/60-billing.md) · [Промокоды и партнёрская программа](../06-money/63-referrals.md) ## Функции и запросы | Лимит | Значение | |---|---| | Функций на проект | **40** | | Параметров на функцию | до **20** | | Таймаут функции | **1-60 сек** (по умолчанию ~10) | | Вызовов функций за один ответ | **15** (защита от зацикливания) | | Частей в одном ответе | **5** | | Кнопок под ответом (Telegram) | **8** | ## Отправка в WhatsApp (антибан) Потолки живут на нашем шлюзе и считаются **на подключённый номер**. | Лимит | Значение | |---|---| | Разных собеседников в минуту | **8** (ответ из нескольких частей одному человеку стоит одного слота) | | Всего отправок в минуту | **30** | | Отправок в час / в сутки | **200** / **3000** | | Пауза между отправками | **1,5-5 сек**, случайная | | Одинаковый текст подряд в один чат | 3-й **блокируется** | | Шаблонное служебное сообщение на диалог | не чаще раза в **5 сек**, и один раз на диалог в сутки | | Молчание после подключения номера | **15 минут** | → [Кастомные вебхуки](../08-developers/81-custom-webhooks.md) · [Антибан](../02-channels/23-anti-ban.md) --- ## Простыми словами Это просто шпаргалка «сколько чего можно». До скольких проектов завести, сколько человек пустить в команду, какого размера файлы грузить, сколько длится бесплатный период, почём подписка, как часто бот может дёргать функции. Заглядываешь, когда упёрся в ограничение или планируешь, например, «а влезет ли мой прайс в базу знаний» или «со скольки долларов идёт выплата партнёру». --- **Дальше:** → [Переменные и хелперы выражений](./105-expression-reference.md) **Связано:** [Биллинг](../06-money/60-billing.md) · [Медиа](../03-tools/32-media-library.md) · [Публичный API](../08-developers/80-public-api.md) --- ## Переменные и хелперы выражений URL: https://dosai.pro/docs/guide/10-reference/105-expression-reference [Документация](../README.md) › [Справочники](../10-reference) › Выражения # Переменные и хелперы выражений > Полный справочник переменных и помощников [языка выражений](../08-developers/82-expressions.md) живёт на отдельной живой странице: она строится прямо из кода движка и всегда актуальна. ⏱ 1 мин · 👤 справочник · 🟢 live --- ## Где смотреть **→ [Живой справочник выражений](/docs/expressions)**: все переменные (`{{client_name}}`, `{{phone}}`, `{{stage}}`…), помощники дат (`{{now}}`, `{{format_date}}`…), текста (`{{upper}}`, `{{default}}`…), логики (`{{#if}}`, `{{eq}}`…) и утилиты (`{{math}}`, `{{digits}}`…) с синтаксисом и примерами. Страница генерируется из того же кода, который исполняет выражения: список не может устареть или разойтись с реальным поведением бота. --- ## Простыми словами Раньше здесь была копия шпаргалки по «вставкам», но копии устаревают. Теперь один источник: открой [живой справочник](/docs/expressions), там всё и всегда свежее. Как выражения работают в целом: в статье [Язык выражений](../08-developers/82-expressions.md). --- **Дальше:** → [Типы уведомлений](./106-notifications-reference.md) **Связано:** [Язык выражений](../08-developers/82-expressions.md) · [Системный промпт](../01-bot/11-system-prompt.md) · [Дожимы](../03-tools/33-drip.md) --- ## Типы уведомлений URL: https://dosai.pro/docs/guide/10-reference/106-notifications-reference [Документация](../README.md) › [Справочники](../10-reference) › Уведомления # Типы уведомлений > Справочник: какие события платформа умеет присылать и куда. Сначала уровень конкретного бота (Настройки проекта → «Уведомления»), затем события самого аккаунта, которые настраиваются в [Уведомлениях](../07-team/73-notifications.md). ⏱ 4 мин · 👤 справочник · 🟢 live --- ## Каналы доставки | Канал | Что это | |---|---| | Колокольчик | список в кабинете | | Email | на указанную почту | | Личный Telegram | через твоего бота-вестника | | Вебхук | свой URL для своей системы | ## События проекта (настраиваются в Настройках проекта → «Уведомления») Колонка **«Всегда шлётся»**: системные события приходят, даже если ты их отключил без них бот может молча встать. **Настраиваемых тумблеров всего 2** (`conversation_started`, `payment_received`): остальное системное и доставляется всегда. | Событие | О чём | Всегда шлётся | |---|---|---| | `conversation_started` | начат новый диалог | - | | `payment_received` | получена оплата | - | | `ai_error` | **бот не смог ответить клиенту** или ответ не дошёл: клиент написал и остался без ответа | ✅ | | `bot_first_reply` | **бот впервые ответил живому клиенту** в этом проекте (один раз на проект) | ✅ | | `first_lead` | **первая заявка проекта** (один раз на проект; поток новых лидов шлёт функция бота, не платформа) | ✅ | | `tokens_low` | баланс ниже порога (порог настраивается) | ✅ | | `balance_topped_up` | баланс пополнен (Kaspi, картой, вручную или автопополнением) | ✅ | | `auto_topup` | сработало автопополнение баланса | ✅ | | `trial_expiring` | заканчивается бесплатный период WhatsApp | ✅ | | `activation_offer_expiring` | закрывается [окно скидки на подписку](../06-money/60-billing.md#скидка-первых-двух-недель) (14 дней с подключения канала) | ✅ | | `subscription_expiring` | истекает подписка | ✅ | | `payment_tariff_expiring` | истекает тариф [приёма оплат](../06-money/62-accept-payments.md) (это другие деньги, не подписка бота) | ✅ | | `whatsapp_disconnected` | WhatsApp-канал отвалился | ✅ | | `platform_incident` | Технические работы на нашей стороне: бот временно не отвечает, от тебя ничего не требуется | ✅ | | `platform_incident_resolved` | Работы завершены, бот снова отвечает | ✅ | | `channel_silent` | канал давно молчит (нет входящих) | ✅ | | `schedule_problem` | движок [записи](../03-tools/36-booking.md) не смог прочитать график или спрятал специалиста | ✅ | | `spam_detected` | сработала защита от спама | ✅ | | `outreach_paused` | [исходящая кампания](../03-tools/40-outreach.md) остановлена автоматически (много недоставленных) | ✅ | | `lead_message_unreadable` | первое сообщение лида не читается (баг WhatsApp Web) | ✅ | | `owner_report` | [отчёт по проекту](../04-crm/45-reports.md) по расписанию | ✅ | > 🎉 **Два сигнала про хорошие новости.** `bot_first_reply` и `first_lead` приходят по одному разу на проект: первый, когда бот впервые ответил настоящему клиенту, второй, когда пришла первая заявка. Остальные уведомления сообщают о поломке, деньгах или тишине, эти два, о том, что настройка доехала до результата. > ℹ️ **Новый лид** больше не отдельное уведомление платформы (`lead_created` убран 2026-06-12): о новом лиде сообщает **функция бота** (`telegram_notify` / `send_lead`), чтобы не было дубля. Настрой её в [Функциях](../03-tools/30-functions.md). > 🔌 **Эти же события уходят в вебхук.** Если в разделе «Интеграции» → «Вебхуки» подписаться на `payment_received`, `payment_error`, `tokens_low`, `trial_expiring`, `whatsapp_disconnected`, `ai_error` или `schedule_problem`, платформа пришлёт их и на твой URL, вдобавок к почте и Telegram. Формат тела: [Кастомные вебхуки](../08-developers/81-custom-webhooks.md). --- ## События аккаунта (настраиваются в [Уведомлениях](../07-team/73-notifications.md)) Не привязаны к проекту, поэтому и живут отдельно. Подключены 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. См. [Бот не отвечает](../09-troubleshooting/90-bot-silent.md). --- ## Простыми словами Первая табличка, сигналы про **конкретный проект** (бот): кончаются деньги, отвалился канал, пришёл платёж, начался новый диалог. Настраиваемых из них всего три (диалог / платёж / ошибка ИИ), остальное системное и шлётся всегда. Ты выбираешь, о чём тебя беспокоить, в Настройках проекта → «Уведомления». Главное, не выключай уведомления про деньги и каналы: именно они предупреждают, когда бот вот-вот замолчит. Вторая табличка, сигналы про **сам аккаунт**: кто-то вошёл с незнакомого устройства, сменился пароль, появился API-ключ, в проекте прибавился человек или у кого-то поменялась роль. Эти настраиваются на странице [Уведомления](../07-team/73-notifications.md), и там же задаются контакты. Разница одна: тумблер там управляет письмом и Telegram, а в колокольчике такие события остаются всегда, чтобы историю аккаунта нельзя было случайно стереть галочкой. --- **Дальше:** → [FAQ](../09-troubleshooting/94-faq.md) **Связано:** [Уведомления и настройки](../07-team/73-notifications.md) · [Биллинг](../06-money/60-billing.md) · [Канал отвалился](../09-troubleshooting/92-channel-down.md) # ЧАСТЬ 2. КУРС (41 УРОКОВ) --- ## Что такое DOS AI и зачем бизнесу URL: https://dosai.pro/learn/module-0/lesson-01-what-is-dosai # Урок 1. Что такое DOS AI и зачем бизнесу > Что это за платформа, какую проблему решает и из чего состоит. Знать заранее ничего не нужно: это самый первый урок, всё объясняется с нуля. ## Цель урока После этого урока ты сможешь **одной фразой объяснить, что такое DOS AI и зачем он тебе**, и поймёшь главное: бот это не магия, ты им управляешь. Дальше решишь, стоит ли пробовать: следующий урок это уже сборка своего бота за 30 минут. ## Простыми словами **DOS AI это конструктор умного бота** для [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) и [Telegram](/learn/module-2/lesson-12-channels-telegram), **без программирования**. Ты обычным текстом описываешь, как бот должен общаться с клиентами и что знать про твой бизнес, а дальше он **сам отвечает людям круглосуточно**: подсказывает цены, [записывает на приём](/learn/module-3/lesson-18-booking), [принимает оплату](/learn/module-6/lesson-30-accept-payments) и складывает все заявки в одно место, чтобы ты ничего не потерял. Представь, что ты нанял **толкового секретаря**, который никогда не спит, отвечает за 15-40 секунд в любое время суток и работает строго по твоим правилам. Только вместо зарплаты ты платишь за то, что он реально отвечает. > 📖 Это вводный обзор. Полная техническая версия лежит в руководстве: [Что такое DOS AI](/docs/guide/00-start/00-what-is-dosai). ## Проще один раз попробовать Читать про бота бессмысленно, когда можно с ним поговорить. Ниже настоящий ассистент DOS AI, собранный на этой же платформе. Спроси у него что угодно про свой бизнес: сколько будет стоить, справится ли он с твоей нишей, что нужно для запуска. ## Слайды урока: посмотри наглядно ## Зачем это нужно (какую проблему решает) Клиенты пишут в мессенджеры **круглосуточно**: «сколько стоит?», «вы работаете завтра?», «запишите меня». Что происходит без бота: - Живой человек **не успевает** отвечать мгновенно 24/7. А медленный ответ = клиент ушёл к конкуренту, который ответил быстрее. - Нанять отдельного оператора **дорого**, и он всё равно спит ночью и отдыхает в выходные. - Заявки **теряются**: кто-то написал ночью, к утру уже передумал. **DOS AI ставит между клиентом и тобой умного бота.** Он отвечает за секунды, на твоём языке, по твоим правилам, ловит заявку ([лид](/learn/module-4/lesson-25-leads)) и кладёт её тебе в [CRM](/learn/module-4/lesson-24-dialogs). Ты подключаешься лично, только когда это реально нужно. ## Из чего состоит платформа Думай о DOS AI как о конструкторе из блоков. Каждый блок это отдельный урок этого курса, кликай и изучай по мере надобности (сейчас всё запоминать не нужно): | Блок | Что делает | Где изучить | |---|---|---| | 🧠 **Промпт (характер бота)** | Правила: как общаться, что можно и нельзя | [Урок 6. Системный промпт](/learn/module-1/lesson-06-system-prompt) | | 💬 **Каналы** | Где бот общается: WhatsApp, Telegram | [Уроки 12-13. Каналы](/learn/module-2/lesson-12-channels-telegram) | | 🛠️ **Функции (инструменты)** | Действия бота: записать, выставить счёт, отправить документ | [Урок 15. Функции](/learn/module-3/lesson-15-functions-overview) | | 📚 **База знаний** | Факты о бизнесе: прайс, услуги, правила | [Урок 16. База знаний](/learn/module-3/lesson-16-knowledge-base) | | 🎯 **Дожимы** | Автонапоминания тем, кто «подумает и пропал» | [Урок 20. Дожимы](/learn/module-3/lesson-20-drip) | | 📇 **CRM (диалоги и лиды)** | Все переписки и заявки, перехват вручную | [Уроки 24-25. CRM](/learn/module-4/lesson-24-dialogs) | | 💳 **Деньги** | Баланс, подписка, приём оплат | [Урок 29. Биллинг](/learn/module-6/lesson-29-billing) | **Один [проект](/learn/module-1/lesson-05-create-project) = один бот = один бизнес (или одна точка).** Если у тебя две точки образовательного центра, это два проекта. > 📖 Незнакомые слова (лид, промпт, канал, база знаний) подробно разбираем в [Уроке 4. Карта кабинета и глоссарий](/learn/module-0/lesson-04-cabinet-map). Здесь и дальше они кликабельны и ведут на нужный урок. ## Это не магия, ты управляешь Самый частый страх новичка: «бот наобещает клиенту лишнего» или «начнёт нести чушь». В DOS AI это не так, и вот почему: - **Бот знает только то, что ты ему дал.** Он не выдумывает цены и не берёт факты «из головы», а отвечает по твоим правилам ([промпт](/learn/module-1/lesson-06-system-prompt)) и твоим данным ([база знаний](/learn/module-3/lesson-16-knowledge-base)). Чего не знает, того не сочиняет. - **Границы = защита.** Ты сам задаёшь, чего боту делать **нельзя** (не ставить диагноз, не обещать скидок). Это рамки, за которые он не выходит. - **Ты всё видишь и можешь вмешаться.** Каждая переписка лежит у тебя в [CRM](/learn/module-4/lesson-24-dialogs). Не понравился ход разговора, [подключаешься сам](/learn/module-4/lesson-24-dialogs), бот встаёт на паузу. Итог: бот это управляемый инструмент, а не «чёрный ящик». Как он именно «думает» и где чинить, если ответил не так, разберём в [Уроке 3](/learn/module-0/lesson-03-how-bot-thinks), уже после того, как ты соберёшь своего. ## Кому это подходит Малый и средний бизнес, которому клиенты пишут в мессенджеры: стоматологии, барбершопы, салоны красоты, рестораны, автосервисы, школы и курсы, магазины. Страна значения не имеет: платформа облачная, нужен только WhatsApp или Telegram, а бот отвечает на языке клиента. Больше всего клиентов сейчас в Казахстане, поэтому там есть местные удобства вроде оплаты через Kaspi, но это дополнение, а не условие. Навыки программирования **не нужны**, бот настраивается обычным текстом. Разработчикам платформа даёт [API и вебхуки](/learn/module-8/lesson-34-api-webhooks), но это по желанию. ## Вопросы новичка - **Нужно ли уметь программировать?** Нет. Всё настраивается обычным текстом, как будто пишешь инструкцию сотруднику. Ни одной строчки кода. - **Клиент поймёт, что это бот?** Он общается как человек: вежливо, по делу, на твоём языке. Если что-то выходит за рамки, ты [подключишься сам](/learn/module-4/lesson-24-dialogs), бот встанет на паузу. - **Это дорого?** Ты платишь за то, что бот реально отвечает (тратится [баланс](/learn/module-6/lesson-29-billing)). Telegram работает без подписки, для WhatsApp нужна подписка. Первый проект получает немного бесплатного баланса на пробу. Подробно про это в [Уроке 29](/learn/module-6/lesson-29-billing). ## Проверь себя Можешь ответить своими словами, значит урок усвоен: - Что такое DOS AI одной фразой? - Какую проблему бизнеса он решает? - Почему бот не «наобещает лишнего» (что его ограничивает)? ## Что дальше Ты понял, что это и зачем. Теперь самое интересное: **собери своего первого бота за 30 минут** и получи первую заявку. - [Урок 2. Быстрый старт](/learn/module-0/lesson-02-quickstart): от пустого кабинета до живого бота, который отвечает тебе. ## Подробнее (техническая документация) - [Что такое DOS AI](/docs/guide/00-start/00-what-is-dosai) · [Глоссарий терминов](/docs/guide/00-start/04-glossary) --- ## Быстрый старт: первый бот за 30 минут URL: https://dosai.pro/learn/module-0/lesson-02-quickstart # Урок 2. Быстрый старт: первый бот за 30 минут > Сквозной путь: от пустого кабинета до живого бота, который отвечает тебе в WhatsApp. Делай по шагам, ничего не пропуская, и через полчаса бот будет отвечать клиентам сам. ## Цель урока После этого урока у тебя будет **работающий бот, который реально отвечает**, сначала тебе в тест-чате, а потом (по желанию) в живом WhatsApp или Telegram. Это твой первый результат: не теория, а собранный своими руками бот. ## Что мы сделаем Шесть шагов: создать [проект](/learn/module-1/lesson-05-create-project) → задать [характер бота](/learn/module-1/lesson-06-system-prompt) → дать [факты о бизнесе](/learn/module-1/lesson-07-feed-knowledge) → проверить в [тест-чате](/learn/module-1/lesson-10-test-chat) → подключить [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) → получить первую заявку. > 📖 Полная версия со скриншотами: [Быстрый старт](/docs/guide/00-start/02-quickstart). ## Слайды урока: путь запуска наглядно ## Непонятные слова: на пальцах - **Регистрация**: заведение своего аккаунта (входа) на платформе по email. Как записаться в библиотеку: оставил почту с паролем, и у тебя свой «читательский билет». - **QR-код**: квадратик с чёрными точками, который телефон «фотографирует», чтобы связать WhatsApp с ботом. Как сканировать штрихкод на кассе: навёл камеру, связь установлена. Подробно, [Урок 13](/learn/module-2/lesson-13-whatsapp-qr). - **Триал (пробный период)**: время, когда можно попробовать бесплатно. Как тест-драйв машины: покатался, понравилось, покупаешь. Для WhatsApp это 14 дней (30 дней, если применить промокод партнёра), число диалогов не ограничено. - **«Связанные устройства»**: раздел в самом WhatsApp на телефоне, где показывают, какие компьютеры/сервисы подключены к твоему номеру. Именно оттуда сканируешь QR, как WhatsApp Web на компьютере. - **[Тест-чат (песочница)](/learn/module-1/lesson-10-test-chat)**: место порепетировать бота без клиентов и без трат. Как черновик перед чистовиком. ## Что приготовить заранее - [ ] Аккаунт на платформе (регистрация по email в один шаг, без подтверждения почты); - [ ] Телефон с **«живым» рабочим WhatsApp** (не новый, не пустой номер); - [ ] Под рукой: твой **прайс/услуги, часы работы, адрес**, чтобы бот ими оперировал. > ⚠️ **Триал WhatsApp: 14 дней бесплатно, число диалогов не ограничено.** Подключай канал всё равно **в конце** (шаг 5), когда бот уже настроен, чтобы бесплатные дни не ушли на пустого бота. Бесплатен при этом **канал**, а ответы бота идут с [баланса](/learn/module-6/lesson-29-billing) и в триале тоже. --- ### Шаг 1. Создай проект (3 мин) Глобальное меню слева → **«Мои проекты» → «Создать»**. - Дай понятное имя (например «Образовательный центр Профи»); - Укажи **сферу бизнеса**, это [категория для аналитики](/learn/module-1/lesson-05-create-project); промпт при создании платформа **не** заполняет. Подробно: [Урок 5. Создание проекта](/learn/module-1/lesson-05-create-project). Проект на пробном периоде получает **$5 бесплатного [баланса](/learn/module-6/lesson-29-billing)**: этого хватает не только на тест, но и на живые переписки. ### Шаг 2. Задай характер бота (8 мин) Меню проекта → группа **«Бот»** → **«Настройки бота»** → поле **«Системный промпт»**. Здесь описывается **поведение**, *как бот себя ведёт* (факты про бизнес, отдельно, шаг 3). Опиши словами: - **Тон:** вежливо на «вы» / дружелюбно на «ты», с эмодзи или строго; - **Правила:** что можно и **чего нельзя** (не обещать скидок, не давать заведомо ложных обещаний); - **Цель:** что считать успехом (записать / взять телефон / довести до оплаты). 📌 Всё это, **обычным текстом в одно поле**, как инструкция новому сотруднику. Отдельных переключателей «тон» в интерфейсе нет. Глубоко: [Урок 6. Системный промпт](/learn/module-1/lesson-06-system-prompt). ### Шаг 3. Дай боту факты о бизнесе (5 мин) Факты живут в **двух местах** (это не промпт, промпт про поведение, а тут про *что бот знает*): 1. **Поле «Информация о компании»** (там же, в «Настройки бота»), коротко и то, что нужно **всегда**: услуги, цены, адрес, часы. Вшивается в каждый ответ. Лимит, 40 000 символов. 2. **[База знаний](/learn/module-3/lesson-16-knowledge-base)**, объёмное: большой прайс, условия, FAQ, документы. Бот подмешивает нужные куски. 📌 Правило: короткий факт (адрес, часы) → «Информация о компании»; большой документ (полный прайс) → «База знаний»; тон/правила → [промпт](/learn/module-1/lesson-06-system-prompt). Подробно: [Урок 7](/learn/module-1/lesson-07-feed-knowledge). ### Шаг 4. Проверь в тест-чате (5 мин). НЕ пропускай Меню проекта → **«Тестовый чат»**. Это песочница: бот думает как в бою, но без клиентов и без списаний. Прогони реальные сценарии: - «Сколько стоит подготовка к ЕНТ?»: называет цену из знаний? - «Запишите сына на пробный урок»: ведёт к записи? - «А у вас есть группы по английскому?»: отвечает по фактам, не выдумывает? ⚠️ Ошибается это нормально на старте. Лечится так: не по фактам → добавь факт в базу знаний; ведёт себя не так → поправь промпт. Крути, пока не понравится. Подробно: [Урок 10. Тестовый чат](/learn/module-1/lesson-10-test-chat). ### Шаг 5. Подключи WhatsApp (5 мин) Теперь, когда бот толковый, выпускаем в эфир. Меню проекта → **«Каналы» → «Подключить WhatsApp»**: отметь галочки безопасности → отсканируй QR телефоном (WhatsApp → «Связанные устройства») → дождись статуса «Подключён». ⚠️ Обязательно прочти про [гигиену и антибан](/learn/module-2/lesson-13-whatsapp-qr), WhatsApp банит новые номера за холодные рассылки. ### Шаг 6. Получи первую заявку (2 мин) 1. Напиши боту с **другого** телефона, как клиент; 2. Бот отвечает, он в эфире; 3. Открой **«[Диалоги](/learn/module-4/lesson-24-dialogs)»** это там переписка; 4. Если бот собрал имя/телефон/запрос в **«[Лиды](/learn/module-4/lesson-25-leads)»** появится заявка. 🎉 --- ## Частые ошибки новичков - **Подключили WhatsApp сразу, до настройки** → потратили пробный триал на пустого бота. Настраивай сначала (шаги 1-4). - **Засунули весь прайс в промпт** → бот путается и [дорожает](/learn/module-1/lesson-08-model-cost). Прайс → в [базу знаний](/learn/module-3/lesson-16-knowledge-base). - **Не проверили в тест-чате** → клиент первым нашёл ошибку. Всегда шаг 4. - **Вписали факты в промпт, а поведение: в «Информацию о компании»** → перепутали местами. Поведение → промпт, факты → знания. ## Вопросы новичка - **Обязательно ли подключать WhatsApp в первый день?** Нет. Можешь настроить бота и гонять его в [тест-чате](/learn/module-1/lesson-10-test-chat) сколько угодно: это бесплатно и без триала. WhatsApp подключай, когда бот уже нравится. - **Можно начать с Telegram?** Да, и это даже проще: [Telegram подключается по токену за пару минут](/learn/module-2/lesson-12-channels-telegram) и работает без подписки. Хороший вариант для первого запуска. - **Что делать, если бот в тест-чате отвечает не так?** Это ожидаемо на старте. Не по фактам → добавь факт в [знания](/learn/module-3/lesson-16-knowledge-base); ведёт себя не так → поправь [промпт](/learn/module-1/lesson-06-system-prompt). Правишь и проверяешь, пока не понравится. Почему он «думает» именно так: разберём в [следующем уроке](/learn/module-0/lesson-03-how-bot-thinks). - **Сколько денег нужно, чтобы попробовать?** Первый проект получает немного бесплатного [баланса](/learn/module-6/lesson-29-billing) (по промокоду партнёра первые три), на тесты хватает. Как только на бота пойдут живые клиенты, положи хотя бы **$10**: бесплатные дни открывают канал, а каждый ответ списывается с баланса. ## Проверь себя К концу урока у тебя должно быть: - [ ] Создан проект; - [ ] Задан системный промпт (характер бота); - [ ] Даны факты о бизнесе («Инфо о компании» и/или база знаний); - [ ] Бот проверен в тест-чате и отвечает адекватно; - [ ] (по желанию) подключён WhatsApp или Telegram и получена первая заявка. ## Что дальше Бот собран и запущен. Теперь важно понять, **почему** он отвечает так, чтобы за 30 секунд чинить любой неудачный ответ: - [Урок 3. Как думает бот и где чинить](/learn/module-0/lesson-03-how-bot-thinks): главный урок про контроль над ботом. А дальше подгоняешь под свою задачу: | Хочешь… | Иди в урок | |---|---| | Научить бота записывать/считать/выставлять счёт | [Функции](/learn/module-3/lesson-15-functions-overview) | | Догонять клиентов, которые пропали | [Дожимы](/learn/module-3/lesson-20-drip) | | Подключить ещё и Telegram | [Telegram](/learn/module-2/lesson-12-channels-telegram) | | Разобраться с балансом и оплатой | [Биллинг](/learn/module-6/lesson-29-billing) | ## Подробнее (техническая документация) - [Быстрый старт](/docs/guide/00-start/02-quickstart) · [Карта кабинета](/docs/guide/00-start/03-cabinet-map) --- ## Как «думает» бот и где чинить URL: https://dosai.pro/learn/module-0/lesson-03-how-bot-thinks # Урок 3. Как «думает» бот и где чинить > Ты уже собрал и запустил бота ([Урок 2](/learn/module-0/lesson-02-quickstart)). Иногда он отвечает не так, как хотелось. Этот урок про то, что происходит за доли секунды между сообщением клиента и ответом бота. Поймёшь это, и сразу станет ясно, *почему* он ответил именно так, и главное, **где чинить**. ## Цель урока После этого урока ты сможешь **понять, откуда бот взял свой ответ**, и **починить неудачный ответ за 30 секунд**, не наугад, а точно зная, что дописать: правило в промпт, факт в знания или включить функцию. ## Простыми словами Представь бота как нового толкового сотрудника. Общие вещи о мире он **уже знает** из обучения: язык, вежливость, что такое кариес, как посчитать. А вот про **твой** бизнес, только то, что ты ему рассказал. Перед каждым ответом он быстро «вспоминает» три вещи: 1. **Твои инструкции**: [промпт](/learn/module-1/lesson-06-system-prompt) (как себя вести); 2. **Справочник о бизнесе**: [Информация о компании](/learn/module-1/lesson-07-feed-knowledge) и [база знаний](/learn/module-3/lesson-16-knowledge-base) (цены, услуги, адрес); 3. **Список разрешённых действий**: [функции](/learn/module-3/lesson-15-functions-overview) (записать, выставить счёт, отправить документ). Потом решает: **ответить словами** или **сделать действие**, и пишет клиенту результат. > 📖 Полная версия с разбором: [Как бот думает](/docs/guide/00-start/01-how-bot-thinks). ## Слайды урока: посмотри логику наглядно ## Непонятные слова: на пальцах - **ИИ (искусственный интеллект), он же «модель»**: «мозг» бота, обученный на огромном количестве текстов. Он умеет понимать вопрос и складывать ответ словами. Как очень начитанный человек: язык и общие вещи знает, а про твой бизнес, только то, что ты рассказал. Выбор мозга (быстрый/умный) в [Уроке 8](/learn/module-1/lesson-08-model-cost). - **Контекст**, всё, что бот «держит перед глазами», когда отвечает: твои правила + переписка + нужные факты. Как когда ты помогаешь другу: держишь в голове, о чём он спрашивал раньше, и правила, и что знаешь по теме. - **История диалога**: предыдущие сообщения в этой переписке. Благодаря ей бот помнит, что клиент писал 3 сообщения назад, и не переспрашивает имя по десять раз. - **«Вызвать функцию»**, момент, когда бот вместо болтовни *делает дело*: лезет в календарь, выставляет счёт. Как официант, который идёт на кухню, а не только обещает. Подробно, [Урок 15](/learn/module-3/lesson-15-functions-overview). - **[Тест-чат](/learn/module-1/lesson-10-test-chat)**: «песочница», где ты сам проверяешь бота, как будто ты клиент. Как порепетировать спектакль до премьеры: те же реплики, но зрителей нет. ## Что происходит на каждое сообщение (пошагово) ``` Сообщение клиента │ ▼ 1. Собрать контекст: промпт + история этого диалога + подходящие куски базы знаний + меню включённых функций │ ▼ 2. Решить: «ответить словами» ИЛИ «вызвать функцию» │ │ │ ▼ │ выполнить действие (календарь / счёт …) │ │ ▼ ▼ 3. Сформулировать ответ ◄───────── получить результат │ ▼ Ответ уходит в WhatsApp / Telegram ``` ## Зачем это понимать Потому что **«глупый» ответ бота почти всегда означает не глупый ИИ, а неполные инструкции или знания**. Если понимаешь, откуда бот берёт ответ, ты за 30 секунд находишь, что дописать. Без этого понимания люди злятся «бот тупой» и бросают, хотя чинится всё одной строкой. ## Два вида знаний это ключ ко всему | Вид знаний | Нужно ли объяснять боту? | |---|---| | **Общее про мир** (язык, вежливость, что такое кариес, счёт) | ❌ Нет, он уже это знает из обучения | | **Факты про твой бизнес** (услуги, цены, расписание, адрес) | ✅ Да: он **не знает**, пока ты не дашь | Плюс важно: бот **не ищет в интернете** и не знает, что происходит прямо сейчас за пределами диалога. Правило простое: **общему учить не надо: давай ему только то, что специфично для тебя.** ## Куда что класть (чтобы бот не путался) | Что | Куда положить | Урок | |---|---|---| | *Как общаться* (тон, правила, запреты) | Системный промпт | [Урок 6](/learn/module-1/lesson-06-system-prompt) | | *Коротко о бизнесе* (адрес, часы, ключевые цены) | Поле «Информация о компании» | [Урок 7](/learn/module-1/lesson-07-feed-knowledge) | | *Много фактов / документы* (большой прайс, FAQ) | База знаний | [Урок 16](/learn/module-3/lesson-16-knowledge-base) | | *Что делать* (записать, выставить счёт, оплатить) | Функции | [Урок 15](/learn/module-3/lesson-15-functions-overview) | ## Пример: «бот вызвал функцию» Сам ИИ умеет только **писать текст**. [Функции](/learn/module-3/lesson-15-functions-overview) дают ему «руки». Ты **не** прописываешь сценарий «если клиент сказал X, то сделай Y», ты просто описываешь функции словами, и бот **сам решает**, когда их вызвать. Подключены функции «проверить свободное время» и «записать клиента». Клиент: «хочу завтра после обеда». Бот сам: проверяет слоты → предлагает время → после согласия записывает → подтверждает. **Никто этот сценарий по шагам не программировал**: бот собрал его сам. ## Почему бот иногда «тупит», и где чинить | Симптом | Обычно причина | Куда идти | |---|---|---| | Отвечает не по делу / выдумывает | Факта нет в знаниях, бот «додумал» | Добавь факт в [Базу знаний](/learn/module-3/lesson-16-knowledge-base) | | Не записывает / не считает | Функция выключена или плохо описана | Проверь [Функции](/learn/module-3/lesson-15-functions-overview) | | Отвечает слишком сухо/формально | Тон не задан | Поправь [промпт](/learn/module-1/lesson-06-system-prompt) | | Молчит совсем | Кончился [баланс/триал](/learn/module-6/lesson-29-billing) или пустой промпт | [Урок 36. Диагностика](/learn/module-9/lesson-36-troubleshooting) | ## Важное правило перед запуском Бот **работает одинаково везде**: в [тестовом чате](/learn/module-1/lesson-10-test-chat) в боевом WhatsApp, в Telegram. Поэтому **всегда сначала проверяй изменения в тест-чате**: там он думает точно так же, но без реальных клиентов и без списаний. Понравилось в тест-чате → выпускай в бой. ## Вопросы новичка - **Бот запоминает клиента навсегда?** Он помнит переписку в рамках диалога (историю). Глубину памяти можно настроить в [продвинутых настройках](/learn/module-1/lesson-11-advanced-settings), как далеко назад он «читает». - **Бот гуглит?** Нет. Он не ищет в интернете и не знает новостей «прямо сейчас». Отвечает по твоим [знаниям](/learn/module-3/lesson-16-knowledge-base) и общей эрудиции. Нужны свежие данные (остаток на складе)? Это делает [функция](/learn/module-3/lesson-15-functions-overview), которая стучится в твою систему. - **Почему один и тот же вопрос иногда получает чуть разные ответы?** ИИ каждый раз формулирует заново, как живой человек, смысл один, слова могут отличаться. Это нормально. - **Где быстрее всего понять, почему бот ответил не так?** Открой [логи событий](/learn/module-4/lesson-26-analytics-reports): там видно, что бот «вспоминал» и какие функции вызывал. ## Проверь себя Урок усвоен, если можешь: - показать, из каких трёх источников бот собирает ответ; - объяснить, какие знания боту давать обязательно, а какие, не нужно; - по симптому «бот ответил не так» назвать, что дописать (промпт / знания / функция). ## Что дальше Теперь ты понимаешь, как бот принимает решения и как его чинить. Осталось освоиться в кабинете: - [Урок 4. Карта кабинета и глоссарий](/learn/module-0/lesson-04-cabinet-map), где что лежит и что означает каждый термин. А затем, Модуль 1, где глубоко настраиваем бота (промпт, знания, модель). ## Подробнее (техническая документация) - [Как бот думает](/docs/guide/00-start/01-how-bot-thinks) · [Системный промпт](/docs/guide/01-bot/11-system-prompt) · [Функции](/docs/guide/03-tools/30-functions) · [База знаний](/docs/guide/03-tools/31-knowledge-base) --- ## Карта кабинета и глоссарий URL: https://dosai.pro/learn/module-0/lesson-04-cabinet-map # Урок 4. Карта кабинета и глоссарий > Урок-**справочник**. Ты уже прошёл кабинет руками в [быстром старте](/learn/module-0/lesson-02-quickstart), а здесь собрана вся карта и словарь терминов в одном месте. Не обязательно смотреть подряд: **возвращайся сюда**, когда забыл слово или не можешь найти раздел. ## Зачем этот урок Это твоя **шпаргалка на весь курс**: полный словарь терминов (каждое слово, со ссылкой на подробный урок) + карта, что где лежит в кабинете. Держи под рукой, когда в следующих уроках встретишь незнакомое слово, оно здесь объяснено на пальцах. ## Два уровня меню (главное про навигацию) Кабинет устроен в **два уровня**: - **Глобальное меню** (слева всегда) про весь твой аккаунт: список всех ботов, общий счёт, рефералы. - **Меню проекта**: появляется, когда ты зашёл внутрь конкретного [проекта](/learn/module-1/lesson-05-create-project); всё про этого бота. Аналогия: глобальное меню это «список всех твоих точек». Меню проекта, как «панель управления одной точкой». > 📖 Полная версия: [Карта кабинета](/docs/guide/00-start/03-cabinet-map) · [Глоссарий](/docs/guide/00-start/04-glossary). ## Слайды урока: карта кабинета ## Глоссарий: термины простыми словами (с примером) Главная ценность этого справочника. Каждый термин, определение + понятный с ходу пример. Слово кликабельно, ведёт на подробный урок. - **[Проект](/learn/module-1/lesson-05-create-project)**: один бот для одного бизнеса или точки. *Пример:* две точки образовательного центра → два проекта, как две отдельные папки. - **[Промпт](/learn/module-1/lesson-06-system-prompt)**: текст-инструкция «характера» бота. *Пример:* «Ты, вежливый администратор образовательного центра, отвечай на "вы", цены бери из базы знаний, скидки не обещай». - **[Токены](/learn/module-6/lesson-29-billing)**: «топливо», которое тратится на каждый ответ бота. *Пример:* как минуты на телефоне, говоришь, они убывают; кончились, тишина. - **[Подписка](/learn/module-6/lesson-29-billing)**: оплата за канал. *Пример:* нужна для WhatsApp, как абонемент в зал; Telegram работает без неё. - **[Лид](/learn/module-4/lesson-25-leads)**: заявка, собранная ботом. *Пример:* записка «Айгерим, +7…, хочет записать сына на пробный урок» у тебя на столе. - **[Диалог](/learn/module-4/lesson-24-dialogs)**: переписка, где бот реально ответил. *Пример:* один клиент написал и получил ответ = один диалог. - **[Функция](/learn/module-3/lesson-15-functions-overview)**: действие бота, а не только слова. *Пример:* «записать на пробный урок в пн 17:00», как кнопка на пульте, нажал → сделал. - **[База знаний (RAG)](/learn/module-3/lesson-16-knowledge-base)**: «шпаргалка» из документов. *Пример:* загрузил прайс курсов, бот подсматривает в него и называет точную цену. - **[Дожим](/learn/module-3/lesson-20-drip)**: авто-напоминание тому, кто замолчал. *Пример:* через день бот сам пишет «ещё актуально? могу записать на пробный». - **[Роль](/learn/module-7/lesson-32-roles-members)**: уровень доступа сотрудника. *Пример:* как ключи: у кого-то только «посмотреть», у кого-то, «всё менять». - **[Триал](/learn/module-2/lesson-13-whatsapp-qr)**: бесплатный пробный период WhatsApp. *Пример:* тест-драйв: попробовал, понравилось, оформляешь подписку. ## Карта меню: компактная шпаргалка ### Глобальное меню (слева, всегда) | Пункт | Что там | Урок | |---|---|---| | **Дашборд** | Сводка по всем проектам | [Аналитика](/learn/module-4/lesson-26-analytics-reports) | | **Уведомления** | Важные события (заявки, проблемы) | [Урок 33](/learn/module-7/lesson-33-account-lifecycle) | | **Мои проекты** | Список ботов + «Создать» | [Урок 5](/learn/module-1/lesson-05-create-project) | | **CRM** | Общая воронка по всем проектам | [Урок 25](/learn/module-4/lesson-25-leads) | | **Кабинет** | Профиль, безопасность, [рефералы](/learn/module-6/lesson-31-referrals) | [Урок 33](/learn/module-7/lesson-33-account-lifecycle) | | **Биллинг** | Общий счёт, подписки, история оплат | [Урок 29](/learn/module-6/lesson-29-billing) | | **Поддержка** | Связь с командой DOS | [Урок 36](/learn/module-9/lesson-36-troubleshooting) | | **Обновления** | Что нового в продукте | - | | **Документация** | Справка и руководство | [Открыть](/docs/guide/00-start/00-what-is-dosai) | | **Для разработчиков** | Публичный API и вебхуки | [Урок 34](/learn/module-8/lesson-34-api-webhooks) | ### Меню проекта (когда зашёл в бота): 5 групп Названия, ровно как в кабинете: - **🤖 Бот**: [Настройки бота](/learn/module-1/lesson-06-system-prompt) (промпт, [модель](/learn/module-1/lesson-08-model-cost), [продвинутые](/learn/module-1/lesson-11-advanced-settings)), [База знаний](/learn/module-3/lesson-16-knowledge-base), [Тестовый чат](/learn/module-1/lesson-10-test-chat). - **🛠️ Инструменты**: [Функции](/learn/module-3/lesson-15-functions-overview), [Дожимные](/learn/module-3/lesson-20-drip), [Медиа](/learn/module-3/lesson-17-media-library). - **🔌 Подключения**: [Каналы](/learn/module-2/lesson-13-whatsapp-qr), [Рассылки](/learn/module-3/lesson-22-broadcasts), [Исходящие](/learn/module-3/lesson-41-outreach) (холодные рассылки: бот пишет первым), [Интеграции](/learn/module-5/lesson-27-google). - **📊 Мониторинг**: [Диалоги](/learn/module-4/lesson-24-dialogs), [Лиды](/learn/module-4/lesson-25-leads), [Теги](/learn/module-3/lesson-21-tags), [Аналитика](/learn/module-4/lesson-26-analytics-reports), Отчёты, [Логи](/learn/module-9/lesson-36-troubleshooting). - **⚙️ Проект**: Основное, [Участники](/learn/module-7/lesson-32-roles-members), [Биллинг](/learn/module-6/lesson-29-billing), [Приём оплат](/learn/module-6/lesson-30-accept-payments), [Удаление](/learn/module-7/lesson-33-account-lifecycle). > Что ты видишь и можешь, зависит от твоей [роли](/learn/module-7/lesson-32-roles-members) (viewer / tester / editor / admin / owner). ## Вопросы новичка - **Я зашёл и не вижу разделов бота.** Скорее всего ты в *глобальном* меню. Открой **«Мои проекты»** и зайди внутрь бота: тогда появится меню проекта со всеми разделами. - **Почему у моего сотрудника меньше кнопок, чем у меня?** Это [роли](/learn/module-7/lesson-32-roles-members): каждый видит только то, что ему разрешено. Владелец видит всё. - **Где посмотреть все заявки сразу по всем ботам?** В глобальном разделе **CRM**: там общая воронка по всем проектам. - **Куда нажать, если что-то сломалось?** Глобальное меню → **«Поддержка»**, а сначала загляни в [Урок 36. Диагностика](/learn/module-9/lesson-36-troubleshooting): почти всё чинится за минуту. ## Проверь себя - В чём разница глобального меню и меню проекта? - Куда идти, чтобы увидеть заявки по всем ботам сразу? - Объясни своими словами: лид, промпт, база знаний. ## Что дальше Ты сориентировался и знаешь термины: начинается глубокая настройка. Дальше **Модуль 1**: - [Урок 5. Создание проекта и выбор ниши](/learn/module-1/lesson-05-create-project), а сердце всего: [Урок 6, системный промпт](/learn/module-1/lesson-06-system-prompt). ## Подробнее (техническая документация) - [Карта кабинета](/docs/guide/00-start/03-cabinet-map) · [Полный глоссарий](/docs/guide/00-start/04-glossary) · [Роли и права](/docs/guide/07-team/70-roles) --- ## Создание проекта и выбор ниши URL: https://dosai.pro/learn/module-1/lesson-05-create-project # Урок 5. Создание проекта и выбор ниши > С проекта начинается любой бот. Разберём, что такое проект, что даёт выбор ниши, и как не запутаться, если бизнесов несколько. ## Цель урока После урока ты умеешь **правильно завести проект и не наделать ошибок, из-за которых потом придётся переделывать**: сколько проектов заводить, что делать со второй точкой, зачем выбирать нишу. > 🔗 В [быстром старте](/learn/module-0/lesson-02-quickstart) ты уже создал проект по-быстрому. Здесь, то же действие, но глубже: правила и тонкости, чтобы сделать один раз и правильно. ## Простыми словами **Проект это твой бот.** Один [проект](/docs/guide/01-bot/10-create-project) = один бизнес или одна точка. У бота внутри проекта своя настройка: [промпт](/learn/module-1/lesson-06-system-prompt), [знания](/learn/module-3/lesson-16-knowledge-base), [функции](/learn/module-3/lesson-15-functions-overview), [каналы](/learn/module-2/lesson-12-channels-telegram), [баланс](/learn/module-6/lesson-29-billing). Если у тебя две точки образовательного центра, заводи **два проекта**. Они не мешают друг другу: у каждого свой бот, свои клиенты, свои деньги. ## Слайды урока ## Непонятные слова: на пальцах - **Проект**: «контейнер» одного бота со всеми его настройками. Как отдельный ящик стола: в нём лежат промпт, знания, каналы и деньги именно этого бота. Другой бизнес: другой ящик. - **Ниша (сфера бизнеса)**: категория, к какой отрасли относится бизнес (стоматология, барбершоп, автосервис…). Как раздел в справочнике. Нужна для аналитики и подсказок, сам характер бота она **не** задаёт. - **[Канал](/learn/module-2/lesson-12-channels-telegram)**: мессенджер, где бот отвечает (WhatsApp/Telegram). Как двери в магазин: дверей может быть несколько, продавец (бот), один. - **Дублировать проект**: сделать точную копию бота со всеми настройками. Как «сохранить как…» у документа: получаешь второй такой же, чтобы поменять пару деталей. ## Зачем правильно завести проект Потому что проект это «контейнер» всего остального. Ошибёшься на старте (например, захочешь два номера WhatsApp в одном проекте): упрёшься в ограничение позже. Пара правил на входе экономят переделку. ## Как создать (по шагам) Глобальное меню → **«Мои проекты» → «Создать»**. Заполни: - **Имя**: понятное («Образовательный центр Профи»), чтобы не путать в списке. - **Ниша (сфера бизнеса)**: выбор из **25 категорий** (стоматология, красота, фитнес, образование, авто, ресторан, магазин и т.д.). Это **метаданные для аналитики и подсказок**: на поведение бота напрямую **не** влияет, [промпт](/learn/module-1/lesson-06-system-prompt) при создании не заполняется. Нет твоей ниши в списке: выбери «Другое». - **Информация о компании**: коротко о бизнесе (можно дополнить позже, [Урок 7](/learn/module-1/lesson-07-feed-knowledge)). - **Цвет**: 1 из 8, просто для оформления карточки. ## Важное правило: 1 проект = 1 WhatsApp **Один проект = один канал [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) + один [Telegram](/learn/module-2/lesson-12-channels-telegram)-бот.** Оба канала живут в одном проекте, не плоди отдельные. А вот нужен второй номер WhatsApp (например для второй точки): заводи **второй проект**. 💚 Приятный бонус: **проект на пробном периоде получает $5 бесплатного [баланса](/learn/module-6/lesson-29-billing)**. Без промокода такой проект один, с промокодом партнёра их три. Этого хватает не только протестировать бота, но и дать ему поговорить с живыми клиентами, ничего не пополняя. ## Что ещё можно с проектом - **Дублировать**: создать клон со всеми настройками (удобно для второй точки с похожим ботом). - **Передать / удалить**: необратимые действия, только владелец ([Урок 33](/learn/module-7/lesson-33-account-lifecycle)). ## Когда НЕ нужно плодить проекты - Один бизнес, один номер, но хочешь и WhatsApp, и Telegram → это **один** проект (несколько каналов в одном проекте: норма). - Хочешь протестировать идею → используй [тест-чат](/learn/module-1/lesson-10-test-chat) в существующем проекте, а не новый проект. ## Частые ошибки - **Завели проект под каждый канал**: не надо, каналы живут в одном проекте. - **Ждут, что выбор ниши настроит бота**: нет, ниша это только категория; бота настраивает [промпт](/learn/module-1/lesson-06-system-prompt). ## Вопросы новичка - **У меня один образовательный центр, но хочу и WhatsApp, и Telegram. Сколько проектов?** Один. Несколько каналов живут внутри одного проекта: это норма. - **Открыл вторую точку с таким же ботом, настраивать заново?** Нет, нажми **«Дублировать»**, получишь копию, поменяешь адрес и график. - **Выбрал не ту нишу: страшно?** Нет, её можно поменять, и на поведение бота она всё равно не влияет. Характер задаёт [промпт](/learn/module-1/lesson-06-system-prompt). - **Проект без подключённого канала, он работает?** Да, внутри в [тест-чате](/learn/module-1/lesson-10-test-chat). Клиентам он начнёт отвечать, только когда подключишь [канал](/learn/module-2/lesson-13-whatsapp-qr). ## Проверь себя - Сколько проектов нужно на две точки WhatsApp? А на WhatsApp + Telegram в одной точке? - Меняет ли выбор ниши поведение бота? - Как быстро сделать бота для второй точки, не настраивая заново? ## Что дальше Проект есть, переходим к самому важному: [Урок 6. Системный промпт](/learn/module-1/lesson-06-system-prompt) (от него зависит почти всё). ## Подробнее (техническая документация) - [Создание проекта](/docs/guide/01-bot/10-create-project) · [Лимиты и квоты](/docs/guide/10-reference/104-limits) --- ## Системный промпт: характер бота URL: https://dosai.pro/learn/module-1/lesson-06-system-prompt # Урок 6. Системный промпт: характер бота (ГЛАВНЫЙ урок) > Промпт решает в качестве бота почти всё. Здесь учимся писать поведение бота обычным текстом. Если освоишь один этот урок, бот уже будет отвечать хорошо. ## Цель урока После урока ты умеешь **написать промпт, который проходит тест-чат**: бот отвечает по делу, в нужном тоне и ведёт к цели. Это главный навык курса: освоишь его, и всё остальное станет проще. > 🔗 В [быстром старте](/learn/module-0/lesson-02-quickstart) ты уже набросал промпт по-быстрому. Здесь, как писать его так, чтобы бот отвечал **отлично**, а не кое-как. ## Простыми словами **[Системный промпт](/docs/guide/01-bot/11-system-prompt) это инструкция, как боту себя вести**, написанная обычным человеческим текстом. Ты пишешь её, как объяснял бы новому сотруднику: «общайся вежливо, уточни вот это, предложи вот то, а вот этого не делай». Никаких переключателей «тон», «эмодзи», «подпись» в интерфейсе **нет**, раньше были, их убрали. Теперь **всё пишется словами** в одно поле. Это и есть сила: ты не ограничен галочками, а формулируешь любое поведение. 📍 Где: меню проекта → группа **«Бот»** → **«Настройки бота»** → поле **«Системный промпт»**. > ⚠️ Сюда пишется **поведение**, а НЕ факты о бизнесе. Цены, адрес, услуги идут в отдельные места ([Урок 7](/learn/module-1/lesson-07-feed-knowledge)). Почему: см. [«Как думает бот»](/learn/module-0/lesson-03-how-bot-thinks). ## Слайды урока: главный навык ## Непонятные слова: на пальцах - **Системный промпт**: главная инструкция боту, как себя вести. Как объяснение няне перед уходом: «с ребёнком говори ласково, сладкое не давай, спать в 9». Няня сама сообразит детали, важны правила. - **Поведение**, *как* бот общается: тон, вежливость, что можно/нельзя. *Пример:* «на "вы", без обещаний скидок». Это в промпт. - **Факты**, *что* бот знает: цены, адрес, часы, услуги. *Пример:* «подготовка к ЕНТ, 45 000 ₸/мес». Это НЕ в промпт, а в [знания](/learn/module-1/lesson-07-feed-knowledge). Почему раздельно, чтобы бот не путался и [ответы не дорожали](/learn/module-1/lesson-08-model-cost). - **Тон**, настроение речи бота: строго / по-дружески, с эмодзи или без. *Пример:* «Добрый день! 😊 Чем помочь?» против сухого «Слушаю вас». - **Границы («что нельзя»)**: запреты, которые бот не нарушит. *Пример:* «цены не выдумывай, бери из базы», как табличка «руками не трогать»; защищает тебя от лишних обещаний бота. ## Зачем это так важно Потому что [ИИ уже умеет общаться](/learn/module-0/lesson-03-how-bot-thinks), но он не знает **твоих правил**, пока ты их не задал. Хороший промпт превращает «безликий ИИ» в «администратора именно твоего бизнеса». Плохой ответ бота почти всегда = что-то не дописано в промпте. ## Как написать промпт: 4 опоры Хороший промпт держится на четырёх вещах: 1. **Тон**, как общаться. *«Общайся вежливо на вы, дружелюбно, можно 1-2 эмодзи».* 2. **Правила**, что можно и **чего нельзя**. *«Цены и расписание бери только из базы знаний, не выдумывай. Скидки не обещай. Не дави: одно предложение записи за раз».* 3. **Цель**, что считать успехом. *«Твоя задача: записать на бесплатный пробный урок и взять имя и телефон».* 4. **Ход диалога**, что уточнить, что предложить, когда позвать человека. *«Узнай, для кого подбирают курс (класс/возраст) и цель, ЕНТ, английский или программирование, предложи подходящую группу и время. Если родитель сомневается или просит человека, предложи связать с администратором».* ## Пример готового промпта (образовательный центр) > «Ты это Айнур, администратор образовательного центра «Профи». Общайся вежливо на «вы», дружелюбно, можно эмодзи. Твоя цель: записать на бесплатный пробный урок и взять имя и телефон. Поздоровайся, узнай, для кого подбирают курс (класс/возраст), выясни цель, ЕНТ, английский или программирование, и предложи подходящую группу и удобное время. Цены и расписание бери только из базы знаний, не выдумывай. Скидки не обещай. Если родитель просит живого человека или сомневается, предложи связать с администратором.» Каждое предложение здесь, рычаг: убери «цены бери из базы», и бот начнёт выдумывать стоимость. Добавь «можно эмодзи»: станет теплее. 💬 **Приветствие тоже живёт в промпте.** Отдельного поля «Приветственное сообщение» у проекта нет (убрано в августе 2026: один и тот же текст в двух местах разъезжался). Нужно конкретное первое сообщение, напиши его строкой: «Первым сообщением поздоровайся и представься: "Здравствуйте! Это Айнур из центра Профи"». ## Когда что писать / когда НЕ надо - Пиши в промпт: тон, правила, цель, сценарий разговора, границы («что нельзя»). - НЕ пиши в промпт: большой прайс, длинный список услуг, FAQ, это раздувает [стоимость каждого ответа](/learn/module-1/lesson-08-model-cost) и путает бота. Такое → в [базу знаний](/learn/module-3/lesson-16-knowledge-base). - НЕ пиши сценарии «если клиент сказал X, вызови функцию Y»: [функции](/learn/module-3/lesson-15-functions-overview) бот вызывает сам, ему достаточно их описания. ## Частые ошибки новичков - **Промпт-«простыня» без структуры**: бот теряется. Разбей на понятные абзацы: тон / правила / цель. - **Факты внутри промпта**: «у нас ЕНТ 45000, адрес такой-то…». Факты → в [«Информацию о компании»](/learn/module-1/lesson-07-feed-knowledge) и [базу знаний](/learn/module-3/lesson-16-knowledge-base). - **Противоречивые правила**: «будь кратким» и тут же «подробно опиши все услуги». Бот выберет случайно. - **Нет цели диалога**: бот просто болтает, но не ведёт к записи/заявке. - **Не проверил в [тест-чате](/learn/module-1/lesson-10-test-chat)**: выпустил сырой промпт клиентам. ## Продвинутое: JSON-ответ Кроме текста клиенту, бот заодно вытаскивает из переписки данные ([имя, телефон, стадию, статус лида](/learn/module-1/lesson-09-lead-data)): они сами попадают в [CRM](/learn/module-4/lesson-25-leads). Тебе для этого ничего писать не надо, но если хочешь собирать особые поля, опиши их в промпте. Детали: [Урок 9](/learn/module-1/lesson-09-lead-data). ## Вопросы новичка - **Каким длинным должен быть промпт?** Ровно настолько, чтобы описать тон, правила, цель и ход разговора, обычно это несколько абзацев. Прайс в промпт не пихаем, он в [знаниях](/learn/module-3/lesson-16-knowledge-base). - **Надо ли писать «если клиент спросит X, ответь Y»?** Почти нет. ИИ сам сообразит по тону и цели. Жёсткие сценарии нужны редко: чаще они только мешают. - **Как понять, что промпт хороший?** Прогони его в [тест-чате](/learn/module-1/lesson-10-test-chat): задай 5-10 реальных вопросов клиента. Отвечает по делу и в нужном тоне: хороший. - **Бот здоровается сухо / слишком болтает.** Это правится одной строкой в промпте: добавь «здоровайся тепло, 1-2 эмодзи» или «отвечай коротко, по делу». - **Можно на казахском/английском?** Да, опиши язык в промпте («отвечай на языке клиента»). Бот понимает и переключается. ## Проверь себя - Что идёт в промпт, а что в базу знаний? Назови по примеру. - Перечисли 4 опоры хорошего промпта. - Как понять, что промпт готов (одним действием)? ## Что дальше Характер боту ты задал. Дальше, дай ему **факты** о бизнесе: [Урок 7. Как дать боту факты о бизнесе](/learn/module-1/lesson-07-feed-knowledge). (Написанный промпт всегда можно проверить в [тест-чате](/learn/module-1/lesson-10-test-chat).) ## Подробнее (техническая документация) - [Системный промпт (глубоко)](/docs/guide/01-bot/11-system-prompt) · [Загрузить знания](/docs/guide/01-bot/16-feed-knowledge) --- ## Как дать боту факты о бизнесе URL: https://dosai.pro/learn/module-1/lesson-07-feed-knowledge # Урок 7. Как дать боту факты о бизнесе > В [прошлом уроке](/learn/module-1/lesson-06-system-prompt) ты задал боту **характер**. Но характер это ещё не знания: бот пока не знает ни твоих цен, ни адреса, ни правил. Этот урок про то, как дать ему **факты**, и главное, **куда** их класть, чтобы бот не путался и не жёг лишние деньги. ## Цель урока После урока ты **понимаешь, куда класть каждый факт о бизнесе**: короткий (адрес, часы) отдельно от большого (полный прайс, FAQ), и почему от этого зависят и точность бота, и цена каждого ответа. ## Простыми словами Бот **не знает про твой бизнес ничего**, пока ты не расскажешь ([почему, см. «Как думает бот»](/learn/module-0/lesson-03-how-bot-thinks)). Но «свалить всё в одну кучу», плохо: бот запутается, а [каждый ответ подорожает](/learn/module-1/lesson-08-model-cost). Правильно, разложить факты по **двум карманам** (плюс третий, для действий): - **«Информация о компании»**: короткая шпаргалка, которую бот держит перед глазами **в каждом** ответе. Сюда только самое главное. - **[База знаний](/learn/module-3/lesson-16-knowledge-base)**: большой архив (полный прайс, FAQ, документы). Бот сам достаёт оттуда нужный кусок под вопрос. - **[Функции](/learn/module-3/lesson-15-functions-overview)**: не знания, а действия (записать, выставить счёт, отправить документ). Про них: отдельный модуль. Одно простое правило решает почти всё: **короткое и всегда нужное → «Инфо о компании»; большое и по случаю → «База знаний».** ## Слайды урока ## Непонятные слова: на пальцах - **Знания (факты)**, всё, что бот должен *знать* про твой бизнес: цены, услуги, адрес, правила. Как содержимое учебника, из которого он отвечает. - **Поле «Информация о компании»**: короткая «шпаргалка», которую бот держит перед глазами в *каждом* ответе. Как стикер на мониторе: всегда на виду, поэтому туда, только самое главное (адрес, часы, топ-цены). - **[База знаний (RAG)](/learn/module-3/lesson-16-knowledge-base)**: большой «архив» документов (полный прайс, FAQ, PDF). Бот достаёт оттуда только нужную страницу под конкретный вопрос. Как библиотека: не читает все книги разом, берёт одну по теме. *(RAG = «поиск нужного куска и подстановка в ответ», не пугайся аббревиатуры.)* - **«Вшивается в каждый ответ»**: текст, который прикладывается к любому сообщению бота. Чем он длиннее, тем [дороже каждый ответ](/learn/module-1/lesson-08-model-cost), поэтому большое туда не кладут. - **Источник истины**: единственное место, где хранится факт. *Пример:* цену курса держи в одном месте; иначе поменяешь в одном, забудешь в другом: бот назовёт старую. - **Скор (совпадение)**, цифра в процентах в «Тесте поиска»: насколько найденный фрагмент подходит под вопрос. Чем выше, тем увереннее бот возьмёт его в ответ. Как «горячо-холодно»: 53%, теплее, чем 20%. ## Три «кармана», что куда | Карман | Для чего | Пример | Урок | |---|---|---|---| | **Поле «Информация о компании»** | Коротко и то, что нужно **всегда** | Адрес, часы, ключевые услуги и цены | этот урок | | **[База знаний (RAG)](/learn/module-3/lesson-16-knowledge-base)** | Объёмное и меняющееся | Прайс на 100 позиций, FAQ, условия, документы | [Урок 16](/learn/module-3/lesson-16-knowledge-base) | | **[Функции](/learn/module-3/lesson-15-functions-overview)** | Не знания, а **действия** | Записать, выставить счёт, отправить документ | [Урок 15](/learn/module-3/lesson-15-functions-overview) | А [поведение](/learn/module-1/lesson-06-system-prompt) (тон, правила) это вообще четвёртое, оно в [промпте](/learn/module-1/lesson-06-system-prompt), не в знаниях. ## Зачем это разделение - **Экономия.** Поле «Информация о компании» вшивается в **каждый** ответ целиком. Если засунуть туда весь прайс, каждое сообщение станет дороже. [База знаний](/learn/module-3/lesson-16-knowledge-base) умнее: подмешивает только тот кусок, который относится к вопросу. - **Точность.** Когда факты разложены правильно, бот берёт нужное и не путает, не врёт клиенту. ## Как сделать (по шагам) 1. **Короткие всегда-нужные факты** → поле **«Информация о компании»** (меню проекта → группа «Бот» → «Настройки бота»). Лимит, **40 000 символов**. Сюда, чем занимаешься, ключевые услуги, цены, адрес, часы. 2. **Большие/меняющиеся документы** → раздел **[«База знаний»](/learn/module-3/lesson-16-knowledge-base)**. Сюда: полный прайс, регламенты, FAQ, PDF-документы (файл до 4 МБ, из него берётся до 500 000 символов текста). Бот сам найдёт нужный кусок: под каждый вопрос подставляет до 5 самых подходящих фрагментов. 3. **Проверь, что бот находит нужное**, кнопка **«Тест поиска»** в базе знаний: вводишь вопрос клиента и видишь, какие фрагменты бот подставит, и «скор»: насколько каждый подходит (как на скриншоте выше). 4. **Проверь целиком в [тест-чате](/learn/module-1/lesson-10-test-chat)**: спроси у бота про цену/адрес, отвечает по фактам, а не выдумывает? ## Пример Образовательный центр. Адрес, часы работы и «топ-5 курсов с ценами» → в **«Информацию о компании»** (нужны в каждом разговоре). Полный прайс по всем курсам + правила переноса занятий + ответы на частые вопросы родителей → в **[базу знаний](/learn/module-3/lesson-16-knowledge-base)** (бот достанет по запросу). Так каждый ответ остаётся дешёвым, а бот всё равно знает всё. ## Когда что / когда не надо - Короткий факт (адрес, часы) → «Информация о компании». - Большой документ (полный прайс, FAQ) → [база знаний](/learn/module-3/lesson-16-knowledge-base). - Не пиши факты в [промпт](/learn/module-1/lesson-06-system-prompt) это он про поведение, а не про данные. - Не дублируй одно и то же в двух местах: бот может выдать устаревшую копию. ## Частые ошибки - **Весь прайс в «Информацию о компании»** → дорого и бот тонет в тексте. Большое → в [базу знаний](/learn/module-3/lesson-16-knowledge-base). - **Факты в промпте** → перепутаны поведение и данные. - **Забыли обновить цену** в одном из мест → бот врёт клиенту. Держи один источник на факт. ## Вопросы новичка - **Куда положить прайс: в «Информацию о компании» или в базу знаний?** Короткий (топ-5 услуг) в «Информацию о компании». Большой (десятки позиций) в [базу знаний](/learn/module-3/lesson-16-knowledge-base). Так дешевле и точнее. - **Бот назвал старую цену: почему?** Скорее всего факт лежит в двух местах и один устарел. Держи один [источник истины](/learn/module-3/lesson-16-knowledge-base) на каждый факт. - **Нужно ли повторять факты в промпте?** Нет. Промпт про поведение. Факты в знаниях. Дублировать вредно. - **Что если данные меняются каждый день (остатки, свободные места)?** Такое не хранят в тексте: его подтягивает [функция](/learn/module-3/lesson-15-functions-overview) из твоей системы в момент вопроса. ## Проверь себя - Куда положишь адрес и часы работы? А полный прайс на 80 позиций? - Почему нельзя засунуть весь прайс в «Информацию о компании», что при этом дорожает? - Что значит «один источник истины» и чем грозит его нарушение? ## Что дальше Факты бот знает, теперь выберем ему «мозг» и посчитаем цену ответа: [Урок 8. Выбор AI-модели и стоимость сообщения](/learn/module-1/lesson-08-model-cost). А детально про базу знаний: [Урок 16](/learn/module-3/lesson-16-knowledge-base). ## Подробнее (техническая документация) - [Загрузить знания в бота](/docs/guide/01-bot/16-feed-knowledge) · [База знаний (RAG)](/docs/guide/03-tools/31-knowledge-base) --- ## Выбор AI-модели и стоимость сообщения URL: https://dosai.pro/learn/module-1/lesson-08-model-cost # Урок 8. Выбор AI-модели и стоимость сообщения > Факты боту ты уже [дал](/learn/module-1/lesson-07-feed-knowledge). Теперь его «мозг»: модель. Их несколько, и выбор влияет на кошелёк. **Большинству менять ничего не нужно**, дефолт уже оптимальный. Разберём, почему, и из чего складывается цена ответа. ## Цель урока После урока ты **знаешь, какую модель оставить (обычно, дефолтную) и из чего складывается цена ответа**, чтобы не переплачивать за флагман «на всякий случай» и не удивляться, куда уходит баланс. ## Простыми словами **Не уверен, какую модель выбрать? Оставь дефолтную `gpt-5.4-mini` и переходи дальше**: она подходит большинству бизнесов. Всё остальное в этом уроке нужно, чтобы ты *понимал* цену, а не чтобы обязательно что-то менял. **Модель** это «мозг», который придумывает ответы. В DOS AI доступно **11 моделей** от OpenAI, от простых и дешёвых до «умных, но прожорливых». По умолчанию стоит **`gpt-5.4-mini`**, быстрая и универсальная, подходит большинству бизнесов. Каждый ответ бота тратит [баланс токенов](/learn/module-6/lesson-29-billing): это «топливо». Чем «умнее» модель и чем длиннее разговор, тем больше топлива уходит. ## Слайды урока ## Непонятные слова: на пальцах - **Модель**: «мозг» бота, готовый движок, который придумывает ответы. Как двигатель у машины: бывает экономичный, бывает мощный и прожорливый. `gpt-5.4-mini`: экономичный и шустрый, подходит почти всем. - **Токен**: маленький кусочек текста (примерно слог или короткое слово), которым меряют расход. Как литры бензина, чем длиннее поездка (разговор), тем больше «литров» сгорело. Ответ бота = столько-то токенов = столько-то денег. - **«Вход» и «выход»**: две цены модели, которые видно в таблице на скриншоте. **«Вход»**: за то, что бот *читает* (твой промпт + вся история переписки + сообщение клиента). **«Выход»**: за то, что бот *пишет* в ответ. Из них и складывается цена одного сообщения: её же показывает калькулятор. - **Флагман**: самая мощная и самая дорогая модель. Как спорткар: быстрее не поедешь по городу, а бензина ест втрое. Нужен редко. - **Калькулятор токенов**: прикидка в кабинете, сколько будет стоить один диалог при твоём промпте и модели. Как счётчик такси заранее: видишь примерную цену поездки. - **Буферизация**: склейка нескольких быстрых сообщений клиента в один ответ. Клиент пишет тремя строчками подряд: бот ждёт пару секунд и отвечает один раз, а не трижды. Экономит топливо. Подробно, [Урок 11](/learn/module-1/lesson-11-advanced-settings). ## Зачем в это вникать Потому что можно по привычке включить самую дорогую модель и удивляться, куда уходит [баланс](/learn/module-6/lesson-29-billing). А для обычных задач (ответить на вопрос, записать, выставить счёт) отлично хватает недорогой модели. Правильный выбор экономит деньги без потери качества. ## Какую модель выбрать | Категория | Примеры | Когда брать | |---|---|---| | **Универсальная (дефолт)** | `gpt-5.4-mini` | Старт для почти любого бизнеса: быстрая, умная, недорогая | | **Самая дешёвая** | `gpt-4.1-nano` | Простые сценарии: ответы на типовые вопросы, запись | | **Флагманы (дорогие)** | `gpt-5.5` и т.п. | Только если реально нужна сложная логика/рассуждения, едят баланс быстро | 📍 Где менять: меню проекта → группа **«Бот» → «Настройки бота»** → раскрой блок **«Расширенные настройки»** → выбор модели. Там же **калькулятор**: «ваш промпт X токенов, модель Y, ~Z ₸ за диалог». ## Из чего складывается цена сообщения - **Длина диалога.** Чем длиннее история переписки, тем дороже **каждый** следующий ответ (бот перечитывает контекст). - **Модель.** Флагман дороже мини в несколько раз. - **Доп-действия.** [Поиск по базе знаний](/learn/module-3/lesson-16-knowledge-base), распознавание [голоса/фото/PDF](/learn/module-1/lesson-11-advanced-settings): добавляют к стоимости. ## Пример Образовательный центр поставил флагман `gpt-5.5` «чтобы поумнее». Бот отвечает так же, как на `gpt-5.4-mini`, но [баланс](/learn/module-6/lesson-29-billing) тает втрое быстрее. Переключили на `gpt-5.4-mini`: качество то же, расход упал. Вывод: флагман нужен редко. ## Как экономить / чего не делать - Начинай с `gpt-5.4-mini` или `nano`. - Короткая [«Информация о компании»](/learn/module-1/lesson-07-feed-knowledge) + объёмное в [базу знаний](/learn/module-3/lesson-16-knowledge-base). - Включи [буферизацию](/learn/module-1/lesson-11-advanced-settings): несколько сообщений клиента склеиваются в один ответ. - Не держи флагман без реальной необходимости. ## Частые ошибки - **«Возьму самую дорогую, будет лучше»**: чаще всего разницы для клиента нет, а расход выше. - **Огромный промпт/прайс в поведении**: каждый ответ дорожает. Раскладывай факты правильно ([Урок 7](/learn/module-1/lesson-07-feed-knowledge)). ## Вопросы новичка - **Какую модель поставить, если не разбираюсь?** Оставь дефолт `gpt-5.4-mini`. Он универсальный и недорогой: менять есть смысл, только если увидишь конкретную причину. - **Дорогая модель = умнее ответы клиенту?** Обычно клиент разницы не замечает, а [баланс](/learn/module-6/lesson-29-billing) тает быстрее. Флагман нужен для сложной логики, не «на всякий случай». - **Почему длинные диалоги дороже?** Бот перечитывает всю переписку перед каждым ответом, чем она длиннее, тем больше токенов. Можно ограничить глубину в [продвинутых настройках](/learn/module-1/lesson-11-advanced-settings). - **Как узнать, во сколько мне обходится один разговор?** Открой [тест-чат](/learn/module-1/lesson-10-test-chat), он показывает стоимость ответа в реальных деньгах, или глянь калькулятор в настройках модели. ## Проверь себя - Какую модель оставить, если не хочешь вникать? Почему её хватает большинству? - Назови три вещи, от которых растёт цена одного ответа. - Где увидеть реальную стоимость ответа в деньгах? ## Что дальше Мозг выбран. Дальше, что бот **сам** собирает о клиенте и заносит в карточку: [Урок 9. Что бот узнаёт о клиенте](/learn/module-1/lesson-09-lead-data). ## Подробнее (техническая документация) - [Выбор AI-модели](/docs/guide/01-bot/13-model) · [Сколько стоит сообщение](/docs/guide/06-money/61-message-cost) · [Биллинг](/docs/guide/06-money/60-billing) --- ## Что бот узнаёт о клиенте и заносит в карточку URL: https://dosai.pro/learn/module-1/lesson-09-lead-data # Урок 9. Что бот узнаёт о клиенте и заносит в карточку > Ты настроил бота: [характер](/learn/module-1/lesson-06-system-prompt), [факты](/learn/module-1/lesson-07-feed-knowledge), [модель](/learn/module-1/lesson-08-model-cost). Теперь приятная награда. Бот не только красиво отвечает: на каждом сообщении он **сам заполняет карточку клиента**: имя, телефон, о чём человек, насколько горячий. Тебе не нужно вбивать никого в таблицу руками. ## Цель урока После урока ты **понимаешь, что бот собирает о клиенте автоматически** (и это наполняет твою CRM без твоего участия), и **умеешь попросить его собрать любое дополнительное поле**: просто словами в промпте. ## Простыми словами Когда бот отвечает клиенту, клиент видит **только текст**. Но заодно бот незаметно вытаскивает из переписки **данные о человеке** и кладёт их в его карточку: имя, телефон, email, [на каком шаге разговора](/docs/guide/04-crm/42-stages) он, [насколько «горячий»](/learn/module-4/lesson-25-leads), сумму сделки, короткое резюме «о чём клиент», и любые поля, которые ты попросил собрать. Тебе для этого **ничего делать не надо**: стандартное бот ловит сам. *(Технически он отдаёт это отдельным служебным блоком в формате «JSON», но тебе его видеть не нужно, это «под капотом».)* ## Слайды урока ## Непонятные слова: на пальцах - **Карточка лида**, «личное дело» клиента, которое бот заполняет сам: имя, контакты, суть запроса, статус. Как если бы секретарь, поговорив с гостем, сам занёс про него всё в анкету. - **[Стадия диалога](/docs/guide/04-crm/42-stages)** на каком шаге разговора клиент: только поздоровался / уточняет / договорились. Как деления на градуснике «прогресса» беседы. - **[Статус лида](/learn/module-4/lesson-25-leads)**: насколько клиент «горячий», близок к покупке. *Пример:* «просто спросил цену» = тёплый; «готов оплатить» = горячий. Как светофор: зелёный: почти твой. - **Сумма сделки**: сколько потенциально принесёт этот клиент. Если в переписке прозвучала цена или бюджет («около 45 000»), бот сам заносит её, потом это считается в [выручке и аналитике](/learn/module-4/lesson-26-analytics-reports). - **Резюме от AI**: одна короткая строка «о чём клиент», которую бот пишет сам (*«Сын, 11 класс, ЕНТ по математике, записан на пробный»*). Открыл карточку: за секунду понял суть, не перечитывая всю переписку. - **Кастомное поле**: доп-графа, которую ты сам попросил собрать (класс ученика, нужный предмет, бюджет). *Пример:* попросил в промпте «уточни класс ребёнка», и класс появляется в карточке. - **JSON**: тех-формат, в котором бот аккуратно раскладывает эти данные по полочкам, понятный компьютеру. Тебе его видеть не нужно это «под капотом». ## Зачем это нужно Потому что именно из этих полей строится вся [CRM](/learn/module-4/lesson-25-leads): [карточка лида](/learn/module-4/lesson-25-leads), [воронка по стадиям](/docs/guide/04-crm/42-stages), [аналитика](/learn/module-4/lesson-26-analytics-reports) и [авто-отчёты](/learn/module-4/lesson-26-analytics-reports). Без этого механизма тебе пришлось бы вручную вбивать каждого клиента в таблицу, а так бот делает это за тебя, на каждом сообщении. Открой раздел **[«Лиды»](/learn/module-4/lesson-25-leads)**, там уже лежат все карточки, которые бот собрал сам: имя, телефон, статус, сумма (см. скриншот-список выше). Это и есть твоя воронка, и она наполняется без единого твоего клика. ## Что бот заносит в карточку - **Имя, телефон, email**, если клиент их назвал. - **[Стадия диалога](/docs/guide/04-crm/42-stages)**: на каком шаге воронки клиент (приветствие → … → завершено). - **[Статус лида](/learn/module-4/lesson-25-leads)**: потенциальный / квалифицированный / горячий и т.д. - **Сумма сделки**, если в переписке прозвучала цена/бюджет (идёт в [выручку и аналитику](/learn/module-4/lesson-26-analytics-reports)). - **Резюме от AI**: короткая строка «о чём клиент», написанная ботом. - **Кастомные поля**: любые поля анкеты, которые ты попросил собрать (класс ученика, нужный предмет, бюджет и т.п.). ## Пример Образовательный центр хочет знать **класс ученика и нужный предмет**. В [промпте](/learn/module-1/lesson-06-system-prompt) добавляешь: *«Обязательно уточни класс ребёнка и по какому предмету нужна подготовка»*. Бот в разговоре спрашивает, клиент отвечает «11 класс, математика», и это само попадает в карточку лида и в [отчёт](/learn/module-4/lesson-26-analytics-reports) («какие предметы спрашивают чаще»). ## Когда это трогать / когда не надо - Хочешь собирать особые поля (класс, бюджет, город): просто **попроси об этом в [промпте](/learn/module-1/lesson-06-system-prompt)**. - Стандартные имя/телефон/стадию/статус/резюме бот собирает **сам**: отдельно настраивать не нужно. - Это не то, что видит клиент: служебные поля скрыты, клиент видит только текст. ## Частые ошибки - **Ждут, что бот соберёт поле, о котором его не просили**, если нужно поле «класс», напиши в промпте «уточни класс ребёнка». - **Путают статус лида и стадию диалога**: статус это «насколько горячий», стадия это «на каком шаге разговора». Обе живут в [CRM](/learn/module-4/lesson-25-leads). ## Вопросы новичка - **Мне нужно что-то настраивать, чтобы бот заполнял карточку?** Нет. Имя, телефон, стадию, статус, сумму, резюме бот собирает сам. Нужно особое поле: просто попроси о нём словами в [промпте](/learn/module-1/lesson-06-system-prompt). - **Клиент увидит эти поля?** Нет, они скрытые (служебные). Клиент видит только текст ответа. - **Бот не собрал телефон: почему?** Клиент его не назвал. Бот не выпытывает силой; хочешь, добавь в промпт «вежливо попроси телефон для записи». - **Чем стадия отличается от статуса?** Стадия, *на каком шаге разговора* (начало → договорились). Статус, *насколько горячий* клиент. Разные вещи, обе видны в [карточке лида](/learn/module-4/lesson-25-leads). ## Проверь себя - Назови, что бот заносит в карточку сам, без твоего участия. - Чем «сумма сделки» и «резюме от AI» полезны тебе как владельцу? - Как заставить бота собирать особое поле (например, класс ученика)? ## Что дальше Бот настроен и уже умеет собирать клиентов в карточки, пора **проверить его вживую, ничем не рискуя**: [Урок 10. Тестовый чат](/learn/module-1/lesson-10-test-chat). ## Подробнее (техническая документация) - [Что бот отдаёт в ответе](/docs/guide/01-bot/12-json-response) · [Системный промпт](/docs/guide/01-bot/11-system-prompt) · [Стадии и статусы](/docs/guide/10-reference/103-statuses) --- ## Тест-чат: стенд для проверки бота URL: https://dosai.pro/learn/module-1/lesson-10-test-chat # Урок 10. Тест-чат: стенд для проверки бота > Бот настроен ([промпт](/learn/module-1/lesson-06-system-prompt), [факты](/learn/module-1/lesson-07-feed-knowledge), [модель](/learn/module-1/lesson-08-model-cost)). Прежде чем пускать его к живым клиентам, прогони его на стенде. Тест-чат это не «окошко напечатать вопрос», а полноценная **испытательная площадка** с инструментами, где бот думает точно как в бою, но без рисков. ## Цель урока После урока ты умеешь **тестировать бота системно**: собрать набор проверочных сценариев, прогонять их после каждой правки, ловить, где бот спотыкается, и точно знать, **где чинить** (промпт / знания / функция). ## Простыми словами **[Тест-чат](/docs/guide/01-bot/14-test-chat)**: окно, где ты сам пишешь боту, притворившись клиентом. Бот думает **точно так же**, как в реальном [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) или [Telegram](/learn/module-2/lesson-12-channels-telegram) ([мозг один и тот же везде](/learn/module-0/lesson-03-how-bot-thinks)), но здесь нет живых клиентов, это **не портит статистику** и стоит копейки. Но главное это **стенд**: можно сохранять проверочные сценарии и переигрывать их, подсунуть боту готовую историю и тестить с середины разговора, на лету менять модель. Ниже, как этим пользоваться. 📍 Где: меню проекта → группа «Бот» → **«Тестовый чат»**. ## Слайды урока ## Непонятные слова: на пальцах - **Тест-чат (стенд, песочница)**: окно, где ты сам пишешь боту, как будто ты клиент, и смотришь, что он ответит. Как порепетировать разговор перед важным звонком: те же слова, но «понарошку». - **Сценарий**, типичный запрос клиента, который ты проверяешь: «сколько стоит?», «запишите», «дорого!», «верните деньги». Прогоняешь набор таких, и видишь, где бот спотыкается. - **Сохранённый сценарий**: тест-кейс, который ты записал и можешь **переиграть** одной кнопкой после любой правки. Как чек-лист: поправил промпт, прогнал все сохранённые сценарии, убедился, что ничего не сломалось. - **Загрузить контекст (инъекция)**: подсунуть боту готовую историю переписки, чтобы проверить, как он ведёт себя **с середины** разговора (например, клиент уже назвал имя и спорит о цене), не набирая всё это руками. - **Песочница**, тест-чат живёт сам по себе: переписка **не** сохраняется в «Диалоги» и **не** попадает в [статистику](/learn/module-4/lesson-26-analytics-reports). Кнопка «Очистить» стирает её. - **«Выпустить в бой»**: включить бота для настоящих клиентов в [канале](/learn/module-2/lesson-13-whatsapp-qr) после того, как на стенде всё нравится. Как выпустить спектакль после репетиций. ## Зачем это нужно Чтобы **клиент не был первым, кто нашёл ошибку** бота. Любое изменение [промпта](/learn/module-1/lesson-06-system-prompt), [знаний](/learn/module-1/lesson-07-feed-knowledge) или [функций](/learn/module-3/lesson-15-functions-overview) сначала гоняешь тут, потом выпускаешь в бой. Это правило №1 у всех, кто делает хороших ботов. ## Как тестировать системно (по шагам) 1. **Собери набор сценариев**, 5-10 реальных запросов клиента: цена, запись, «дорого/развод», нетипичный вопрос, грубый клиент, возврат денег. 2. **Прогони каждый** и смотри: отвечает по фактам? ведёт к цели (записи/оплате)? держит тон? 3. **Нашёл косяк → почини** (см. «Цикл правок» ниже) → **прогони сценарии заново**. Правки действуют сразу. 4. **Сохрани удачные сценарии**, чтобы после следующей правки промпта переиграть их и убедиться, что ничего не сломалось (это и есть «поймать регрессию»). ## Инструменты стенда - **💾 Сохранённые сценарии**: сохрани проверочный диалог под именем («лид с возражением, цена») и переигрывай после каждой правки. Твой чек-лист качества бота. - **⏩ Загрузить контекст**, вставь готовую историю переписки и тестируй бота **с середины** разговора (удобно для сложных кейсов: клиент уже назвал бюджет, уже спорит). - **🔀 Смена модели**, переключи [модель](/learn/module-1/lesson-08-model-cost) прямо в чате и сравни: ответ лучше? а цена? (обычно [дефолт mini](/learn/module-1/lesson-08-model-cost) не хуже: убедишься сам). - **🧹 Очистить**: стереть сессию и начать проверку заново. ## Цикл правок (как чинить) - Ответил **не по фактам** → добавь факт в [базу знаний](/learn/module-3/lesson-16-knowledge-base) или «Информацию о компании». - **Ведёт себя не так** (тон, не туда ведёт) → поправь [промпт](/learn/module-1/lesson-06-system-prompt). - **Не вызвал функцию** (не записал, не посчитал) → проверь описание [функции](/learn/module-3/lesson-15-functions-overview). Крути, пока не понравится. Понравилось → выпускай в [канал](/learn/module-2/lesson-13-whatsapp-qr). ## Частые ошибки - **Выпустили изменения сразу в WhatsApp, без стенда**, и клиент словил баг. - **Проверили один вопрос и успокоились**: прогоняй разные сценарии, включая «трудных» клиентов и возражения. - **Не сохранили сценарии**, и после следующей правки нет чем быстро перепроверить, что всё ещё работает. ## Вопросы новичка - **Тест-чат это то же, что демо на сайте?** Нет. Демо на лендинге: публичное, для незалогиненных гостей, на общем примере. Тест-чат, **внутри твоего проекта**, на **твоих** промпте, знаниях и функциях. Тестировать своего бота нужно именно в тест-чате. - **Тест-чат тратит мои деньги?** Микро-суммы за ответ, как в бою (он показывает точную стоимость), но клиентов нет и статистику это не портит. Для проверки: копейки. - **Бот в тест-чате отвечает не так, как в WhatsApp?** Не должен: [мозг один и тот же](/learn/module-0/lesson-03-how-bot-thinks). Если поведение разное, скорее всего в бою кончился [баланс/подписка](/learn/module-6/lesson-29-billing) или пишет [оператор](/learn/module-4/lesson-24-dialogs). - **Сколько сценариев прогонять?** Минимум 5-10 разных: цена, запись, адрес, «верните деньги», грубый клиент. Чем ближе к реальным вопросам, тем надёжнее. Удачные: сохрани. - **Проверил, всё ок. Клиенты сразу увидят изменения?** Да, правки промпта/знаний действуют сразу для всех каналов, отдельно «публиковать» не нужно. ## Проверь себя - Назови 5 сценариев, которые прогонишь перед запуском своего бота. - Бот ответил не по фактам, где чинить? А если «повёл» клиента не туда? - Зачем сохранять сценарии, если можно просто печатать заново? ## Что дальше Бот проверен на стенде → можно докрутить тонкие настройки (расписание, оператор, буфер): [Урок 11. Продвинутые настройки](/learn/module-1/lesson-11-advanced-settings). ## Подробнее (техническая документация) - [Тестовый чат](/docs/guide/01-bot/14-test-chat) · [Бот не отвечает, диагностика](/docs/guide/09-troubleshooting/90-bot-silent) --- ## Продвинутые настройки бота URL: https://dosai.pro/learn/module-1/lesson-11-advanced-settings # Урок 11. Продвинутые настройки бота > Базовый бот уже работает и проверен на [стенде](/learn/module-1/lesson-10-test-chat). Эти настройки делают его аккуратнее, дешевле и безопаснее перед выходом к живым клиентам. Всё **опционально**, но пару из них стоит включить почти всем. ## Цель урока После урока ты знаешь **все 8 разделов расширенных настроек** и понимаешь, **какие включить перед запуском** (контроль оператора, расписание, а если крутишь рекламу, гейтинг по рекламе), а какие трогать только по надобности. ## Простыми словами Кроме [промпта](/learn/module-1/lesson-06-system-prompt) и [знаний](/learn/module-1/lesson-07-feed-knowledge), у бота есть **8 тонких рычагов**. Они спрятаны в свёрнутом блоке **«Расширенные настройки»** (меню проекта → «Бот» → «Настройки бота»), чтобы не пугать новичка. Базовый бот работает и **без** них, но некоторые реально стоит включить, чтобы бот не мешал менеджеру и не отвечал ночью не то. Не будем валить их в кучу, разложим **по смыслу, что включить перед запуском, что для экономии, что для распознавания, что для защиты.** ## Слайды урока ## Непонятные слова: на пальцах - **Расписание работы**: часовой пояс + рабочие часы. Вне часов бот **не отвечает**, а сообщения клиентов **копятся** и ждут до начала рабочего дня. Как табличка «работаем с 9 до 21»: ночью не беспокоим, утром ответим. - **Буферизация (склейка)**: бот ждёт пару секунд и отвечает на несколько быстрых сообщений сразу, а не на каждое. Как официант дослушивает весь заказ, а не бежит на кухню после каждого слова. - **Разбивка ответов**: длинный ответ бот режет на части, как живая переписка, а не «простыня». Плюс ограничивает максимальную длину. - **Распознавание медиа**: умение бота «прочитать» голосовое, фото или PDF. Без него бот игнорирует медиа и просит написать текстом. Каждое распознавание стоит [токенов](/learn/module-1/lesson-08-model-cost). - **Видимость данных клиента**, что бот знает о человеке. Включено, обращается по имени, видит номер. Выключено, бот **не знает, кто пишет** (отвечает «анонимно»). - **Контроль оператора**: правила, чтобы бот не перебивал живого менеджера. «Пауза при вмешательстве», начал писать сам, бот замолкает. «Автовозобновление» через N бот снова включается (без него: висит на паузе навсегда). - **Гейтинг по рекламе (CTWA)**: бот отвечает **только** тем, кто пришёл с рекламы «Написать в WhatsApp», а обычные чаты не трогает. Нужен, когда на одном номере и бот, и живые операторы. - **Спам-защита** от тех, кто заваливает бота сотнями сообщений: ограничивает их количество за период. ## Группа 1. Включи перед запуском (безопасность и качество) - **Контроль оператора**: самое важное, если иногда отвечаешь клиентам сам. Включи **«Пауза при вмешательстве оператора»** (бот замолкает, когда пишешь ты) и **«Автовозобновление»** (иначе бот остаётся на паузе навсегда). Ещё есть игнор первого сообщения оператора и реакция на пропущенные звонки. - **Расписание работы**: часовой пояс + рабочие часы. Вне часов бот не отвечает, сообщения ждут утра. Полезно, если ночью отвечать не нужно. - **🎯 Гейтинг по рекламе**, если крутишь рекламу «Написать в WhatsApp» на номере, где есть и живые операторы: **«Отвечать только на лидов с рекламы»**. Бот включается ТОЛЬКО в диалогах с рекламы (CTWA), а личные чаты и контакты операторов показывает, не отвечая. Можно оставить «любая реклама» или указать **конкретные объявления** (числовой ID из Ads Manager надёжнее ссылок: приходит со 100% лидов). - **Видимость данных клиента**: знает ли бот имя/номер/мессенджер. Включишь, обращается по имени; выключишь, отвечает анонимно. ## Группа 2. Экономия и человечность - **Буферизация**, клиенты часто пишут очередью: «привет» / «а сколько стоит» / «подготовка к ЕНТ». Без неё бот ответит трижды. С ней короткое окно (ползунок 0-30 сек) **склеивает** их в один вопрос и **один** ответ, [дешевле по токенам](/learn/module-1/lesson-08-model-cost) и естественнее. - **Длина и разбивка ответов**: ограничивает длину ответа и режет длинные на части (порог, макс. длина, число частей, пауза между ними): выглядит как живая переписка. ## Группа 3. Распознавание медиа Тумблеры: **аудио** (голосовые → текст), **фото**, **PDF**, **документы**. Без них бот игнорирует медиа и просит написать текстом. Включай только то, что реально шлют твои клиенты, ⚠️ каждое распознавание тратит [токены](/learn/module-1/lesson-08-model-cost). ## Группа 4. Защита и лимиты - **Спам-защита** от клиентов, которые шлют сотни сообщений: лимит за период, авто-блок болтунов. - **Лимиты**: максимум сообщений в одном диалоге (по умолчанию **200**, чтобы «болтун» не жёг баланс бесконечно) и авто-закрытие неактивных чатов. ## Когда трогать / когда не надо - Иногда отвечаешь сам → **контроль оператора**. Есть часы работы → **расписание**. Крутишь рекламу на живом номере → **гейтинг**. Пишут очередями → **буферизация**. - Только запустился и всё работает, клиенты шлют текст → медиа/спам/видимость можно не трогать, разберёшься позже. ## Частые ошибки - **Включили паузу оператора, но не автовозобновление** → бот замолчал у клиента и не включился обратно. Ставь оба. - **Включили распознавание всего подряд** → лишний расход. Включай только то, что клиенты реально шлют. - **Крутят рекламу на «живом» номере без гейтинга** → бот отвечает всем подряд, включая личные чаты и контакты операторов. ## Вопросы новичка - **Нужно ли это всё настраивать сразу?** Нет. Базовый бот работает без единой из этих настроек. Но контроль оператора и (если крутишь рекламу) гейтинг стоит включить до запуска. - **Бот перебивает меня, когда я отвечаю клиенту сам.** Включи «Пауза при вмешательстве оператора» + «Автовозобновление». - **Бот не отвечает ночью это нормально?** Если включено расписание, да, вне часов он молчит, сообщения ждут утра. - **У меня на номере и бот, и менеджеры. Как сделать, чтобы бот не лез в личные чаты?** Включи гейтинг по рекламе: бот возьмёт только диалоги с рекламы, остального не тронет. - **Что такое лимит на диалог 200?** Максимум сообщений в одной переписке, чтобы «болтун» не жёг баланс бесконечно. Обычным клиентам его хватает с запасом. ## Проверь себя - Назови 8 разделов расширенных настроек. Какие два стоит включить почти всем? - Почему «Пауза оператора» без «Автовозобновления» это ловушка? - Когда нужен гейтинг по рекламе и что он делает с личными чатами? ## Что дальше Бот настроен, проверен и докручен. Пора подключить его к реальному каналу, чтобы писали живые клиенты: **Модуль 2**, [Урок 12, каналы и Telegram](/learn/module-2/lesson-12-channels-telegram). ## Подробнее (техническая документация) - [Продвинутые настройки](/docs/guide/01-bot/15-advanced-settings) · [Справочник всех настроек](/docs/guide/10-reference/101-settings-reference) --- ## Обзор каналов + подключение Telegram URL: https://dosai.pro/learn/module-2/lesson-12-channels-telegram # Урок 12. Обзор каналов + подключение Telegram > Бот настроен и проверен на стенде ([Модуль 1](/learn/module-1/lesson-10-test-chat)), теперь подключим его к реальному каналу, чтобы писали живые клиенты. Канал это мессенджер, через который бот общается. Начинаем с Telegram: он бесплатный, безопасный и подключается за 5 минут. ## Цель урока После урока ты **понимаешь, что такое каналы** (один «мозг»: несколько мессенджеров сразу) и **умеешь подключить Telegram за 4 шага** через @BotFather, а также знаешь, чем Telegram отличается от WhatsApp и когда что выбрать. ## Простыми словами У бота **один «мозг»** (общий [промпт](/learn/module-1/lesson-06-system-prompt), [знания](/learn/module-3/lesson-16-knowledge-base), [функции](/learn/module-3/lesson-15-functions-overview)), но говорить он может **сразу в нескольких каналах**, [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) и Telegram одновременно. Настроил один раз, работает везде. 📍 Где: меню проекта → **«Каналы»**. Там же увидишь карточку **Instagram** с пометкой «скоро»: этот канал на подходе, пока недоступен. ## Слайды урока ## Непонятные слова: на пальцах - **Канал**: мессенджер, через который клиенты пишут боту (WhatsApp, Telegram). Как двери в магазин: разные двери, но продавец (бот) один и тот же. - **Telegram-бот**: «аккаунт» твоего бота в Telegram, которому пишут клиенты. Как отдельный номер, только внутри Telegram. - **@BotFather**: официальный бот Telegram, который создаёт других ботов. Как паспортный стол: приходишь, он выдаёт твоему боту «документы» (токен). - **Токен**: длинный «ключ-пароль» от твоего Telegram-бота. *Пример:* как ключ от квартиры, вставил в кабинет, и бот «ожил». Потеряешь, сделаешь новый у BotFather. - **@username**, короткое имя бота, по которому его находят: `@profi_astana_bot`. Как ник в соцсети. - **[Подписка](/learn/module-6/lesson-29-billing)**: платёж за канал. Важно: Telegram работает **без** неё (нужен только [баланс](/learn/module-6/lesson-29-billing)), а WhatsApp требует подписку. ## Почему начать с Telegram - **Бесплатно и безопасно**: Telegram официально разрешает ботов, тут **нет риска бана** (в отличие от [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr)). - **Работает без [подписки](/learn/module-6/lesson-29-billing)**: нужен только [баланс токенов](/learn/module-6/lesson-29-billing). WhatsApp требует подписку, Telegram, нет. - Идеально, чтобы **потренироваться** и увидеть бота в бою без рисков. ## Как подключить Telegram (по шагам) 1. В Telegram открой **@BotFather** (официальный бот для создания ботов). 2. Отправь команду **`/newbot`** → задай имя и @username бота. 3. BotFather выдаст **токен** (длинная строка) это «ключ» от твоего бота. 4. Скопируй токен → в кабинете «Каналы» → вставь → подключи. Готово: теперь клиенты пишут твоему боту в Telegram, а он отвечает по [твоим настройкам](/learn/module-1/lesson-06-system-prompt). ## Что умеет Telegram-канал - Файлы до 20 МБ, **голосовые** (распознаёт в текст), фото, видео, стикеры; - **Кнопки** под ответом и команды в меню бота; - Работает и в **личке, и в группах**; понимает **пересланные сообщения** и **реакции**; - Длинные ответы авто-делятся на части (лимит Telegram, 4096 символов). ## Когда Telegram / когда мало - Аудитория в Telegram, хочешь безопасный канал без подписки: отличный выбор. - Большинство клиентов в Казахстане пишут в **WhatsApp**: тогда Telegram держи как **запасной**, а основной подключай [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr). ## Частые ошибки - **Потеряли токен**: храни его, при утере создавай нового бота у BotFather. - **Ждут, что Telegram потребует подписку**: нет, ему нужен только [баланс](/learn/module-6/lesson-29-billing). ## Вопросы новичка - **Это точно бесплатно?** Само подключение Telegram: да. Платишь только за ответы бота ([баланс токенов](/learn/module-6/lesson-29-billing)). Подписка, как для WhatsApp, тут не нужна. - **Могу подключить и Telegram, и WhatsApp к одному боту?** Да. Мозг один, каналов несколько: бот отвечает одинаково везде. - **Потерял токен, что делать?** Создай нового бота у @BotFather и вставь новый токен. Старый перестанет работать. - **Клиенты в Казахстане сидят в WhatsApp, зачем мне Telegram?** Как безопасный запасной канал и для тренировки: без риска бана и без подписки. Основной поток всё равно веди через [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr). ## Проверь себя - Один бот: сколько каналов может вести одновременно? - Где взять токен для Telegram и куда его вставить? - Почему Telegram работает без подписки, а WhatsApp, нет? ## Что дальше Дальше, [Урок 13: подключение WhatsApp по QR и как не поймать бан](/learn/module-2/lesson-13-whatsapp-qr). ## Подробнее (техническая документация) - [Обзор каналов](/docs/guide/02-channels/20-channels-overview) · [Подключить Telegram](/docs/guide/02-channels/22-telegram) --- ## Подключение WhatsApp по QR + антибан URL: https://dosai.pro/learn/module-2/lesson-13-whatsapp-qr # Урок 13. Подключение WhatsApp по QR + антибан > WhatsApp это главный канал для бизнеса в Казахстане. Подключается по QR-коду, но есть правила безопасности, чтобы не поймать бан. Их читаем обязательно. ## Цель урока После урока ты умеешь **подключить WhatsApp по QR** (сам или руками клиента через публичную ссылку) и понимаешь **антибан**: что продукт защищает **сам** (прогрев номера после подключения, не влезает в старые чаты), а что зависит **от тебя** (не рассылать холодное, держать Telegram запасным). Плюс знаешь, как устроен триал, чтобы не потратить его впустую. ## Простыми словами WhatsApp подключается по **QR-коду**, как WhatsApp Web, только бот всегда онлайн. Сканируешь код телефоном один раз, и бот начинает отвечать твоим клиентам в WhatsApp. 📍 Где: меню проекта → **«Каналы» → «Подключить WhatsApp»**. ## Слайды урока ## Непонятные слова: на пальцах - **QR-код**: квадратик из точек, который телефон «фотографирует», чтобы связать твой WhatsApp с ботом. Как приложить пропуск к турникету: приложил, прошёл. - **Привязанное устройство**: бот работает как ещё один «экран» твоего WhatsApp (как WhatsApp Web на компьютере). Твой телефон остаётся главным, а бот отвечает параллельно. - **Бан**: блокировка номера самим WhatsApp за подозрительное поведение (спам с нового номера). Как когда охрана выгоняет за нарушение правил. Риск, **на твоём номере**, поэтому правила ниже важны. - **Прогрев номера**, плавный старт: сначала живые переписки, потом уже [рассылки](/learn/module-3/lesson-22-broadcasts). Как разминка перед бегом, чтобы «не потянуть» и не словить бан. - **Триал**: бесплатный пробный период WhatsApp, 14 дней на номер (30 дней с промокодом партнёра). Как пробная подписка: попробовал, оформляешь дальше. - **Публичная ссылка `/connect/<токен>`**: ссылка, по которой твой клиент сам подключит свой WhatsApp, не заходя в твой кабинет. Как одноразовое приглашение: перешёл, отсканировал QR, готово. - **Синие галочки (mark_read)**: отметки «прочитано», которые видит собеседник. Тумблер: ставить их на прочитанные ботом сообщения или нет. ## Как подключить (по шагам) 1. Отметь **галочки безопасности** (антибан: см. ниже). 2. На экране появится **QR-код**. 3. На телефоне: WhatsApp → **«Связанные устройства»** → «Привязать устройство» → отсканируй QR. 4. Дождись статуса **«Подключён»**. Статус и «здоровье» канала видно в реальном времени. ### Публичная ссылка для клиента Если номер подключает **не ты, а клиент** (ты настраиваешь бота ему), дай ему **публичную ссылку `/connect/<токен>`**. Он сам отсканирует QR своим телефоном, не заходя в твой кабинет. Ссылку копируешь/обновляешь из карточки канала. ## Триал (бесплатный пробный период) При подключении номера стартует пробный период: - **14 дней бесплатно, число диалогов не ограничено.** - **30 дней**, если к проекту применён [промокод партнёра](/learn/module-6/lesson-31-referrals): он же удваивает стартовый баланс, $10 вместо $5. - Один бесплатный период на номер. ⚠️ **Бесплатен канал, а не ответы бота.** Каждый ответ всё это время списывается с [баланса проекта](/learn/module-6/lesson-29-billing). При создании проекта мы кладём на баланс **$5**: этого хватает познакомиться с ботом на реальных переписках, но перед живым потоком клиентов лучше пополнить, иначе бот замолчит посреди пробного периода. Кончился баланс, а не дни, значит просто пополни счёт. 💡 **Сразу после подключения открывается окно скидки на подписку:** 14 дней, цена ниже обычной, и оплата внутри окна не съедает оставшиеся бесплатные дни. Разбираем в [Уроке 29](/learn/module-6/lesson-29-billing). 📌 Поэтому подключай WhatsApp **в конце настройки** ([шаг 5 быстрого старта](/learn/module-0/lesson-02-quickstart)), чтобы не потратить триал на пустого бота. ## Антибан: читать обязательно WhatsApp это **привязанное устройство**, и риск блокировки лежит **на твоём номере**. Часть защиты продукт берёт на себя, часть на тебе. **Что делает сам продукт:** - **Прогрев номера.** Сразу после подключения бот **~15 минут молчит** (номер «прогревается», защита от блокировки). Все сообщения при этом сохраняются, ты видишь их в [Диалогах](/learn/module-4/lesson-25-leads); потом бот включается автоматически. - **Не влезает в старые чаты.** В уже существующие переписки (что были до подключения) бот сам не вмешивается. **Что зависит от тебя:** - **Не рассылай холодные сообщения** с нового номера (это главная причина банов). Поэтому [рассылки](/learn/module-3/lesson-22-broadcasts) в DOS AI работают только в Telegram, по WhatsApp их нет намеренно. - Сначала **живая переписка**, никаких массовых отправок с нового номера. - Соблюдай паузы на шаблонных отправках; включи [антиспам](/learn/module-1/lesson-11-advanced-settings). - **Держи [Telegram](/learn/module-2/lesson-12-channels-telegram) запасным каналом**: он безопаснее, забанить нельзя. ## Полезные настройки канала - **Синие галочки (mark_read)**: включать ли «прочитано» на прочитанные ботом сообщения. - **Классификатор старых чатов**: бот **не влезает** в уже существующие переписки; включаешь вручную, если нужно. ### Переписка в кабинете выглядит как в самом WhatsApp В [Диалоги](/learn/module-4/lesson-24-dialogs) доезжает не только текст: индикатор «печатает…», галочки доставки и прочтения, эмодзи-реакции, цитаты, пометка «Переслано», а удалённое клиентом сообщение помечается как удалённое. Если клиент **исправил** уже отправленное сообщение, бот ответит на исправленный вариант, а не на первый. Сами реакции боту не показываются: 👍 чаще означает вежливый кивок, чем ответ, и как реплику его читать нельзя. ## Когда WhatsApp / когда осторожно - Клиенты в Казахстане в основном пишут в WhatsApp: это основной канал. - Совсем новый номер + сразу массовая рассылка = быстрый бан. Сначала прогрев. ## Частые ошибки - **Подключили и сразу рассылка по холодной базе** → бан номера. - **Потратили триал на пустого бота** → подключай после настройки. - **Нет запасного канала** → номер забанили, бизнес без бота. Держи [Telegram](/learn/module-2/lesson-12-channels-telegram). ## Вопросы новичка - **Мой телефон должен быть всё время включён?** Как у WhatsApp Web: телефон нужен для связи. Бот держит устройство на связи; лучше не выходить из WhatsApp на телефоне и держать интернет. - **Бота забанят, я потеряю переписки?** Переписки клиентов и [лиды](/learn/module-4/lesson-25-leads) остаются в кабинете. Но канал отвалится, поэтому держи [Telegram](/learn/module-2/lesson-12-channels-telegram) запасным и не спамь с нового номера. - **Можно подключить бота к номеру клиента, а не к своему?** Да: отправь клиенту [публичную ссылку `/connect/`](/learn/module-2/lesson-13-whatsapp-qr), он сам отсканирует QR со своего телефона. - **Сколько длится бесплатный тест?** 14 дней, число диалогов не ограничено, один период на номер. С промокодом партнёра, 30 дней. Раньше был короткий период на 10 диалогов, его убрали. - **В бесплатный период ответы бота тоже бесплатные?** Нет. Бесплатен канал, ответы идут с [баланса](/learn/module-6/lesson-29-billing). Перед живым потоком клади хотя бы $10. - **Подключил, а бот молчит.** Проверь статус канала («Подключён»?), [баланс](/learn/module-6/lesson-29-billing) и [подписку](/learn/module-6/lesson-29-billing). Пошагово: [Урок 36](/learn/module-9/lesson-36-troubleshooting). ## Проверь себя - Что бот делает первые ~15 минут после подключения номера и зачем? - Почему рассылки с нового номера идут не сразу: это баг или защита? - Забанили номер: переписки и лиды пропадут? Что держать запасным? ## Что дальше Крутишь рекламу «Написать в WhatsApp» на этом номере? Дальше, [Урок 14: гейтинг по рекламе](/learn/module-2/lesson-14-ad-gating) (бот отвечает только рекламным лидам). А затем **Модуль 3**, учим бота действиям: [Функции](/learn/module-3/lesson-15-functions-overview). ## Подробнее (техническая документация) - [Подключить WhatsApp](/docs/guide/02-channels/21-whatsapp-wazzup) · [Гигиена и антибан](/docs/guide/02-channels/23-anti-ban) · [Канал отвалился / бан](/docs/guide/09-troubleshooting/92-channel-down) --- ## Гейтинг по рекламе: бот отвечает только лидам с рекламы URL: https://dosai.pro/learn/module-2/lesson-14-ad-gating # Урок 14. Гейтинг по рекламе: бот отвечает только лидам с рекламы > Подключил [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) на рабочий номер, где сидят и живые менеджеры? Тогда важная настройка: сделать так, чтобы бот отвечал **только тем, кто пришёл с рекламы**, а личные чаты и клиентов менеджеров не трогал. Это и есть гейтинг по рекламе (CTWA). ## Цель урока После урока ты умеешь **включить бота только на рекламные диалоги**: он подхватывает лидов с рекламы «Написать в WhatsApp», а обычные и личные чаты просто показывает, не вмешиваясь. И знаешь, как **привязать конкретные объявления** по их ID, чтобы бот брал ровно твою рекламу. ## Простыми словами Представь: у тебя один рабочий номер WhatsApp. По нему пишут и **новые клиенты с рекламы**, и **старые контакты**, и **личные знакомые**, и клиенты, которых ведёт живой менеджер. Если включить бота «на всё», он начнёт отвечать **всем подряд**, и влезет в личные переписки, и перебьёт менеджера. **Гейтинг по рекламе** решает это: бот включается **ТОЛЬКО** в диалогах, которые пришли с рекламы «Написать в WhatsApp» ([CTWA](/docs/guide/02-channels/22-telegram), Click-to-WhatsApp). Всех остальных бот **просто показывает тебе, не отвечая**. Диалоги, которые бот уже ведёт, и чаты, где ты вручную включил ИИ, продолжают работать. 📍 Где: меню проекта → «Бот» → «Настройки бота» → «Расширенные настройки» → список **«Кому отвечает бот»** → вариант **«Только лидам с рекламы»**. ## Слайды урока ## Непонятные слова: на пальцах - **CTWA (Click-to-WhatsApp)**: реклама с кнопкой «Написать в WhatsApp». Человек кликает по объявлению в Instagram/Facebook, и попадает сразу в переписку с тобой в WhatsApp. Такой лид «помечен» рекламой, и бот это видит. - **Гейтинг по рекламе**: правило «бот включается только на рекламных лидов». Как фейс-контроль: пришёл с рекламы, бот работает; личный чат или клиент менеджера, бот молчит и просто показывает диалог тебе. - **ID объявления (Ad ID)**: числовой «номер» твоего объявления в Ads Manager (вида `1202…`). Как артикул товара: точно указывает, с какого именно объявления пришёл лид. Приходит почти со всеми лидами, поэтому надёжнее ссылки. - **Ads Manager**: рекламный кабинет Meta (Facebook/Instagram), где создаются и запускаются объявления. Там же берётся ID объявления. ## Зачем это нужно Потому что на **рабочем номере с живыми людьми** бот «на всё»: это катастрофа: он влезет в личные переписки, ответит старым клиентам менеджера, перебьёт сотрудника в середине разговора. Гейтинг делает бота **точным**: он берёт на себя только новых лидов с рекламы (которых иначе можно упустить, пока менеджер занят), а живое общение не трогает. Если же у тебя **отдельный номер только под рекламу** (без живых менеджеров), гейтинг можно не включать, там и так все с рекламы. ## Как включить (по шагам) 1. Меню проекта → «Бот» → «Настройки бота» → раскрой **«Расширенные настройки»** → секция контроля оператора. 2. В списке **«Кому отвечает бот»** выбери **«Только лидам с рекламы»**. (Соседние варианты: «Всем, кто напишет», так создаются новые проекты с 9 августа 2026, и «Только новым обращениям», если нужно, чтобы бот не трогал контакты, которые были до подключения.) 3. **Оставь поле объявлений пустым**: тогда бот отвечает на лидов с **любой** твоей рекламы «Написать в WhatsApp». 4. **Или впиши конкретные объявления** (по одному в строке): тогда бот включится **только** на них, остальную рекламу пропустит. ## Как взять ID объявления из Ads Manager (для таргетолога) ID виден ещё **до** запуска, можно подготовить гейтинг заранее: 1. Создай кампанию и объявления как обычно (запускать не обязательно, достаточно, чтобы объявления были созданы). 2. В Ads Manager: вкладка **«Объявления»** → **«Столбцы: настроить столбцы»** → включи столбец **«ID объявления»** (Ad ID). 3. Скопируй ID нужных объявлений (числа вида `1202…`) и вставь в поле, по одному в строке. 4. ⚠️ При **дублировании** объявления или **перезапуске** креатива у копии появляется **новый ID**: добавь и его. 💡 ID уже пришедшего лида можно подсмотреть в его диалоге: карточка справа → блок **«Источник, реклама»**. ## Частые ошибки - **Дубль/перезапуск объявления не добавили в список** → бот не подхватывает лидов с новой копии (у неё другой ID). - **Понадеялись только на ссылки постов** → у части лидов ссылка не передаётся; надёжнее числовой ID. - **Включили гейтинг на номере, где рекламы нет** → бот молчит на всех, потому что «рекламных» диалогов не появляется. ## Когда нужно / когда нет - Рабочий номер, где есть и бот, и живые менеджеры/личные чаты → **включай гейтинг**. - Хочешь, чтобы бот брал только определённые кампании → впиши их ID. - Отдельный номер только под рекламу, без живых людей → можно не включать (там и так все с рекламы). ## Вопросы новичка - **Бот совсем не будет отвечать на нерекламные чаты?** Он их **покажет** тебе (ты увидишь диалог), но сам отвечать не будет. Хочешь, включи ИИ в этом чате вручную. - **А если лид с рекламы, но я включил конкретные ID, а этого объявления в списке нет?** Бот его пропустит. Оставь список пустым: тогда берёт любую рекламу. - **Менеджер уже ведёт клиента, а тот кликнул рекламу: бот влезет?** Диалоги, где ты вручную ведёшь/включил-выключил ИИ, остаются под твоим контролем; гейтинг про то, кого бот берёт **сам**. - **Работает только для WhatsApp?** Гейтинг завязан на рекламу «Написать в WhatsApp» (CTWA) это про WhatsApp-трафик с рекламы Meta. - **А если наоборот, хочу отвечать и старым клиентам?** Это соседний вариант того же списка, «Всем, кто напишет». Он не сочетается с рекламным фильтром: настройка одна, режим выбирается один. ## Проверь себя - Зачем нужен гейтинг на номере, где есть живые менеджеры? - Чем ID объявления надёжнее ссылки на пост? - Продублировал объявление, что нужно не забыть сделать в списке? ## Что дальше Каналы подключены и настроены. Дальше, **Модуль 3**: дадим боту руки-инструменты (функции): [Урок 15. Функции, обзор](/learn/module-3/lesson-15-functions-overview). ## Подробнее (техническая документация) - [Продвинутые настройки](/docs/guide/01-bot/15-advanced-settings) · [Подключение каналов](/docs/guide/02-channels/20-channels-overview) --- ## Функции (инструменты бота): обзор URL: https://dosai.pro/learn/module-3/lesson-15-functions-overview # Урок 15. Функции (инструменты бота): обзор > Сам ИИ умеет только писать текст. Функции дают ему «руки»: записать в календарь, выставить счёт, отправить документ, уведомить тебя. Это превращает болтливого бота в рабочий инструмент. ## Цель урока После урока ты понимаешь, **что такое функция** и чем она отличается от [базы знаний](/learn/module-3/lesson-16-knowledge-base), знаешь **готовые категории** (запись, оплата, уведомления, CRM, медиа) и главный принцип: ты **не программируешь сценарий**, а описываешь функцию словами, бот сам решает, когда её вызвать. Дальше в модуле разберём инструменты по одному. ## Простыми словами **[Функция](/docs/guide/03-tools/30-functions) это действие, которое умеет делать бот.** Без функций он только разговаривает; с функциями, реально что-то делает: [записывает клиента](/learn/module-3/lesson-18-booking), [выставляет счёт Kaspi](/learn/module-6/lesson-30-accept-payments), [отправляет фото](/learn/module-3/lesson-17-media-library), [уведомляет тебя](/learn/module-3/lesson-19-notifications), пишет в [Google Таблицу](/learn/module-5/lesson-27-google) или [CRM](/learn/module-5/lesson-28-crm). Главное: ты **не программируешь** сценарий «если клиент сказал X, сделай Y». Ты просто **описываешь функцию словами**, и бот **сам решает**, когда её вызвать ([как он думает](/learn/module-0/lesson-03-how-bot-thinks)). 📍 Где: меню проекта → **«Функции»**. Лимит, **40 функций на проект**. ## Слайды урока ## Непонятные слова: на пальцах - **Функция (инструмент)**: умение бота *делать*, а не только говорить. Как кнопка на пульте: «записать», «выставить счёт», «отправить фото». Нажал, сделал. - **Шаблон функции**: готовая заготовка, которую ставишь за пару кликов. Как готовое блюдо из меню: не надо готовить с нуля, выбрал, и работает (запись, счёт, уведомление). - **Вебхук**: способ боту «постучаться» в чужую программу через интернет и получить ответ. *Пример:* бот спрашивает у твоего склада «айфон есть?» и получает «да, 3 шт». Как позвонить в другой отдел и уточнить. - **«Своя интеграция по API»**: функция, которую ты сам настраиваешь, чтобы бот дёргал твою систему (сайт, склад, CRM). Для тех, у кого есть свои программы. Подробно, [Урок 34](/learn/module-8/lesson-34-api-webhooks). - **Цепочка функций**: несколько действий подряд с передачей данных. *Пример:* проверил свободное время → записал → уведомил тебя. Как конвейер: результат одного шага идёт в следующий. - **Секрет (ключ/токен)**: пароль для доступа к чужой системе. Хранится зашифрованным; сотрудник с ролью [viewer](/learn/module-7/lesson-32-roles-members) его не видит. Как ключ в сейфе. ## Зачем это нужно Потому что «просто ответить» мало. Клиент хочет **записаться**, **оплатить**, **получить прайс**, а это действия. Функции автоматизируют рутину, которую иначе делал бы менеджер вручную. ## Готовые шаблоны (проще всего) Есть **каталог готовых шаблонов**, ставятся мастером за пару кликов, ничего программировать не надо: - [Google Календарь и Таблицы](/learn/module-5/lesson-27-google), [движок записи (свободные окошки)](/learn/module-3/lesson-18-booking); - [счёт Kaspi клиенту](/learn/module-6/lesson-30-accept-payments); - [теги](/learn/module-3/lesson-21-tags) / пауза [дожимов](/learn/module-3/lesson-20-drip) / стоп-диалог; - [отправка медиа](/learn/module-3/lesson-17-media-library); - [уведомления тебе](/learn/module-3/lesson-19-notifications) в Telegram/email/WhatsApp; - [CRM: Bitrix24 / amoCRM / AlphaCRM](/learn/module-5/lesson-28-crm). ## Два режима для своих функций - **Простой**, базовый вебхук (запрос к твоему адресу: GET/POST/PUT/DELETE). - **Продвинутый**, полный HTTP-конструктор: авторизация (ключ/заголовки), параметры, тело с подстановкой [переменных](/learn/module-8/lesson-35-expressions) `{{...}}`, обработка ответа, повторы. Если готового шаблона нет, используй **«Своя интеграция по API»** (детально в [Уроке 34](/learn/module-8/lesson-34-api-webhooks)). ## Пример (образовательный центр «Профи») Именно так настроен пример в кабинете, эти функции видно на скриншоте выше: - **`book_trial_lesson`** ([Запись](/learn/module-3/lesson-18-booking)): на «хочу записаться на пробный по математике на завтра» бот сам проверяет [Google Календарь](/learn/module-5/lesson-27-google) и создаёт запись. - **`email_confirmation`** ([письмо](/learn/module-3/lesson-19-notifications)), если клиент оставил email, после записи улетает подтверждение с датой и адресом. - **`send_media`** ([медиа](/learn/module-3/lesson-17-media-library)): на «пришлите программу курсов» бот отправляет PDF из [библиотеки](/learn/module-3/lesson-17-media-library). - **`push_to_crm`** ([CRM](/learn/module-5/lesson-28-crm)): создаёт сделку в amoCRM и двигает её по стадиям вслед за диалогом. Ты нигде не писал «если клиент сказал X, сделай Y». Ты просто описал каждую функцию словами: бот вызывает их сам по смыслу разговора. ## Цепочки и безопасность - **Цепочки функций**: можно связать функции в последовательность (проверил → записал → уведомил), с передачей данных между шагами. - **Секреты** (ключи, токены) шифруются; роль [viewer](/learn/module-7/lesson-32-roles-members) функции не видит. - **Тест функции**: превью запроса, проверка «живости», диагностика последней ошибки, сравнение версий. ## Когда нужны / когда нет - Нужно действие (запись, оплата, отправка файла, запись в CRM) → функция. - Нужен просто ответ по прайсу → это [база знаний](/learn/module-3/lesson-16-knowledge-base), функция не нужна. ## Частые ошибки - **Плохое описание функции** → бот не понимает, когда её вызвать. Опиши понятно, для чего она. - **Пишут сценарии в промпте** («если X, вызови Y») → не надо, бот вызывает функции сам по их описанию. - Устаревших `http_get`/`http_post` больше нет, кастомный HTTP это **«Своя интеграция по API»**. ## Вопросы новичка - **Мне нужно программировать?** Для готовых шаблонов, нет, ставятся мастером за пару кликов. Программирование нужно только для «Своей интеграции по API», и то это делает разработчик. - **Бот не записывает / не выставляет счёт, почему?** Либо функция выключена, либо у неё [нечёткое описание](/docs/guide/09-troubleshooting/91-function-fails), и бот не понял, когда её вызвать. Опиши понятнее, для чего она. - **Как бот понимает, что пора вызвать функцию?** По её описанию и смыслу разговора: сам, без сценариев. Поэтому описание функции важнее всего. - **Сколько функций можно?** До 40 на проект: этого хватает с большим запасом. - **Я слышал про http_get/http_post, где они?** Их больше нет. Кастомный HTTP теперь, «Своя интеграция по API» ([Урок 34](/learn/module-8/lesson-34-api-webhooks)). ## Проверь себя - Чем функция отличается от базы знаний, когда нужна одна, а когда другая? - Ты пишешь боту сценарий «если X, сделай Y»? Как он решает, когда вызвать функцию? - Готовый шаблон или «Своя интеграция по API», что проще и когда выбирают второе? ## Что дальше Дальше разберём инструменты по одному, начиная с [Урока 16: База знаний](/learn/module-3/lesson-16-knowledge-base). ## Подробнее (техническая документация) - [Функции: полный гайд](/docs/guide/03-tools/30-functions) · [Каталог встроенных функций](/docs/guide/10-reference/100-functions-catalog) · [Функция не вызывается / падает](/docs/guide/09-troubleshooting/91-function-fails) --- ## База знаний (RAG) URL: https://dosai.pro/learn/module-3/lesson-16-knowledge-base # Урок 16. База знаний (RAG) > Место для объёмных фактов бизнеса: большой прайс, условия, FAQ. Бот сам достаёт нужный кусок и отвечает точно, а не выдумывает. ## Цель урока После урока ты умеешь **загрузить объёмные материалы** (прайс, FAQ, регламенты) в базу знаний, понимаешь, **как бот ищет по смыслу** (а не по точным словам) и почему в ответ попадает только нужный кусок, а не весь файл. И главное: знаешь, **как готовить документы под поиск** (структура важнее объёма), чтобы бот находил ответ точно. ## Простыми словами **[База знаний](/docs/guide/03-tools/31-knowledge-base)** это библиотека документов твоего бизнеса. Ты загружаешь туда прайс, регламенты, ответы на частые вопросы, а бот на вопрос клиента **сам находит нужный кусок** и вставляет его в ответ. Умное слово для этого, **RAG** (поиск по смыслу + генерация ответа). 📍 Где: меню проекта → **«База знаний»**. ## Слайды урока ## Непонятные слова: на пальцах - **База знаний**: «архив» документов бизнеса (прайс, условия, FAQ), из которого бот берёт факты. Как библиотека: бот не заучивает всё, а находит нужную страницу под вопрос. - **RAG**: «найди нужный кусок и вставь в ответ». Не пугайся аббревиатуры: это как школьник на экзамене с открытой тетрадкой, сначала находит нужный абзац, потом отвечает своими словами. Расшифровка не важна, важно, что бот **не выдумывает**, а подсматривает. - **Куски (чанки)**: на них бот режет документ, чтобы искать по частям. *Пример:* прайс на 40 курсов режется по строкам, и бот находит именно «Подготовка к ЕНТ (математика)», а не весь файл. - **Поиск по смыслу**: бот ищет не по точному слову, а по значению. Спросили «сколько за матешу для ЕНТ?»: найдёт строку «Подготовка к ЕНТ (математика)», хотя слова разные. Как понять друга с полуслова. - **Тест-поиск**, проверка: вводишь вопрос и видишь, какие куски бот нашёл и насколько точно. Как заранее проверить, откроется ли нужная страница. - **Источник по ссылке (URL)**: прайс на твоём сайте, который бот сам перечитывает и обновляет. Как подписка на обновления: изменил на сайте, бот подтянул. ## Зачем это нужно (и чем отличается от «Информации о компании») | | «Информация о компании» | База знаний | |---|---|---| | Что кладём | короткое, всегда нужное | объёмное, меняющееся | | Как попадает в ответ | целиком в **каждый** ответ | **только нужный кусок** по запросу | | Стоимость | дорожает при большом объёме | дёшево даже при 100 файлах | Большой прайс в «Информацию о компании» класть **нельзя** (дорого), он идёт в базу знаний. Разбор карманов в [Уроке 7](/learn/module-1/lesson-07-feed-knowledge). ## Как загрузить (по шагам) 1. Раздел «База знаний» → загрузи документы. Форматы: **TXT, CSV, ссылка (URL), PDF, DOCX**. До **4 МБ** на файл, до **100 записей** на проект. 2. Бот сам разрежет документ на куски и «проиндексирует». 3. Проверь через **тест-поиск**: вводишь вопрос, видишь, какие куски нашлись и насколько точно. ## Как это работает (простыми словами) - Документ режется на **куски**. Обычный текст, крупными кусками; а **прайсы, таблицы и «вопрос-ответ», заметно мельче** (система распознаёт структуру), чтобы каждая позиция искалась отдельно и точно. - На вопрос клиента бот ищет **по смыслу** (не по точным словам), берёт **топ-5** самых подходящих кусков и вставляет в ответ (до 8000 символов контекста). - Порог «насколько похоже» настраивается на проект. - Лимиты: до **100 записей** и до **4 МБ** на файл; всего до **10 000 кусков на проект**: это гигантский объём материалов, упереться в него на реальном бизнесе практически невозможно. ## Пример (образовательный центр «Профи») Клиент: «а сколько стоит подготовка к ЕНТ по математике?». Бот ищет в загруженном документе «Прайс курсов 2026», находит строку «Подготовка к ЕНТ (математика), 45 000 тг/мес» и отвечает точной ценой, **не выдумывая**. Ровно это видно на тест-поиске выше: запрос про ЕНТ по математике → находит нужный кусок прайса со скором релевантности. ## Когда нужна / когда нет - Большой прайс, много курсов/услуг, FAQ для родителей, регламенты, условия: всё сюда. - Прайс меняется, можно подключить URL-источник, бот сам обновит. - Пара цифр (адрес, часы) идёт в [«Информацию о компании»](/learn/module-1/lesson-07-feed-knowledge), базу знаний ради двух строк заводить не нужно. ## Частые ошибки - **Загрузили один огромный файл-«простыню»** без структуры → бот хуже находит. Лучше аккуратные разделы, таблицы, «вопрос-ответ». - **Дублируют факты** в базе знаний и в «Информации о компании» → расхождения. Один факт: один источник. - **Не проверили тест-поиском** → не заметили, что бот не находит нужное. ## Вопросы новичка - **В каком формате грузить прайс?** Подойдёт TXT, CSV, PDF, DOCX или ссылка на страницу. Аккуратная таблица или «вопрос-ответ» ищется лучше, чем сплошная «простыня». - **Бот не находит цену, хотя я её загрузил.** Проверь через тест-поиск, если нужный кусок не всплывает, переформулируй в документе понятнее или разбей на разделы. - **Прайс меняется каждую неделю, перезаливать вручную?** Не обязательно: подключи [источник по ссылке (URL)](/docs/guide/03-tools/31-knowledge-base), бот будет обновляться сам. - **Чем это отличается от «Информации о компании»?** «Информация о компании» для короткого и всегда-нужного (адрес, часы). База знаний для большого (полный прайс, FAQ). Правило карманов: [Урок 7](/learn/module-1/lesson-07-feed-knowledge). - **Сколько можно загрузить?** До 100 записей на проект, файл до 4 МБ каждый: это очень много. ## Проверь себя - Почему большой прайс кладут в базу знаний, а не в «Информацию о компании»? - Бот ищет по точному слову или по смыслу, и что это значит для формулировок клиента? - Почему аккуратная таблица/«вопрос-ответ» находится лучше, чем сплошная «простыня»? ## Что дальше Дальше, [Урок 17: медиа-библиотека](/learn/module-3/lesson-17-media-library) (чтобы бот отправлял фото и прайс-файлы). ## Подробнее (техническая документация) - [База знаний (RAG)](/docs/guide/03-tools/31-knowledge-base) · [Загрузить знания](/docs/guide/01-bot/16-feed-knowledge) · [Лимиты](/docs/guide/10-reference/104-limits) --- ## Медиа-библиотека URL: https://dosai.pro/learn/module-3/lesson-17-media-library # Урок 17. Медиа-библиотека > Чтобы бот присылал фото, видео-обзор, программу курсов или отзывы в нужный момент, а не только писал текстом. ## Цель урока После урока ты умеешь **загрузить файлы** (фото, видео, PDF) в медиа-библиотеку, дать каждому понятный **ярлык**, и подключить [функцию «Отправить медиа»](/learn/module-3/lesson-15-functions-overview), чтобы бот сам присылал нужный файл по ходу разговора. И понимаешь ключевое: загрузка это «полка», а отправляют файл «руки»-функция. ## Простыми словами **[Медиа-библиотека](/docs/guide/03-tools/32-media-library)** это твоё хранилище файлов (фото, видео, PDF), которые бот может **отправить клиенту** по ходу разговора. Ты загружаешь их заранее, а бот сам выбирает нужный файл в подходящий момент. 📍 Где: меню проекта → **«Медиа»**. ## Слайды урока ## Непонятные слова: на пальцах - **Медиа**, файлы: фото, видео, PDF. Как содержимое папки «фотки» и «документы» на телефоне, только бот берёт их оттуда сам. - **Медиа-библиотека**: хранилище этих файлов внутри проекта, откуда бот их достаёт. Как альбом, который всегда под рукой у бота. Вмещает **до 60 файлов** на проект. - **Ярлык (media_key)**: короткое имя-ключ у файла (напр. `program`, `schedule`, `classroom`), по которому бот выбирает, что отправить. Как бирка на коробке: бот читает бирку и берёт нужную. Плюс есть название и описание, чем понятнее, тем точнее выбор. - **[Функция «Отправить медиа»](/learn/module-3/lesson-15-functions-overview)**: «руки» бота, которыми он шлёт файл. Загрузить файл мало, нужна и эта функция, иначе бот про файлы «знает», но отправить не может. ## Зачем это нужно Клиенты часто просят: «покажите программу», «скиньте расписание», «есть фото кабинетов?». Живой менеджер лезет искать файл в телефоне. Бот делает это **мгновенно**, если файл лежит в медиа-библиотеке и подключена [функция отправки](/learn/module-3/lesson-15-functions-overview). ## Как настроить (по шагам) 1. Раздел «Медиа» → загрузи файлы (фото, видео-обзор, PDF-программа, отзывы). До **60 файлов** на проект. 2. Дай каждому **понятный ярлык** (короткое имя-ключ: `program`, `schedule`, `classroom`) плюс название и описание, по ним бот выбирает, что когда отправлять. 3. Добавь [функцию](/learn/module-3/lesson-15-functions-overview) **«Отправить медиа»**: теперь бот сам шлёт нужный файл по контексту. ## Пример (образовательный центр «Профи») В библиотеке лежат три файла с ярлыками: «Программа курсов» (`program`), «Расписание групп» (`schedule`), «Фото кабинетов» (`classroom`). Клиент: «а есть программа?» → бот шлёт PDF по ярлыку `program`. «Покажите, где занимаетесь» → отправляет фото по `classroom`. ## Когда нужно / когда нет - Ты показываешь программу/расписание файлом, есть видео-обзор, фото, сертификаты. - Всё общение только текстом, файлы не нужны: можно пропустить. ## Частые ошибки - **Загрузили файлы, но не подключили [функцию отправки](/learn/module-3/lesson-15-functions-overview)** → бот не может их слать. - **Мутный ярлык/описание у файлов** → бот не понимает, какой файл для какого случая. ## Вопросы новичка - **Загрузил файл, но бот его не отправляет.** Не хватает [функции «Отправить медиа»](/learn/module-3/lesson-15-functions-overview), загрузка это только «полка», а функция, «руки», которыми бот берёт файл. - **Как бот понимает, какой файл прислать?** По ярлыку и описанию. Чем понятнее ярлык («program», программа, «classroom», фото кабинетов), тем точнее бот выбирает. - **Можно слать видео?** Да: фото, видео, PDF. Полезно для программы, обзора, портфолио. - **Сколько файлов можно загрузить?** До 60 на проект: этого хватает с запасом. - **Обязательно ли это?** Нет. Если общение только текстом, раздел можно пропустить и вернуться позже. ## Проверь себя - Что произойдёт, если загрузить файл, но НЕ подключить функцию «Отправить медиа»? - Зачем файлу ярлык (`program`/`classroom`) и как он помогает боту? - Сколько файлов вмещает библиотека проекта? ## Что дальше Дальше, [Урок 18: запись клиентов на время](/learn/module-3/lesson-18-booking). ## Подробнее (техническая документация) - [Медиа-библиотека](/docs/guide/03-tools/32-media-library) · [Функции](/docs/guide/03-tools/30-functions) --- ## Запись на время (booking) URL: https://dosai.pro/learn/module-3/lesson-18-booking # Урок 18. Запись на время (booking) > Одна из самых полезных функций: бот сам показывает свободные окошки и записывает клиента, не отвлекая тебя. Разберём два способа: простой и для нескольких специалистов. ## Цель урока После урока ты понимаешь **два способа записи** и знаешь, какой выбрать: [Google Календарь](/learn/module-5/lesson-27-google) для простого случая (один специалист) или **движок слотов** для нескольких специалистов с разными правилами. И понимаешь, как движок считает свободное окошко, как пересечение графика, ограничений и занятости. ## Простыми словами Бот умеет **смотреть свободное время и записывать клиента** прямо в переписке. Есть два пути: 1. **[Google Календарь](/learn/module-5/lesson-27-google)**, для простого случая (один мастер / один кабинет). 2. **Движок слотов**, для нескольких специалистов (образовательные центры, студии, автошколы), где расписание сложнее. Оба подключаются как [функция](/learn/module-3/lesson-15-functions-overview) из готового каталога. ## Слайды урока ## Непонятные слова: на пальцах - **Слот (окошко)**: свободный промежуток, на который можно записать клиента. Как свободное место в кинозале: показывает только то, что не занято. - **Запись (booking)**: бронь времени за клиентом. Как забронировать столик: время закрепляется, другой уже не займёт. - **[Google Календарь](/learn/module-5/lesson-27-google)**: обычный онлайн-календарь, где бот видит занятое/свободное и ставит записи. Как ежедневник, в который бот сам вписывает клиентов. - **Движок слотов**: «калькулятор свободного времени» для нескольких специалистов. Он берёт график, правила и занятость и выдаёт готовый список окошек. Как расписание автобусов: учитывает всё и показывает, когда реально можно. - **Пересечение (∩)**: «одновременно выполнено всё». *Пример:* окошко подходит, если специалист работает **и** услуга разрешена в это время **и** оно ещё не занято. Как найти время, удобное сразу всем. - **Источник занятости**, откуда движок узнаёт, что уже занято: **Education CRM** (занятые уроки центра) или «только график» (без CRM). На скрине выше это выпадающий список «Источник занятости». - **Горизонт показа**: на сколько дней вперёд бот предлагает записи (по умолчанию 7, максимум 14). Как «бронь доступна на пару недель вперёд». ## Зачем это нужно Запись это то, ради чего клиент часто и пишет. Без бота: клиент ждёт ответа менеджера, менеджер сверяется с журналом. С ботом: клиент получает свободное время **за секунды** и записывается сам, 24/7. ## Способ 1: Google Календарь (просто) Подключаешь [Google Календарь](/learn/module-5/lesson-27-google) (через сервисный аккаунт: без паролей). Бот умеет: проверить свободные слоты, **создать / перенести / отменить** запись. Подходит, когда «один мастер, один календарь». ## Способ 2: Движок слотов (для нескольких специалистов) Для образовательных центров/студий/автошкол. Бот считает свободные окошки как **пересечение**: - **график в [Google Таблице](/learn/module-5/lesson-27-google)** (кто когда работает) ∩ - **ограничения** (услуга, минимальный возраст, часы работы, обеды, отпуска, даты «не работает», ограничения дней вроде «пробные только вт/чт/сб», маркеры в ячейках) ∩ - **занятость** (занятые уроки, из **Education CRM** проекта, либо «только график» без CRM) → и отдаёт клиенту **готовый список свободных слотов**. В настройках шаблона задаёшь: таблицу-график, услуги (с branch_id/subject_id из CRM), источник занятости, горизонт показа (по умолчанию 7, максимум 14 дней). 💡 Если у специалиста в графике **непонятное ограничение**, движок его не покажет и оставит пометку менеджеру, чтобы не записать клиента на того, кого нельзя. А условие, которое выполняет человек («по договорённости», «после согласования с мастером»), специалиста не прячет: бот покажет его время и честно предупредит, что запись подтвердит менеджер, но бронировать сам не станет. ### График можно вести двумя способами Сервер сам понимает, как устроен ваш лист, по заголовкам колонок: - **Неделя**: семь колонок `пн вт ср чт пт сб вс`, одна и та же неделя повторяется. Удобно, когда график стабильный. - **Календарь**: по колонке на каждую дату (`22.06.2026`, `23.06.2026`, …). Удобно, когда часы плавают, а отпуска и подмены видно прямо в ячейке дня. В календарном режиме держи заполненными 2-3 недели вперёд: дата без колонки означает «расписание не заведено», и бот в неё не запишет. Если весь запрошенный период оказался за последней заполненной колонкой, функция так и скажет, а не отдаст пустой список, который читается как «все заняты». ### Экран «Проверка графика» Главный ответ на вопрос «почему бот не предлагает этого мастера». Открываешь функцию → **«Проверить график»** и видишь, что сервер понял из таблицы: кого он видит, что вычитал из каждого комментария, кто скрыт и по какой причине, до какой даты заполнено расписание. Раньше это было видно только тому, кто лезет в базу руками, и специалисты пропадали из выдачи неделями. Туда же не надо ходить каждый день: когда график мешает записи (лист переименовали, комментарий не разобрался, колонки с датами кончились), **владельцу приходит уведомление**, не чаще раза в сутки. 💡 При настройке жми **«Найти лист автоматически»**: сервер сам выберет лист с графиком и определит, как названы колонки, тебе останется подтвердить. ## Пример (образовательный центр «Профи») Клиент пишет «хочу на пробный по математике завтра после обеда». Бот считает свободные окна преподавателя математики на завтра после 12:00 (учитывая занятые уроки из Education CRM) → предлагает «14:00 или 16:30» → клиент выбирает → бот записывает. ## Когда какой способ / когда не нужно - Один специалист, простое расписание → **Google Календарь**. - Несколько специалистов, услуги с разными правилами → **движок слотов**. - У тебя нет записи как таковой (магазин, доставка) → эта функция не нужна. ## Частые ошибки - **Не расшарили календарь/таблицу** на служебный аккаунт → бот не видит расписание ([Урок 27](/learn/module-5/lesson-27-google)). - **Кривой график в таблице** → бот предлагает неверные слоты. Проверь формат по подсказкам шаблона. - **Не подключили Education CRM**, а источник занятости выбран «edu_crm» → бот не видит занятые уроки. Переключи на «только график» или подключи CRM. ## Вопросы новичка - **У меня один мастер, что выбрать?** [Google Календарь](/learn/module-5/lesson-27-google): проще всего, бот видит занятость и ставит записи. - **Несколько мастеров и разные услуги?** Движок слотов: он учитывает график каждого, правила услуг и занятость, и не предложит занятое время. - **Бот предлагает время, когда мастер не работает.** Скорее всего кривой график в [Google Таблице](/learn/module-5/lesson-27-google) или календарь не расшарен на служебный аккаунт ([Урок 27](/learn/module-5/lesson-27-google)). - **Мастер работает, а бот его не предлагает.** Открой «Проверить график»: там написано, что сервер понял про этого специалиста и почему скрыл. Чаще всего дело в формулировке комментария или в том, что имя в графике не совпадает с именем в CRM. - **Клиент записался, я об этом узнаю?** Да, если подключишь [уведомления владельцу](/learn/module-3/lesson-19-notifications), тебе придёт сообщение о каждой записи. - **У меня магазин без записи, это нужно?** Нет, пропускай. Функция для тех, у кого есть приём по времени. ## Проверь себя - Один специалист или несколько: какой способ записи выбираешь в каждом случае? - Из чего движок слотов собирает «свободное окошко» (три условия)? - На сколько дней вперёд бот показывает записи по умолчанию и какой максимум? ## Что дальше Дальше, [Урок 19: уведомления владельцу](/learn/module-3/lesson-19-notifications) (чтобы знать о каждой записи). ## Подробнее (техническая документация) - [Запись на время](/docs/guide/03-tools/36-booking) · [Google Calendar](/docs/guide/05-integrations/52-google-calendar) · [Google Sheets](/docs/guide/05-integrations/51-google-sheets) --- ## Уведомления владельцу URL: https://dosai.pro/learn/module-3/lesson-19-notifications # Урок 19. Уведомления владельцу > Бот работает 24/7, но иногда нужно, чтобы ты подключился лично. Он сам напишет тебе, когда появился горячий клиент или нужно вмешаться. ## Цель урока После урока ты умеешь настроить, чтобы бот **писал лично тебе** (в Telegram, на email или в WhatsApp) в нужный момент: пришёл горячий [лид](/learn/module-4/lesson-25-leads), клиент просит человека, крупная сделка. И понимаешь **шаблон уведомления**: какие данные бот подставит автоматически (системные переменные `{{client_name}}`, `{{phone}}`…), а какие берёт из разговора. ## Простыми словами Ты можешь дать боту [функцию](/learn/module-3/lesson-15-functions-overview), которая **пишет лично тебе** в [Telegram](/learn/module-2/lesson-12-channels-telegram), на email или в [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr), когда происходит что-то важное: пришёл горячий [лид](/learn/module-4/lesson-25-leads), клиент просит человека, крупная сделка. ## Слайды урока ## Непонятные слова: на пальцах - **Уведомление владельцу**: сообщение, которое бот шлёт **тебе** (не клиенту), когда случилось что-то важное. Как когда охранник звонит хозяину: «тут важный гость, подойдите». - **Горячий лид**: клиент, который вот-вот купит. *Пример:* «готов оплатить, куда переводить?», самый ценный момент, ради него и уведомление. - **Шаблон сообщения**: заготовка текста уведомления с «пропусками» `{{...}}`, куда бот подставит данные. *Пример:* «🔥 {{client_name}}, {{phone}}» превратится в «🔥 Алексей, +7…». Про `{{...}}`: [Урок 35](/learn/module-8/lesson-35-expressions). - **Системные переменные**, готовые «пропуски», которые бот заполняет **сам из карточки лида**: `{{client_name}}` (имя), `{{phone}}` (телефон), `{{stage}}` (стадия), `{{lead_status}}` (статус), `{{summary}}` (краткое резюме диалога), `{{project_name}}`, `{{channel}}`. Их видно списком под полем шаблона: нажал, вставилось. - **Системное уведомление аккаунта** это ДРУГОЕ: оповещения о [балансе](/learn/module-6/lesson-29-billing)/канале/платеже, настраиваются в [Уроке 33](/learn/module-7/lesson-33-account-lifecycle). Не путай: тут бот зовёт тебя по диалогу, там система следит за деньгами и связью. ## Зачем это нужно Чтобы **не сидеть в кабинете весь день** и всё равно не упустить важного клиента. Бот отсекает рутину, а тебя зовёт только когда реально надо, как хороший помощник. ## Как настроить (по шагам) 1. В «Функциях» добавь шаблон уведомления: **в Telegram**, **на email** или **в WhatsApp**. 2. Укажи, **куда** слать (твой Telegram/почта/номер) и **шаблон сообщения**. 3. В [промпте](/learn/module-1/lesson-06-system-prompt) опиши, **когда** звать тебя: «если клиент готов купить или просит менеджера, вызови уведомление». ## Пример (образовательный центр «Профи») Шаблон сообщения (ровно как на скрине выше): ``` 🔥 Горячий лид: {{client_name}}, {{phone}} Курс: {{course}} Причина: {{reason}} ``` Здесь `{{client_name}}` и `{{phone}}`, **системные переменные** (бот подставит из карточки лида), а `{{course}}` и `{{reason}}`, **параметры функции** (бот заполнит по разговору: какой курс интересует, почему зовём). Клиент дошёл до готовности записаться → тебе в Telegram падает готовое сообщение с контактом. Ты перезваниваешь и закрываешь сделку. ## Когда нужно / когда нет - Хочешь лично дожимать горячих клиентов, бот отсекает «холодных». - Есть ситуации, где нужен живой человек (жалоба, крупный заказ). - Тебе не нужны оповещения в моменте: всё видно в [лидах](/learn/module-4/lesson-25-leads) и [аналитике](/learn/module-4/lesson-26-analytics-reports). ## Не путай с двумя другими вещами - Это **уведомления от бота по ходу диалога**. А **системные уведомления аккаунта** (низкий [баланс](/learn/module-6/lesson-29-billing), канал отвалился, платёж прошёл), настраиваются отдельно, [Урок 33](/learn/module-7/lesson-33-account-lifecycle). - Это не [письмо клиенту](/learn/module-3/lesson-23-email-customer): тут бот пишет **тебе**, а не клиенту. ## Вопросы новичка - **Куда лучше слать уведомления?** В Telegram, приходит мгновенно и бесплатно. Email, если удобнее почта. WhatsApp, тоже можно. - **Как боту понять, когда меня звать?** Опиши это в [промпте](/learn/module-1/lesson-06-system-prompt): «зови меня, если клиент готов купить или просит менеджера». Бот сам поймёт момент. - **Мне будет сыпаться уведомление на каждого клиента?** Нет, если правильно описал условие. Смысл, звать только на важное, а рутину бот держит на себе. - **Это то же самое, что отчёты?** Нет. Уведомление это «прямо сейчас, важное». [Отчёты](/learn/module-4/lesson-26-analytics-reports), сводка за день/неделю. Разные вещи. - **Откуда бот берёт имя и телефон в уведомлении?** Из карточки лида: через системные переменные `{{client_name}}`, `{{phone}}`. Их не надо вписывать руками, нажал в списке под шаблоном: вставилось. ## Проверь себя - Чем уведомление владельцу отличается от системного уведомления аккаунта (баланс/канал)? - Что подставит бот вместо `{{client_name}}` и `{{summary}}` и откуда возьмёт? - Как сделать, чтобы уведомления приходили только на горячих, а не на каждого? ## Что дальше Дальше, [Урок 20: дожимы](/learn/module-3/lesson-20-drip) (как возвращать клиентов, которые пропали). ## Подробнее (техническая документация) - [Уведомления владельцу](/docs/guide/03-tools/35-notifications) · [Типы уведомлений](/docs/guide/10-reference/106-notifications-reference) --- ## Дожимы (follow-up) URL: https://dosai.pro/learn/module-3/lesson-20-drip # Урок 20. Дожимы (follow-up) > Клиент пишет «я подумаю» и пропадает. Дожимы возвращают его сами: бот вежливо напоминает о себе через заданное время. Это деньги из уже потраченного трафика. ## Цель урока После урока ты умеешь **собрать цепочку дожимов** (до 10 шагов), для каждого задать задержку, тип (ИИ по контексту или точный текст), при желании: точное время отправки, отдельную модель и медиа-файл. И понимаешь ключевую механику: клиент ответил → цепочка сбрасывается, и почему на WhatsApp безопаснее ИИ-текст, а не один шаблон всем. ## Простыми словами **[Дожим](/docs/guide/03-tools/33-drip)** это авто-напоминание клиенту, который замолчал. Ты один раз собираешь **цепочку**: «через 2 часа мягко напомни», «через день пришли программу», «через 3 дня спроси, актуально ли». Бот шлёт эти сообщения сам, по расписанию, пока клиент не ответит. 📍 Где: меню проекта → **«Дожимы»**. ## Слайды урока ## Непонятные слова: на пальцах - **Дожим (follow-up)**: вежливое напоминание тому, кто написал и пропал. Как друг через день сам спросит «ну что, идёшь?», но это делает бот. - **Цепочка**: последовательность напоминаний с паузами. *Пример:* через 2 часа → через день → через 3 дня. Как будильники на разное время: сработали по очереди. - **Шаг**: одно напоминание в цепочке. У каждого своя задержка и свой текст. Как одна ступенька лестницы. - **AI-шаг**: напоминание, которое бот сочиняет сам под конкретного клиента (тратит [токены](/learn/module-1/lesson-08-model-cost), зато у каждого разное, безопаснее для WhatsApp). **Точный текст**, одинаковое фиксированное сообщение (токены не тратит). - **Сброс на ответ**, если клиент ответил, цепочка начинается заново с первого шага (он снова «живой»). Как обнулить таймер, когда человек откликнулся. - **Статус подписчика**, где клиент в цепочке: **ожидает** (только подписался) / **активен** (получает дожимы) / **на паузе** / **завершён** (цепочка прошла до конца) / **отменён** (снят вручную или сам попросил не писать). Как отметка «в процессе / закончил» напротив имени. ## Зачем это нужно Ты уже **заплатил за трафик**, чтобы клиент написал. Если он пропал без дожима, деньги на ветер. Дожим возвращает часть таких клиентов **без единого действия с твоей стороны**. Это один из самых окупаемых инструментов. ## Как собрать цепочку (по шагам) 1. Включи тумблер **«Follow-up»** и в разделе «Дожимы» создай цепочку (до **10 шагов**). 2. Для каждого шага задай: - **Задержку**, «через N»: единицы **минуты (от 15) / часы / дни / недели**; - **Тип шага**: **AI-по-контексту** (бот сам сочинит напоминание по переписке, тратит [токены](/learn/module-1/lesson-08-model-cost)) или **точный текст** (фиксированное сообщение: токены не тратит); - **Текст/промпт** шага. 3. Пример цепочки: шаг 1 через 2 ч (AI «мягко напомни про пробный») → шаг 2 через день (точный текст + программа) → шаг 3 через 3 дня (AI «ещё актуально?»). ### Тонкие настройки шага (не обязательны, но мощно) - **Точное время**: вместо «через N часов» можно указать час (напр. `21:00`). Тогда дожим уйдёт строго в это время **по часовому поясу клиента**, после того как пройдёт задержка. Удобно, чтобы не будить людей ночью. - **Модель этого шага** по умолчанию как у всех дожимов, но можно поставить свою: подешевле для простого «пинга» или поумнее для важного касания. - **Медиа к касанию**: прикрепи файл из [медиа-библиотеки](/learn/module-3/lesson-17-media-library) (программа, расписание, фото), уйдёт вместе с текстом дожима. ## Важные механики - **Сброс на ответ:** клиент ответил → цепочка **начинается заново** с шага 1 (он снова «тёплый»). Это отдельный тумблер в настройках дожимов, по умолчанию включён. - **Заявку передали → дожимы по этому клиенту закрываются навсегда.** Как только бот собрал анкету и [позвал тебя функцией передачи](/learn/module-3/lesson-19-notifications), цепочка останавливается и больше не запускается. Логика простая: клиенту только что сказали «всё зафиксировал, с вами свяжутся», и писать ему через час «вижу, вы просто заняты» стыдно. Бот при этом продолжает отвечать в чате: напишет клиент сам, разговор пойдёт как обычно. - **Статусы подписчика:** **ожидает / активен / на паузе / завершён / отменён**. Любого можно вручную поставить на паузу или снять с цепочки. - **Тональность:** бот отмечает, позитивно или негативно ответил клиент, и не донимает того, кто попросил «отстаньте». ## Антибан (для WhatsApp) Дожимы безопаснее рассылок, потому что бьют **по одному и с паузами** (задержки шагов, от 15 минут, обычно часы/дни), а не залпом по всем. Для шагов с большим числом клиентов на [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) выбирай **AI-текст** (разный для каждого), а не одинаковый шаблон: одинаковые массовые сообщения это главный триггер [бана номера](/learn/module-2/lesson-13-whatsapp-qr). ## Когда нужны / когда нет - Клиенты часто «думают и пропадают» (услуги, запись, дорогая покупка). - Импульсные покупки, где решают сразу: дожим менее полезен. ## Частые ошибки - **Слишком частые/навязчивые дожимы** → раздражение и отписки. Минуты доступны (от 15), но для дожимов человечнее часы и дни. - **Один и тот же шаблон всем на WhatsApp** → риск бана. Используй AI-шаги (у каждого свой текст). - **Забыл включить тумблер «Follow-up»** → шаги настроены, но цепочка не работает. Проверь, что follow-up включён. ## Вопросы новичка - **Через сколько времени напоминать?** По-человечески: первый дожим через пару часов, дальше, через день-два-три. Минуты и «каждый час» раздражают и ведут к отпискам. - **Клиент ответил на дожим, что дальше?** Бот подхватывает разговор как обычно, а цепочка сбрасывается. Ответил, значит снова тёплый. - **Клиент оставил заявку: его тоже будут дожимать?** Нет. Как только бот передал заявку тебе, дожимы по этому диалогу закрываются насовсем: человеку уже сказали «с вами свяжутся», и напоминать ему нечего. Отвечать в чате бот при этом продолжает. - **Не забанят ли за дожимы в WhatsApp?** Дожимы бьют по одному и с паузами (не залпом), поэтому безопаснее рассылок. Для массовых шагов используй AI-текст (у каждого свой) вместо одинакового шаблона: так ещё безопаснее. - **Сколько шагов делать?** Обычно 3-4 достаточно. Максимум, 10, но не превращай напоминания в навязчивость. - **Клиент просит «отстаньте»: бот поймёт?** Да, он это учитывает (тональность) и не будет донимать. Такого можно и вручную поставить на паузу. - **Можно к дожиму приложить файл?** Да в шаге есть «Медиа к касанию»: прикрепи программу/расписание из [медиа-библиотеки](/learn/module-3/lesson-17-media-library). ## Проверь себя - Что происходит с цепочкой, когда клиент ответил на дожим? - В каких единицах задаётся задержка шага и какая минимальная пауза? - Почему на WhatsApp для массовых шагов безопаснее AI-текст, а не один шаблон всем? ## Что дальше Дальше это [Урок 21: теги и сегментация](/learn/module-3/lesson-21-tags). ## Подробнее (техническая документация) - [Дожимы (follow-up)](/docs/guide/03-tools/33-drip) · [Статусы подписчиков](/docs/guide/10-reference/103-statuses) --- ## Теги и сегментация URL: https://dosai.pro/learn/module-3/lesson-21-tags # Урок 21. Теги и сегментация > Бот сам расставляет клиентам ярлыки (направление, интерес, тип запроса), а ты потом удобно фильтруешь и сегментируешь базу. ## Цель урока После урока ты понимаешь, что такое **тег** и как бот сам размечает клиентов по ходу диалога, умеешь завести **словарь тегов** (имя + цвет + описание, которое читает бот) и настроить функцию «Работа с тегами». И знаешь, зачем это нужно: чтобы фильтровать [лидов](/learn/module-4/lesson-25-leads) по сегментам и слать [рассылки](/learn/module-3/lesson-22-broadcasts) точечно. ## Простыми словами **Тег** это ярлык на клиенте: «#английский», «#ент», «#it-дети», «#пробный-урок», «нет ответа». Бот может **сам** ставить такие ярлыки по ходу разговора, а ты потом фильтруешь [лидов](/learn/module-4/lesson-25-leads) по тегам и делаешь [рассылки](/learn/module-3/lesson-22-broadcasts) по нужному сегменту. 📍 Где: раздел «Теги» (словарь) + [функция](/learn/module-3/lesson-15-functions-overview) на боте. ## Слайды урока ## Непонятные слова: на пальцах - **Тег (ярлык)**, короткая метка на клиенте (до 40 символов): «#английский», «#ент», «#it-дети». Как цветной стикер на папке, по цвету сразу видно, что за клиент. - **Описание тега**: пояснение, что тег значит. Его читает **и бот**, по описанию он решает, когда ставить тег. *Пример:* тег «#ент» с описанием «Подготовка к ЕНТ» → бот вешает его, когда клиент спрашивает про ЕНТ. - **Сегментация**: деление базы на группы по тегам. *Пример:* все «#английский», одна группа, все «#ент», другая. Как разложить конфеты по коробкам: отдельно шоколад, отдельно карамель. - **Словарь тегов**: список всех твоих ярлыков с описаниями и цветом. Как список разрешённых наклеек, чтобы бот не плодил похожие («ент»/«ЕНТ»/«подготовка ент»). - **Авто-создание тегов**: бот сам заводит новый ярлык, если подходящего нет (пометит «создано ИИ»). Удобно, но без словаря легко получить «зоопарк» похожих меток. - **Взаимоисключающие теги**: метки, из которых верна только одна (одно основное направление вместо другого). Для них разрешают боту снимать/менять теги, чтобы не висели оба сразу. - **Зеркалятся (лид ↔ диалог)**: тег появляется и на [клиенте](/learn/module-4/lesson-25-leads), и на [переписке](/learn/module-4/lesson-24-dialogs) одновременно. Поставил в одном месте: виден в обоих. ## Зачем это нужно Чтобы **не смотреть всех клиентов подряд**, а работать с группами: отправить объявление только тем, кто интересовался «#английский», перезвонить всем «горячим» по ЕНТ, увидеть, сколько клиентов спрашивали про конкретное направление. Это основа сегментации базы. ## Как включить (по шагам) Теги, **включаемая функция** (по умолчанию бот теги не трогает): 1. В «Функциях» добавь **«Работа с тегами»**. 2. Настрой поведение: - **Разрешить создавать новые теги**: бот заведёт новый ярлык, если подходящего нет (пометит «создано ИИ»). Выкл → бот выбирает только из твоего словаря на странице «Теги». - **Разрешить снимать/менять теги**: нужно для взаимоисключающих категорий (например одно основное направление вместо другого). По умолчанию бот только **добавляет**, ранее поставленные (в т.ч. твои) не снимает. ## Пример (образовательный центр «Профи») Бот по контексту ставит теги «#английский» / «#ент» / «#it-дети» / «#пробный-урок». Потом ты в [лидах](/learn/module-4/lesson-25-leads) фильтруешь «#ент» и запускаешь по ним [рассылку](/learn/module-3/lesson-22-broadcasts) про интенсив подготовки. ## Где видно Раздел «Теги», словарь всех тегов: **имя** (до 40 символов), **цвет**, **описание** (его видит и бот) и пометка, кто поставил (оператор или ИИ). Удаление тега из словаря **не снимает** его с уже помеченных клиентов: это сделано намеренно, чтобы не терять историю. Теги зеркалятся между [лидом](/learn/module-4/lesson-25-leads) и [диалогом](/learn/module-4/lesson-24-dialogs); по ним строятся топ-теги в [отчётах](/learn/module-4/lesson-26-analytics-reports). ## Когда нужны / когда нет - У тебя разные типы клиентов и ты хочешь работать с ними по-разному. - Все клиенты однотипные: можно не включать. ## Частые ошибки - **Разрешили боту создавать теги без нужды** → зоопарк похожих ярлыков. Для чётких категорий держи словарь и выключи авто-создание. - **Ждут теги без включённой функции**: их нет, пока не добавил «Работу с тегами». ## Вопросы новичка - **Нужно ли включать теги сразу?** Нет, это по желанию. Полезно, когда клиенты разные и ты хочешь работать с ними по-группам. Все однотипные: можно не включать. - **Бот не ставит теги: почему?** Скорее всего не добавлена [функция «Работа с тегами»](/learn/module-3/lesson-15-functions-overview): без неё бот теги не трогает. - **У меня расплодились похожие теги.** Заведи чёткий словарь на странице «Теги» и выключи авто-создание: бот будет выбирать только из твоего списка. - **Зачем вообще теги, если есть [статус лида](/learn/module-1/lesson-09-lead-data)?** Статус, «насколько горячий». Теги про что угодно ещё (направление, тип запроса, возраст ученика). Вместе дают удобные фильтры для [рассылок](/learn/module-3/lesson-22-broadcasts). - **Как бот понимает, какой тег поставить?** По его **описанию** в словаре. Тег «#ент» с описанием «Подготовка к ЕНТ» → бот вешает его, когда клиент спрашивает про ЕНТ. Чёткое описание = точная разметка. ## Проверь себя - Из чего состоит тег (три части) и какую из них читает сам бот? - Что будет с уже помеченными клиентами, если удалить тег из словаря? - Чем тег отличается от статуса лида и зачем нужны оба? ## Что дальше Дальше, [Урок 22: рассылки по базе](/learn/module-3/lesson-22-broadcasts) (как раз по этим сегментам). ## Подробнее (техническая документация) - [Теги и сегментация](/docs/guide/03-tools/34-tags) · [Типы клиента и статусы](/docs/guide/10-reference/103-statuses) --- ## Рассылки по базе URL: https://dosai.pro/learn/module-3/lesson-22-broadcasts # Урок 22. Рассылки по базе > Массово написать по своей базе контактов: акция, новый набор, напоминание. С сегментами, расписанием и кнопками. ## Цель урока После урока ты умеешь **отправить рассылку по Telegram-базе**: написать текст, добавить кнопки, сузить до нужного сегмента (статус, тег, рекламная кампания), поставить на отложенный запуск и следить за доставкой. И понимаешь, почему рассылок по WhatsApp нет намеренно, а вернуть клиента туда безопасно умеют [дожимы](/learn/module-3/lesson-20-drip). ## Простыми словами **Рассылка** это когда нужно оповестить **сразу многих** клиентов из твоей базы: «у нас акция», «новая услуга», «напоминаем о записи». В отличие от [дожимов](/learn/module-3/lesson-20-drip) (они догоняют одного замолчавшего), рассылка: это одно сообщение многим. ⚠️ Важно сразу: **рассылки работают только в [Telegram](/learn/module-2/lesson-12-channels-telegram)**. По WhatsApp массовых рассылок в DOS AI **нет, намеренно**: массовая отправка это самая частая причина [бана номера](/learn/module-2/lesson-13-whatsapp-qr). Вернуть клиента в WhatsApp безопасно умеют [дожимы](/learn/module-3/lesson-20-drip): они пишут по одному и с паузами. 📍 Где: меню проекта → **«Рассылки»** (по базе Telegram-контактов). ## Слайды урока ## Непонятные слова: на пальцах - **Рассылка**: одно сообщение, отправленное сразу многим клиентам. Как объявление на доске подъезда: написал раз, увидели все. - **База (контактов)**: список людей, которые уже тебе писали. Как записная книжка клиентов: рассылка идёт по ней, а не по чужим номерам. - **Сегмент**, часть базы по признаку: [статус лида](/learn/module-1/lesson-09-lead-data), [тег](/learn/module-3/lesson-21-tags) или рекламная кампания (slug). *Пример:* все с тегом «#английский». Как позвать на день рождения не весь класс, а только друзей. - **Кнопки**: быстрые действия под сообщением (до 8). Два типа: **«ответ боту»** (клиент жмёт, боту уходит готовая фраза, разговор продолжается) и **«ссылка»** (открывает адрес). Как готовые ответы: клиент жмёт, а не печатает. - **Рекламная кампания (slug)**: метка кампании из [рекламной ссылки](/learn/module-2/lesson-14-ad-gating), по которой пришёл клиент. Позволяет слать только тем, кто пришёл с конкретной рекламы. - **Отложенный запуск**: рассылка уходит в назначенное время сама, постепенно (бережно к анти-бану). Как поставить будильник: настроил вечером, ушло утром. Запланированную можно остановить до старта. - **Чем отличается от [дожима](/learn/module-3/lesson-20-drip)**: дожим догоняет **одного** замолчавшего; рассылка, одно сообщение **многим** сразу. И работают они в разных местах: рассылка, только Telegram, дожимы в любом канале, включая WhatsApp. ## Зачем это нужно Вернуть старых клиентов, объявить акцию, поднять продажи в «мёртвый» день. У тебя уже есть база: рассылка монетизирует её без затрат на новый трафик. ## Как сделать (по шагам) 1. Раздел «Рассылки» → создай рассылку. 2. Напиши **текст** (до 4000 символов) + добавь **кнопки** (до 8): тип «ответ боту» (подставит фразу как сообщение клиента) или «ссылка» (откроет адрес). 3. Выбери **сегмент**, кому слать, по [статусу лида](/learn/module-1/lesson-09-lead-data), [тегу](/learn/module-3/lesson-21-tags) или рекламной кампании (не всем подряд, а целевой группе). 4. Поставь **время**: «сейчас» или отложенный запуск; следи за доставкой (получатели, статус). Запланированную можно остановить. 📌 Рассылка идёт **постепенно** (бережно к анти-бану), а кто написал «стоп», **исключается автоматически**. ## Пример (образовательный центр «Профи») Сегмент «тег #английский» → рассылка «🎓 Открыт набор на осенний интенсив по английскому! Мини-группы до 8 человек, старт 1 сентября. Для учеников центра, скидка 15%.» с кнопкой «Ответ боту: интенсив». Клиент жмёт → боту уходит «интенсив» → бот продолжает разговор и записывает. Часть вернётся. ## Когда нужно / чего тут нет - Есть Telegram-база и повод (акция, новость, напоминание). - Рассылки по **WhatsApp** в DOS AI **нет, намеренно**: массовая отправка это главная причина [бана номера](/learn/module-2/lesson-13-whatsapp-qr). Для возврата клиентов в WhatsApp используй [дожимы](/learn/module-3/lesson-20-drip): они безопасные (по одному, с паузами). ## Частые ошибки - **Рассылка всем подряд без сегмента** → низкий отклик и отписки. Сегментируй по [тегам](/learn/module-3/lesson-21-tags). - **Ищут кнопку «рассылка по WhatsApp»** → её нет, и это защита твоего номера от бана. Массовые сообщения, только Telegram; в WhatsApp, [дожимы](/learn/module-3/lesson-20-drip). ## Вопросы новичка - **Можно рассылать по WhatsApp?** Нет, и это сделано специально: массовые рассылки это причина №1 [бана номера](/learn/module-2/lesson-13-whatsapp-qr), терять номер из-за одной акции глупо. Рассылки работают по Telegram-базе, а вернуть конкретного клиента в WhatsApp безопасно умеют [дожимы](/learn/module-3/lesson-20-drip). - **Кому слать?** Не всем подряд: выбери [сегмент](/learn/module-3/lesson-21-tags). Целевое сообщение даёт больше отклика и меньше отписок. - **Чем рассылка отличается от дожима?** Дожим, личное напоминание одному замолчавшему. Рассылка, одно объявление многим. Для «вернуть конкретного», [дожим](/learn/module-3/lesson-20-drip), для «объявить акцию всем», рассылка. - **Как понять, что дошло?** В разделе «Рассылки» видно число получателей и статус; запланированную рассылку можно остановить до старта. - **А если клиент не хочет рассылок?** Кто написал «стоп»: исключается из рассылок автоматически, вручную ничего чистить не надо. - **Чем отличаются кнопки «ответ боту» и «ссылка»?** «Ответ боту» подставляет готовую фразу как сообщение клиента (бот продолжит разговор), «ссылка» открывает адрес (страница, программа). ## Проверь себя - По какому каналу работают рассылки и почему по WhatsApp их нет? - По каким признакам можно сузить рассылку до сегмента? - Что делает кнопка «ответ боту» и чем отличается от кнопки «ссылка»? ## Что дальше Дальше это [Урок 23: письмо клиенту на почту](/learn/module-3/lesson-23-email-customer). ## Подробнее (техническая документация) - [Рассылки по базе](/docs/guide/03-tools/39-broadcasts) · [Гигиена и антибан](/docs/guide/02-channels/23-anti-ban) --- ## Письмо клиенту (email от бота) URL: https://dosai.pro/learn/module-3/lesson-23-email-customer # Урок 23. Письмо клиенту (email от бота) > Бот может отправить клиенту письмо: подтверждение записи, реквизиты, инструкцию, договор. Ответы клиента придут на твой рабочий адрес, если указать его в настройках функции. ## Цель урока После урока ты умеешь подключить функцию **«Письмо клиенту»** и понимаешь главное: **тему и текст письма бот пишет сам** по ходу разговора, ты задаёшь только **адрес для ответа** (свою почту). И знаешь, чем это отличается от [уведомления тебе](/learn/module-3/lesson-19-notifications) (там сигнал ТЕБЕ, тут письмо КЛИЕНТУ). ## Простыми словами Помнишь, в [Уроке 18](/learn/module-3/lesson-18-booking) бот записал Айгерим на пробный урок? Логичное продолжение, чтобы бот **сам прислал ей на почту подтверждение** с датой и адресом. Кроме сообщений в мессенджере, бот умеет **отправлять клиенту email**: подтверждение записи, реквизиты, инструкцию «как добраться». Это ещё одна [функция](/learn/module-3/lesson-15-functions-overview), как [уведомление тебе](/learn/module-3/lesson-19-notifications), только письмо идёт **клиенту**. ## Слайды урока ## Непонятные слова: на пальцах - **Email от бота**: обычное письмо на почту клиента, которое бот **пишет и отправляет сам**. *Пример:* «Вы записаны на 25 июля, вот адрес». Как секретарь, который после звонка сам составляет письмо с деталями: ты его текст не пишешь. - **Тема и текст письма**: их бот **сочиняет сам** под конкретный разговор (ты их НЕ задаёшь). Письмо уходит с адреса `noreply@dosai.pro` от имени твоей компании. - **«Адрес для ответа» (reply_to)**, единственное, что задаёшь ты: куда придёт ответ клиента на письмо. *Пример:* поставил свою почту: клиент нажал «ответить», и письмо пришло тебе. Как обратный адрес на конверте. - **Gmail (продвинутый вариант)**: отправка от твоего рабочего ящика Google (отдельная функция). Новичку не нужно, начинай с обычного письма через встроенную почту. ## Зачем это нужно Некоторые вещи удобнее письмом: чек, договор, подробная инструкция, реквизиты. Бот отправит их автоматически, а клиент сохранит у себя в почте. ## Как настроить (по шагам) 1. В «Функциях» добавь шаблон **«Письмо клиенту»**. 2. Укажи **«адрес для ответа»**: твою почту, куда придёт ответ клиента на письмо. Больше ничего задавать не нужно: **тему и текст бот напишет сам** по ходу разговора, письмо уйдёт с `noreply@dosai.pro` от имени компании. 3. В [промпте](/learn/module-1/lesson-06-system-prompt) опиши, когда слать письмо: «после записи на пробный отправь клиенту подтверждение на email». Для Google Workspace есть продвинутый вариант: отправка от **твоего Gmail** (отдельная функция). Новичкам проще начать с обычного письма. ## Пример (образовательный центр «Профи») Айгерим записалась на пробный урок ([Урок 18](/learn/module-3/lesson-18-booking)). Бот сам составляет и отправляет ей email: «Вы записаны на пробный по математике 25 июля в 15:00. Адрес: Кабанбай батыра 28. Ответите на это письмо: оно придёт нам». Ответ Айгерим падает на твою почту (тот самый «адрес для ответа»). ## Когда нужно / когда нет - Нужно слать чеки, договоры, реквизиты, подробные инструкции. - Всё решается в мессенджере, почта клиентам не нужна: можно пропустить. ## Не путай - Это письмо **клиенту**. А [уведомления тебе](/learn/module-3/lesson-19-notifications) (о горячем лиде), другая функция. - Системные письма аккаунта (чеки об оплате [баланса](/learn/module-6/lesson-29-billing)) приходят автоматически, их настраивать не надо. ## Вопросы новичка - **Обязательно ли слать письма?** Нет. Если всё решается в мессенджере, пропусти. Полезно там, где нужен «документ»: чек, договор, подробная инструкция. - **Куда придёт ответ клиента на письмо?** На адрес, который ты укажешь в поле «ответить на» (reply_to): обычно твоя почта. - **Бот сам решит, когда слать письмо?** Опиши это в [промпте](/learn/module-1/lesson-06-system-prompt): «после записи отправь клиенту подтверждение на email». Тогда: сам. - **Это то же, что [уведомление мне](/learn/module-3/lesson-19-notifications)?** Нет: письмо идёт **клиенту**, уведомление, **тебе**. Разные функции. - **Мне нужно писать текст письма?** Нет. Тему и текст бот составляет сам под разговор. Ты задаёшь только адрес для ответа и в промпте: повод отправить. - **С какого адреса уходит письмо?** С `noreply@dosai.pro`, но от имени твоей компании. Ответ клиента придёт на твою почту («адрес для ответа»). ## Проверь себя - Кто пишет тему и текст письма: ты или бот? Что из этого задаёшь ты? - Куда придёт ответ клиента, если он нажмёт «ответить» на письмо? - Чем письмо клиенту отличается от уведомления тебе ([Урок 19](/learn/module-3/lesson-19-notifications))? ## Что дальше На этом инструменты бота закончены, Айгерим записана и получила письмо. Дальше, [Модуль 4: работа с клиентами (CRM)](/learn/module-4/lesson-24-dialogs), где ты увидишь её живьём в «Диалогах». ## Подробнее (техническая документация) - [Письмо клиенту](/docs/guide/03-tools/38-email-customer) · [Gmail](/docs/guide/05-integrations/53-gmail) --- ## Исходящие диалоги (бот пишет первым) URL: https://dosai.pro/learn/module-3/lesson-41-outreach # Урок 41. Исходящие диалоги (бот пишет первым) > Есть база заявок, но руки не доходят обзвонить? Бот сам напишет первым в WhatsApp по каждому номеру. Аккуратно, по капле, с паузами и лимитами. ## Цель урока После урока ты умеешь **включить исходящие**, написать текст первого сообщения, загрузить номера и запустить рассылку так, чтобы бот сам писал первым по твоей базе заявок. И понимаешь **главный риск** (это серый режим, WhatsApp может забанить номер) и как встроенные защиты его снижают. ## Простыми словами Обычно бот отвечает тем, кто написал сам. **Исходящие** переворачивают это: бот **сам пишет первым** людям из твоей базы заявок, как менеджер, который обзванивает лиды, только в WhatsApp и автоматически. ⚠️ Важно сразу: это **серый режим**. Ты пишешь **первым незнакомым** номерам, а WhatsApp считает это спам-паттерном и может [забанить номер](/learn/module-2/lesson-13-whatsapp-qr). Все защиты (лимиты, паузы, прогрев) только **снижают** риск. Не включай на главном рабочем номере, если не готов потерять переписку с текущими клиентами. Включить может **только владелец**, под свою ответственность. 📍 Где: меню проекта → **«Исходящие»**. ## Слайды урока ## Непонятные слова: на пальцах - **Исходящий (холодный) диалог**: бот сам пишет первым человеку, который тебе ещё не писал. Как холодный звонок менеджера, только в WhatsApp. - **Серый режим**: полу-разрешённый способ. WhatsApp не любит сообщения незнакомцам и может [забанить номер](/learn/module-2/lesson-13-whatsapp-qr). Поэтому включаешь под свою ответственность. - **Тип заявки**: категория обращений со своим текстом (например «SMM», «Таргет»). Для однотипных заявок хватает одного типа «Основной». - **Подстановки** `{{имя}}` / `{{услуга}}`: бот вставит имя и услугу из заявки. Нет данных, кусочек аккуратно уберётся, сырые скобки клиенту не уйдут. - **Ротация**: несколько вариантов текста, бот шлёт случайный. Чтобы со всех номеров не летел один и тот же текст (это красный флаг для WhatsApp). - **Прогрев номера**: свежий номер первые дни шлёт мало, потом больше. Резкий старт с большого объёма это сигнал бана. - **Дожим**: [напоминание](/learn/module-3/lesson-20-drip) тому, кто не ответил на первое сообщение. Тоже готовый текст, останавливается, как только человек ответит. ## Зачем это нужно У тебя копится база заявок (с рекламы, из старых чатов, из CRM), а обзвонить руками некогда. Исходящие превращают эту базу в диалоги автоматически: бот пишет первым, кто ответил, переходит в обычный разговор с основным ботом проекта. ## Как сделать (по шагам) 1. **Включи функцию** (только владелец): меню проекта → «Исходящие» → поставь галку «Понимаю риск и беру ответственность» → «Включить». Дальше **мастер сам ведёт по трём шагам**, формы прямо в нём. 2. **Сообщение**: напиши текст первого сообщения. Пока печатаешь, рядом обновляется **живое превью «Так увидит клиент»**: твоё сообщение в виде WhatsApp-пузыря с подставленным именем. Можно несколько вариантов (ротация) и подстановки `{{имя}}`/`{{услуга}}`. Кнопки-примеры подставят готовый текст, черновик сохраняется сам. 3. **Номера**: вставь список (по одному в строке, можно с именем через запятую). «Показать пример сообщения» покажет, что бот напишет, не отправляя; «Проверить список» разложит базу по бейджам (валидные, дубли, стоп-лист, кто есть в WhatsApp). Позже в кабинете можно подключить [Telegram-ловец](/docs/guide/03-tools/40-outreach) или форму сайта. 4. **Проверка и запуск**: сначала **тест на свой второй номер** одной кнопкой (статус теста виден тут же, а если что-то мешает отправке, мастер прямо напишет причину). Потом «Запустить рассылку»: бот пойдёт писать **по одному**, с паузами и дневным лимитом. 5. **Следи через пульт**: карточка сверху кабинета словами говорит, что происходит («Работает», «Нерабочие часы», «Дневной лимит исчерпан», «Пауза: причина») и показывает «Сегодня: X из Y». Плитки Новые / В очереди / Отправлено / Ответили кликабельны, а фильтр **«Ответил»** показывает, кто и **что именно написал** в ответ, с кнопкой «Открыть диалог». 📌 Бот пишет **не все разом, а по капле**. Например, 100 номеров при лимите 20 в день разойдутся примерно за 5 дней. Это защита номера, а не тормоз. ## Пример (маркетинговое агентство) С таргета за неделю накопилось 40 заявок «интересно, сколько стоит SMM». Руки не дошли ответить всем. Агентство включает Исходящие, тип «SMM» с текстом «Здравствуйте, {{имя}}! Вы оставляли заявку на {{услуга}}. Подскажите, актуально? Готов ответить на вопросы» и грузит 40 номеров. Бот пишет по капле, часть отвечает, дальше подхватывает основной бот и записывает на встречу. База, которая лежала мёртвым грузом, превратилась в диалоги. ## Когда нужно / чего тут опасаться - Есть база заявок в WhatsApp и повод написать первым. - 🚫 **Не включай на главном номере**, если не готов к [бану](/learn/module-2/lesson-13-whatsapp-qr): при потере номера уходит вся переписка с текущими клиентами. Для холодной рассылки безопаснее отдельный номер. - Начинай с **небольшой свежей базы**. Старые базы = выше риск бана. ## Частые ошибки - **Ждут отправку мгновенно.** После запуска бот пишет в течение нескольких минут, а первые 15 минут после подключения канала он специально молчит (защита). Пульт сверху прямо пишет причину ожидания: это норма, не поломка. - **Тестируют на номере, которому уже писали.** Тогда статус будет «Пропущен: уже есть диалог». Для теста нужен свежий номер. - **Ставят на главный клиентский номер и разгоняют объём.** Самый быстрый путь к бану. Свежий номер + маленькая база + постепенный разгон. ## Вопросы новичка - **Бот сам придумывает текст?** Нет. Ты пишешь готовое сообщение, бот отправляет его как есть и подставляет имя/услугу. Поэтому рассылка по списку бесплатна. - **Почему не отправляется сразу?** Бот-рассыльщик просыпается раз в несколько минут, плюс первые 15 минут после подключения канала он молчит (анти-бан). Не гадай: **пульт сверху словами называет причину** («защитная пауза ещё ~N мин», «нерабочие часы», «дневной лимит исчерпан»). - **Могут забанить номер?** Да, это серый режим. Защиты снижают риск, но не убирают. Не ставь на главный номер, начинай с малого. - **Чем отличается от [рассылки](/learn/module-3/lesson-22-broadcasts)?** Рассылка это объявление многим по своей Telegram-базе (кто уже писал). Исходящие это холодный контакт: бот пишет первым незнакомцу в WhatsApp. - **Что если человек просит не писать?** Добавь его в стоп-лист (кнопка у лида), бот больше никогда его не тронет. Чтобы бот сам умел останавливаться по просьбе, включи функцию остановки диалога (видно на вкладке «Безопасность»). - **Как понять, дошло ли?** Вкладка «Статистика»: воронка Отправлено → Прочитано → Ответили с процентами, плюс доставка (✓✓) и время прочтения. Быстрый взгляд: пульт и плитки, они обновляются сами. - **Где увидеть, кто ответил?** Плитка «Ответили» (или фильтр «Ответил» в списке): там имя, номер, **текст ответа** и кнопка «Открыть диалог». Дальше с человеком говорит основной бот. ## Проверь себя - Чем исходящие отличаются от рассылки и от дожима? - Почему это серый режим и на каком номере его лучше не включать? - Кто пишет текст первого сообщения, ты или ИИ, и что это меняет по стоимости? ## Что дальше Дальше это [Урок 24: диалоги, перехват и «AI на паузе»](/learn/module-4/lesson-24-dialogs). ## Подробнее (техническая документация) - [Исходящие диалоги](/docs/guide/03-tools/40-outreach) · [Гигиена и антибан](/docs/guide/02-channels/23-anti-ban) · [Дожимы](/docs/guide/03-tools/33-drip) --- ## Диалоги: перехват и «AI на паузе» URL: https://dosai.pro/learn/module-4/lesson-24-dialogs # Урок 24. Диалоги: перехват и «AI на паузе» > Бот отвечает сам, но иногда нужно вмешаться лично. Раздел «Диалоги» это твой живой центр всех переписок, где ты в любой момент берёшь разговор на себя. ## Цель урока После урока ты умеешь **перехватить любой диалог**: выключить AI на конкретном чате и ответить сам, назначить диалог сотруднику, оставить заметку. И понимаешь автоматику, как только пишет оператор, бот сам встаёт на паузу, а вернётся по [настройке из Урока 11](/learn/module-1/lesson-11-advanced-settings). ## Простыми словами Помнишь, в [Уроке 19](/learn/module-3/lesson-19-notifications) боту прилетело «🔥 горячий лид: Айгерим»? Открываешь «Диалоги», и вот она, живая переписка Айгерим про подготовку к ЕНТ. **[Диалоги](/docs/guide/04-crm/40-dialogs)** это все переписки бота с клиентами в одном месте, в реальном времени. Слева список чатов, справа переписка. Это НЕ [тест-чат](/learn/module-1/lesson-10-test-chat) (там песочница для проверки), тут реальные клиенты. Ты видишь, что отвечает бот, и можешь **в любой момент вмешаться сам**. 📍 Где: меню проекта → **«Диалоги»**. ## Слайды урока ## Непонятные слова: на пальцах - **Диалог**: одна переписка с одним клиентом. Как отдельный чат в телефоне: один человек, один диалог. - **Оператор**: живой человек (ты или менеджер), который отвечает клиенту руками. В отличие от бота, который отвечает сам. - **Перехват**: момент, когда ты берёшь разговор на себя и пишешь клиенту сам. Как перехватить руль у автопилота: дальше рулишь ты. - **Тумблер AI**: переключатель «бот отвечает / не отвечает» на конкретном чате. Выключил, бот молчит, говоришь ты; включил, снова ведёт бот. - **AI на паузе**: бот временно молчит на этом диалоге. *Пример:* начал писать сам, бот замолкает, чтобы не перебивать. Как сказать помощнику «дальше я сам». - **Заметка**: твой личный комментарий к диалогу, который видит команда, но не клиент. Как стикер на карточке: «перезвонить после 18:00». - **Назначить диалог**: закрепить переписку за конкретным сотрудником. Как «этот клиент: на тебе». ## Зачем это нужно Бот закрывает рутину, а сложные случаи (жалоба, нестандартный вопрос, крупная сделка) лучше вести лично. «Диалоги» дают это сделать, не теряя контекст: вся история под рукой. ## Как перехватить разговор («AI на паузе») У каждого диалога есть **тумблер AI**: - **Выключил** → бот замолкает на этом чате, ты отвечаешь сам; - **Включил** → бот снова ведёт разговор. Плюс важная автоматика: **когда ты (оператор) пишешь клиенту, AI сам встаёт на паузу**, чтобы не перебивать. А вернётся ли он сам, зависит от настройки **«Автовозобновление»** из [Урока 11](/learn/module-1/lesson-11-advanced-settings), если она выключена, «Пауза» держится, **пока ты сам не включишь AI обратно**. Это и есть частая ловушка «бот замолчал навсегда». ## Что ещё умеет оператор - Отправлять сообщения, **назначать диалог** участнику команды ([роли](/learn/module-7/lesson-32-roles-members)), он увидит его в «Мои лиды», добавлять заметки (их видит команда, не клиент); - Редактировать/переотправлять сообщение, экспортировать историю; - Видеть в чате весь контекст, собранный ботом: [статус лида](/learn/module-4/lesson-25-leads), [теги](/learn/module-3/lesson-21-tags) (#ент и т.п.), статус [дожима](/learn/module-3/lesson-20-drip), стоимость диалога. ### Фильтр «Ждут ответа»: с чего начинать день Над списком диалогов есть фильтры: по статусу, только непрочитанные, только с выключенным ИИ, отложенные и **«Ждут ответа»** со счётчиком. Последний собирает чаты, где бот **намеренно промолчал** и отвечать должен человек: старая переписка после переподключения канала, знакомый контакт, клиент не с рекламы. Заглядывай туда первым делом. Раньше такие чаты были только помечены значком в списке, и на живых проектах они копились сотнями: человек написал, бот по правилам не вмешался, а оператор этого не заметил. ## Пример Клиент недоволен и пишет резко. Бот распознал негатив и [уведомил тебя](/learn/module-3/lesson-19-notifications). Ты открываешь «Диалоги», **выключаешь AI** на этом чате, лично успокаиваешь клиента, решаешь вопрос, и снова включаешь бота. ## Когда вмешиваться / когда не надо - Жалоба, сложный/дорогой запрос, клиент просит человека. - Обычные вопросы (цена, запись), пусть ведёт бот, не мешай. ## Частые ошибки - **Забыл снова включить AI** после ручного ответа → бот молчит на этом чате. Проверяй тумблер. - **Отвечают из личного WhatsApp, а не через «Диалоги»** → теряется история и статистика. Веди через кабинет. ## Вопросы новичка - **Как понять, что клиенту отвечает бот, а не я?** По тумблеру AI на диалоге и по автору сообщений в ленте. Пока тумблер включён, отвечает бот. - **Я начал писать сам: бот меня перебьёт?** Нет. Как только пишет оператор, AI сам встаёт на паузу. Поведение настраивается в [Уроке 11](/learn/module-1/lesson-11-advanced-settings). - **Ответил сам: теперь бот молчит навсегда?** Он на паузе на этом чате. Верни тумблер AI, и бот снова подхватит (или сработает авто-возобновление, если включено). - **Можно отвечать клиенту из обычного WhatsApp на телефоне?** Технически да, но тогда история и статистика теряются. Лучше вести всё через «Диалоги» в кабинете. - **Клиент нагрубил, бот справится?** Часто да, но жалобы и конфликт лучше вести лично: [бот тебя предупредит](/learn/module-3/lesson-19-notifications), ты перехватишь. - **Отключил AI и ответил, бот сам включится обратно?** Только если включено «Автовозобновление» ([Урок 11](/learn/module-1/lesson-11-advanced-settings)). Иначе верни тумблер AI руками. ## Проверь себя - Как перехватить один диалог, не выключая бота на остальных? - Что происходит с ботом, когда оператор пишет клиенту, и от какой настройки зависит, вернётся ли он сам? - Почему нельзя отвечать клиенту из личного WhatsApp на телефоне? ## Что дальше Все заявки из диалогов складываются в [Лиды](/learn/module-4/lesson-25-leads): это следующий урок. Там ты увидишь Айгерим уже готовой карточкой со всем, что собрал бот. ## Подробнее (техническая документация) - [Диалоги: лента, перехват, AI на паузе](/docs/guide/04-crm/40-dialogs) · [Контроль оператора](/docs/guide/01-bot/15-advanced-settings) --- ## Лиды, статусы и источники URL: https://dosai.pro/learn/module-4/lesson-25-leads # Урок 25. Лиды, статусы и источники > Каждую заявку бот сам кладёт в раздел «Лиды», это твоя воронка продаж. Разберём, как её читать, вести и понимать, откуда пришёл клиент. ## Цель урока После урока ты умеешь **читать и вести воронку**: понимаешь разницу статуса («насколько горячий») и стадии («на каком шаге разговора»), видишь скоринг, сумму сделки и источник каждого лида, фильтруешь «горячих» и не теряешь ни одной заявки. Это место, где всплывает **всё**, что бот собрал в прошлых уроках. ## Простыми словами Вспомни всё, что бот собирал про Айгерим по ходу курса: [имя и телефон](/learn/module-1/lesson-09-lead-data), тег [#ент](/learn/module-3/lesson-21-tags), [источник-рекламу](/learn/module-2/lesson-14-ad-gating), сумму сделки. Вот оно, собрано в одну карточку. **[Лид](/docs/guide/04-crm/41-leads) это заявка**: клиент, которого поймал бот, с его контактами и запросом. Бот **сам** вытаскивает из переписки имя, телефон, email, нужные поля ([как, Урок 9](/learn/module-1/lesson-09-lead-data)) и создаёт карточку. Все карточки вместе, твоя воронка, склад результата всех инструментов. 📍 Где: меню проекта → **«Лиды»** (и общая воронка по всем проектам, глобальное меню → «CRM»). ## Слайды урока ## Непонятные слова: на пальцах - **Лид**, заявка: клиент с контактами и запросом. Как заполненная карточка гостя: «Айгерим, +7…, сын: подготовка к ЕНТ по математике». - **Воронка**: путь клиента от «просто спросил» до «купил», разбитый на этапы. Как горка в аквапарке: наверху много людей, донизу (до покупки) доезжают не все, задача сузить потери. - **Статус лида**, насколько клиент горячий: потенциальный → квалифицированный → горячий → купил/потерян. Как светофор: зелёный: почти твой. - **Скоринг**, число 0-100 рядом со статусом: насколько бот оценил готовность клиента ([из чего бот его берёт, Урок 9](/learn/module-1/lesson-09-lead-data)). *Пример:* у Айгерим «Скоринг: 70», тёплая, ей стоит перезвонить. - **Сумма сделки**: ожидаемая или закрытая сумма по лиду. Важно: она **идёт в [аналитику](/learn/module-4/lesson-26-analytics-reports) как выручка по источнику**: так видно, какая реклама приносит деньги, а какая только клики. - **Стадия диалога**: на каком шаге *разговора* клиент (поздоровался → уточняет → договорились). Не путай со статусом: статус, «горячность», стадия, «шаг беседы». - **Источник**, откуда клиент пришёл: реклама в Instagram, [переход из объявления (CTWA)](/learn/module-2/lesson-14-ad-gating), сайт. Как спросить «вы от кого?», чтобы знать, какая реклама работает. - **CTWA**: «Click To WhatsApp», переход из рекламы прямо в WhatsApp ([Урок 14](/learn/module-2/lesson-14-ad-gating)). *Пример:* увидел объявление → нажал «написать» → попал к боту. Метка помогает понять, какое объявление сработало. - **UTM-метки**: невидимые ярлычки в ссылке, которые говорят, из какой именно рекламы пришёл человек. Как штрихкод на товаре: считал, знаешь, откуда он. - **AI-резюме лида**: короткая выжимка переписки, которую бот делает сам. *Пример у Айгерим:* «Сын, 11 класс, подготовка к ЕНТ (математика). Записана на пробный урок». Не читать весь чат, а увидеть суть за 5 секунд. ## Зачем это нужно Чтобы **ни один клиент не потерялся** и было видно, кто на каком этапе. Без CRM заявки тонут в переписках; с ней: аккуратный список, который можно фильтровать, дожимать и анализировать. ## Статусы лида (насколько горячий) **7 статусов:** нет статуса → потенциальный → квалифицированный → **горячий** → конверсия (купил) / резерв / потерян. Бот проставляет их сам по ходу разговора, ты можешь менять вручную. ## Стадии диалога (на каком шаге воронки) **6 стадий**, от приветствия до завершения. Бот двигает клиента по ним автоматически. Не путай со статусом: **статус**, «насколько горячий», **стадия**, «на каком шаге разговора». ## Источники и реклама По каждому лиду видно, **откуда он пришёл**: рекламная площадка, [клик по рекламе (CTWA)](/learn/module-2/lesson-14-ad-gating): переход из объявления в WhatsApp, тип медиа, UTM-метки. Есть карточка источника и фильтры: понимаешь, какая реклама реально приводит клиентов. ## Скоринг, сумма сделки и менеджер (что ещё в карточке) Открой карточку лида (как у Айгерим на скрине выше) кроме статуса там: - **Скоринг (0-100)**: насколько бот оценил готовность клиента. Смотри вместе со статусом: «квалифицирован, скоринг 70» = стоит перезвонить. - **Сумма сделки**: ожидаемая/закрытая сумма. Она **идёт в [аналитику](/learn/module-4/lesson-26-analytics-reports) как выручка по объявлению/источнику**: так ты видишь окупаемость рекламы в деньгах, а не в кликах. - **Менеджер**: закрепи лида за сотрудником ([роли, Урок 32](/learn/module-7/lesson-32-roles-members)); он увидит его в фильтре «Мои лиды». - **Резюме от AI** и кнопка **«Перейти в чат»**, сразу открыть [диалог](/learn/module-4/lesson-24-dialogs) этого лида. ## Что можно делать со списком Фильтры (статус, дата, поиск, источник, [теги](/learn/module-3/lesson-21-tags)), массовые операции, экспорт CSV/PDF, полная история диалога по лиду, **AI-резюме** лида, сохранённые виды, слияние дублей, **напоминания** (уведомление в заданное время «перезвонить Айгерим»). ## Пример (образовательный центр «Профи») Айгерим пришла по [рекламе в Instagram](/learn/module-2/lesson-14-ad-gating), спросила про подготовку к ЕНТ по математике для сына. Бот собрал имя и телефон, поставил статус «квалифицирован» и скоринг 70, сумму сделки 45 000 ₸, тег [#ент](/learn/module-3/lesson-21-tags). Ты фильтруешь «квалифицированные за сегодня», видишь её карточку с AI-резюме, ставишь напоминание перезвонить, или сразу «Перейти в чат». ## Как пользоваться / частые ошибки - Раз в день просматривай «горячих» и «квалифицированных»: это деньги. - **Игнорируют источники** → не видят, какая реклама окупается. Смотри атрибуцию. - **Не дожимают потенциальных** → включи [дожимы](/learn/module-3/lesson-20-drip). ## Вопросы новичка - **Мне нужно вручную заносить клиентов?** Нет. Бот сам создаёт карточку лида и собирает контакты из переписки. Ты только работаешь с готовым списком. - **В чём разница между статусом и стадией ещё раз?** Статус = «насколько горячий» (потенциальный/горячий/купил). Стадия = «на каком шаге разговора». Одно про интерес, другое про прогресс беседы. - **Как понять, какая реклама приносит клиентов?** Смотри источник у лидов и фильтруй по нему. Видно, из какого объявления/площадки пришёл каждый. - **Клиент один, а карточки две, что делать?** Есть слияние дублей: объединяешь в одну карточку, история не теряется. - **Боюсь забыть перезвонить.** Поставь напоминание на лиде: придёт оповещение в нужное время. - **Что за число «Скоринг» рядом со статусом?** Оценка готовности клиента 0-100, которую бот ставит сам. Чем выше, тем теплее лид. ## Проверь себя - В чём разница между статусом лида и стадией диалога? - Зачем в карточке «сумма сделки» и куда это число потом попадает? - Как понять, какая реклама приносит клиентов, а какая только клики? ## Что дальше Суммы сделок и источники из лидов складываются в цифры выручки, дальше [Урок 26: аналитика и авто-отчёты](/learn/module-4/lesson-26-analytics-reports), где видно, какая реклама окупается. ## Подробнее (техническая документация) - [Лиды и статусы](/docs/guide/04-crm/41-leads) · [Стадии диалога](/docs/guide/04-crm/42-stages) · [Все статусы и типы](/docs/guide/10-reference/103-statuses) --- ## Аналитика и авто-отчёты URL: https://dosai.pro/learn/module-4/lesson-26-analytics-reports # Урок 26. Аналитика и авто-отчёты владельцу > Видеть цифры бизнеса в кабинете и получать готовые сводки автоматически, в Telegram или на почту. Чтобы понимать, работает ли бот на результат. ## Цель урока После урока ты **читаешь аналитику проекта** (диалоги, лиды, конверсия, время ответа, стоимость лида) и понимаешь честные определения терминов; умеешь **включить авто-отчёт**, который сам приходит в Telegram по расписанию; и знаешь, что за это отвечает **отдельный «Бот отчётов»**, а не главный бот проекта. ## Простыми словами Помнишь, в [Уроке 25](/learn/module-4/lesson-25-leads) у карточки Айгерим была **сумма сделки**, и мы сказали: «она пойдёт в аналитику как выручка по источнику»? Вот сюда она и приходит. **Аналитика** отвечает на вопрос «а работает ли всё это?»: сколько было диалогов, сколько [заявок](/learn/module-4/lesson-25-leads), какая конверсия, как быстро бот отвечает, во сколько обходится один лид. А **отчёты** присылают эти цифры тебе сами: раз в день/неделю/месяц, без захода в кабинет. Даже [теги](/learn/module-3/lesson-21-tags) Айгерим (#ент, #английский) видны в живой сводке. 📍 Где: меню проекта → **«Аналитика»** и **«Отчёты»**; общая сводка по всем ботам: глобальный «Дашборд». ## Слайды урока ## Непонятные слова: на пальцах - **Аналитика**, цифры о работе бота: сколько диалогов, заявок, какая конверсия. Как приборная панель в машине: видно скорость и расход, а не «примерно едем». - **Конверсия**: какая доля обратившихся стала заявками (лиды ÷ диалоги), в процентах. *Пример:* 100 написали, 25 оставили заявку → конверсия 25%. Как «сколько зашедших в магазин что-то купили». - **Стоимость лида**: во сколько обошёлся один пойманный [лид](/learn/module-4/lesson-25-leads) (расход на ИИ ÷ число лидов). Как «цена за клиента»: видно, окупается ли реклама + бот. - **Время ответа**: сколько прошло от сообщения клиента до ответа бота. Чем меньше, тем лучше: быстрый ответ = меньше ушедших. - **Инсайты**, авто-подсказки платформы прямо в аналитике: «диалогов +100%», «время ответа 19.8с: люди могут уходить». Как штурман, который сам говорит, на что смотреть. - **Логи событий**, «дневник» действий бота, что вызвал, что искал, что сделал. Как чёрный ящик самолёта, если что-то пошло не так, тут видно, что именно. - **Отчёт**: готовая сводка цифр, которую бот присылает сам в Telegram/на почту. Как утренняя газета с результатами: открыл, всё главное на одной странице. - **Бот отчётов**: **отдельный** Telegram-бот, который шлёт сводки тебе (владельцу). Не тот, что отвечает клиентам. Подключается один раз. - **Дашборд**: общая сводка по всем твоим ботам сразу. Как пульт со всеми лампочками: один взгляд, и понятно, где что. ## Что показывает аналитика - **Диалоги, лиды, конверсия, время ответа, стоимость лида**; - **Инсайты**: авто-подсказки («время ответа растёт», «диалогов больше на N%»); - Графики (сообщения/день, лиды/день), расход в ₸/$; - Разбивка по [каналам](/learn/module-2/lesson-12-channels-telegram) (WhatsApp vs Telegram) и по [моделям](/learn/module-1/lesson-08-model-cost); - **Выручка по источнику**: сюда приходит [сумма сделки](/learn/module-4/lesson-25-leads) каждого лида (та самая сумма из карточки Айгерим), видно, какая реклама приносит деньги, а какая только клики; - Произвольные периоды, экспорт CSV/PDF/JSON. ### Что значат термины (важно) - **Диалог** = переписка, где **ИИ реально ответил** (пустые/операторские чаты не считаются). - **Конверсия** = лиды ÷ диалоги. Может быть даже **больше 100%**, если в лиды за период попали клиенты из диалогов **прошлых** периодов (написал в мае, заявку оставил в июне). Это не ошибка, кабинет подсказывает это прямо под цифрой. - **Время ответа** = от первого сообщения клиента до первого ответа бота. - [Тест-чат](/learn/module-1/lesson-10-test-chat) в статистику **не входит**. ## Логи событий: «что бот делал за кадром» Раздел **«Логи»** показывает действия бота: какие [функции](/learn/module-3/lesson-15-functions-overview) вызвал, что искал в [базе знаний](/learn/module-3/lesson-16-knowledge-base), что сделал в [CRM](/learn/module-5/lesson-28-crm). Незаменимо для [диагностики](/learn/module-9/lesson-36-troubleshooting), если бот повёл себя странно. ## Авто-отчёты (только владелец) Раздел **«Отчёты»**, присылает сводки в [Telegram](/learn/module-2/lesson-12-channels-telegram) или на email по расписанию: - Шлёт их **отдельный «Бот отчётов»**: подключаешь один раз (кнопка «Подключить бота»), добавляешь в нужный чат/группу и даёшь право писать; - Несколько именованных отчётов на проект, у каждого своё расписание (день/неделя/месяц, **до 4 отправок в день**); - Плитки-метрики (воронка / деньги / сегменты), можно среднее/сумму числового поля из анкеты; - Режим **кастомного текста** с [переменными](/learn/module-8/lesson-35-expressions) `{{...}}`, живое превью, кнопка «Отправить сейчас». - **По умолчанию выключены**: включаешь сам. ## Пример Владелец «Профи» получает каждое утро в Telegram: «Вчера: диалогов 42, лидов 11, конверсия 26%, горячих 4. Потрачено 380 ₸. Топ-город: Алматы». Открывать кабинет не нужно, всё в одном сообщении. А в живой сводке видно, что за неделю лиды по тегу **#ент** выросли, значит, реклама подготовки к ЕНТ (та, что привела Айгерим) работает. ## Как пользоваться / ошибки - Настрой утренний отчёт в Telegram: держишь руку на пульсе без входа в кабинет. - Раз в неделю смотри конверсию, время ответа и стоимость лида, падают/растут → [чини бота](/learn/module-9/lesson-36-troubleshooting) или проверь рекламу. - **Забыли подключить «Бот отчётов»** → сводки не приходят, хотя отчёт включён. Подключи отдельного бота в «Отчётах». - **Забыли, что отчёты выключены** → ждут, а они не приходят. Включи в «Отчётах». ## Вопросы новичка - **Отчёты не приходят, почему?** Две причины: (1) они по умолчанию **выключены**, включи и задай расписание; (2) не подключён **отдельный «Бот отчётов»**: нажми «Подключить бота» и добавь его в нужный чат. - **Что за «Бот отчётов», это мой основной бот?** Нет. Клиентам отвечает основной бот проекта, а сводки владельцу шлёт **отдельный** бот отчётов: его подключаешь один раз в разделе «Отчёты». - **Почему в статистике меньше диалогов, чем мне писали людей?** Диалог считается, только если **бот реально ответил**. Пустые и чисто операторские чаты не в счёт, так цифры честнее. - **Конверсия больше 100% это баг?** Нет. Значит, часть лидов за период пришла из диалогов прошлых периодов. Кабинет подсказывает это прямо под цифрой. - **Мои тесты попадут в статистику?** Нет. [Тест-чат](/learn/module-1/lesson-10-test-chat) помечен и в аналитику не входит. - **Что смотреть в первую очередь?** Конверсию, время ответа и стоимость лида. Падает конверсия, [чини бота](/learn/module-9/lesson-36-troubleshooting); растёт время ответа, проверь баланс/канал; растёт стоимость лида: проверь рекламу. - **Бот повёл себя странно, где разобраться?** В [логах событий](/docs/guide/04-crm/44-event-logs): видно, что именно бот делал за кадром. ## Проверь себя - Чем аналитика отличается от отчётов, и что из них приходит само, без захода в кабинет? - Какой бот шлёт сводки владельцу: основной или отдельный? Что будет, если его не подключить? - Почему конверсия иногда больше 100% и почему это не ошибка? ## Что дальше Аналитика показала: реклама «ЕНТ» приводит лидов вроде Айгерим. Теперь подключим внешние сервисы, чтобы бот сам заводил их записи в твою таблицу и календарь, [Модуль 5: интеграции (Google)](/learn/module-5/lesson-27-google). ## Подробнее (техническая документация) - [Аналитика](/docs/guide/04-crm/43-analytics) · [Логи событий](/docs/guide/04-crm/44-event-logs) · [Авто-отчёты](/docs/guide/04-crm/45-reports) --- ## Google Sheets и Google Calendar URL: https://dosai.pro/learn/module-5/lesson-27-google # Урок 27. Google Sheets и Google Calendar > Подключаем Google безопасно, без паролей и без сложного OAuth. Ты просто даёшь боту доступ к конкретной таблице или календарю. ## Цель урока После урока ты умеешь **безопасно подключить Google** через служебный email (без пароля и OAuth), понимаешь разницу «Редактор / Просмотр», и знаешь два инструмента бота: **Google Sheets** (бот пишет заявки строкой в твой лист) и **Google Calendar** (бот сам ставит записи, зная твой график, длительность слота и сколько клиентов помещается на одно время). ## Простыми словами Помнишь, в [Уроке 18](/learn/module-3/lesson-18-booking) бот записал Айгерим на пробный урок? А в [Уроке 23](/learn/module-3/lesson-23-email-customer) отправил ей подтверждение на почту. Теперь, **куда именно** падает эта запись: в твою **[Google Таблицу](/docs/guide/05-integrations/51-google-sheets)** (лист «Пробные уроки») или в твой **[Google Календарь](/docs/guide/05-integrations/52-google-calendar)**. Подключается через **сервисный аккаунт** это служебный email платформы, которому ты **расшариваешь** нужный файл. Твой пароль при этом никто не видит. 📍 Где: меню проекта → **«Интеграции»** (там служебный email) и **«Функции»** (там подключаешь Sheets/Calendar боту). ## Слайды урока ## Непонятные слова: на пальцах - **Интеграция**: связь бота с другой программой (Google, CRM), чтобы они работали вместе. Как соединить два лего-блока: щёлкнул, и они действуют заодно. - **Google Таблицы (Sheets)**: обычная онлайн-таблица, как Excel в браузере. Бот может писать в неё заявки и читать оттуда прайс/график. *Пример:* лист «Пробные уроки», куда падает запись Айгерим. - **Лист**: вкладка внутри таблицы (снизу). Ты указываешь боту точный лист, например «Пробные уроки», чтобы он писал именно туда. - **Google Календарь**: онлайн-ежедневник, куда бот ставит записи и где смотрит свободное время по твоему графику. - **Слот**: одно свободное «окошко» для записи. Его длительность (например, 1 час) ты задаёшь сам. - **«Записей на одно время» (кресла)**: сколько клиентов бот запишет на один и тот же слот. *Пример:* 3 = «три кресла» (три преподавателя ведут параллельно). 1 = строго по одному. - **Сервисный аккаунт**: служебный email платформы, которому ты **даёшь доступ** к своему файлу. Как выдать помощнику ключ только от одной комнаты. Твой личный пароль при этом не нужен. - **Расшарить (дать доступ)**: открыть конкретный файл этому служебному email. *Пример:* в таблице → «Настройки доступа» → вставил email → «Редактор». Как впустить одного гостя в один кабинет. - **Редактор / Просмотр**: уровень доступа. «Просмотр» = только читать; «Редактор» = читать и писать. Боту для записи заявок нужен **Редактор**. ## Зачем это нужно - **Таблица**, универсальный «журнал»: все заявки автоматически падают в привычный Google Sheets, а бот читает оттуда прайс/расписание. - **Календарь**: бот сам ведёт запись в твоём Google Календаре, который ты и так смотришь с телефона, и уважает твой график, длительность приёма и число «кресел». ## Как подключить (по шагам) 1. В разделе «Интеграции» скопируй **служебный email** платформы. 2. Открой свою Google Таблицу или Календарь → **«Настройки доступа»** → добавь этот email как **редактора**. 3. В «Функциях» подключи Google Sheets или Google Calendar боту, укажи ссылку на таблицу (и **лист**) или **ID календаря** (не «primary»). 4. Готово: бот получил доступ **только к тому, что ты расшарил**, и ни к чему больше. ## Что умеет бот - **Google Sheets:** записать новую строку (лид), найти/прочитать данные (прайс, график), обновить/удалить строку. - **Google Calendar:** проверить свободные слоты по твоему графику, создать/перенести/отменить событие ([запись](/learn/module-3/lesson-18-booking)), напомнить клиенту. ### Настройки календаря (глубже) - **ID календаря**: укажи адрес своего календаря (вида `...@group.calendar.google.com`); служебный `primary` не подойдёт. - **График работы**: рабочие дни и часы; из них бот сам считает свободные окна. - **Длительность слота** и **на сколько дней вперёд** открыта запись (по умолчанию 7, максимум 14). - **«Записей на одно время»**: сколько клиентов на слот (1 = по одному, 3 = «три кресла»). - **Напоминание клиенту**: бот сам напишет клиенту перед визитом (по умолчанию выключено). ## Пример (образовательный центр «Профи») «Профи» расшарил боту Google Таблицу с листом **«Пробные уроки»**. Айгерим записалась на пробный ([Урок 18](/learn/module-3/lesson-18-booking)), и её запись автоматически появилась строкой в таблице (имя, телефон, предмет, время). Администратор работает в привычном Google Sheets. А кто ведёт запись в календаре: у того бот сразу проверяет свободные окна и ставит событие, зная, что на одно время помещается, скажем, 3 ученика (три преподавателя). ## Когда нужно / когда нет - Ведёшь учёт в Google Таблицах, запись в Google Календаре. - Всё уже есть во [внешней CRM](/learn/module-5/lesson-28-crm): тогда подключай её, а не таблицы. ## Частые ошибки - **Расшарили как «Просмотр», а не «Редактор»** → бот не может писать. Дай доступ редактора. - **Расшарили не тот файл** → бот пишет не туда. Проверь, что доступ дан именно нужной таблице/календарю. - **Указали «primary» как календарь** → это технический календарь бота, тебе не видимый. Укажи ID своего календаря. ## Вопросы новичка - **Это безопасно? Я не хочу давать пароль.** Пароль и не нужен. Ты даёшь доступ только к **одному** файлу служебному email, как ключ от одной комнаты. Остальное Google-аккаунта бот не видит. - **Бот не пишет в таблицу: почему?** Чаще всего доступ дан как «Просмотр». Поменяй на «Редактор», и бот сможет писать. - **Расшарил, но бот пишет не туда.** Проверь, что доступ дан именно нужной таблице/календарю и что указан правильный **лист** (например, «Пробные уроки»). - **Сколько клиентов бот запишет на одно время?** Сколько задашь в «Записей на одно время»: 1, строго по одному, 3, «три кресла» параллельно. - **У меня уже есть Bitrix/amoCRM, Google-таблицы нужны?** Не обязательно. Если учёт ведётся во [внешней CRM](/learn/module-5/lesson-28-crm), подключай её. Таблицы, для тех, кто ведёт учёт в Google. ## Проверь себя - Почему для записи заявок нужен доступ «Редактор», а не «Просмотр»? - Что задаёт «Записей на одно время» и чем 1 отличается от 3? - Почему нельзя указать «primary» как календарь бота? ## Что дальше Для отправки писем от твоего Gmail есть [Gmail](/docs/guide/05-integrations/53-gmail). А если у тебя уже есть своя CRM, бот заведёт лид Айгерим прямо в неё: [Урок 28: внешние CRM](/learn/module-5/lesson-28-crm). ## Подробнее (техническая документация) - [Обзор интеграций + сервисный аккаунт](/docs/guide/05-integrations/50-integrations-overview) · [Google Sheets](/docs/guide/05-integrations/51-google-sheets) · [Google Calendar](/docs/guide/05-integrations/52-google-calendar) --- ## Внешние CRM (Bitrix24 / amoCRM / AlphaCRM) URL: https://dosai.pro/learn/module-5/lesson-28-crm # Урок 28. Внешние CRM (Bitrix24 / amoCRM / AlphaCRM) > Если ты уже работаешь в своей CRM, бот встроится в неё: сам создаёт сделки и двигает их по воронке. Двусторонняя синхронизация. ## Цель урока После урока ты понимаешь, когда нужна **внешняя CRM** (а когда хватит [встроенных Лидов](/learn/module-4/lesson-25-leads)), знаешь три поддерживаемые системы, **Bitrix24, amoCRM** (бизнес) и **AlphaCRM** (образование), и умеешь подключить одну так, чтобы бот **сам заводил сделки и двигал их по стадиям** вслед за диалогом с двусторонней синхронизацией. ## Простыми словами Помнишь карточку Айгерим из [Урока 25](/learn/module-4/lesson-25-leads) во встроенных Лидах? Если у тебя уже есть **своя внешняя CRM**, бот заведёт её и туда: создаст сделку «интересует подготовка к ЕНТ» и подвинет по воронке, как это сделал бы менеджер вручную. Поддерживаются **Bitrix24, amoCRM** и **AlphaCRM** (для образования: там вместо «сделки» заводится **карточка ученика** и запись на пробный урок). 📍 Где: меню проекта → **«Интеграции»** → выбор CRM. ## Слайды урока ## Непонятные слова: на пальцах - **Внешняя CRM**: программа для учёта клиентов и сделок, которая у тебя уже есть (Bitrix24, amoCRM, AlphaCRM). Бот кладёт заявки туда, а не только во [встроенные Лиды](/learn/module-4/lesson-25-leads). - **Сделка**, карточка потенциальной продажи в CRM: кто клиент, что хочет, на каком этапе. Как заказ-наряд: заводится, ведётся, закрывается. В образовательной CRM вместо неё, **карточка ученика**. - **AlphaCRM**, CRM специально для образовательных центров: вместо «сделок», ученики, группы, записи на уроки. Бот заводит туда карточку ученика и запись на пробный. - **Двусторонняя синхронизация**, изменения летят в обе стороны: поменял стадию в DOS AI: двинулась и в твоей CRM, и наоборот. Как две связанные тетради: пишешь в одной: появляется в другой. - **Стадия воронки**: этап сделки в CRM (новая → в работе → оплачена). Бот сам двигает сделку по ним. - **Авто-правило**: «если случилось X, сделай Y» в CRM (например, добавить комментарий на новой стадии). С защитой от дублей, чтобы одно и то же не сработало дважды. ## Зачем это нужно Если у тебя уже настроена CRM и в ней работает отдел продаж (или педагоги), не нужно вести две системы. Бот подаёт заявки **сразу в твою CRM**, и команда работает в привычном интерфейсе. ## Как подключить (по шагам) 1. Раздел «Интеграции» → выбери свою CRM (Bitrix24 / amoCRM / AlphaCRM). 2. Введи доступы (по инструкции для конкретной CRM). 3. Функции CRM (создать сделку, двигать по стадии) **подключаются автоматически**: их не нужно настраивать отдельно, они появляются у бота, как только включена CRM. ## Что делает бот и авто-правила - Бот **создаёт сделки и контакты** (в образовании: карточки учеников), двигает по воронке, добавляет комментарии, вызывая функции по ходу диалога. - **Заполнение полей CRM:** связываешь переменную бота (имя, телефон, город, бюджет…) с полем сделки: данные ложатся прямо в поле, а не в общий комментарий (настраивается в «Интеграциях» → CRM). - **Зеркало диалога:** по желанию вся переписка копируется в ленту сделки (все сообщения или только ответы бота): менеджер видит контекст, не выходя из CRM. - **Двусторонняя синхронизация:** сменил стадию в DOS AI → сделка двигается в твоей CRM; изменения в CRM тоже прилетают обратно (вставляешь готовую ссылку-вебхук из настроек в свою CRM). ## Пример (образовательный центр «Профи») «Профи» работает в **AlphaCRM**. Айгерим написала боту, заинтересовалась подготовкой к ЕНТ: бот **сам завёл карточку ученика** и запись на пробный урок. Педагог видит её в своей системе и берёт в работу. А для бизнеса всё то же самое: клиент написал → бот создал **сделку в amoCRM** с контактом и пометкой запроса → менеджер видит её в своей воронке. ## Когда нужно / когда нет - У тебя уже есть Bitrix24 / amoCRM / AlphaCRM и команда работает там. - Отдельной CRM нет, используй [встроенные Лиды](/learn/module-4/lesson-25-leads) DOS AI, этого достаточно. ## Частые ошибки - **Неверные доступы** → бот не может писать в CRM. Сверь ключи по инструкции. - **Ведут и там, и там вручную** → путаница. Реши, где основная воронка. ## Вопросы новичка - **У меня нет никакой CRM это проблема?** Нет. У DOS AI есть [встроенные Лиды](/learn/module-4/lesson-25-leads): полноценная воронка. Внешняя CRM нужна, только если ты уже в ней работаешь. - **Я образовательный центр, какую CRM брать?** AlphaCRM: бот заведёт карточку ученика и запись на пробный урок вместо «сделки». - **Нужно ли отдельно настраивать CRM-функции боту?** Нет. Они включаются автоматически, как только ты подключил CRM в «Интеграциях». - **Клиенты будут задваиваться в двух системах?** Реши, где основная воронка, и веди её там. Двусторонняя синхронизация с защитой от дублей помогает, но параллельный ручной ввод в обеих: источник путаницы. - **Бот не создаёт сделки в моей CRM.** Обычно дело в доступах (ключах). Сверь их по инструкции для конкретной CRM. - **Какие CRM поддерживаются?** Bitrix24, amoCRM и AlphaCRM (для образования). Для других систем можно использовать [«Свою интеграцию по API»](/learn/module-8/lesson-34-api-webhooks). ## Проверь себя - Когда внешняя CRM нужна, а когда хватает встроенных Лидов? - Чем AlphaCRM отличается от amoCRM/Bitrix по тому, что заводит бот? - Что значит «двусторонняя синхронизация» и нужно ли отдельно подключать CRM-функции? ## Что дальше Инструменты и интеграции пройдены: Айгерим поймана, записана, заведена в CRM. Осталось главное, как всё это оплачивается и как на этом зарабатывать, [Модуль 6: деньги (биллинг, приём оплат, заработок)](/learn/module-6/lesson-29-billing). ## Подробнее (техническая документация) - [CRM, Bitrix24 / amoCRM / AlphaCRM](/docs/guide/05-integrations/54-crm) · [Обзор интеграций](/docs/guide/05-integrations/50-integrations-overview) --- ## Биллинг: подписка + токены, пополнение URL: https://dosai.pro/learn/module-6/lesson-29-billing # Урок 29. Биллинг: подписка + токены, пополнение > В DOS AI две отдельные «корзины» денег. Путаница между ними это причина №1, почему у новичков бот вдруг замолкает. Разберём раз и навсегда. ## Цель урока После урока ты **различаешь две корзины**: подписку (открывает канал WhatsApp) и баланс токенов («топливо» на каждый ответ бота); умеешь **пополнить баланс** (Kaspi или картой) и **настроить автопополнение**, чтобы бот не замолк ночью; и знаешь, где смотреть, **на что именно ушли деньги** (расход по каждому сообщению, по модели и каналу). ## Простыми словами: две корзины Помнишь, в отчёте из [Урока 26](/learn/module-4/lesson-26-analytics-reports) была строка «Потрачено ботом»? Вот это, деньги из **баланса токенов**, и они таяли на **каждый ответ Айгерим**: приветствие, ответ про «45 000 ₸» из [базы знаний](/learn/module-3/lesson-16-knowledge-base), подтверждение записи. А то, что Айгерим вообще написала в **WhatsApp**, оплачивается **подпиской**. Это разные корзины: 1. **Подписка $25/мес**: нужна **только для [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr)**. [Telegram](/learn/module-2/lesson-12-channels-telegram) работает **без подписки**. 2. **Баланс токенов** это «топливо»: тратится на **каждое сообщение** бота. Пополняется отдельно от подписки. Проще так: **подписка открывает канал WhatsApp**, а **баланс кормит мозг бота**. Это разные вещи. > 💵 **Почему цена в долларах.** $25 это базовая цена, а не пересчёт с тенге. Когда на экране оплаты видишь сумму вроде 12 500 ₸, это тот же $25, переведённый по курсу на момент выставления счёта: курс гуляет, значит и сумма списания месяц к месяцу немного отличается. Баланс тоже ведётся в долларах. Платформа облачная и к стране не привязана: карта работает откуда угодно, а Kaspi это дополнительный способ для Казахстана. 📍 Где: глобальное меню → «Биллинг»; и в проекте → «Биллинг проекта». ## Слайды урока ## Непонятные слова: на пальцах - **Биллинг**, раздел про деньги: подписка, баланс, пополнения, чеки, история трат. Как «касса» твоего аккаунта. - **Подписка**: оплата за право держать канал [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr) включённым. Как абонемент в спортзал: платишь за доступ. Для [Telegram](/learn/module-2/lesson-12-channels-telegram) абонемент не нужен. - **Баланс токенов**: «топливо», которое расходуется, когда бот отвечает. Как деньги на телефоне: говоришь, убывает, кончились, тишина. Пополняется отдельно от подписки. - **Токен**: маленький кусочек текста, которым меряют расход ответа. Чем длиннее разговоры и «умнее» [модель](/learn/module-1/lesson-08-model-cost), тем больше токенов уходит. - **Автопополнение**: правило «упал ниже порога, долей до суммы автоматически», с лимитом в месяц. Как автоплатёж за телефон: не следишь вручную, связь не пропадает. - **Авто-продление подписки**: можно включить, чтобы подписка продлевалась сама (сохранённой картой) или чтобы за 3 дня приходил авто-счёт в Kaspi с напоминанием. По умолчанию: платишь сам после напоминания. - **Транзакции**, история трат баланса: видно, на какое сообщение, каким каналом и какой моделью ушли деньги. Как выписка по карте. - **Чек**: подтверждение об оплате, приходит на почту. Как чек из магазина, только письмом. ## Главное правило: баланс 0 → бот молчит Если баланс кончился, бот **перестаёт отвечать** (в минус не уходит). Это самая частая причина «бот сломался». Предупреждение приходит заранее. Поэтому: - Держи баланс пополненным; - Настрой **автопополнение** (ниже) это чтобы бот не замолк ночью. ## Как пополнить (по шагам) 1. Раздел «Биллинг» → выбери сумму: пресет **$5 / $10 / $20 / $50 / $100** или **свою ($5-$1000)**. 2. Способ оплаты: - **Kaspi Push**: основной, подтверждение в один тап в приложении Kaspi (счёт придёт на указанный номер); - **Картой**: запасной. 3. Чек придёт на почту. ## Скидка первых двух недель Когда подключишь канал, у проекта открывается **окно на 14 дней**, внутри которого подписка стоит дешевле обычного: **месяц −20% ($20), 3 месяца −15%, 6 месяцев −25%, год −30%**. Год в этом окне выходит **$210 вместо $300**. Сколько осталось до конца окна, написано прямо на плитках выбора периода. Две вещи, которые стоит знать заранее: - **Бесплатные дни не сгорают.** Оплатишь, пока они ещё идут, и оплаченный период начнётся **после** них, а не вместо. Дата начала показана под кнопкой оплаты. - **Дальше цена обычная.** Скидка действует на эту покупку, следующее продление пойдёт по $25 в месяц. Окно даётся один раз на проект и только до первой оплаты подписки. Вне окна тоже есть скидки за длинный период, но помягче: 3 мес −5%, 6 мес −10%, год −20%. 📌 **Практика для интегратора:** не тяни с решением клиента до последнего дня бесплатного периода. Самая выгодная цена живёт именно в эти две недели после подключения номера. ## Автопополнение и продление подписки Два отдельных механизма, оба настраиваются один раз: - **Автопополнение баланса:** «когда баланс упал ниже **порога** $, автоматически долей до **суммы**», с **лимитом в месяц** и выбором **метода** (сохранённая карта / Kaspi). Так [баланс](/learn/module-6/lesson-29-billing) не доходит до нуля. - **Продление [подписки](/learn/module-2/lesson-13-whatsapp-qr):** по умолчанию платишь сам, за 3 дня придёт напоминание. Можно включить **авто-продление** (сохранённой картой) или тумблер **«авто-счёт на продление»** (за 3 дня выставим счёт в Kaspi). Сохранённая карта появляется после первой оплаты картой с галочкой «сохранить». ## Куда ушли деньги (таблица «Транзакции») Внизу «Биллинга»: история расхода баланса с фильтрами по **операции / источнику / каналу / [модели](/learn/module-1/lesson-08-model-cost)**. Видно, на что именно утекает баланс (какой канал, какая модель дороже). Рядом: «Отчёт по оплатам» с экспортом **CSV**. ## Полезные детали - **Пополнить баланс может любой [участник](/learn/module-7/lesson-32-roles-members)**: даже с ролью «наблюдатель». - Баланс можно **переводить между проектами**. - Политика возвратов: на странице «Возврат». ## Пример Владелец «Профи» подключил только Telegram → подписка не нужна, платит лишь за баланс токенов (ответы Айгерим и других). Второй владелец на WhatsApp → платит и подписку (за канал), и баланс (за ответы). Оба настроили автопополнение, и забыли про «бот замолчал». ## Что помнить / ошибки - Telegram без подписки; WhatsApp с подпиской; оба, с балансом. - **«Бот молчит» → первым делом проверь баланс** (не 0?) и подписку (не истекла?). Подробно, [Урок 36](/learn/module-9/lesson-36-troubleshooting). - **Не настроили автопополнение** → бот замолк в самый неподходящий момент. ## Вопросы новичка - **Чем подписка отличается от баланса?** Подписка открывает **канал WhatsApp** (как абонемент). Баланс кормит **мозг бота** (как бензин). Разные корзины: Telegram, без подписки, но баланс нужен всегда. - **Можно ли купить подписку дешевле?** Да, в первые 14 дней после подключения канала: месяц −20% ($20), 3 мес −15%, 6 мес −25%, год −30% ($210 вместо $300). Оплата внутри окна не съедает оставшиеся бесплатные дни. - **Подписка спишется сама?** По умолчанию, нет, платишь сам после напоминания за 3 дня. Но можно включить авто-продление (картой) или авто-счёт в Kaspi. - **Бот вдруг замолчал, что первым делом?** Проверь баланс (не 0?) и подписку (не истекла?). Это причина №1. Пошагово: [Урок 36](/learn/module-9/lesson-36-troubleshooting). - **Уйду ли я в минус, если баланс кончится?** Нет. Бот просто перестанет отвечать, долгов не будет. Чтобы не замолкал, включи автопополнение. - **Как платить, Kaspi или картой?** Основной способ, Kaspi Push (подтверждение в один тап). Запасной: картой. - **Где посмотреть, на что ушли деньги?** В таблице «Транзакции» внизу «Биллинга»: фильтры по каналу и модели показывают, что дороже. - **Может ли сотрудник пополнить баланс?** Да, пополнить может любой [участник](/learn/module-7/lesson-32-roles-members), даже с ролью «наблюдатель». - **У меня несколько проектов: деньги общие?** Баланс у каждого проекта свой, но его можно **переводить между проектами**. ## Проверь себя - Зачем нужна подписка и почему для Telegram она не требуется, а баланс: всегда? - Что произойдёт с ботом при балансе 0 и как это предотвратить заранее? - Где увидеть, какой канал или модель тратит баланс быстрее? ## Что дальше Баланс кормит бота, а теперь пусть бот **зарабатывает**, как принять оплату от Айгерим за курс прямо в чате, [Урок 30: приём оплат](/learn/module-6/lesson-30-accept-payments). ## Подробнее (техническая документация) - [Биллинг проекта: токены, подписка, пополнение](/docs/guide/06-money/60-billing) · [Сколько стоит сообщение](/docs/guide/06-money/61-message-cost) --- ## Приём оплат от клиентов (Kaspi) URL: https://dosai.pro/learn/module-6/lesson-30-accept-payments # Урок 30. Приём оплат от клиентов (Kaspi) > Бот может не только записать, но и принять оплату: выставляет счёт прямо в чате, клиент подтверждает в Kaspi, деньги идут на твою кассу. Разберём подключение и тарифы. ## Цель урока После урока ты умеешь **подключить приём оплат** (мастер из 3 шагов: данные ИП/ТОО → SMS-код кассиру → ключ), добавить боту функцию **«Выставить счёт»**, и понимаешь тарифы. Итог: бот выставляет клиенту счёт Kaspi **прямо в переписке**, деньги идут на **твою** кассу. ## Простыми словами Помнишь путь Айгерим? Она пришла с [рекламы](/learn/module-2/lesson-14-ad-gating), бот ответил про курс «45 000 ₸» ([Урок 16](/learn/module-3/lesson-16-knowledge-base)), записал на пробный ([Урок 18](/learn/module-3/lesson-18-booking)), и всё это осело [лидом с суммой сделки](/learn/module-4/lesson-25-leads). **Последний шаг, деньги.** Бот умеет **выставить Айгерим счёт Kaspi прямо в переписке**: она подтверждает оплату в приложении Kaspi, и **деньги идут на кассу «Профи» напрямую**. Это отдельная [функция](/learn/module-3/lesson-15-functions-overview) плюс отдельная подписка (см. ниже). 📍 Где: меню проекта → **«Платежи»**. ## Слайды урока ## Непонятные слова: на пальцах - **Счёт (инвойс)**: просьба об оплате с суммой и кнопкой «оплатить». *Пример:* «К оплате 10 000 ₸, нажмите, чтобы оплатить». Как чек в кафе, только с кнопкой оплаты прямо в чате. - **Kaspi-касса**: твой счёт в Kaspi, куда приходят деньги от клиентов. Бот выставляет счёт, клиент платит, деньги падают **тебе напрямую**. - **Предоплата**: часть суммы вперёд, чтобы закрепить запись/место. *Пример:* «внесите 10 000 ₸, чтобы забронировать место в группе». Как задаток. - **БИН/ИИН**: бизнес-идентификатор компании (12 цифр), нужен при подключении. Как ИНН у фирмы. - **Кассир**: человек, на чей телефон в Kaspi Business придёт SMS-код при подключении. Так подтверждается, что касса действительно твоя. - **Описание чека по умолчанию**: текст, который появится в Kaspi-push и фискальном чеке, если бот не придумал своё описание счёта. *Пример:* «Оплата заказа». - **Тариф приёма**: отдельный «пакет» под твой поток платежей (сколько оплат в день). Как тариф связи: больше объём, выше пакет. ## Зачем это нужно Клиент готов заплатить **прямо сейчас, в переписке**, не нужно диктовать реквизиты, ждать перевода, сверять. Бот выставил счёт → клиент оплатил в 1 тап → сделка закрыта. Меньше отвалов на этапе оплаты. ## Как подключить (мастер из 3 шагов) Настройка, только [владелец](/learn/module-7/lesson-32-roles-members). Раздел **«Платежи»**: 1. **Шаг 1, данные ИП/ТОО:** название компании, **БИН/ИИН (12 цифр)**, **email** для apipay-уведомлений и чеков. (Можно указать «что продаёте» это появится на Kaspi-push и в чеке.) 2. **Шаг 2, телефон кассира:** укажи номер кассира в **Kaspi Business** на него придёт **SMS-код** для подтверждения. 3. **Шаг 3, самое важное:** касса создана. Добавь боту [функцию](/learn/module-3/lesson-15-functions-overview) **«Выставить счёт»** (`builtin_owner_payment`). Дальше бот по ходу диалога сам создаёт счёт: «К оплате 10 000 ₸, оплатите по кнопке». Если бот не передаст своё описание счёта, подставится **описание по умолчанию** (его ты задаёшь в функции). ## Тарифы приёма оплат Приём оплат это **отдельная подписка поверх обычной [подписки на бота](/learn/module-6/lesson-29-billing)**: | Тариф | Цена | Лимит | |---|---|---| | Небольшой поток | **12 000 ₸/мес** | до **30 платежей в день** | | Средний поток | **30 000 ₸/мес** | до **100 платежей в день** | | Большой поток | **72 000 ₸/мес** | до **300 платежей в день** | Выбираешь тариф под свой объём. Управление счетами (создать / отменить / вернуть / экспорт): на странице «Платежи». **Тариф покупается там же и сразу.** Выбираешь его на странице «Приём оплат» и платишь через Kaspi (счёт придёт push-уведомлением на твой телефон) или картой. Оплатил, тариф включается сразу и действует **30 дней**, договариваться ни с кем не нужно. За 3 дня до конца придёт напоминание, а страница предложит продлить. Продлишь заранее, оставшиеся дни не сгорят: новые 30 добавятся к текущему сроку. ⚠️ **Если бот не смог выставить счёт** (тариф не оплачен или дневной лимит на сегодня исчерпан), клиенту он не молчит, а говорит, что передаёт вопрос владельцу. Тебе при этом падает уведомление, не чаще раза в день: видно, что за деньгами уже приходили, а касса была закрыта. ## Пример (образовательный центр «Профи») Айгерим записалась на пробный урок и готова закрепить место в группе ЕНТ. Бот: «Чтобы закрепить место, внесите предоплату 10 000 ₸» + счёт Kaspi. Айгерим оплачивает в 1 тап, деньги на кассе «Профи», место закреплено. Так [сумма сделки из её карточки](/learn/module-4/lesson-25-leads) превратилась в реальные деньги: воронка закрыта. ## Когда нужно / когда нет - Берёшь предоплаты/оплаты в переписке, поток платежей стабильный. - Оплата только на месте/наличными: можно не подключать. ## Частые ошибки - **Не завершили мастер подключения (SMS-код кассиру)** → бот не может выставить счёт. - **Тариф не активирован / превышен дневной лимит** → счета не выставляются. Проверь тариф под свой объём. ## Вопросы новичка - **Куда попадают деньги клиента?** Напрямую на твою Kaspi-кассу. Ты выставляешь счёт через бота, клиент платит, деньги у тебя. - **Это то же, что подписка на бота?** Нет. Приём оплат, **отдельная** подписка поверх обычной. Обычная за канал WhatsApp; эта: за возможность выставлять счета клиентам. - **Сколько шагов в подключении?** Три: данные ИП/ТОО (БИН, email) → SMS-код кассиру в Kaspi Business → ключ. После этого добавляешь боту функцию «Выставить счёт». - **Бот не выставляет счёт, почему?** Либо не завершён мастер (SMS-код кассиру), либо тариф не активирован / превышен дневной лимит. Проверь оба. - **Какой тариф выбрать?** По числу оплат в день: небольшой, 12 000 ₸ (до 30/день), средний, 30 000 ₸ (до 100/день), большой, 72 000 ₸ (до 300/день). - **Как оплатить тариф?** Прямо на странице «Приём оплат», через Kaspi или картой. Включается сразу после оплаты, действует 30 дней, за 3 дня до конца напомним о продлении. - **Что попадёт в чек клиента?** Описание, которое бот придумал под заказ, а если не придумал, «описание по умолчанию» из функции. Оно видно в Kaspi-push и фискальном чеке. - **Клиенты платят только с Kaspi?** Приём заточен под Kaspi (подтверждение в один тап): самый привычный способ в Казахстане. ## Проверь себя - Из каких 3 шагов состоит подключение приёма оплат и на что придёт SMS-код? - Чем «приём оплат» отличается от обычной подписки на бота? - Что попадёт в Kaspi-push/чек, если бот не передал своё описание счёта? ## Что дальше Бот ловит клиентов и берёт деньги. Теперь, как **зарабатывать, рекомендуя продукт**: [Урок 31: промокоды и заработок](/learn/module-6/lesson-31-referrals). ## Подробнее (техническая документация) - [Бот выставляет счёт (Kaspi)](/docs/guide/03-tools/37-payments-bot) · [Приём оплат от клиентов](/docs/guide/06-money/62-accept-payments) --- ## Промокоды и на чём зарабатывает интегратор URL: https://dosai.pro/learn/module-6/lesson-31-referrals # Урок 31. Промокоды и на чём зарабатывает интегратор > Промокод удваивает старт проекта: $10 на баланс вместо $5 и 30 бесплатных дней вместо 14. А если собираешь ассистентов не только себе, разберём, из чего складывается доход: разовая настройка и помесячное сопровождение. ## Цель урока После урока ты знаешь, **куда именно вводится промокод** и что он даёт, и понимаешь, **на чём зарабатывает интегратор**: настройка разово плюс сопровождение проекта клиента помесячно. ## Простыми словами **Промокод** это слово, которое применяется к конкретному [проекту](/learn/module-1/lesson-05-create-project) и удваивает его старт: | | Без кода | По коду партнёра | |---|---|---| | Баланс при старте | $5 | **$10** | | Бесплатных дней WhatsApp | 14 | **30** | | Ограничение по числу диалогов | нет | нет | Баланс докидывается сразу, а бесплатные дни начинают идти, когда подключишь номер. Есть и третий бонус, менее заметный: обычно бесплатные дни даются только первому проекту аккаунта, а проект с кодом получает их независимо от этого. Это важно, если ты пробуешь ботов сразу для нескольких клиентов. Главное, где его вводить: **внутри проекта, раздел «Оплата»**, а не при регистрации. Частая ошибка: применили не там, бонуса нет. **Один проект = один промокод.** 📍 Где: проект → **«Оплата»** → поле промокода. **Важно, что бесплатные дни это про канал, а не про сообщения.** Каждый ответ бота стоит денег и списывается с [баланса проекта](/learn/module-6/lesson-29-billing) всё это время. Стартовых $5 (или $10 по коду) хватает не только на [тест-чат](/learn/module-1/lesson-10-test-chat), но и на живые переписки, чтобы увидеть бота в деле. Всё же кончился баланс, и бот замолкает посреди разговора, даже если бесплатные дни ещё идут. Поэтому перед тем как пускать на бота настоящих клиентов, пополни счёт заранее. ## Слайды урока ## Непонятные слова, на пальцах - **Промокод** это слово-пропуск, которое применяется к проекту и удваивает его старт: $10 на баланс вместо $5 и 30 бесплатных дней вместо 14. - **Интегратор** это тот, кто собирает ассистентов не себе, а бизнесам, за деньги. - **Сопровождение** это регулярная работа по чужому проекту после сдачи: правки, новые функции, разбор жалоб. Оплачивается помесячно. - **Участник проекта** это доступ, который владелец выдаёт тебе в своём кабинете, чтобы ты мог работать внутри его проекта. Подробно в [Уроке 32](/learn/module-7/lesson-32-roles-members). ## Из чего складывается доход интегратора **Настройка, разово.** Собрал ассистента, наполнил [знаниями](/learn/module-1/lesson-07-feed-knowledge), подключил [канал](/learn/module-2/lesson-13-whatsapp-qr), проверил в [тест-чате](/learn/module-1/lesson-10-test-chat), сдал. Цену считай не от своих часов, а от того, сколько обращений бизнес теряет сейчас вечером, ночью и в выходные. **Сопровождение, помесячно.** Вот здесь и есть профессия. У живого бизнеса каждый месяц что-то меняется, и вносить это кто-то должен: - поменялись цены или появилась услуга, значит правится [«Информация о компании»](/learn/module-1/lesson-07-feed-knowledge) и прайс в [базе знаний](/learn/module-3/lesson-16-knowledge-base); - появилась новая задача, значит собираются новые [функции](/learn/module-3/lesson-15-functions-overview): запись на второго мастера, счёт, сделка в CRM; - кто-то получил кривой ответ, значит открываешь [диалог](/learn/module-4/lesson-24-dialogs), понимаешь, чего не хватило в инструкциях, и дописываешь; - сезон или акция, значит нужна [рассылка](/learn/module-3/lesson-22-broadcasts) по базе и [дожимы](/learn/module-3/lesson-20-drip) под неё; - отвалился канал или кончился баланс, значит возвращаешь проект в строй ([Урок 36](/learn/module-9/lesson-36-troubleshooting)). Владелец бизнеса ничего из этого делать не будет. Поэтому сопровождение продаётся легко: он видит результат прямо в своих диалогах. **За платформу клиент платит сам**, со своей карты. Это не проходит через тебя, и в свою цену это закладывать не надо. Но проследить за этим твоя работа: скажи клиенту сразу, что кроме бесплатных дней нужен баланс на сообщения, и проверь, что он закинул хотя бы **$10** до того, как на бота пойдёт живой поток. Пустой баланс выглядит для владельца как «бот сломался», и разбираться придёт он к тебе. ## Как технически вести чужой проект Проект принадлежит клиенту, ты работаешь в нём участником. Владелец приглашает тебя в разделе **«Участники»** и выдаёт роль, дальше ты работаешь внутри его кабинета. Роли и права разобраны в [Уроке 32](/learn/module-7/lesson-32-roles-members). ## Партнёрская программа **Пройди курс целиком и получи именной партнёрский код.** Когда все уроки отмечены пройденными, на [странице курса](/learn) открывается кнопка «Получить код»: он выдаётся сразу, договариваться ни с кем не нужно. Клиент вводит его в своём проекте, получает удвоенный старт ($10 на баланс и 30 бесплатных дней), а тебе идёт 10% с его оплат в течение года. В отличие от обычного личного кода, этот доступен не дожидаясь твоей первой оплаты. На свой проект он не применяется: это инструмент для клиентов, а не скидка себе. Подробно про это в [Уроке 40](/learn/module-10/lesson-40-integrator-scale). Медиа, агентствам и сообществам именные коды по-прежнему выдаются отдельно, по договорённости, напиши нам. Когда код закреплён за тобой, раздел **«Рефералы»** в кабинете покажет, сколько человек его применили и сколько уже оплатили. Личный код в разделе «Рефералы» открывается **после первой оплаты подписки**: до неё там висит объяснение вместо кода. Смысл простой: советовать платформу логично тому, кто ей уже пользуется сам. Именной партнёрский код и код у того, кто уже кого-то привёл, показываются сразу, ждать оплаты не нужно. ## Пример Интегратор ведёт восемь проектов. Каждый сдан один раз и оплачен разово, а дальше он раз в месяц вносит правки: обновил прайс мотошколе, добавил клинике запись ко второму врачу, разобрал две жалобы у юриста. Это несколько часов работы в месяц на проект, и это предсказуемый доход, за которым не нужно каждый раз искать нового клиента. ## Когда полезно / нюансы - Сразу договаривайся о сопровождении, а не «сдал и забыл»: без правок ассистент за пару месяцев начнёт врать про цены. - Не бери на себя оплату платформы за клиента: пропадёт его платёж, встанет его проект, а виноватым окажешься ты. ## Частые ошибки - **Промокод введён не там.** Он применяется в проекте, раздел «Оплата», а не при регистрации. - **Поняли бесплатные дни как «ничего не платить».** Дни бесплатные, сообщения нет: они идут с баланса. Проект с пустым балансом молчит и в бесплатный период. - **Ждали, что код ещё и удешевит подписку.** Скидка на подписку от кода не зависит: она даётся всем на 14 дней после подключения канала, см. [Урок 29](/learn/module-6/lesson-29-billing). - **Продали настройку, забыли про сопровождение.** Через месяц у клиента поменялись цены, ассистент называет старые, и виноват ассистент. - **Цена посчитана от своих часов.** Клиенту всё равно, собрал ты за вечер или за неделю, ему важно, сколько он перестанет терять. ## Вопросы новичка - **Где вводить промокод?** В проекте, раздел «Оплата». Не при регистрации, это частая ошибка. - **Что даёт промокод?** Удвоенный старт: $10 на баланс вместо $5 и 30 бесплатных дней WhatsApp вместо 14. Плюс открывает бесплатный период проекту, которому он уже не полагался бы (обычно дни даются только первому проекту аккаунта). - **Если дни бесплатные, зачем баланс?** Бесплатны дни работы канала, а не сами ответы: каждый списывается с [баланса](/learn/module-6/lesson-29-billing). Стартовых $5 (или $10 по коду) хватает увидеть бота на живых переписках, дальше пополняй. - **Можно применить два кода на один проект?** Нет, один проект и один промокод. - **Кто платит за платформу, если бота собирал я?** Владелец бизнеса, со своей карты. Твои деньги это настройка и сопровождение. - **Как получить доступ к проекту клиента?** Владелец приглашает тебя участником и выдаёт роль, см. [Урок 32](/learn/module-7/lesson-32-roles-members). ## Проверь себя - Куда именно вводится промокод и что он даёт проекту? - Из каких двух частей складывается доход интегратора и какая из них важнее? - Кто оплачивает подписку проекта, если настраивал его ты? ## Что дальше Деньги разобраны полностью. Дальше [Модуль 7: команда и доступы](/learn/module-7/lesson-32-roles-members), где подключишь сотрудников и подрядчиков к проекту с нужными ролями. А если собираешь ботов не только себе, в конце курса ждёт [Модуль 10](/learn/module-10/lesson-37-integrator-pricing): сколько брать за настройку, как продавать и что отвечать на возражения. ## Подробнее (техническая документация) - [Промокоды и партнёрская программа](/docs/guide/06-money/63-referrals) --- ## Роли, участники, приглашения URL: https://dosai.pro/learn/module-7/lesson-32-roles-members # Урок 32. Роли, участники, приглашения > Над проектом можно работать командой: один настраивает бота и отвечает клиентам, другой только смотрит цифры. У каждого своя роль и свои права. ## Цель урока После урока ты умеешь **пригласить сотрудника** в проект по email и дать ему **правильную роль** (из пяти: наблюдатель → тестировщик → редактор → админ → владелец); понимаешь, кому что доверять, и почему **приём оплат** и удаление проекта, только для владельца. ## Простыми словами Помнишь, в [Уроке 24](/learn/module-4/lesson-24-dialogs) диалог Айгерим можно было **назначить сотруднику**, а в [карточке лида](/learn/module-4/lesson-25-leads) был «менеджер»? Чтобы это работало, сотрудника надо сначала **пригласить в проект** и дать ему **роль**. Роль определяет, что человек видит и может менять. Роли идут по возрастанию прав, каждая следующая включает предыдущую. 📍 Где: меню проекта → **«Участники»**. ## Слайды урока ## Непонятные слова: на пальцах - **Участник**: человек, которого ты пригласил в проект (сотрудник, партнёр). Как коллега, которому дали пропуск в офис. - **Роль**, уровень доступа участника, что он видит и что может менять. Как разные ключи: у уборщика от подсобки, у директора от всех дверей. - **Наблюдатель (viewer)**: только смотрит (диалоги, лиды, цифры) и может пополнять баланс. Как гость на экскурсии: смотреть можно, трогать, нет. - **Тестировщик (tester)**: наблюдатель + [тест-чат](/learn/module-1/lesson-10-test-chat). Может «пощупать» бота, но не менять боевые настройки. **Роль по умолчанию** для новых приглашений: самая безопасная. - **Редактор (editor)**: настраивает всё вокруг бота (функции, база знаний, дожимы, интеграции) и ведёт [диалоги](/learn/module-4/lesson-24-dialogs). Промпт и настройки бота, нет: это уровень админа. Как сотрудник, которому доверяют работу, но не ключи от сейфа. - **Админ (admin)**: редактор + [промпт](/learn/module-1/lesson-06-system-prompt) и настройки проекта + управление людьми. Как старший смены. - **Владелец (owner)**: может всё, включая [приём оплат](/learn/module-6/lesson-30-accept-payments), удаление и передачу проекта. Хозяин. - **Приглашение**: ссылка по email, по которой сотрудник заходит в твой проект. Как именное приглашение на вечеринку. ## Зачем это нужно Чтобы **не давать всем полный доступ**. Оператору хватит отвечать клиентам, маркетологу: смотреть цифры, а [промпт](/learn/module-1/lesson-06-system-prompt) и настройки бота открыты только с роли админа: одна правка промпта мгновенно меняет ответы во всех живых диалогах. Роли защищают от случайных поломок. ## Пять ролей (от меньших прав к большим) | Роль | Что может | |---|---| | **Наблюдатель (viewer)** | Только смотрит: [диалоги](/learn/module-4/lesson-24-dialogs), [лиды](/learn/module-4/lesson-25-leads), [аналитику](/learn/module-4/lesson-26-analytics-reports). Плюс **может пополнять [баланс](/learn/module-6/lesson-29-billing)**. Не видит [функции](/learn/module-3/lesson-15-functions-overview) (там секреты) и чужие email | | **Тестировщик (tester)** | Наблюдатель + доступ к [тест-чату](/learn/module-1/lesson-10-test-chat) («пощупать» бота). **Новые приглашения по умолчанию: tester** | | **Редактор (editor)** | Может менять: [функции](/learn/module-3/lesson-15-functions-overview), базу знаний, дожимы, интеграции; вести [диалоги](/learn/module-4/lesson-24-dialogs). **Промпт и настройки бота, нет** | | **Админ (admin)** | Редактор + **[промпт](/learn/module-1/lesson-06-system-prompt) и настройки проекта** + приглашать участников и закрывать диалоги | | **Владелец (owner)** | Всё. Только владелец настраивает [приём оплат](/learn/module-6/lesson-30-accept-payments) и удаляет/передаёт проект | ## Как пригласить (по шагам) 1. Раздел «Участники» → **«Пригласить»** → введи email + выбери роль. 2. Человек получает ссылку, принимает приглашение (создаёт аккаунт при первом входе). 3. Все работают в **общем кабинете**, каждый видит своё по своей роли. ## Пример (образовательный центр «Профи») Администратор «Профи» отвечает родителям вроде Айгерим и ведёт их диалоги → роль **редактор** (может писать в [«Диалогах»](/learn/module-4/lesson-24-dialogs), и назначенные ему [лиды](/learn/module-4/lesson-25-leads) видит в «Мои лиды»). Маркетолог смотрит [аналитику](/learn/module-4/lesson-26-analytics-reports) и эффективность рекламы → **наблюдатель**. Настройку [приёма оплат](/learn/module-6/lesson-30-accept-payments) делает сам владелец. ## Как раздавать роли / ошибки - Давай **минимально нужную** роль. Смотрит цифры → наблюдатель. Отвечает клиентам → редактор. Правит промпт и настройки бота → админ. - **Всем дали owner/admin** → любой может сломать настройки или удалить проект. Не надо. - Настройку [приёма оплат](/learn/module-6/lesson-30-accept-payments) ждут от не-владельца → её может сделать только владелец. ## Вопросы новичка - **Какую роль дать администратору, который отвечает клиентам?** Обычно **редактор** (может вести диалоги и подправлять настройки). Тогда назначенные ему лиды он увидит в «Мои лиды». - **Маркетологу, который смотрит цифры?** **Наблюдатель**: видит аналитику, ничего не сломает. При этом сможет и баланс пополнить. - **Какая роль ставится по умолчанию при приглашении?** **Тестировщик**, самая безопасная: человек посмотрит проект и погоняет тест-чат, но не тронет боевые настройки. Роль потом можно повысить. - **Почему сотрудник не видит функции?** В [функциях](/learn/module-3/lesson-15-functions-overview) лежат секреты (ключи), поэтому наблюдателю они не показываются это защита. - **Кто может подключить приём оплат?** Только **владелец**. Это осознанное ограничение: там касса и деньги. - **Дал всем owner, что не так?** Любой сможет удалить проект или сломать настройки. Давай минимально нужную роль каждому. ## Проверь себя - Какие пять ролей и какая ставится по умолчанию при приглашении? - Какую роль дать тому, кто только смотрит аналитику, а какую: тому, кто отвечает клиентам? - Что может делать только владелец и почему? ## Что дальше Дальше, [Урок 33: личный аккаунт, безопасность и жизненный цикл проекта](/learn/module-7/lesson-33-account-lifecycle). ## Подробнее (техническая документация) - [Роли и права](/docs/guide/07-team/70-roles) · [Участники и приглашения](/docs/guide/07-team/71-members) --- ## Профиль, безопасность, жизненный цикл проекта URL: https://dosai.pro/learn/module-7/lesson-33-account-lifecycle # Урок 33. Профиль, безопасность и жизненный цикл проекта > Личный аккаунт, системные уведомления и необратимые действия с проектом: удаление, передача, дублирование. ## Цель урока После урока ты умеешь **защитить свой аккаунт** (сменить пароль, выйти со всех устройств), **настроить системные уведомления** (узнавать о низком балансе/отвале канала раньше клиента), и понимаешь три необратимых действия с проектом, **дублировать, передать, удалить** (только владелец). ## Простыми словами Здесь три темы: **твой личный аккаунт** (профиль, пароль), **системные уведомления** (о балансе, канале, платежах) и **что можно сделать с проектом целиком** (удалить, передать, клонировать). Особенно важно уведомление «низкий баланс»: помнишь [правило из Урока 29](/learn/module-6/lesson-29-billing): баланс 0 = бот молчит? Настроив уведомление, ты узнаешь об этом **раньше**, чем Айгерим напишет и не получит ответа. 📍 Где: глобальное меню → **Кабинет**; действия с проектом, меню проекта → «Настройки». ## Слайды урока ## Непонятные слова: на пальцах - **Аккаунт**: твой личный вход в платформу (email, пароль, профиль). Как твоя учётка в любом сервисе. - **Активные сессии**: устройства, на которых ты сейчас залогинен. Как список «где открыт твой WhatsApp». - **Выход со всех устройств**: разлогинивает тебя везде разом. *Пример:* потерял телефон, нажал, и никто с него уже не войдёт. Как поменять замок, когда потерял ключ. - **Журнал действий**, история изменений в проекте: кто и что менял (изменил промпт, удалил проект). Как история правок в документе. - **Системное уведомление аккаунта**, автосообщение о состоянии: [баланс](/learn/module-6/lesson-29-billing) кончается, канал отвалился, платёж прошёл. Не путать с [уведомлением от бота по диалогу](/learn/module-3/lesson-19-notifications), то про клиентов, это про систему. - **Дублировать проект**: сделать копию бота со всеми настройками (для второй точки). Как «сохранить как…». - **Передать проект**: отдать владение другому человеку. *Пример:* продал бизнес, передал бота новому хозяину. - **Удалить проект**: убрать бота совсем. Действие **необратимо**: сгорают [баланс](/learn/module-6/lesson-29-billing) и подписка. Как выбросить и сжечь папку: назад не вернёшь. ## Профиль и безопасность Раздел «Кабинет» → «Безопасность»: **активные сессии**, **смена пароля**, **выход со всех устройств** (если потерял телефон или дал доступ, а хочешь отозвать), **журнал действий** (кто что менял). ## Системные уведомления аккаунта Это уведомления **о состоянии системы** (не путать с [уведомлениями от бота](/learn/module-3/lesson-19-notifications) по диалогу): - **События:** оплата и низкий [баланс](/learn/module-6/lesson-29-billing), подписка, безопасность (вход с незнакомого устройства, смена пароля, выход со всех устройств, созданный API-ключ), состояние бота (ошибка ИИ, проблема с графиком записи), каналы связи (WhatsApp отключён, канал молчит), команда (приглашения, смена ролей, закрытие доступа). - **Каналы доставки:** кабинет (колокольчик, всегда), email, [Telegram](/learn/module-2/lesson-12-channels-telegram), [WhatsApp](/learn/module-2/lesson-13-whatsapp-qr), вебхук. > 💡 **Два уровня, и они дополняют друг друга.** Контакты на этой странице действуют **на весь аккаунт**: их платформа возьмёт для любого проекта, где ты ничего не указал отдельно. А если у конкретного проекта контакт задан, побеждает он. Удобно: себе, один раз, здесь; клиентские проекты, каждому своё. > 🔔 **Тумблеры управляют письмами, не колокольчиком.** События про безопасность и команду остаются в кабинете в любом случае: это история твоего аккаунта, и выключать её галочкой было бы странно. Тумблер решает, дублировать ли их на почту и в Telegram. Исключение, «Обновления платформы»: это подписка на новости, по умолчанию выключена, и выключенная не приходит совсем. ## Жизненный цикл проекта (только владелец) - **Дублировать**: клон проекта со всеми настройками (для второй точки). - **Передать**: отдать владение другому пользователю. - **Удалить**: совсем убрать проект. ⚠️ Показывается честное предупреждение: **сгорает [баланс](/learn/module-6/lesson-29-billing) и подписка**, ожидающие счета отменяются. Действие **необратимо**. ## Пример (образовательный центр «Профи») «Профи» открыл вторую точку в другом районе → **дублирует** проект первой, меняет адрес/график в промпте: второй бот готов за 5 минут (и так же ловит своих Айгерим). А чтобы бот на первой точке не замолчал в разгар набора на курсы, владелец один раз указал своего Telegram-бота для алертов в настройках аккаунта. ## Что помнить / ошибки - Укажи контакт для алертов (здесь или в проекте), не дашь боту замолчать из-за пустого баланса. - Потерял доступ к телефону → «выход со всех устройств» + смена пароля. - **Удаление необратимо и сжигает баланс/подписку**, не удаляй сгоряча, лучше приостанови. ## Вопросы новичка - **Потерял телефон с доступом, что делать срочно?** Смени пароль и нажми «выход со всех устройств»: старый доступ отвалится сразу. - **Хочу открыть вторую точку с таким же ботом.** Не настраивай заново: **дублируй** проект и поменяй адрес/график. - **Продаю бизнес, как отдать бота?** Через «передать проект» новому владельцу. Он станет владельцем, ты, нет. - **Удалил проект по ошибке: вернуть можно?** Нет, удаление необратимо и сжигает баланс/подписку. Если сомневаешься, лучше приостанови, а не удаляй. - **Чем системные уведомления отличаются от уведомлений бота?** Системные про твой аккаунт (деньги, канал). [Уведомления бота](/learn/module-3/lesson-19-notifications) про клиентов (горячий лид). Настраиваются в разных местах: системные, в аккаунте или проекте, про клиентов, только в проекте. - **Где посмотреть, кто что менял в проекте?** В «Журнале действий» на вкладке «Безопасность», видно последние изменения. ## Проверь себя - Что сделать в первую очередь, если потерял телефон с доступом к аккаунту? - Чем системное уведомление отличается от уведомления бота и какое включить обязательно? - Что происходит с балансом и подпиской при удалении проекта, и что сделать вместо удаления? ## Что дальше Дальше это [Модуль 8: продвинутое (API и выражения)](/learn/module-8/lesson-34-api-webhooks). ## Подробнее (техническая документация) - [Профиль и безопасность](/docs/guide/07-team/72-profile-security) · [Уведомления](/docs/guide/07-team/73-notifications) · [Удаление, передача, дублирование](/docs/guide/07-team/74-project-lifecycle) --- ## Публичный API и своя интеграция по API URL: https://dosai.pro/learn/module-8/lesson-34-api-webhooks # Урок 34. Публичный API и своя интеграция по API > Для продвинутых и разработчиков: связать DOS AI со своими системами: учётом, складом, сайтом. Обычному владельцу этот урок не обязателен. ## Цель урока После урока ты понимаешь **два направления связи** DOS AI с внешними системами: **API-ключ** (твоя программа управляет ботом) и **«Своя интеграция по API»** (бот дёргает твой сервер), знаешь, какие права/область у ключа, и когда это вообще нужно (а когда хватает готовых шаблонов). ## Простыми словами Помнишь, у «Профи» бот отвечал Айгерим про места в группе ЕНТ из [базы знаний](/learn/module-3/lesson-16-knowledge-base)? А если мест то и дело меняется и данные живут в **своей системе центра**, бот может **спросить её напрямую**. Если у тебя есть свой сайт, склад или программа учёта, ты можешь **соединить их с ботом** двумя способами: 1. **[API-ключ](/docs/guide/08-developers/80-public-api)**, чтобы твоя программа могла управлять DOS AI (читать лидов, слать сообщения) от твоего имени. 2. **«Своя интеграция по API»**, чтобы **бот дёргал твой сервер** (проверить остаток мест, создать заказ, прочитать из базы). 📍 Где: глобальное меню → **«Для разработчиков»** (ключи); [функции](/learn/module-3/lesson-15-functions-overview) → «Своя интеграция по API». ## Слайды урока ## Непонятные слова: на пальцах (для новичка, можно пропустить весь урок) - **API**: «розетка», через которую программы соединяются и обмениваются данными. Как штепсель: любой прибор, у кого подходящая вилка, может подключиться. Тебе-владельцу это не обязательно, урок для тех, у кого есть свои IT-системы. - **API-ключ** (`dos_sk_live_…`): длинный пароль, по которому твоя программа управляет DOS AI от твоего имени. Как ключ от служебного входа: у кого он есть, тот может войти. Поэтому давай минимальные права. - **Только чтение / чтение+запись**, что разрешает ключ: смотреть данные или ещё и менять. Как «читательский билет» против «редакторского». - **Область (весь аккаунт / один проект)**: на что распространяется ключ. Один проект, безопаснее: даже при утечке доступ ограничен. - **Своя интеграция по API (вебхук)**: способ боту постучаться в твой сервер и получить ответ. *Пример:* «есть места в группе?» → «да, 3». Как позвонить в другой отдел и уточнить. - **Эндпоинт**: конкретный адрес на твоём сервере, куда бот стучится. Как номер кабинета: звонишь именно туда, где ответят по нужному вопросу. ## Зачем это нужно Чтобы автоматизировать связку «бот ↔ твои системы». Пример: бот при вопросе «есть места?» сам стучится в твою систему учёта и отвечает актуальным остатком. Или твоя CRM забирает лидов из DOS AI по расписанию. ## API-ключи Ключи вида `dos_sk_live_…`: - Права: **только чтение** или **чтение+запись**; - Область: **на весь аккаунт** или **один проект**; - Необязательный срок действия. Есть примеры запросов (curl). Ключи **бесплатны**. ## Своя интеграция по API (бот → твой сервер) В [функциях](/learn/module-3/lesson-15-functions-overview) выбираешь тип **«Своя интеграция по API»** и настраиваешь: адрес (URL), метод, **тело запроса / заголовки / авторизацию / параметры URL / обработку ответа / повторы при сбое**. В тело можно подставить [переменные](/learn/module-8/lesson-35-expressions) `{{client_name}}`, `{{now}}` и т.д. Бот вызовет твой эндпоинт по ходу диалога. > ⚠️ Устаревших `http_get`/`http_post` больше нет, используется **«Своя интеграция по API»**. ## Пример (образовательный центр «Профи») Клиент спрашивает «есть места в группе ЕНТ на вечер?». Бот вызывает функцию **check_free_seats** («Своя интеграция по API») → стучится в API центра `api.profi-center.kz` → получает «да, 3 места» → отвечает клиенту и предлагает [записаться](/learn/module-3/lesson-18-booking). Тот же приём в магазине: проверить остаток товара перед [оплатой](/learn/module-6/lesson-30-accept-payments). ## Когда нужно / когда нет - Есть свои системы (сайт/склад/CRM/учёт) и нужна автоматическая связка. - Обычному бизнесу без своих IT-систем это не нужно, хватает [готовых шаблонов](/learn/module-3/lesson-15-functions-overview) и [интеграций](/learn/module-5/lesson-27-google). ## Частые ошибки - **Дали ключу «чтение+запись» и широкую область без нужды** → лишний риск. Давай минимальные права. - **Ждут `http_get`/`http_post`**: их нет, это «Своя интеграция по API». ## Вопросы новичка - **Мне, обычному владельцу, это нужно?** Скорее всего нет. Для записи, оплат, отправки файлов хватает [готовых шаблонов](/learn/module-3/lesson-15-functions-overview). API, для тех, у кого есть свой сайт/склад/учёт и разработчик. - **API-ключи платные?** Нет, ключи бесплатны. Платишь только за обычную работу бота ([баланс](/learn/module-6/lesson-29-billing)). - **Какие права давать ключу?** Минимально нужные, если программе достаточно читать лидов, «только чтение», на один проект. Меньше прав, меньше риска при утечке. - **Как в запрос попадут данные клиента?** Через [переменные](/learn/module-8/lesson-35-expressions) `{{client_name}}`, `{{phone}}`, `{{now}}`: бот подставит их в тело запроса при вызове. - **Где `http_get`/`http_post`?** Их больше нет. Кастомный HTTP теперь: «Своя интеграция по API» (тип webhook). ## Управлять проектами из ИИ-агента (MCP) Если ты пользуешься Claude Code, Codex или Cursor, платформу можно подключить к ним напрямую, без единой строчки кода. Тогда ты просто пишешь словами: «покажи вчерашних лидов у стоматологии», «поправь промпт барбершопа», «сколько потратили за неделю», а инструмент сам дёргает нужное действие. Подключение в Claude Code одной командой (ключ берёшь там же, где обычный API-ключ): ```bash claude mcp add --transport http dosai https://dosai.pro/api/mcp \ --header "Authorization: Bearer dos_sk_live_ТВОЙ_КЛЮЧ" ``` Готовые команды для Codex и Cursor лежат в кабинете, в разделе для разработчиков: там они уже с подставленным ключом. Как это устроено: - Агент видит ровно то же, что видишь ты, и ограничен твоей ролью на проекте. - Ключ «только чтение» = агент смотрит, но ничего не меняет. Хорошая точка старта. - **Удалять проекты и трогать деньги агент не может**: таких инструментов ему не дали намеренно. - Отправка сообщения клиенту необратима: сначала согласуй текст, потом разрешай отправку. Для интегратора это главный смысл: десяток клиентских проектов проверяется одним запросом на человеческом языке, а не обходом десяти вкладок. ## Проверь себя - Чем API-ключ отличается от «Своей интеграции по API», кто кого вызывает? - Какие права и область стоит дать ключу, чтобы снизить риск при утечке? - Как в запрос к твоему серверу попадёт имя клиента? - Какого класса действий у ИИ-агента нет и почему это сделано специально? ## Что дальше Дальше, [Урок 35: язык выражений (подстановка живых данных)](/learn/module-8/lesson-35-expressions), те самые `{{client_name}}` из тела запроса. ## Подробнее (техническая документация) - [Публичный API и ключи](/docs/guide/08-developers/80-public-api) · [Подключить ИИ-агента](/docs/guide/08-developers/84-ai-agents) · [Кастомные вебхуки](/docs/guide/08-developers/81-custom-webhooks) · [Формат данных](/docs/guide/08-developers/83-data-format) --- ## Язык выражений (expressions) URL: https://dosai.pro/learn/module-8/lesson-35-expressions # Урок 35. Язык выражений (expressions) > Как подставлять живые данные в тексты бота (имя клиента, дату, цифры из анкеты) через переменные в двойных скобках. ## Цель урока После урока ты понимаешь, что такое **переменные `{{...}}`**, различаешь **две семьи** (переменные лида/сообщения и переменные отчёта), знаешь, где их брать (готовый список, не выдумывать), и умеешь читать **превью**, где видно, что подставилось, а что осталось `{{...}}`. ## Простыми словами Ты уже видел эти скобки раньше: в [уведомлении о горячем лиде](/learn/module-3/lesson-19-notifications) было `{{client_name}}`, в [письме клиенту](/learn/module-3/lesson-23-email-customer) и в [теле запроса к своему API](/learn/module-8/lesson-34-api-webhooks), тоже. **Выражения** это «умные вставки» в текст. Пишешь в двойных фигурных скобках `{{client_name}}`, а бот подставляет туда **живое значение**: реальное имя клиента (для Айгерим → «Айгерим»). ## Слайды урока ## Непонятные слова: на пальцах - **Переменная**: «пустое место» в тексте, куда подставится настоящее значение. Как бланк «Здравствуйте, ______!»: бот впишет в прочерк имя клиента. - **`{{двойные скобки}}`**: знак «сюда подставь». *Пример:* `{{client_name}}` → «Айгерим». Как поле для заполнения в анкете, только заполняет бот. - **Живое значение**, реальные данные вместо заготовки: имя, дата, число из отчёта. *Пример:* `{{leads}}` в отчёте станет «11». Как счётчик, который показывает актуальную цифру. - **Системная переменная**: берётся автоматически из карточки лида/диалога (`{{client_name}}`, `{{phone}}`, `{{stage}}`). В превью подставляется сразу. - **Параметр функции**: переменная, которую бот заполняет по разговору (`{{course}}`, `{{reason}}`). В превью остаётся `{{...}}`, пока бот не соберёт значение в диалоге. - **Справочник переменных**: список того, что можно подставлять. Как меню: выбираешь из готового, не выдумываешь названия. ## Зачем это нужно Чтобы сообщения были **персональными и точными**, а не безликими. «Здравствуйте, Айгерим!» работает лучше, чем «Здравствуйте!». А в [отчётах](/learn/module-4/lesson-26-analytics-reports) переменные подставляют реальные цифры за период. ## Две семьи переменных **1. Про клиента/лида**, работают в [промпте](/learn/module-1/lesson-06-system-prompt), [уведомлениях](/learn/module-3/lesson-19-notifications), [письмах](/learn/module-3/lesson-23-email-customer), [дожимах](/learn/module-3/lesson-20-drip), [запросах к API](/learn/module-8/lesson-34-api-webhooks): `{{client_name}}`, `{{client_phone}}`, `{{phone}}`, `{{name}}`, `{{project_name}}`, `{{channel}}`, `{{stage}}`, `{{lead_status}}`, `{{summary}}`, `{{data}}`. **2. Про цифры (только в шаблоне [отчёта](/learn/module-4/lesson-26-analytics-reports)):** `{{dialogs}}`, `{{leads}}`, `{{conversion}}`, `{{spend}}`, `{{balance}}`, `{{prev_dialogs}}`, `{{prev_leads}}`, `{{prev_conversion}}`, `{{top_tags}}`, `{{leads_list}}` и т.д. Отдельно есть **параметры функции** (`{{course}}`, `{{reason}}`): их бот заполняет из разговора; в превью они остаются `{{...}}`, пока значение не собрано. ## Пример Уведомление: `«🔥 Горячий лид: {{client_name}}, {{phone}}»` → бот присылает «🔥 Горячий лид: Айгерим, +7…». Отчёт: `«Сегодня заявок: {{leads}}, конверсия {{conversion}}%»` → подставятся реальные числа. ## Когда нужно / когда нет - Хочешь персонализировать сообщения или собрать кастомный текст [отчёта](/learn/module-4/lesson-26-analytics-reports). - Простому боту без персонализации это не обязательно, можно не трогать. ## Частые ошибки - **Опечатка в имени переменной** → подстановка не сработает, останется `{{...}}` в тексте. Сверяйся со справочником. - **Перепутал семью** → переменные отчёта (`{{leads}}`) не работают в уведомлении клиенту, и наоборот. - **Ждут переменную, которой нет** → используй только существующие (см. справочник). ## Вопросы новичка - **Обязательно ли это использовать?** Нет. Простому боту без персонализации выражения не нужны: можно не трогать. - **В тексте осталось `{{client_name}}`, почему не подставилось?** Скорее всего опечатка в названии или переменной нет в этой семье. Сверься со справочником и пиши имя точь-в-точь. - **Откуда бот берёт значение?** Переменные лида, из карточки диалога (имя, телефон, стадия); переменные отчёта, из цифр за период. Ты просто ставишь «пропуск». - **Почему в превью `{{course}}` не подставился?** Это параметр функции: бот заполнит его по ходу разговора, а системные переменные (имя) подставляются сразу. - **Можно придумать свою переменную?** Нельзя выдумать произвольную. Особое поле лида собирается [через промпт](/learn/module-1/lesson-09-lead-data), а не новой переменной. ## Проверь себя - Чем системная переменная отличается от параметра функции в превью? - Почему `{{leads}}` не сработает в уведомлении клиенту? - Что делать, если в отправленном тексте осталось `{{client_name}}`? ## Что дальше Дальше, последний модуль: [Урок 36, что делать если что-то пошло не так](/learn/module-9/lesson-36-troubleshooting). ## Подробнее (техническая документация) - [Язык выражений](/docs/guide/08-developers/82-expressions) · [Справочник переменных и хелперов](/docs/guide/10-reference/105-expression-reference) --- ## Если что-то пошло не так URL: https://dosai.pro/learn/module-9/lesson-36-troubleshooting # Урок 36. Если что-то пошло не так > Самые частые проблемы и как починить их самому за пару минут, прежде чем писать в поддержку. Почти всё чинится без нас. ## Цель урока После урока ты умеешь **сам диагностировать** типовые сбои по порядку «от простого к сложному»: бот молчит, функция не сработала, канал отвалился, платёж не прошёл; знаешь, что **логи событий**: главный инструмент, и когда стоит писать в поддержку. ## Простыми словами Финал курса, и сюда сходится всё. Представь: Айгерим написала в WhatsApp, а бот **молчит**. За весь курс ты узнал, из чего он состоит, теперь используем это, чтобы быстро найти причину. Бот, живая система, иногда что-то идёт не так: замолчал, не записал, отвалился канал, не прошёл платёж. Почти всё чинится самостоятельно, если знать, **куда смотреть**. Ниже, по частоте. 📍 Поддержка (если не помогло): глобальное меню → **«Поддержка»**. ## Слайды урока ## Непонятные слова: на пальцах - **Сессия WhatsApp**: «живая связь» бота с твоим номером через QR. Как соединение WhatsApp Web: пропало, бот замолк, надо [пере-сканировать QR](/learn/module-2/lesson-13-whatsapp-qr). - **Статус канала**: индикатор «Подключён / отвалился» в разделе «Каналы». Как лампочка «онлайн»: горит, работает. - **[Лог событий](/learn/module-4/lesson-26-analytics-reports)**, «дневник» действий бота, что он делал и где споткнулся. Первое место, куда смотреть, если бот повёл себя странно. - **Гейтинг по рекламе**: режим, когда бот отвечает [только на лидов с рекламы](/learn/module-2/lesson-14-ad-gating). Если он включён, а клиент написал не с объявления, бот молчит намеренно. - **Тикет (обращение в поддержку)**: заявка команде DOS с описанием проблемы. Как талончик в сервисе: оставил, тебе ответят в кабинет и на почту. - **Приоритет**: пометка «срочно» у обращения. Как «срочная доставка»: важное, рассмотрят быстрее. ## Бот молчит (самое частое) Проверь по порядку, от простого к сложному: 1. **[Баланс](/learn/module-6/lesson-29-billing) = 0?** → пополни. Это причина №1. 2. **[Триал](/learn/module-2/lesson-13-whatsapp-qr) закончился** или **подписка WhatsApp истекла?** → подключи/продли. 3. **[Канал](/learn/module-2/lesson-13-whatsapp-qr) отвалился?** → переподключи (ниже). 4. **Пустой [промпт](/learn/module-1/lesson-06-system-prompt)?** → бот не знает, как себя вести. 5. **Включён [гейтинг по рекламе](/learn/module-2/lesson-14-ad-gating)** (а клиент не с объявления) или сработал [антиспам](/learn/module-1/lesson-11-advanced-settings) → проверь настройки. Смотри разделы «Обзор» / «Каналы» / «Биллинг»: там видно состояние. Что бот реально делал (или почему не ответил) в [логах событий](/learn/module-4/lesson-26-analytics-reports). ## Функция не сработала Различай два случая: - **Бот не вызвал функцию** (не записал, не посчитал) → чаще всего **плохое описание** [функции](/learn/module-3/lesson-15-functions-overview). Опиши понятнее, для чего она. - **Вызвал, но упала** → смотри диагностику последней ошибки и «здоровье» функции в её настройках. Часто, неверные доступы/адрес. Что бот реально делал, видно в [логах событий](/learn/module-4/lesson-26-analytics-reports). ## Канал отвалился / бан WhatsApp - WhatsApp **потерял сессию** → переподключи [QR](/learn/module-2/lesson-13-whatsapp-qr). - **Бан** → это про [гигиену номера](/learn/module-2/lesson-13-whatsapp-qr); держи [Telegram](/learn/module-2/lesson-12-channels-telegram) запасным. - **Триал закончился** → нужна [подписка](/learn/module-6/lesson-29-billing). ## Платёж не прошёл Пополнение не отразилось, чаще всего **задержка подтверждения**: подожди пару минут, проверь историю оплат в [Биллинге](/learn/module-6/lesson-29-billing). Не появилось за 10-15 минут → в поддержку. ## Лиды из рекламы приходят с задержкой Заявки из Instagram/Facebook-рекламы иногда доходят до бота **с задержкой**: это особенность доставки WhatsApp на второе устройство, **не баг бота**. Обычно догоняются. ## Порядок действий / чего не делать - Сначала простое: баланс, подписка, канал. Потом: промпт/функции/гейтинг. - Смотри [логи событий](/learn/module-4/lesson-26-analytics-reports): они показывают, что реально произошло. - Не удаляй и не пересоздавай всё сгоряча: сначала диагностика. ## Не помогло Раздел **«Поддержка»** в кабинете, создай обращение (можно с приоритетом). Ответ придёт в кабинет и на почту. ## Проверь себя - В каком порядке проверять, если бот молчит, и что стоит на первом месте? - Как отличить «бот не вызвал функцию» от «вызвал, но упала», и где это видно? - Почему бот может молчать намеренно, даже когда всё оплачено и канал на месте? ## Это финал курса Ты прошёл весь путь от [«что такое DOS AI»](/learn/module-0/lesson-01-what-is-dosai) до диагностики. Проследил всю дорогу одного клиента, как Айгерим пришла с рекламы, бот её поймал, записал, взял оплату и завёл в CRM, и как чинить, если что-то на этом пути сбоит. Теперь ты знаешь продукт целиком. Возвращайся к нужным урокам по [оглавлению](/learn). ## Подробнее (техническая документация) - [Бот не отвечает](/docs/guide/09-troubleshooting/90-bot-silent) · [Функция не вызывается / падает](/docs/guide/09-troubleshooting/91-function-fails) · [Канал отвалился / бан](/docs/guide/09-troubleshooting/92-channel-down) · [Платёж не прошёл](/docs/guide/09-troubleshooting/93-payment-failed) · [Лиды из рекламы с задержкой](/docs/guide/09-troubleshooting/95-ad-leads-delayed) · [FAQ](/docs/guide/09-troubleshooting/94-faq) --- ## Сколько брать за настройку и сопровождение URL: https://dosai.pro/learn/module-10/lesson-37-integrator-pricing # Урок 37. Сколько брать за настройку и сопровождение > Самый частый вопрос новичка: «а сколько это стоит?». Отвечаем не абстрактно, а формулой, которую можно посчитать при клиенте на салфетке. ## Цель урока После урока ты умеешь **назвать свою цену и обосновать её цифрами клиента**, а не своими часами. Отдельно разберём цену за настройку и цену за сопровождение. ## Простыми словами Есть два способа назвать цену. **Плохой:** посчитать, сколько часов ты потратишь, умножить на желаемую ставку. Клиенту всё равно, сколько часов ты потратил. Он сравнивает не с твоим временем, а с деньгами, которые теряет. **Хороший:** посчитать, сколько бизнес **теряет сейчас**, и взять долю от этого. Тогда разговор идёт не про твою работу, а про его деньги, и цена перестаёт быть «дорого». ## Формула на салфетке Спроси у владельца четыре числа. Он их знает или прикинет за минуту: 1. Сколько обращений приходит в месяц (WhatsApp, Instagram, звонки) 2. Сколько из них он **не успевает обработать** вечером, ночью, в выходные и в занятые часы 3. Сколько в среднем приносит один клиент (средний чек) 4. Какая доля обратившихся доходит до покупки (конверсия, хотя бы на глаз) Дальше считаем при нём: **Потери в месяц = (пропущенные обращения) × (конверсия) × (средний чек)** Пример на реальном типаже. Стоматология: 400 обращений в месяц, из них примерно 120 приходят вне рабочего времени и остаются без ответа до утра. Конверсия 20%, средний чек 60 000 ₸. 120 × 0,2 × 60 000 = **1 440 000 ₸ в месяц** мимо кассы. Даже если бот вернёт треть этого, речь про несколько сотен тысяч в месяц. На таком фоне и настройка, и сопровождение перестают быть спором о цене. ## Как назначать цену за настройку Ориентир, а не закон: **от половины до полутора месячных потерь** клиента. Что двигает цену вверх: - много [функций](/learn/module-3/lesson-15-functions-overview): запись на время, счета, сделки в CRM, письма - подключение [внешней CRM](/learn/module-5/lesson-28-crm) или [Google-таблиц](/learn/module-5/lesson-27-google) - большая [база знаний](/learn/module-3/lesson-16-knowledge-base): прайсы, документы, регламенты - несколько филиалов или направлений, каждое со своей логикой - [дожимы](/learn/module-3/lesson-20-drip) и [рассылки](/learn/module-3/lesson-22-broadcasts) под акции Что держит цену внизу: один канал, простой сценарий «ответить и записать», готовый прайс одной страницей. Минимум, ниже которого браться не стоит: работа всё равно займёт несколько вечеров, а сопровождать проект придётся месяцами. ## Как назначать цену за сопровождение Ориентир: **10-20% от суммы настройки в месяц**. Что входит, проговаривается заранее, иначе клиент будет считать, что входит всё: - обновление цен и услуг в [информации о компании](/learn/module-1/lesson-07-feed-knowledge) и [базе знаний](/learn/module-3/lesson-16-knowledge-base) - разбор кривых ответов: открыть [диалог](/learn/module-4/lesson-24-dialogs), понять чего не хватило, дописать инструкции - новые [функции](/learn/module-3/lesson-15-functions-overview) по мере появления задач - [рассылки](/learn/module-3/lesson-22-broadcasts) под акции и сезон - присмотр за каналом и балансом, возврат проекта в строй ([Урок 36](/learn/module-9/lesson-36-troubleshooting)) Что НЕ входит и считается отдельно: новое направление бизнеса, второй филиал, подключение новой CRM, переезд на другой канал. ## Пример разговора Владелец барбершопа: «Сколько?» Ты: «Давай посчитаем. Сколько в день пишут в директ и ватсап?» Он: «Штук тридцать». Ты: «Сколько остаются без ответа до следующего дня?» Он: «Ну вечером человек десять точно». Ты: «Средний чек?» Он: «Тысяч восемь». Ты: «Из десяти написавших сколько дошли бы до кресла?» Он: «Половина». 10 × 0,5 × 8 000 = 40 000 ₸ в день, около **1 200 000 ₸ в месяц** мимо кассы. «Настройка стоит столько-то, это меньше месяца твоих потерь. Дальше сопровождение столько-то в месяц. Платформа отдельно, оплачиваешь сам, это $25 в месяц плюс расход на сообщения». Разговор занял две минуты и шёл про его деньги, а не про твои часы. ## Когда полезно / нюансы - Считай при клиенте, вслух, его числами. Цифра, которую он назвал сам, не оспаривается. - Всегда называй цену двумя строками: настройка и сопровождение. Одна строка провоцирует «сделал и забыл». - Не обещай конкретный рост выручки в процентах. Обещай, что ни одно обращение не останется без ответа, это ты контролируешь. - Не соглашайся на «сделай, а платить будем с результата». Результат зависит от его цен, его мастеров и его рекламы. ## Частые ошибки - **Цена от своих часов.** Чем ты опытнее, тем меньше берёшь. Это наказание за квалификацию. - **Не спросили числа.** Без цифр клиента любая цена звучит как выдумка. - **Забыли про сопровождение.** Через два месяца ассистент называет старые цены, а виноват ассистент. - **Взяли оплату платформы на себя.** Чужой платёж, чужой проект, твоя головная боль. ## Вопросы новичка - **А если клиент не знает своих чисел?** Попроси открыть переписки за вчера и посчитайте вместе, сколько сообщений пришло после закрытия. - **Что если потери маленькие?** Значит бот ему пока не нужен, и честнее это сказать. Такой клиент всё равно уйдёт через месяц. - **Брать предоплату?** Да, хотя бы половину. Настройка это работа, а не демонстрация. - **Сколько проектов реально вести одному?** Про это [Урок 40](/learn/module-10/lesson-40-integrator-scale). ## Проверь себя - Какие четыре числа нужно спросить у клиента, чтобы посчитать его потери? - Почему цена «за часы» работает против тебя? - Что входит в сопровождение, а что считается отдельно? ## Что дальше Цену считать научился. В [Уроке 38](/learn/module-10/lesson-38-integrator-pitch) разберём сам разговор: как показать бота владельцу так, чтобы он захотел, и что писать в коммерческом предложении. ## Подробнее (техническая документация) - [Промокоды и партнёрская программа](/docs/guide/06-money/63-referrals) --- ## Как продать: разговор с владельцем и предложение URL: https://dosai.pro/learn/module-10/lesson-38-integrator-pitch # Урок 38. Как продать: разговор с владельцем и предложение > Продаёт не презентация, а собранный за вечер бот, который отвечает про его услуги его словами. Разберём, как выйти на разговор, что показать и что отправить письмом. ## Цель урока После урока у тебя есть **рабочая схема захода**: кого выбирать, что готовить до разговора, что показывать в разговоре и какой текст отправлять после. ## Простыми словами Обычный заход выглядит так: «здравствуйте, делаю ботов, вам интересно?». Ответ известен. Рабочий заход выглядит так: «я написал вам в директ вчера в 22:40, ответ пришёл утром. Вот бот, который отвечает за вас в такие моменты, поговорите с ним минуту». Разница в том, что во втором случае ты показываешь проблему, которую он уже знает, и сразу решение, которое можно потрогать. ## Кого выбирать Не всех подряд. Признаки клиента, которому бот нужен прямо сейчас: - **он уже платит за рекламу** в инстаграме или таргете, значит поток обращений есть и он стоит денег - **заявки приходят в переписку**, а не только звонком - **работает не круглосуточно**, а обращения приходят вечером и в выходные - **один-два человека на ответах**, и они физически не успевают - **повторяющиеся вопросы**: цена, адрес, свободное время, как записаться Ниши, где это сходится чаще всего: клиники и стоматологии, барбершопы и салоны, автосервисы, школы и курсы, доставка, ремонт, юристы. Кого лучше не брать в первые клиенты: бизнес без потока обращений, бизнес с уникальным ответом на каждое обращение, и тот, кто ищет «чтобы само продавало, а я не участвую». ## Что собрать до разговора Демо готовится за вечер и делает всю работу за тебя: 1. Создай [проект](/learn/module-1/lesson-05-create-project) под нишу клиента 2. Возьми его услуги и цены **с его же сайта или инстаграма** и положи в [информацию о компании](/learn/module-1/lesson-07-feed-knowledge) 3. Напиши [системный промпт](/learn/module-1/lesson-06-system-prompt) его голосом: как говорят у него, а не как говорит робот 4. Добавь одну-две [функции](/learn/module-3/lesson-15-functions-overview), которые видно снаружи: запись на время, уведомление владельцу о заявке 5. Подключи [Telegram](/learn/module-2/lesson-12-channels-telegram): бесплатно, поднимается за минуту, показывать удобно 6. Прогони себя через [тест-чат](/learn/module-1/lesson-10-test-chat) и почини всё, что бот говорит криво Важно: демо на **его** данных. Абстрактный бот «для бизнеса» не производит впечатления, бот, который знает его прайс, производит. ## Как идёт разговор **Открытие.** Не про себя, а про него: «написал вам вчера в 22:40, ответ пришёл в 9 утра. Сколько таких в неделю?» **Показ.** Даёшь телефон или ссылку: «поговорите с ним, как будто вы клиент». Молчишь и не комментируешь. Владелец сам находит вопросы, которые ему важны. **Счёт.** Формула из [Урока 37](/learn/module-10/lesson-37-integrator-pricing) на его числах. Считаете вместе. **Цена.** Две строки: настройка разово, сопровождение помесячно. Отдельной строкой: платформа оплачивается им самим, $25 в месяц плюс расход на сообщения. **Договорённость.** Не «подумайте», а конкретный следующий шаг: «сегодня скину предложение, если ок, завтра беру ваш прайс и за три дня собираю на боевом номере». ## Шаблон предложения Отправляй в мессенджер, не файлом. Один экран. ``` Бот-ассистент для «Название» Задача: ни одно обращение не остаётся без ответа. Сейчас вечером и в выходные пишут примерно N человек в день, ответ они получают утром. Что делает бот: - отвечает на вопросы про услуги, цены и адрес, круглосуточно - записывает на свободное время и присылает вам заявку - ведёт клиента дальше, если тот замолчал - собирает все обращения в одном окне, видно кто написал и о чём Что нужно от вас: прайс и описание услуг, доступ к номеру для подключения, полчаса на приёмку. Срок: N дней. Стоимость: - настройка, разово: N ₸ - сопровождение: N ₸ в месяц (правки, новые функции, разбор ответов) - платформа: оплачивается вами напрямую, $25 в месяц плюс расход на сообщения по факту Первые дни работы бесплатны по промокоду, посмотрите на реальных клиентах и решите. ``` Три правила текста: никаких «инновационных решений на базе искусственного интеллекта», все цифры его, следующий шаг явный. ## Пример Интегратор написал в директ трём автосервисам в 23:10 вопрос «завтра успеете поменять масло, сколько выйдет?». Двое ответили утром, один не ответил вообще. Через день он написал всем троим: «вчера писал вам ночью, вот бот, который отвечает в такие моменты, попробуйте». Один из троих согласился на встречу, потому что увидел свою же переписку. ## Когда полезно / нюансы - Собирай демо до первого касания. Оно окупается на всех клиентах ниши: прайс поменял, а каркас тот же. - Показывай с телефона владельца, а не со своего ноутбука. Ощущение «это уже работает» появляется именно так. - Не показывай кабинет и настройки. Владельцу интересен результат в переписке, а не устройство. - Не обещай, что бот заменит человека. Обещай, что человек перестанет терять обращения. ## Частые ошибки - **Пришли без демо.** Разговор превращается в обещания, а обещаниям не верят. - **Демо на выдуманных данных.** Владелец сразу видит, что это не про него. - **Предложение на три страницы.** Не читают. - **Нет следующего шага.** «Подумайте» это отказ в вежливой форме. ## Вопросы новичка - **Где брать первых клиентов?** Там, где видно рекламу: инстаграм-лента, таргет, доски объявлений. Реклама значит поток обращений. - **Что если бот в демо ошибётся при клиенте?** Скажи честно: «вот это правится в инструкциях за минуту» и поправь при нём. Это тоже продаёт. - **Нужен ли WhatsApp для демо?** Нет, Telegram быстрее и бесплатный. WhatsApp подключишь на боевом. - **Сколько демо держать?** Одно на нишу, подменяя прайс. Каркас переиспользуется. ## Проверь себя - По каким признакам выбирается клиент, которому бот нужен прямо сейчас? - Почему демо собирается на данных клиента, а не на абстрактных? - Из каких блоков состоит предложение на один экран? ## Что дальше Показал и посчитал, а в ответ услышал «дорого» или «а если он напишет ерунду». Это нормально. [Урок 39](/learn/module-10/lesson-39-integrator-objections) разбирает возражения по одному. --- ## Возражения владельца и что на них отвечать URL: https://dosai.pro/learn/module-10/lesson-39-integrator-objections # Урок 39. Возражения владельца и что на них отвечать > Возражений всего восемь, они повторяются от клиента к клиенту. Разберём каждое и ответ, который работает, потому что опирается на то, как система устроена внутри. ## Цель урока После урока ты **не теряешься на типовых возражениях** и отвечаешь фактом, а не уговорами. ## Простыми словами Возражение это не отказ, а запрос на подробности. Отказ звучит как «нет, спасибо». «Дорого» и «а вдруг он напишет ерунду» означают, что человек уже прикидывает, как это будет у него. Главное правило: **не спорь и не уговаривай, а показывай механику**. Почти на каждое возражение в платформе есть конкретная защита, и её можно показать пальцем. ## Разбор по одному ### «Дорого» Не защищай цену, вернись к числам. «Мы посчитали, что вечером и в выходные мимо проходит около N в месяц. Настройка это меньше, чем вы теряете за месяц. Если цифра неверная, давайте пересчитаем, я возьму вашу». Если денег правда нет: предложи начать с [Telegram](/learn/module-2/lesson-12-channels-telegram) и одной функции, без WhatsApp. Меньше работы, меньше цена, и видно результат. ### «А вдруг он напишет клиенту ерунду» Самое частое и самое честное. Показывай устройство: - бот отвечает по [инструкции](/learn/module-1/lesson-06-system-prompt) и [базе знаний](/learn/module-3/lesson-16-knowledge-base), а не «из головы» - всё проверяется в [тест-чате](/learn/module-1/lesson-10-test-chat) до подключения к живым клиентам - в любом [диалоге](/learn/module-4/lesson-24-dialogs) можно вмешаться, и бот замолкает - если бот не знает ответа, он передаёт человеку, а не выдумывает - владелец видит **каждую** переписку целиком и может поправить инструкции за минуту Добавь честности: «первые дни правки будут, это нормально. Поэтому и есть сопровождение». ### «Клиенты не любят ботов» «Не любят тех, кто отвечает не по делу и не даёт дойти до человека. Попробуйте сами написать нашему что-нибудь неудобное». И даёшь телефон. Обычно на этом возражение заканчивается. ### «У меня менеджер справляется» «Днём наверняка. Речь про вечер, ночь, выходные и часы, когда он занят с клиентом в кресле. Давайте посмотрим ваши переписки за последнюю неделю после семи вечера». Числа найдутся сами. Второй заход: бот не вместо менеджера, а чтобы менеджер занимался тёплыми, а не отвечал сто раз «сколько стоит». ### «А номер не забанят?» Отвечай спокойно и по делу: бот **не пишет первым** незнакомым людям, он отвечает тем, кто написал сам. Есть ограничения по темпу отправки и постепенный выход на рабочий объём. Рассылки по своей базе делаются отдельно и аккуратно ([Урок 22](/learn/module-3/lesson-22-broadcasts)). Что честно сказать: если владелец захочет писать первым по холодной базе, риск есть, и это его решение. ### «А мои клиенты и их данные?» Переписка и карточки лежат в его кабинете, доступ выдаётся [ролями](/learn/module-7/lesson-32-roles-members) и отзывается в один клик. Ты как интегратор работаешь участником в его проекте, а не держишь его базу у себя. ### «Я попробую сам» Не спорь: «конечно, попробуйте, курс открыт и бесплатный». Возвращаются почти все, и вот почему: собрать бота несложно, а сделать так, чтобы он не врал, вовремя записывал и дожимал молчунов, это отдельная работа. Оставь контакт и не пропадай. ### «Подумаю» Не отпускай в пустоту, ставь бесплатный период прямо сейчас: «давайте подключим на ваш номер и посмотрим на живых клиентах, это ничего не стоит. Через несколько дней сами решите». Бесплатный период это 14 дней без ограничения по диалогам, а если клиент применит **твой партнёрский код**, то 30 дней и вдвое больше стартовых денег на балансе ([Урок 31](/learn/module-6/lesson-31-referrals)). Заодно напомни про баланс на сообщения: дни бесплатные, ответы бота нет. ## Пример Стоматология, возражение «а если он что-то не то скажет пациенту». Интегратор открыл тест-чат при владельце и попросил его самого написать самый неудобный вопрос. Владелец спросил «а можно без анестезии подешевле». Бот ответил, что подбор обезболивания решает врач на приёме, и предложил записаться на консультацию. Владелец сказал «ну ладно» и договор случился на этом ответе, а не на презентации. ## Когда полезно / нюансы - На каждое возражение отвечай показом, а не словами. Тест-чат под рукой всегда. - Соглашайся с правдой: правки в первые дни будут, идеального ответа с первого раза не бывает. - Не обещай замену сотрудника, рост продаж в процентах и «работает само». - Не отпускай с «подумаю» без следующего шага и даты. ## Частые ошибки - **Спор вместо показа.** Владелец не выигрывает спор, он просто уходит. - **Обещание, которого не сдержишь.** Один невыполненный пункт обнуляет всё остальное. - **Ответ «это же ИИ, он умный».** Не аргумент, а красный флаг. - **Скрыли, что платформа оплачивается отдельно.** Всплывёт при первом счёте и испортит отношения. ## Вопросы новичка - **Что если возражение техническое, а я не знаю ответа?** Скажи «уточню и вернусь сегодня». Выдуманный ответ хуже паузы. - **Как отвечать на «а конкуренты дешевле»?** Спроси, что входит. Обычно там настройка без сопровождения. - **Стоит ли давать гарантию?** Гарантируй работу и правки, а не выручку. ## Проверь себя - Почему на возражение отвечают показом, а не уговорами? - Что конкретно защищает клиента от «бот напишет ерунду»? - Какой следующий шаг ставится на «подумаю»? ## Что дальше Клиенты появились, и их становится несколько. [Урок 40](/learn/module-10/lesson-40-integrator-scale) про то, как вести много проектов, не утонуть в правках и получить партнёрский код за пройденный курс. --- ## Много проектов, партнёрский код и что дальше URL: https://dosai.pro/learn/module-10/lesson-40-integrator-scale # Урок 40. Много проектов, партнёрский код и что дальше > Один проект ведётся легко, пять начинают путаться, десять тонут. Разберём, как устроить работу, чтобы проекты не съедали друг друга, и что даёт пройденный курс. ## Цель урока После урока ты знаешь, **как вести несколько чужих проектов, не теряя контроль**, и получаешь личный партнёрский код за пройденный курс. ## Что даёт пройденный курс Когда все уроки отмечены пройденными, на [странице курса](/learn) открывается кнопка «Получить код». Она выдаёт **личный партнёрский код с комиссией 10%** (актуальная ставка всегда показана на самой странице курса). Чем он отличается от обычного личного кода, который есть у каждого: - **выдаётся сразу за курс.** Обычный личный код открывается только после твоей первой оплаченной подписки, а этот работает до того, как ты сам что-то оплатил - **отдельная статистика.** По коду видно, сколько человек его применили, сколько оплатили и сколько начислено, а не общая куча На свой собственный проект код не применяется, как и обычный личный: он для клиентов, которых ты приводишь, а не для скидки самому себе. Как это работает: - ты даёшь свой код клиенту, он вводит его **в своём проекте**, раздел «Оплата» - проект клиента получает **удвоенный старт**: $10 на баланс вместо $5 и 30 бесплатных дней WhatsApp вместо 14 - с оплат его подписки тебе начисляется комиссия в течение года - статистика по коду видна в кабинете, раздел **«Рефералы»**: кто применил, кто оплатил, сколько начислено Пропорция такая. **Основной твой доход это настройка и сопровождение** ([Урок 37](/learn/module-10/lesson-37-integrator-pricing)), деньги там. Комиссия по коду это приятная добавка сверху, которая капает с тех клиентов, которых ты и так привёл. Строить на ней бизнес не нужно, отказываться от неё глупо. ## Как устроить работу на много проектов **Проект принадлежит клиенту.** Он регистрируется сам, платит сам, а тебя добавляет [участником](/learn/module-7/lesson-32-roles-members) с нужной ролью. Так его данные остаются его, а ты не держишь чужие деньги и чужую ответственность на себе. **Каркас на нишу.** Второй барбершоп собирается не с нуля: берётся промпт и набор [функций](/learn/module-3/lesson-15-functions-overview) от первого, меняются услуги и цены. Третий собирается за час. Именно здесь появляется прибыль от опыта. **Один день правок в неделю.** Мелкие просьбы копятся и делаются пачкой. Иначе десять клиентов растащат неделю на кусочки, и ты будешь занят весь день, не заработав ничего. **Уведомления на себя.** Настрой оповещения по проектам ([Урок 19](/learn/module-3/lesson-19-notifications)), чтобы про отвалившийся канал или пустой баланс узнавать раньше, чем позвонит владелец. Клиент оценивает не отсутствие проблем, а скорость реакции. **Проверка раз в месяц.** Пройди по проектам: цены актуальны, [лиды](/learn/module-4/lesson-25-leads) доходят, [аналитика](/learn/module-4/lesson-26-analytics-reports) без провалов, баланс не на нуле. Полчаса на проект, зато сопровождение перестаёт быть словом и становится работой, которую видно. ## Пример Интегратор ведёт восемь проектов в трёх нишах. Каркасов у него три, поэтому новый клиент в знакомой нише собирается за вечер. Правки он делает по четвергам, отчёты владельцам уходят автоматически. Из восьми клиентов пятеро пришли по его коду, поэтому кроме сопровождения ему ежемесячно капает комиссия с их подписок. Ни одного дня в неделю он не тратит на «пожары», потому что узнаёт о проблемах из уведомлений. ## Когда полезно / нюансы - Пиши клиенту первым, когда что-то починил. Это и есть ощущение сопровождения. - Держи короткий список того, что входит в сопровождение, и сверяйся с ним при просьбах «а ещё вот это». - Не бери десятого клиента, если по девятому не успеваешь. Репутация в нише важнее одной настройки. - Не давай свой код тем, кому не помогаешь: код без сопровождения это разовая копейка и брошенный клиент. ## Частые ошибки - **Проекты на своём аккаунте.** Смешиваются деньги, данные и ответственность. - **Правки по первому звонку.** День рассыпается, доход не растёт. - **Каждый проект с нуля.** Опыт не превращается в скорость. - **Узнаёшь о проблеме от клиента.** Это главный разрушитель доверия. ## Вопросы новичка - **Сколько проектов реально вести одному?** При каркасах и одном дне правок восемь-двенадцать идут спокойно. Дальше нужен помощник. - **Когда придёт код?** Как только все уроки отмечены пройденными и курс прочитан, а не пролистан. Кнопка появляется на [странице курса](/learn). - **Код один на всех клиентов?** Да, он твой личный, его вводят разные клиенты в своих проектах. - **Где смотреть, сколько начислено?** Кабинет, раздел «Рефералы»: применившие, оплатившие и сумма. - **Можно применить свой код к своему проекту?** Нет. Код работает на проектах клиентов, которых ты привёл, а не как скидка себе. ## Проверь себя - Почему проект должен принадлежать клиенту, а не тебе? - Какие три источника дохода у интегратора и какой из них основной? - Что нужно сделать, чтобы получить партнёрский код? ## Что дальше Курс пройден целиком: от первого бота до собственной практики. Забери код на [странице курса](/learn), собери первое демо и напиши тому бизнесу, чью рекламу видел вчера в ленте. ## Подробнее (техническая документация) - [Промокоды и партнёрская программа](/docs/guide/06-money/63-referrals) - [Роли и участники проекта](/docs/guide/07-team/70-roles) # ЧАСТЬ 3. РАЗБОРЫ И СТАТЬИ (19) --- ## Аналоги и альтернативы: чем заменить конструктор, коннектор или разработку URL: https://dosai.pro/blog/analogi-i-alternativy-chat-botam # Аналоги и альтернативы: чем заменить конструктор, коннектор или разработку Запрос «аналог такого-то сервиса» почти никогда не про сам сервис. Он про то, во что человек упёрся: бот не понимает вопрос, сформулированный не по шаблону; счёт растёт вместе с базой подписчиков; разработчик, который делал бота, перестал отвечать. Ниже четыре подхода, которые продают под одним словом «чат-бот», и разница между ними. Про деньги отдельно есть [подробный разбор с цифрами](/blog/skolko-stoit-chat-bot-dlya-biznesa), здесь про то, что меняется в работе. ## Подход 1. Конструктор сценариев Сюда попадают Manychat, SendPulse, Chatfuel, Salebot и десятки местных сборок. Вы рисуете дерево: клиент нажимает кнопку, бот отвечает заготовленным текстом, ведёт по веткам. **В чём сила.** Предсказуемость. Бот скажет ровно то, что вы написали, ни слова сверху. Для регистрации на вебинар, выдачи лид-магнита и рассылки по подписчикам этого достаточно, и переплачивать за ИИ там незачем. **Где упирается.** Живой клиент пишет не кнопками. «А если у меня сплав, а не сталь, вы такое делаете?» в дереве не предусмотрено, и бот отвечает «я вас не понял» либо уводит в меню. Каждая новая формулировка требует новой ветки, дерево пухнет, поддерживать его становится тяжелее, чем отвечать руками. Подробнее эта разница разобрана [здесь](/blog/ii-bot-ili-scenarnyy-bot). **Второе.** У большинства зарубежных конструкторов счёт растёт от числа контактов или подписчиков. Пока база маленькая, платите мало. Когда наработали базу, платите за неё, даже если пишут вам десять человек в день. **Когда оставаться.** У вас поток однотипных заявок с рекламы, вопросов почти нет, нужна скорость и дешевизна. Сценарий тут выигрывает. ## Подход 2. Коннектор к CRM Wazzup, Chat2Desk, i2crm и подобные. Их работа не в том, чтобы отвечать, а в том, чтобы завести переписку из WhatsApp и Instagram внутрь вашей CRM: amoCRM, Битрикс, RetailCRM. Менеджеры пишут из привычного окна, история подтягивается к сделке. **В чём сила.** Если у вас уже есть отдел продаж и живая CRM, коннектор решает главную боль: переписка перестаёт жить в телефоне сотрудника и не уходит вместе с ним. **Где упирается.** Коннектор соединяет, но не отвечает. Ночью, в выходной и в час пик клиент ждёт живого человека, потому что автоматики там нет. Оплата обычно идёт за подключённый канал в месяц, независимо от того, сколько сообщений через него прошло. **Когда оставаться.** Менеджеры справляются, вопрос только в порядке и учёте. Тогда добавлять ИИ поверх незачем. ## Подход 3. Разработка на заказ Вы платите подрядчику, он пишет бота под вас с нуля или собирает на низкоуровневых конструкторах. **В чём сила.** Можно сделать что угодно, включая интеграцию с вашей самописной системой складского учёта. **Где упирается.** Три вещи, которые всплывают через месяц. Правки идут через подрядчика, то есть каждое изменение прайса это письмо и ожидание. Знание, как устроен бот, живёт в одной голове. И бот не улучшается сам: то, что написали в марте, в августе работает так же. Про то, во сколько это выходит с учётом поддержки, есть [отдельный разбор](/blog/skolko-stoit-chat-bot-dlya-biznesa), а про заработок с другой стороны прилавка [материал для интеграторов](/blog/zarabotok-na-nastroyke-chat-botov). **Когда оставаться.** У вас нестандартный процесс, который не ложится ни в одну платформу, и есть бюджет на постоянную поддержку. ## Подход 4. ИИ-ассистент Вместо дерева веток вы описываете бизнес текстом и даёте материалы: прайс, услуги, условия. Модель читает вопрос клиента как человек и отвечает по вашим данным. **В чём сила.** Незнакомая формулировка перестаёт быть проблемой. «Сколько будет починить экран на 14 про» и «айфон 14 про, разбил экран, почём» это один и тот же вопрос, и оба получают ответ. Правки вносите сами: поменяли цену в тексте, бот отвечает по-новому со следующего сообщения. **Где упирается, честно.** Модель может ошибиться, и это не гипотеза, а свойство технологии: [почему бот выдумывает](/blog/pochemu-bot-vydumyvaet). Поэтому денежные и обязывающие действия нельзя оставлять на усмотрение модели, для них нужны ограничители на стороне платформы. И ответы стоят денег: не фиксированная сумма за подписчика, а расход по факту переписки, обычно меньше цента за диалог. **Когда не стоит.** Вам пишут пять человек в месяц, решения принимаются на встрече. Поставьте автоответ с конкретикой и не тратьте время. ## Что меняется при переходе, по пунктам | Что | Конструктор | Коннектор | Разработка | ИИ-ассистент | |---|---|---|---|---| | Понимает свободную речь | нет | не отвечает | как написали | да | | Кто вносит правки | вы | не применимо | подрядчик | вы | | За что платите | за подписчиков | за канал | за часы | за подписку и ответы по факту | | Работает ночью | по сценарию | нет | по сценарию | да | | Риск неверного ответа | нет | нет | нет | есть, гасится ограничителями | ## Частая ошибка при выборе Люди сравнивают по списку возможностей и берут тот, где галочек больше. Через месяц выясняется, что решала одна вещь, которой в списке не было: **кто и за сколько минут вносит правку.** Прайс меняется, появляется услуга, приходит сезон. Если правка это письмо подрядчику или перерисовка дерева на сорок веток, бот отстаёт от бизнеса и постепенно начинает врать клиентам не потому, что модель ошиблась, а потому что данные протухли. Второй вопрос по важности: **что происходит, когда бот не знает ответа.** Правильное поведение это честное «уточню у коллеги» и передача человеку. Неправильное это выдуманная цена. Проверяется за пять минут в тестовом чате, до подключения рабочего номера. ## Отдельно про WhatsApp Какой бы подход вы ни выбрали, бот попадает в WhatsApp одним из двух способов, и от этого зависит риск для номера: [QR или Business API](/blog/whatsapp-qr-ili-business-api). Правила безопасности для рабочего номера одинаковы для всех платформ и собраны [здесь](/blog/za-chto-whatsapp-banit-nomer). Если рисковать основным номером не хочется, начните [с Telegram](/blog/telegram-bot-dlya-biznesa): там бот отдельный, банить нечего, а инструкции и материалы вы отладите на живых людях. ## Как проверить любой вариант за вечер Без покупки, на своих данных: 1. Возьмите двадцать реальных переписок за последнюю неделю. 2. Выпишите вопросы, которые в них встретились, включая кривые формулировки и голосовые. 3. Прогоните их через тестовый чат выбранной платформы. 4. Считайте не проценты, а штуки: сколько ответов вы бы отправили клиенту не краснея. Если из двадцати проходят пятнадцать, платформа рабочая, оставшиеся пять чинятся текстом инструкции. Если проходят пять, никакие настройки это не спасут. Посмотреть, как выглядит четвёртый подход, можно бесплатно: при регистрации на [dosai.pro](https://dosai.pro) даётся $5 на баланс и 14 дней, карта не нужна, бот проверяется в тестовом чате до подключения рабочего номера. Разобраться в теме без покупки помогает [бесплатный курс](https://dosai.pro/learn). --- ## Промпт для чат-бота: как написать инструкцию, которой бот действительно следует URL: https://dosai.pro/blog/promt-dlya-chat-bota-primery # Промпт для чат-бота: как написать инструкцию, которой бот действительно следует Промпт это текст, который бот читает перед каждым ответом клиенту. Проще всего думать о нём как об инструкции новому сотруднику в первый день: кто мы, что продаём, как разговариваем, чего делать нельзя. Разница с живым сотрудником одна и она важная. Человек додумает недосказанное по обстановке. Бот не додумает: чего нет в инструкции и в материалах, того для него не существует. Отсюда почти все разочарования вида «бот вежливый, но бесполезный». ## Из чего состоит рабочий промпт Пять блоков. Порядок не догма, но пропуск любого из них видно сразу. **1. Кто ты и на кого работаешь.** Имя, роль, компания, город, чем занимаетесь. Одним абзацем, без пафоса. **2. Как разговариваешь.** Длина ответов, обращение на «ты» или «вы», можно ли эмодзи, здороваться ли каждый раз. Это то, что клиент почувствует первым. **3. Что делаешь по шагам.** Как ведёшь разговор: что спрашиваешь сначала, когда называешь цену, когда предлагаешь записаться, что делаешь с молчанием. **4. Чего не делаешь никогда.** Самый недооценённый блок. Скидки сверх названной, обещания сроков, медицинские и юридические выводы, оценка стоимости на глаз. **5. Когда зовёшь человека.** Условия передачи: клиент раздражён, сумма выше порога, вопрос вне вашего списка, просят живого сотрудника. Материалы (прайс, услуги, условия доставки) в промпт не переписывают. Они загружаются отдельно, а в промпте остаётся правило, как ими пользоваться. ## До и после: три живых примера ### Про тон Было: ``` Отвечай вежливо и профессионально. ``` Стало: ``` Пиши короткими сообщениями, 1-3 предложения. Обращайся на «вы». Без эмодзи. Здоровайся только в первом сообщении диалога. Не пиши «Спасибо за ваш вопрос» и «Мы ценим ваше обращение»: сразу отвечай по сути. ``` Первая формулировка не значит ничего: у модели своё представление о вежливости, обычно с реверансами на два абзаца. Вторая проверяема. ### Про цены Было: ``` Рассказывай о наших ценах. ``` Стало: ``` Цены бери только из прайса. Если услуги в прайсе нет, скажи: «Такое считаем индивидуально, сейчас уточню у мастера» и передай диалог человеку. Никогда не называй цену «примерно» и не считай сам. Скидки не обещай. Про скидку отвечай: «Про скидки решает руководитель, я передам ваш вопрос». ``` Это тот блок, который спасает деньги. Модель по своей природе стремится дать ответ, а не признать незнание, поэтому запрет считать самому должен быть написан прямо. Механика этого разобрана в статье [почему бот выдумывает](/blog/pochemu-bot-vydumyvaet). ### Про сбор заявки Было: ``` Собирай контакты клиентов. ``` Стало: ``` Цель разговора: записать человека на замер. Спрашивай по одному вопросу за сообщение, не списком: 1) что нужно сделать, 2) район, 3) удобный день. Имя и телефон спрашивай последними, когда уже договорились о времени. Если клиент отказывается назвать телефон, не настаивай и предложи написать нам самому. ``` «Собирай контакты» превращается в допрос на пять вопросов подряд, после которого человек уходит. Порядок и по одному вопросу за раз это то, что отличает разговор от анкеты. ## Семь ошибок, из-за которых промпт не работает **Пишут о боте, а не для бота.** «Наш ассистент отличается заботливым подходом» это текст для лендинга. Боту нужны команды: делай так, не делай так. **Смешивают инструкцию и данные.** Прайс на сорок позиций внутри промпта устаревает в первый же день и его неудобно править. Данные загружаются как материалы, промпт остаётся коротким. **Требуют невозможного.** «Определи по фотографии, ремонтопригодна ли деталь» модель выполнит уверенно и неправильно. То, чего бот физически не может знать, он обязан передавать человеку. **Забывают про запреты.** Промпт из одних разрешений это бот, который согласится на всё: перенести запись на несуществующее время, дать скидку, подтвердить наличие. **Пишут «отвечай кратко» и ждут телепатии.** Кратко это сколько? Одно предложение или пять? Числа работают, оценки нет. **Не описывают провал.** Что бот говорит, когда не знает? Если это не написано, он придумает. **Пишут один раз и не возвращаются.** Промпт живёт вместе с бизнесом. Появилась услуга, поменялся график, пошёл сезон, значит инструкцию надо дописать. Это две минуты, если правку вносите вы сами, и неделя, если через подрядчика. ## Как проверить промпт за вечер Не на выдуманных вопросах, а на своих. Порядок такой: 1. Откройте переписки за последнюю неделю и выпишите двадцать реальных вопросов, включая кривые формулировки, опечатки и голосовые. 2. Прогоните их через тестовый чат. Не через живой номер: сначала полигон. 3. Специально попробуйте бота сломать. Поторгуйтесь, попросите невозможное, спросите то, чего нет в материалах, притворитесь раздражённым. 4. Считайте штуки, а не проценты: сколько ответов вы отправили бы клиенту не краснея. Хороший ответ на незнакомый вопрос звучит как «уточню у коллеги и вернусь», а не как выдуманная цифра. Если бот придумывает, добавляйте запрет в блок «чего не делаешь никогда» и проверяйте снова. ## Чего промпт не решает Есть вещи, которые инструкцией не чинятся, и честно знать о них заранее. **Деньги.** «Подтверждай оплату только после чека» это просьба, а не гарантия. Действия, которые стоят денег или создают обязательства, должны быть закрыты ограничителями на стороне платформы, а не текстом промпта. У нас для этого есть предусловия: функция не выполнится, пока условие не соблюдено, что бы модель ни решила. **Факты, которых нет в материалах.** Никакая формулировка не заставит бота узнать ваш склад. Загрузите данные. **Молчание клиента.** Человек спросил цену и пропал. Это не задача промпта, а задача [дожимов](/blog/dozhimy-primery-soobsheniy). ## С чего начать Напишите первую версию за двадцать минут, не вылизывая. Пять блоков, по абзацу на каждый. Дальше правьте по результатам тестового чата: каждый плохой ответ это одна строка в промпте. Полная памятка по структуре, допустимым значениям и типовым конструкциям лежит в [руководстве](/docs/guide/01-bot/11-system-prompt). Проверить свой промпт на живых вопросах можно бесплатно: при регистрации на [dosai.pro](https://dosai.pro) даётся $5 на баланс и 14 дней, карта не нужна. Если хочется сначала разобраться в теме, есть [бесплатный курс](https://dosai.pro/learn). --- ## CRM для WhatsApp: зачем она нужна, если переписка и так сохраняется URL: https://dosai.pro/blog/crm-dlya-whatsapp # CRM для WhatsApp: зачем она нужна, если переписка и так сохраняется Возражение звучит логично: вся история и так в телефоне, ничего не теряется, поиск работает. Зачем ещё одна система. Ответ проще, чем кажется. История переписки отвечает на вопрос «что мы обсуждали с этим человеком». Она не отвечает ни на один вопрос про бизнес. ## Четыре вопроса, на которые переписка не отвечает Попробуйте прямо сейчас, по своему WhatsApp. **Сколько человек написало на прошлой неделе.** Считать придётся вручную, отделяя клиентов от поставщиков, курьеров и семьи. **Скольким вы не ответили.** Технически возможно, практически никто этого не делает: нужно открыть каждый диалог и посмотреть, чья реплика последняя. **Кто спросил цену и пропал.** Самая дорогая группа, и найти её в переписке нельзя вообще, потому что признак «спросил и не вернулся» нигде не хранится. **Что стало с клиентами из рекламы за март.** Без пометки об источнике ответа нет. Это и есть граница. Мессенджер сделан для разговора, и разговор он хранит отлично. Список, который можно отсортировать и посчитать, он не хранит, потому что не должен. ## Что такое карточка заявки на практике Минимальный набор, без которого список бесполезен. **Имя и телефон отдельными полями.** Не «клиент 77xx» и не текст внутри сообщения. **Суть запроса словами.** Что человек хотел. Одна строка, но написанная, а не «новый диалог». **Дата и время первого обращения.** Оттуда считается скорость ответа. **Стадия.** Написал, ответили, назначено, оплатил, отказ. Пять состояний покрывают почти любой малый бизнес, больше обычно не нужно. **Ответственный.** Кто ведёт. Если вы один, поле пустует, и это нормально ровно до найма второго человека. **Источник.** Откуда пришёл: реклама, визитка, сарафан, сайт. Всё остальное это надстройки, без которых можно жить годами. ## Главное отличие: заполняется на входе, а не потом Тут проходит граница между работающей схемой и той, что умирает за две недели. Схема, которая умирает: вечером менеджер открывает переписку и переносит заявки в таблицу. Первую неделю переносит, вторую половину, третью не переносит вовсе. Не потому что ленивый, а потому что это двойная работа с нулевой отдачей для того, кто её делает. Схема, которая живёт: карточка создаётся в момент разговора, автоматически. Ассистент, который отвечает клиенту, попутно вытаскивает имя, телефон и суть, и заявка появляется сама. Человеку остаётся двигать стадию, а это уже полезное действие, а не перепечатывание. Именно поэтому CRM и ассистент в мессенджере это одна задача, а не две. Разнесённые по разным системам, они дают ровно ту двойную работу, из-за которой всё и разваливается. ## Что вы начинаете видеть После того как список появился, становятся доступны вещи, о которых до этого не думали. **Скорость ответа как цифра.** Не ощущение «вроде отвечаем быстро», а медиана по неделе. Обычно она хуже, чем кажется владельцу. **Список тех, кто завис.** Спросили и пропали. Одно вежливое напоминание через сутки возвращает часть из них, и это самая дешёвая выручка в бизнесе. **Конверсия по источникам.** Реклама, которая даёт много обращений и мало покупок, видна сразу, а не через квартал. **Нагрузка по часам.** Когда именно вам пишут. Часто выясняется, что пик приходится на время, когда никого нет на связи. ## Про интеграцию с существующей CRM Если у вас уже стоит система, куда менеджеры вносят сделки, вопрос звучит иначе: не «завести ли ещё одну», а «как переписка попадёт в текущую». Здесь важно определиться, что является источником правды. Рабочая схема одна: переписка и заявки живут в одном месте, а в вашу систему уходит то, что нужно ей (контакт, сумма, статус). Обратный вариант, когда сообщения дублируются в двух местах, всегда заканчивается расхождением. ## С чего начать, если ничего нет Не с выбора системы. С проверки на пять минут. Напишите своему боту или своему менеджеру с телефона, которого нет в базе, как обычный клиент: спросите цену, оставьте имя и номер, договоритесь о времени. Потом откройте то место, где по вашим представлениям хранятся заявки. Появилась карточка с именем, телефоном и сутью, значит система работает. Пусто, значит вы платите за красивую переписку, из которой наружу ничего не выносится. Посмотреть, как заявки собираются автоматически, можно бесплатно на [dosai.pro](https://dosai.pro). Про то, как этот же ассистент отвечает клиентам, есть [разбор про запуск без программирования](/blog/kak-sdelat-chat-bota-bez-programmirovaniya) и [бесплатный курс](https://dosai.pro/learn). --- ## Автоответ в WhatsApp: почему шаблонная фраза не работает URL: https://dosai.pro/blog/avtootvet-v-whatsapp-dlya-biznesa # Автоответ в WhatsApp: почему шаблонная фраза не работает В WhatsApp Business есть встроенный автоответ: клиент пишет вне рабочего времени и получает «Спасибо за обращение, мы ответим в рабочее время». Функция бесплатная, ставится за минуту, и поэтому стоит почти у всех. А теперь неприятная часть: на выручку она почти не влияет. ## Что происходит после этой фразы Поставьте себя на место человека. Вечер, он выбирает, где заказать. Написал в три места. Из первого пришёл автоответ про рабочее время. Из второго пришёл автоответ про рабочее время. Из третьего пришёл ответ на его вопрос. Он не будет ждать до утра, чтобы сравнить. Он уже разговаривает с третьими. Автоответ решает вежливую задачу: человек понимает, что сообщение доставлено. Он не решает коммерческую задачу: человеку нужен ответ, а не подтверждение получения. Разница между этими двумя вещами и есть та выручка, которую вы недосчитываете по вечерам и выходным. Посчитать её несложно: возьмите число входящих за месяц, отделите те, что пришли вне рабочего времени, и посмотрите, сколько из них дошло до покупки. Разница с дневными обращениями обычно неприятная. ## Три уровня автоматизации, которые путают между собой **Уровень первый: автоответ.** Одна и та же фраза всем. Не понимает вопрос, не отвечает, ничего не запоминает. Полезен ровно в одном случае: когда вам важно обозначить, что вы существуете. **Уровень второй: сценарный бот с кнопками.** «Нажмите 1 для цен, 2 для адреса». Работает, пока клиент задаёт ожидаемые вопросы в ожидаемом порядке. Первый шаг в сторону, и человек упирается в «я вас не понял». Разница между этим и ИИ подробно разобрана [здесь](/blog/ii-bot-ili-scenarnyy-bot). **Уровень третий: ассистент, который отвечает.** Читает вопрос как человек, отвечает по вашим материалам, задаёт уточняющие вопросы, записывает контакт, при необходимости зовёт вас. Не понимает вопрос, говорит об этом честно и передаёт человеку. Разница между первым и третьим уровнем не в технологии. Она в том, получил клиент ответ или получил обещание ответа. ## Что должен уметь ассистент, чтобы заменить автоответ Не всё сразу. Минимальный полезный набор небольшой. **Отвечать на цену, адрес, график и наличие.** Это половина всех вопросов в любом малом бизнесе. Именно они не требуют вашего участия и именно они чаще всего остаются без ответа вечером. **Отвечать честно на то, чего не знает.** Правильный ответ на незнакомый вопрос это «уточню и вернусь», а не выдумка. Бот, который придумывает цену, вредит сильнее, чем молчание. Про механику этого есть [отдельный разбор](/blog/pochemu-bot-vydumyvaet). **Сохранять контакт.** Имя, телефон, суть вопроса, время. В список, а не в переписку. **Звать вас, когда пора.** Клиент нервничает, торгуется, спрашивает нестандартное, речь идёт о крупной сумме. В этот момент нужен человек, и он должен узнать об этом сразу. **Молчать, когда вы вступили в разговор.** Вы ответили сами, ассистент отходит в сторону и не перебивает. ## Что с этим делать в WhatsApp Технически ассистент подключается к вашему рабочему номеру одним из двух способов, и выбор влияет на риски. Способы сравниваются в [отдельной статье](/blog/whatsapp-qr-ili-business-api), а требования безопасности к номеру собраны в [разборе про блокировки](/blog/za-chto-whatsapp-banit-nomer). Если рисковать основным номером не хочется, есть путь мягче: сначала запустить того же ассистента [в Telegram](/blog/telegram-bot-dlya-biznesa), довести его ответы до состояния, за которое не стыдно, и только потом подключать WhatsApp. ## Когда автоответа достаточно Честно: бывает. Если вам пишут пять человек в месяц, а решения принимаются на встрече, ассистент вам не окупится. Поставьте автоответ, добавьте туда конкретику вместо общих слов (когда именно ответите, куда позвонить, если срочно), и этого хватит. Автоматизация начинает окупаться на потоке от нескольких десятков обращений в месяц, и особенно там, где вопросы повторяются: цена, наличие, время работы, запись. ## Что сделать сегодня Откройте переписку за прошлую неделю и посчитайте две цифры: сколько человек написало после шести вечера и скольким из них вы ответили в тот же день. Если разрыв большой, автоответ не про вежливость, а про потерянные деньги. Посмотреть, как выглядит замена, можно бесплатно на [dosai.pro](https://dosai.pro), а разобраться в теме без покупки помогает [бесплатный курс](https://dosai.pro/learn). --- ## Бот, который отвечает за тебя: что это такое и где его предел URL: https://dosai.pro/blog/bot-kotoryy-otvechaet-za-tebya # Бот, который отвечает за тебя: что это такое и где его предел Люди ищут это разными словами: «бот, который отвечает за тебя», «ассистент, который сам пишет клиентам», «бот, который общается вместо меня в ватсапе». Запрос один и тот же: хочется, чтобы переписка шла без вас. Разберём, что такая штука умеет на самом деле, чем отличается от автоответчика и где у неё граница. ## Откуда он берёт ответы Это первый вопрос, и он важнее всех остальных. Бот не знает ваш бизнес. Он знает язык. Всё, что он говорит про ваши цены, услуги и правила, он берёт из двух мест, которые заполняете вы. **Инструкция.** Обычный текст: кто вы, что продаёте, как разговариваете, чего делать нельзя. Пишется как памятка новому сотруднику, только один раз. **Материалы.** Прайс, описания услуг, частые вопросы, условия доставки. Тоже текст, можно кусками из существующих документов. Отсюда следует неприятное. Если вы дали три строки, бот будет отвечать общими фразами и выкручиваться. Качество ответов почти целиком определяется тем, сколько конкретики вы дали, а не тем, какая модель стоит под капотом. ## Чем он отличается от автоответчика Автоответчик отправляет одну и ту же фразу всем. Он не читает вопрос. Бот читает. Клиент [салона красоты](/for/salon-krasoty) пишет «сколько у вас стоит покрасить в тёмный, волосы до лопаток», и это не совпадает ни с одной кнопкой и ни с одной заготовленной фразой. Ответ собирается из вашего прайса под конкретный вопрос. Разница видна ещё сильнее на кривых сообщениях. Люди пишут с ошибками, голосом, скриншотами, обрывками в три сообщения подряд. Автоответчик тут беспомощен, а бот собирает смысл. Подробное сравнение с ботами на кнопках есть [в отдельном разборе](/blog/ii-bot-ili-scenarnyy-bot). ## Что он делает с вопросом, на который ответа нет Это главный тест, и по нему видно, хороший бот или опасный. Правильное поведение: сказать, что уточнит, и передать вопрос человеку. Плохое: придумать ответ, потому что модель обучена быть полезной и не любит говорить «не знаю». Придуманная цена стоит дороже молчания: клиент приходит с ней к вам, и дальше вы либо теряете деньги, либо выглядите обманщиком. Про механику выдумывания и способы её ограничить есть [отдельная статья](/blog/pochemu-bot-vydumyvaet). Отдельно про действия. Одно дело сказать неправду, другое сделать что-то на её основании: подтвердить оплату, которой не было, записать на занятое время. Поэтому действия с последствиями должны упираться не в текст инструкции, а в проверку по данным: нет присланного чека, значит функция подтверждения оплаты просто не выполнится. ## Что происходит, когда вы отвечаете сами Момент, о котором почти никто не думает заранее, а он случается каждый день. Вы видите важного клиента и пишете ему сами, с телефона. Что должен сделать бот? Правильно: замолчать. Как только в разговор вступил человек, бот отходит в сторону и не перебивает. Иначе получается неловкость, когда клиенту отвечают двое с разными формулировками. Дальше два режима. Либо бот молчит до вашей команды, либо возвращается сам через заданное время. Оба варианта рабочие, важно, чтобы вы понимали, какой у вас включён, и чтобы возврат бота не выглядел как «здравствуйте, чем помочь» посреди начатого вами разговора. ## Что он делает, когда клиент замолчал Половина клиентов не отвечает сразу. Спросил цену, отвлёкся, ушёл думать. Хороший вариант поведения: одно напоминание через несколько часов, второе через день, третье через несколько дней, и на этом всё. Причём напоминание должно быть в контексте разговора, а не шаблонным «вы ещё здесь?». Важнее другое: бот обязан понимать, когда напоминать нельзя. Клиент сказал «свяжусь сам в четверг», значит до четверга тишина. Клиент попросил не писать, значит не писать никогда. Без этих двух правил напоминания превращаются в спам, а спам в мессенджере стоит дорого. Про то, как это выглядит на практике, есть [разбор с примерами сообщений](/blog/dozhimy-primery-soobsheniy). ## Где предел Честно, без рекламы. **Он не заменит переговоры.** Там, где нужно продавить, уступить, почувствовать настроение, нужен человек. Бот доводит клиента до этого момента и передаёт. **Он не примет решение за вас.** Скидка, исключение, срочный перенос ради постоянного клиента: это ваши решения, и они не автоматизируются инструкцией. **Он не спасёт плохой продукт.** Если у вас долго везут и часто ошибаются, быстрые ответы это лишь быстрее обнаруженная проблема. **Он бесполезен на малом потоке.** Пять обращений в месяц отвечаются вручную, и любой инструмент тут расход, а не вложение. ## Что делать, если хочется попробовать Порядок, который экономит нервы. Сначала соберите материалы: прайс, частые вопросы, условия. Это единственная часть, которую нельзя делегировать, и она же определяет результат. Потом запустите бота [в Telegram](/blog/telegram-bot-dlya-biznesa). Там подключение бесплатное и безопасное, ошибки в инструкциях не стоят ничего. Поговорите с ним сами и постарайтесь сломать: спросите то, чего нет в материалах, поторгуйтесь, попросите невозможное. Смотрите не на то, как красиво он говорит, а на то, что остаётся после разговора: появилась ли заявка с именем, телефоном и сутью. И только потом подключайте WhatsApp, где на кону ваш рабочий номер. Про риски этого шага есть [отдельная статья](/blog/za-chto-whatsapp-banit-nomer). Собрать такого ассистента и поговорить с ним можно бесплатно на [dosai.pro](https://dosai.pro), а если хочется сначала разобраться без покупки, есть [курс из 41 урока](https://dosai.pro/learn). --- ## Дожимы: что написать клиенту, который замолчал URL: https://dosai.pro/blog/dozhimy-primery-soobsheniy # Дожимы: что написать клиенту, который замолчал Человек спросил цену, вы ответили, он прочитал и пропал. Через неделю вы уже не помните, что он существовал. Такие люди самая дешёвая выручка в вашем бизнесе. Их не надо искать, им не надо ничего объяснять с нуля, они уже проявили интерес. Нужно одно: вовремя напомнить о себе. Разберём, через сколько, сколько раз и какими словами. ## Почему это работает лучше, чем кажется Молчание клиента почти никогда не означает отказ. Обычные причины: отвлёкся, решил спросить у мужа или партнёра, сравнивает с двумя другими, отложил на выходные. Ни одна из этих причин не про вас. Через несколько часов человек про переписку просто забыл, и напоминание возвращает его в тот момент, где он остановился. Отказ звучит иначе и его слышно: «дорого», «уже нашли», «пока не актуально». Вот это отказ, и дожимать тут нельзя. ## Сроки: три касания, дальше вред Рабочая схема простая. **Первое касание через 1-2 часа.** Человек ещё в контексте, разговор для него живой. Это самое результативное касание из всех. **Второе через сутки.** Другой день, другое настроение, часто другой ответ. **Третье через 3-4 дня.** Последнее. Дальше вы становитесь навязчивым, и вместо продажи получаете жалобу или блокировку. Больше трёх касаний почти никогда не оправдано. Исключение это длинный цикл сделки, где решение принимают неделями: мебель на заказ, ремонт, обучение с началом группы. Там четвёртое касание может быть привязано к событию («в понедельник стартует набор»), а не к календарю. ## Что писать: примеры по типам бизнеса Общее правило: касание должно продолжать разговор, а не начинать новый. «Здравствуйте, чем могу помочь» после того, как вы полчаса обсуждали покраску, читается как разговор с новым человеком, и это раздражает. **Услуги с записью ([салон](/for/salon-krasoty), [стоматология](/for/stomatologiya), [автосервис](/for/avtoservis)).** Через 2 часа: «Подскажите, остались вопросы по записи? Могу подобрать удобное время». Через сутки: «На этой неделе ещё есть окна в четверг и пятницу, если актуально». Через 3 дня: «Если пока не планируете, напишите, я не буду напоминать». **Товары и заказ.** Через 2 часа: «Уточнить что-то по размерам или доставке?» Через сутки: «Из наличия остались два цвета, если ещё выбираете». Через 3 дня: «Отложить для вас или снять с брони?» **[Обучение](/for/uchebnyy-tsentr).** Через 2 часа: «Остались вопросы по программе? С радостью подскажу». Через сутки: «Могу записать на пробное занятие, это ни к чему не обязывает». Через 3 дня: «Ближайший набор стартует в понедельник, мест немного». **Дорогая услуга с длинным решением ([ремонт](/for/remont-kvartir), [мебель](/for/mebel-na-zakaz), [недвижимость](/for/nedvizhimost)).** Через 3 часа: «Отправить смету в PDF, чтобы было с чем сравнивать?» Через 2 дня: «Если нужно обсудить с супругой, могу подготовить два варианта по бюджету». Через неделю: «Как продвигается выбор? Если отложили, просто скажите». Заметьте, что в каждом третьем касании есть разрешение отказаться. Это не слабость. Оно повышает долю ответов и убирает тех, кто никогда не купит, из вашего списка. ## Три правила, без которых дожимы становятся спамом **Правило первое: клиент назвал срок, значит до этого срока тишина.** «Свяжусь сам в четверг» это договорённость. Напоминание в среду обнуляет доверие сильнее, чем отсутствие напоминания вообще. **Правило второе: попросил не писать, значит не писать никогда.** Ни через месяц, ни с новой акцией. Одно такое сообщение в мессенджере превращается в жалобу, а жалобы в мессенджерах стоят номера. **Правило третье: заявка передана, дожимы кончились.** Клиент рассказал всё, услышал «передал, скоро свяжутся» и ждёт вашего звонка. Напоминание «вы, наверное, заняты» в этот момент выглядит издевательством. Дальше работает человек, а не автоматика. ## Шаблон или живой текст Два подхода, и оба рабочие. **Готовый текст** предсказуем и вы точно знаете, что уйдёт клиенту. Минус в том, что один и тот же текст летит всем, включая тех, с кем разговор шёл о другом. **Текст по контексту разговора** (когда напоминание сочиняет ассистент, читая переписку) обычно работает лучше: он ссылается на то, что человек реально спрашивал. «Вы спрашивали про покраску в тёмный, могу подобрать время на этой неделе» это другое сообщение, чем «остались вопросы?». Практический совет: первое касание сделайте по контексту, последнее фиксированным текстом с разрешением отказаться. Первое должно попасть в разговор, последнее должно быть коротким и одинаковым для всех. ## Как понять, что дожимы работают Считать надо не отправленные сообщения, а две вещи. **Доля ответивших на первое касание.** Если она заметная, схема живая. Если околонулевая, скорее всего вы пишете слишком поздно или слишком общими словами. **Число отписок и жалоб.** Растёт, значит касаний слишком много или они не в контексте. Это единственная метрика, которая должна вас останавливать. Обе цифры видны в переписке и без всяких инструментов, если вести список тех, кто спросил и пропал. Про то, почему такого списка обычно нет и как он появляется, есть [отдельный разбор](/blog/crm-dlya-whatsapp). ## Что сделать сегодня Откройте переписку за последние две недели и выпишите тех, кто задал вопрос и не получил от вас второго сообщения. Отправьте каждому одно короткое напоминание в контексте того, что он спрашивал. Не рассылку, а именно продолжение конкретного разговора. Это займёт полчаса и обычно возвращает больше, чем неделя рекламы. Если после этого захочется, чтобы напоминания уходили сами и с соблюдением трёх правил выше, посмотрите, как это устроено у нас: [dosai.pro](https://dosai.pro). --- ## За что WhatsApp банит рабочий номер бизнеса URL: https://dosai.pro/blog/za-chto-whatsapp-banit-nomer # За что WhatsApp банит рабочий номер бизнеса Рабочий номер это актив. На нём висит история переписок, его знают клиенты, он напечатан на визитках и стоит в шапке сайта. Потерять его больнее, чем потерять сайт: сайт вы поднимете за день, а номер вернуть может только сам WhatsApp по заявке владельца, и заявки часто заканчиваются ничем. При этом бан приходит быстро. Не через месяц активной работы, а иногда через несколько минут после подключения. Разберём, почему так происходит и что нужно сделать до сканирования QR. ## Как бот вообще попадает в WhatsApp У обычного аккаунта WhatsApp нет «кнопки бота». Подключение работает через тот же механизм, что и WhatsApp на компьютере: ваш телефон авторизует ещё одно устройство, и это устройство читает входящие и отправляет ответы. Отсюда следует главное. WhatsApp видит не «сервис автоматизации», а **новое устройство на вашем номере**. И всё, что дальше делает бот, засчитывается вам как поведение живого пользователя. Хорошее поведение вопросов не вызывает. Подозрительное приводит к блокировке номера целиком. ## Что WhatsApp считает подозрительным Здесь начинается главное непонимание. Владелец рассуждает объёмом: «мы отправляем пару сообщений в день, за что нас блокировать». Но платформа смотрит не на объём, а на **рисунок поведения**. Вот что реально поднимает флаг. **Новое устройство на пустом номере.** Номер купили вчера, симку вставили, сразу привязали бота. Для WhatsApp это классический одноразовый спам-аккаунт. Такие блокируют быстрее всего, буквально в первые минуты. **Сообщения незнакомым людям.** Разница между «ответить тому, кто написал первым» и «написать тому, кто не писал» огромная. Первое это нормальное поведение, второе это то, за что банят. Именно поэтому просьба «разошли предложение по нашей базе из пяти тысяч контактов» опасна: одна рассылка стоит номера, на котором держится весь входящий поток. **Одинаковый текст многим людям.** Даже без рассылки: если бот отвечает всем одной и той же фразой слово в слово, это выглядит как шаблонный спам. Живой человек так не пишет. **Резкие всплески.** Двадцать разных собеседников за минуту это не темп человека. Даже если сами сообщения полезные. **Массовые проверки чужих номеров.** Менее очевидный пункт, но важный. Любой софт, который фоном спрашивает у WhatsApp «а есть ли такой номер в мессенджере» про тысячи номеров, ведёт себя как инструмент выгрузки контактной базы. За это блокируют независимо от того, сколько сообщений вы отправили. Ноль отправленных сообщений тут не оправдание. **Номер, заведённый на эмуляторе.** Аккаунты, созданные через BlueStacks, NoxPlayer и подобные, распознаются и блокируются без шансов на восстановление. **Номер, который уже банили.** Возвращать его к жизни бесполезно, история к нему привязана. Обратите внимание, что в этом списке нет ни слова про содержание переписки. Блокируют не за то, **что** написано, а за то, **как** ведёт себя устройство. ## Почему «мы почти не пишем» не защищает Отсюда вывод, который стоит запомнить: небольшое число отправленных сообщений не делает номер безопасным. Номер может отправить два сообщения за неделю и всё равно улететь в бан, если рядом происходило что-то ещё: устройство переподключалось по десять раз за утро, софт фоном опрашивал чужие номера, аккаунт был новым и пустым. Оценивается поведение целиком, а не счётчик исходящих. Поэтому вопрос «сколько сообщений в день безопасно» задан неправильно. Правильный вопрос звучит так: **что вообще делает с моим номером сервис, которому я его отдал.** ## Что должна делать за вас платформа Часть защиты владелец обеспечить не может физически, это работа того, кто подключает номер. Вот что имеет смысл спросить у поставщика до оплаты. **Пауза после подключения.** Свежепривязанное устройство, которое немедленно начинает писать людям, выглядит хуже всего. Разумное поведение это молчать первые минуты. У нас бот молчит **15 минут** после привязки и после каждого переподключения: входящие в это время принимаются и никуда не теряются, просто ответ уходит после паузы. **Потолки отправки на уровне самого шлюза.** Не «мы стараемся», а жёсткие числа, которые нельзя превысить, даже если что-то выше по цепочке пойдёт вразнос. Наши: не больше **8 разных собеседников в минуту**, **30 отправок в минуту**, **200 в час**, **3000 в сутки**. Ответ из нескольких частей одному человеку считается за одного собеседника, а не за пять. **Человеческие паузы.** Мгновенный ответ через 50 миллисекунд после входящего это машина. Случайная задержка в **полторы-пять секунд** с индикатором «печатает» выглядит как человек. **Защита от повторов.** Третье подряд одинаковое сообщение в тот же чат должно блокироваться автоматически. Это ловит зациклившуюся логику до того, как её увидит WhatsApp. **Чистая отвязка.** Когда канал отключают, на стороне сервиса должны стереться и авторизация, и память о чатах. Иначе при следующем подключении получится «новое устройство со старыми контактами», а это для Meta признак попытки обойти блокировку. **Никакой самодеятельности с сессией.** Автоматика не должна по своей инициативе рвать живое подключение, пересоздавать его или просить новый QR. Разрыв инициирует WhatsApp, а сервис на него реагирует. Всё остальное это действия человека, нажавшего кнопку. Если на эти вопросы вам отвечают «у нас всё безопасно» без чисел и механики, считайте, что ответа нет. ## Чек-лист перед подключением Это та часть, которая зависит только от вас. 1. Номер прожил в обычном WhatsApp минимум сутки, и на нём была **живая переписка**. 2. За последние сутки на номере прошло **10-15 реальных чатов** с разными людьми. 3. Если на номере уже стоял WhatsApp, аккаунт удалён через настройки приложения перед привязкой. 4. Номер никогда не заводился через Android-эмулятор. 5. Номер раньше не блокировали. Пять пунктов выглядят формальностью ровно до первого потерянного номера. По нашему опыту именно первый и второй пункт нарушают чаще всего: берут чистую симку, потому что «жалко рабочий», и теряют её в первый же день. ## Если номер всё-таки заблокировали Первое: не переподключайте его руками с телефона снова и снова. Каждая попытка это ещё одно событие в вашей истории. Второе: не пытайтесь оживить тот же номер на том же проекте. Связь между номером и историей его контактов сохраняется на стороне мессенджера, и повторное подключение часто заканчивается второй блокировкой в тот же день. Третье: заявка в поддержку WhatsApp подаётся от владельца номера, из приложения. Сервис, через который работал бот, подать её за вас не может. Шанс есть, гарантии нет. Рабочий путь после бана это **новый прогретый номер на новом проекте**. Неприятно, но предсказуемо. ## Telegram: та же польза без этого риска Всё описанное относится только к WhatsApp, потому что там бот живёт как привязанное устройство. В Telegram официальный интерфейс для ботов, и блокировать за автоматизацию там нечего: она разрешена по правилам. Подключение занимает минуту, номер не участвует вообще. Если ваши клиенты сидят и там, и там, разумный порядок такой: запускаете бота в Telegram, смотрите на его ответы неделю, доводите инструкцию до ума и только потом подключаете WhatsApp с прогретым номером. Так вы не отлаживаете бота на активе, который нельзя потерять. Как всё это устроено у нас по шагам, описано в [руководстве](/docs/guide/02-channels/23-anti-ban), а собрать бота и попробовать его сначала в Telegram можно на [dosai.pro](/). --- ## Запись клиентов через WhatsApp: как перестать вести её вручную URL: https://dosai.pro/blog/zapis-klientov-cherez-whatsapp # Запись клиентов через WhatsApp: как перестать вести её вручную Запись в переписке почти везде устроена одинаково. Клиент спрашивает «а можно завтра в шесть», администратор открывает журнал, видит занято, предлагает семь, клиент отвечает через час, к этому времени семь тоже занято. Каждый круг занимает минуты и внимание, а на потоке съедает половину рабочего дня администратора. Ниже разбор того, как эта задача решается автоматически и где у решения границы. ## Почему запись ломается именно здесь Проблема не в скорости печати. Проблема в том, что у диалога и у расписания разные скорости. Расписание меняется в реальном времени: кто-то записался по телефону, кто-то отменил, мастер попросил окно под перерыв. Диалог в мессенджере живёт паузами: человек написал, ушёл, вернулся через сорок минут. Пока эти две скорости соединяет человек, накладки неизбежны. Устранить их можно только одним способом: показывать клиенту не то, что администратор помнит, а то, что в расписании прямо сейчас. ## Как это работает на практике Схема простая и она не требует новой программы для записи. **Расписание живёт там, где вы его уже ведёте.** Чаще всего это таблица: мастера, дни, часы, отметки о занятости. Ничего переносить не нужно, ассистент читает её как есть. **Ассистент считает свободные окна сам.** Он берёт ваш график работы, вычитает уже занятое время, учитывает длительность услуги и правила вроде «не записывать за час до конца смены» и «между записями пятнадцать минут на уборку». **Клиенту показываются только реальные варианты.** Не «когда вам удобно», после чего начинается торговля, а два-три конкретных времени. Человек выбирает, окно занимается сразу, и следующий клиент его уже не видит. **Вы видите запись у себя.** В той же таблице и в списке заявок, с именем, телефоном и услугой. Важная деталь, которую легко упустить: если человек в переписке пишет свободным текстом «давайте на послезавтра после обеда», это тоже должно работать. Люди редко говорят точным временем, и ассистент, который понимает только формат «16:00», проиграет обычному администратору. ## Что делать с переносом и отменой Здесь начинается самая частая ошибка внедрения: записывать автоматически, а переносить вручную. Через неделю у вас два источника правды, и они расходятся. Правило простое. Всё, что меняет расписание, должно менять его в одном месте. Клиент попросил перенести, ассистент освобождает старое окно и занимает новое той же операцией. Клиент отменил, окно освобождается сразу и становится доступно другим. Отдельно стоит настроить напоминание. Сообщение за сутки до визита стоит вам ничего и заметно снижает число неявок. Это, пожалуй, самая быстрая окупаемость во всей истории с записью. ## Где автоматической записи не место Честные границы важнее рекламы, поэтому перечислю. **Сложная услуга с диагностикой.** Если длительность зависит от того, что выяснится на месте, автоматическая запись поставит вам получасовое окно под двухчасовую работу. Тут правильнее собрать запрос и передать человеку. **Дефицитный ресурс с приоритетами.** Когда один мастер нарасхват и вы сами решаете, кого поставить, а кого попросить подождать, автоматика будет мешать. Ей всё равно, кто постоянный клиент. **Записи, которые почти всегда меняются.** Если половина записей переносится дважды, автоматизация не уберёт работу, а перенесёт её в другое место. Во всех трёх случаях остаётся полезный кусок: ассистент отвечает на вопросы, собирает контакт и пожелание по времени, а решение принимает человек. Это уже экономит большую часть переписки. ## Что проверить перед запуском **Расписание в цифровом виде.** Бумажный журнал автоматизировать нечем. Таблицы достаточно, отдельная программа не обязательна. **Правила, записанные словами.** Сколько длится каждая услуга, какие перерывы, за сколько часов до начала запись закрывается, кто из мастеров что делает. Это и есть вся настройка. **Кто получает нестандартное.** Ассистент упрётся в редкий случай обязательно. Заранее решите, кому он передаёт разговор и как быстро этот человек об этом узнаёт. **Ответственность за отмены.** Кто и как отменяет, если клиент позвонил по телефону, а не написал. ## Что это даёт в цифрах Считать стоит не «сэкономленные часы администратора», а две другие вещи. **Записи вне рабочего времени.** Вечер и выходные это треть обращений в услугах, и именно они обычно теряются. Запись, оформленная в десять вечера, целиком дополнительная. **Неявки.** Напоминание за сутки типично снижает их заметно, а каждая неявка это пустое окно, за которое вы уже заплатили арендой и зарплатой. Обе цифры есть у вас в собственной переписке и в журнале, считаются за полчаса и не требуют ничьего слова на веру. Посмотреть, как выглядит запись изнутри, можно бесплатно на [dosai.pro](https://dosai.pro), а если хочется сначала разобраться в теме, есть [бесплатный курс](https://dosai.pro/learn) из 41 урока. --- ## Как сделать чат-бота для WhatsApp без программирования URL: https://dosai.pro/blog/kak-sdelat-chat-bota-bez-programmirovaniya # Как сделать чат-бота для WhatsApp без программирования Раньше на этот вопрос отвечали «нужен программист» или «нужно рисовать сценарий из блоков». Оба ответа устарели. Современный бот работает не по блок-схеме, а по инструкции, написанной словами. Вы описываете, чем занимается компания, что отвечать и где звать человека, а модель ведёт разговор сама. Из-за этого узкое место сместилось: сложность теперь не в технике, а в том, чтобы внятно сформулировать правила собственного бизнеса. Ниже весь путь по шагам, с честной оценкой времени. ## Шаг 0. Подготовка, без которой дальше идти бессмысленно Соберите в один файл то, что сотрудники и так знают наизусть: - перечень услуг или товаров с ценами; - как записываются или заказывают: какие шаги, что нужно от клиента; - график работы, адрес, как добраться, есть ли парковка; - частые вопросы и ваши обычные ответы на них; - что обещать нельзя (сроки, скидки, гарантии) и где нужен живой человек; - ситуации, в которых разговор надо немедленно передать сотруднику. Формат неважен, годится обычный документ или таблица. Важна полнота: бот отвечает ровно тем, что вы ему дали. Пустая инструкция даёт пустые ответы, а на вопросы, которых нет в материалах, модель склонна придумать правдоподобный ответ. Половина всех претензий к ботам («он выдумал цену», «он назвал врача, которого у нас нет») растёт именно отсюда. Если на этом шаге выяснилось, что цена «по договорённости», а запись «когда получится», это ценная находка. Сначала правила, потом бот. Время: от часа до вечера. ## Шаг 1. Заведите проект и напишите инструкцию Проект это ваш бот со своими настройками. Внутри есть поле, куда пишется инструкция обычным текстом, примерно как вводная новому сотруднику в первый день. Что в ней должно быть: **Кто вы.** «Ты ассистент стоматологии в Астане. Отвечаешь на вопросы, записываешь на приём, собираешь контакты.» **Как разговаривать.** Коротко или подробно, на «вы» или на «ты», с эмодзи или без. **Что делать нельзя.** «Не называй цены, которых нет в прайсе. Не обещай сроки. Не ставь диагнозов.» **Когда звать человека.** «Если клиент недоволен, спрашивает про возврат или про сложный случай, скажи, что передашь администратору, и вызови функцию передачи.» Типичная ошибка новичка: инструкция в три строки. Три строки дают ответы из трёх строк. Нормальный объём это страница текста, и она окупается сразу. Время: полчаса. ## Шаг 2. Загрузите документы в базу знаний Инструкция задаёт поведение, база знаний даёт факты. Прайс, условия, регламенты, описание услуг загружаются файлами, и дальше бот ищет по ним нужный кусок **по смыслу**, а не по совпадению слов. Разница видна на живом примере. Клиент спрашивает «а если я приду с ребёнком». Слова «ребёнок» в ваших документах может не быть вовсе, но абзац про сопровождающих найдётся. Правило простое: то, что меняется (цены, акции, расписание), лучше держать в базе знаний, а не в инструкции. Обновить файл проще, чем переписывать текст. Время: 15 минут. ## Шаг 3. Проверьте бота на себе До подключения любого канала есть песочница: вы пишете боту, он отвечает, клиенты этого не видят. Прогоните через неё реальные вопросы, а не удобные. Возьмите последние двадцать переписок с клиентами и задайте те же вопросы дословно, вместе с опечатками, голосовой манерой и «скок стоит». Что ловить: - где бот выдумал факт, которого нет в документах; - где ответил слишком длинно (в мессенджере длинный текст не читают); - где не позвал человека, хотя стоило; - где не понял вопрос, заданный обычным разговорным языком. Каждую находку чините не спором с ботом, а правкой инструкции и документов. Это и есть основная работа по настройке. Время: час, и он окупается сильнее всех остальных шагов. ## Шаг 4. Подключите канал Здесь пути расходятся. **Telegram** подключается за минуту, бесплатно и без рисков: вы создаёте бота у официального сервиса Telegram и вставляете полученный ключ. Никаких блокировок за автоматизацию там нет. **WhatsApp** сложнее, потому что подключение работает как «WhatsApp на компьютере»: ваш номер авторизует ещё одно устройство. Отсюда требование к номеру: он должен быть **живым и прогретым**, с реальной перепиской хотя бы за сутки. Новую пустую симку блокируют в первые минуты, и вернуть её почти невозможно. Разумный порядок такой: сначала Telegram, неделя наблюдения и правок, и только потом WhatsApp. Так вы не отлаживаете бота на номере, который нельзя потерять. Подробнее про риски и чек-лист перед подключением: [за что WhatsApp банит рабочий номер](/blog/za-chto-whatsapp-banit-nomer). Время: минута для Telegram, до получаса для WhatsApp вместе с проверкой номера. ## Шаг 5. Добавьте действия, если они нужны Отвечать на вопросы бот умеет сразу. Всё остальное это отдельные функции, которые включаются по необходимости: - записать на свободное время из вашего календаря или таблицы; - сохранить заявку с именем, телефоном и сутью запроса; - прислать фото, прайс или PDF в нужный момент; - уведомить вас в Telegram, когда пришёл горячий клиент; - выставить счёт прямо в переписке; - передать разговор человеку. Не включайте всё сразу. Начните с двух: сбор заявки и передача человеку. Остальное добавляйте, когда увидите в переписках, чего реально не хватает. ## Шаг 6. Первая неделя Запуск это не финал, а начало настройки. В первую неделю заходите в диалоги каждый день и смотрите: - на какие вопросы ответ вышел неудачным; - где клиент переспросил, потому что не понял; - где разговор оборвался и человек ушёл; - чего не хватило в базе знаний. Правок в первую неделю будет много, дальше почти не будет. Это нормальный цикл, а не признак плохого бота. ## Сколько это занимает на самом деле Если материалы собраны, вечер до запуска в Telegram. Если материалы не собраны, сначала день на них, потом вечер на бота. Проекты, которые растягиваются на месяц, растягиваются не из-за техники. Они упираются в то, что бизнес впервые записывает свои же правила, и это оказывается сложнее, чем настроить бота. ## Чего ждать не стоит **Что бот будет продавать сам.** Он снимает паузу, отвечает на понятное, доводит до записи и зовёт человека там, где нужен человек. Дожим сложной сделки, торг и работа с сомнениями остаются за вами. **Что он заменит сотрудника целиком.** Он забирает повторяющуюся часть, а сотрудник получает время на разговоры, где решается результат. **Что он будет рассылать по холодной базе.** Так делать нельзя: за рассылки незнакомым людям WhatsApp блокирует номер, причём тот самый рабочий. ## С чего начать прямо сейчас Соберите материалы из шага 0. Это единственная часть, которую за вас не сделает никто, и после неё всё остальное занимает вечер. Дальше можно [собрать бота](/) и проверить его в песочнице бесплатно, или сначала пройти [бесплатный курс](/learn): он собран как инструкция к работе, от первого проекта до функций, оплат и интеграций. --- ## Оплата через Kaspi прямо в переписке: как бот выставляет счёт URL: https://dosai.pro/blog/oplata-cherez-kaspi-v-perepiske # Оплата через Kaspi прямо в переписке: как бот выставляет счёт Клиент написал в WhatsApp, спросил цену, поторговался, согласился. Дальше идёт самый хрупкий кусок разговора: его надо довести до оплаты. Обычно это выглядит так. «Переведите на номер 777…, потом скиньте чек». Клиент выходит из переписки, открывает банк, вводит номер, ошибается в цифре, отвлекается на звонок и возвращается через два дня. Или не возвращается. Дальше про то, как этот кусок пути убирается почти целиком, и где на нём теряют деньги даже те, у кого всё настроено. ## Как выглядит оплата, когда счёт выставляет бот Бот доводит разговор до суммы, потом спрашивает номер телефона, к которому привязан Kaspi, и выставляет счёт. Клиенту в приложение Kaspi приходит запрос на оплату: сумма, назначение платежа, кнопка подтверждения. Он нажимает и всё. Из переписки выходить не надо, номер вручную вводить не надо, ошибиться в цифре негде. Разговор в чате при этом выглядит примерно так: > **Клиент:** беру, сколько с меня > **Бот:** 3 500 ₸. Отправлю счёт, подскажите номер, к которому привязан Kaspi > **Клиент:** 707… > **Бот:** Счёт отправил, посмотрите приложение Kaspi Дальше клиент подтверждает оплату у себя в телефоне. ## Куда именно приходит запрос на оплату Это самый частый вопрос, поэтому отдельно: **запрос приходит в приложение Kaspi на тот номер, который клиент назвал в переписке.** Не письмом, не ссылкой на сторонний сайт, не отдельной смс с реквизитами. Отсюда два практических следствия. Клиент должен назвать номер, к которому у него привязан Kaspi. Если он продиктовал рабочий номер, а приложение стоит на личном, счёт придёт не туда, и это выяснится только когда он скажет «мне ничего не пришло». Номер бот не выдумывает. Он обязан получить его от клиента, и слишком короткое или явно не похожее на телефон значение отсекается до отправки: бот переспрашивает вместо того, чтобы отправить счёт в пустоту. ## Куда идут деньги и что видит владелец Деньги идут на вашу Kaspi-кассу. Платформа их не держит и через себя не проводит. Когда счёт оплачен, происходят две вещи сразу. Владельцу приходит уведомление, что деньги пришли, а бот сам пишет клиенту в переписку: подтверждает оплату и продолжает разговор, например переходит к записи или к доставке. Клиенту не приходится ждать, пока кто-то проснётся и посмотрит кассу. Если оплата не прошла, разговор тоже не повисает: бот сообщает об этом и предлагает попробовать снова. ## Почему «я оплатил, чек скину позже» это дыра Теперь про место, где теряют деньги. Представьте, что бот умеет не только выставлять счёт, но и подтверждать бронь по факту оплаты. Клиент пишет: «оплатил, чек позже, забронируйте пока». Звучит убедительно, человек вежлив и настойчив. Языковая модель обучена соглашаться с таким собеседником. Правило «подтверждай только при наличии чека», написанное словами в инструкции бота, этому давлению проигрывает, особенно в длинном дружелюбном разговоре. Модель прочитала правило, согласилась с ним и всё равно поступила по-своему. Это не особенность конкретного сервиса. Так ведёт себя любой бот на языковой модели, где единственная защита это просьба в тексте. ## Что действительно останавливает фейковую оплату Работает только проверка, которая живёт вне модели и которую нельзя переубедить словами. У денежных функций включается условие: **пока клиент не прислал файл в этот диалог, функция не выполняется.** Не «боту не рекомендуется», а физически не выполняется. Модель может сколько угодно считать, что человек заслуживает доверия, действие не произойдёт. Есть и другие условия того же рода: выполнить действие только если в карточке клиента уже заполнено нужное поле, только если до этого вызывалась другая функция, только если клиент написал не меньше определённого числа сообщений. Смысл у всех один: решение принимает не текст инструкции, а проверяемый факт. Спрашивать про это стоит любого, кто продаёт вам бота, включая нас. Если ответ звучит как «мы написали в промпте, что нельзя», защиты нет. ## Чем это лучше перевода на номер Коротко, по пунктам. Клиент не выходит из переписки, поэтому не отваливается по дороге. Сумма и назначение подставляются автоматически, поэтому не бывает «перевёл не туда» и «перевёл не столько». Оплата видна системе, а не только вам в приложении, поэтому бот узнаёт о ней сам и продолжает разговор. И наконец, подтверждение оплаты перестаёт быть вопросом доверия к словам в чате. ## Счёт физлицу и счёт организации: это разные вещи Отдельно, потому что вопрос путают постоянно. То, что описано выше, это **оплата от человека**. Клиент называет номер, ему в Kaspi приходит запрос, он платит картой или с баланса. Так работают розница, услуги, запись, доставка, то есть почти весь малый бизнес. **Счёт от ИП или ТОО в адрес другой организации** это другая история. Там нужны реквизиты, назначение платежа по договору, НДС там, где он есть, и платёжка из банка второй стороны. Такой счёт выставляется не в переписке, а в вашей бухгалтерии или в банковском кабинете, и бот его не заменяет. Что бот в этом случае реально может: собрать данные для счёта прямо в переписке (название компании, БИН, услуга, сумма, контакт бухгалтера) и передать их вам одной заявкой, а не десятью сообщениями вразнобой. Дальше счёт выставляете вы или ваш бухгалтер. Практический вывод. Если ваши клиенты это люди, оплата в переписке закрывает вопрос целиком. Если клиенты это компании, автоматизируется сбор данных и напоминание об оплате, а сам документ остаётся за бухгалтерией. ## Что нужно, чтобы это включить Kaspi-касса бизнеса и подключение платежей в кабинете: это мастер, который проходят один раз. Пока платежи не подключены, функция не молчит и не выдумывает, а вежливо отвечает клиенту, что оплата временно недоступна. Дальше добавляется готовая функция приёма оплаты, при желании задаётся описание по умолчанию (оно попадёт в назначение платежа), и бот начинает выставлять счета сам. Отдельно советую сразу поставить условие с файлом на всё, что связано с деньгами и бронью. Это одна галочка, а закрывает она класс проблем, который иначе всплывает в самый неудачный момент. Как это выглядит по шагам, разобрано в [руководстве](/docs/guide/03-tools/37-payments-bot), а собрать бота и попробовать можно на [dosai.pro](/). --- ## Телеграм-бот для бизнеса: что он реально умеет и с чего начать URL: https://dosai.pro/blog/telegram-bot-dlya-biznesa # Телеграм-бот для бизнеса: что он реально умеет и с чего начать Telegram у большинства предпринимателей стоит вторым мессенджером после WhatsApp, и именно поэтому его часто откладывают: клиентов там меньше, значит и заниматься им будем потом. Логика понятная, но она упускает одну вещь. Telegram это единственный канал, где бота можно запустить за вечер, ничем при этом не рискуя. Ниже разберём, что он умеет, чем отличается от WhatsApp и как выглядит запуск по шагам. ## Чем Telegram отличается от WhatsApp для бота Разница не в качестве ответов. Мозг у бота один и тот же: те же инструкции, та же база знаний, те же функции. Разница в том, как бот попадает в мессенджер. **В Telegram есть официальный Bot API.** Вы создаёте отдельного бота, у него своё имя и своя ссылка, он живёт рядом с вашим личным аккаунтом и никак его не задевает. Подключение бесплатное, банить нечего, прогревать нечего. **В WhatsApp бот работает на вашем рабочем номере** через связанное устройство или через официальный Business API. Первый способ быстрый, но требует аккуратности, потому что номер это ваша собственность и его можно потерять. Про это есть отдельный [разбор про блокировки](/blog/za-chto-whatsapp-banit-nomer) и [сравнение двух способов подключения](/blog/whatsapp-qr-ili-business-api). Отсюда практический вывод: если вы запускаете бота впервые и хотите посмотреть, как он себя ведёт на живых людях, начинайте с Telegram. Ошибки в инструкциях, недописанная база знаний, кривая формулировка стоят вам ровно ничего. ## Что бот в Telegram умеет кроме ответов Отвечать на вопросы умеет любой бот, и это самая скучная его часть. Полезной работа становится, когда бот делает что-то с результатом разговора. **Собирает заявку.** Имя, телефон, что человек хочет, когда ему удобно. Всё это попадает в список с датой и стадией, а не остаётся внутри переписки. Проверить это стоит первым делом: [как понять, что заявки реально сохраняются](/blog/kak-sdelat-chat-bota-bez-programmirovaniya). **Записывает на свободное время.** Если у вас есть график в таблице, бот показывает клиенту реально свободные окна и занимает выбранное. Не «я передам администратору», а запись, которая сразу видна. **Выставляет счёт.** В Казахстане это чаще всего Kaspi: бот присылает ссылку на оплату, а после платежа продолжает разговор уже как с оплатившим клиентом. **Присылает уведомление вам.** Не в общую кучу переписки, а адресно: пришёл горячий клиент, бот не справился, нужен человек. **Возвращает тех, кто пропал.** Человек спросил цену и замолчал. Через сутки бот вежливо напоминает о себе один раз. Это самая дешёвая выручка, которая у вас есть, потому что интерес человек уже проявил. ## Запуск по шагам Никакого программирования тут нет, и это не рекламная формулировка. Вся настройка это текст на русском языке. **Шаг 1. Создать бота в Telegram.** Найдите @BotFather, отправьте команду `/newbot`, придумайте имя и адрес бота. В ответ придёт токен, длинная строка вида `1234567:AAE...`. Это пароль от бота, показывать его никому нельзя. **Шаг 2. Описать бота словами.** Кто вы, что продаёте, как разговариваете, чего делать нельзя. Обычная инструкция для нового сотрудника, только письменная. Тут выигрывает конкретика: не «отвечай вежливо», а «цены называй сразу, скидку сверх десяти процентов не обещай, адрес и график повторяй по запросу без раздражения». **Шаг 3. Дать материалы.** Прайс, услуги, частые вопросы, условия доставки. Всё, что вы обычно диктуете новому администратору в первую неделю. **Шаг 4. Проверить в песочнице.** Поговорите с ботом сами и постарайтесь его сломать: спросите то, чего нет в материалах, поторгуйтесь, попросите невозможное. Хороший ответ на незнакомый вопрос это «уточню у коллеги», а не выдумка. Про то, почему боты выдумывают, есть [отдельный разбор](/blog/pochemu-bot-vydumyvaet). **Шаг 5. Вставить токен и включить.** С этого момента бот отвечает живым людям. Первые два шага занимают минут десять. Третий столько, сколько у вас готовы материалы. Четвёртый лучше не сокращать, он окупается сразу. ## Куда девать ссылку на бота Бот бесполезен, если о нём никто не знает. Ссылка вида `t.me/ваш_бот` живёт где угодно: в шапке Instagram, в описании канала, в подписи к постам, на визитке, в QR-коде на входе, в автоответе на пропущенный звонок. Отдельно работает связка с рекламой. В отличие от номера телефона, ссылку на бота можно поставить прямо в объявление, и человек попадает в разговор одним касанием, без «сохраните номер и напишите». ## Когда Telegram будет вторым, а не первым Честно про ограничение. Если ваши клиенты живут в WhatsApp и Telegram у них стоит для переписки с друзьями, бот в Telegram сам по себе поток заявок не создаст. Он станет вторым каналом, куда придут те, кому так удобнее. В этом случае правильный порядок такой: запустить в Telegram, довести инструкции и материалы до состояния, когда вам не стыдно за ответы, и только потом подключать WhatsApp. Вы придёте на главный канал с уже отлаженным ботом, а не будете учить его на живых клиентах. ## С чего начать сегодня Соберите материалы. Прайс, частые вопросы, условия. Это единственная часть, которую за вас никто не сделает, и именно она определяет, будет бот полезным или будет вежливо здороваться. Дальше запуск занимает вечер. Проверить, как это выглядит изнутри, можно бесплатно: [зарегистрироваться](https://dosai.pro) и собрать бота, а если хочется сначала разобраться в теме, есть бесплатный курс из 41 урока на [dosai.pro/learn](https://dosai.pro/learn). --- ## WhatsApp для бота: подключение по QR или Business API URL: https://dosai.pro/blog/whatsapp-qr-ili-business-api # WhatsApp для бота: подключение по QR или Business API У WhatsApp есть два принципиально разных входа для автоматизации, и выбор между ними определяет почти всё остальное: цену, сроки, вид диалога и то, кому принадлежит номер. ## Способ первый: подключение по QR-коду Вы открываете в кабинете платформы QR-код и сканируете его своим телефоном, тем же способом, каким подключают WhatsApp Web на компьютере. С этого момента платформа становится ещё одним устройством вашего аккаунта и может читать входящие и отвечать. **Что вы получаете.** Запуск за пять минут на том номере, который уже знают ваши клиенты. Обычную переписку без ограничений на формат: любые тексты, фото, файлы, голосовые. Историю в телефоне: всё, что пишет бот, вы видите в своём WhatsApp. **Что вы принимаете на себя.** Это не официальный интерфейс для бизнеса, и правила площадки для него общие, пользовательские. Аккаунт может получить ограничения, если ведёт себя как автомат: массово пишет незнакомым, слишком часто переподключается, опрашивает сервер о чужих номерах. Поэтому к платформе, которой вы доверяете рабочий номер, есть отдельные требования, и о них ниже. **Кому подходит.** Малому и среднему бизнесу, который отвечает на входящие: клиникам, салонам, автосервисам, школам, магазинам. То есть подавляющему большинству. ## Способ второй: WhatsApp Business API Официальный корпоративный интерфейс. Доступ выдаётся через партнёров площадки, номер регистрируется на бизнес, компания проходит проверку. **Что вы получаете.** Легальный статус автоматизации, отсутствие рисков, связанных с неофициальным клиентом, зелёную галочку при выполнении требований, высокие лимиты на отправку. **Что вы принимаете на себя.** Первое: деньги. К подписке платформы добавляется тарификация самой площадки, обычно за диалоги или шаблоны. Второе: время. Проверка бизнеса занимает от нескольких дней. Третье и самое неприятное для живого диалога: писать первым можно только утверждёнными шаблонами, и они проходят модерацию. Свободный текст разрешён в ограниченном окне после сообщения клиента. **Кому подходит.** Компаниям с большим потоком и требованиями к формальностям: банкам, страховым, крупному ретейлу, всем, кто рассылает уведомления тысячами и не может позволить себе риск блокировки. ## Сравнение по тому, что решает **Сроки запуска.** QR: минуты. API: дни или недели на проверку. **Стоимость входа.** QR: только подписка платформы. API: подписка плюс тарификация площадки, и она растёт с объёмом. **Номер.** QR: ваш существующий, клиенты уже знают его. API: номер регистрируется под API, и обычным WhatsApp на телефоне вы им пользоваться больше не сможете. **Свобода диалога.** QR: пишете что угодно и когда угодно. API: инициировать разговор можно только шаблоном, прошедшим модерацию. **Голосовые от клиентов.** Работают в обоих случаях, но живее выглядят в связке с QR, где вся переписка обычная. **Риск.** QR: аккаунт может получить ограничения, если платформа ведёт себя неаккуратно. API: риск блокировки минимален, зато есть рейтинг качества и модерация шаблонов. ## Частая ошибка при выборе Многие берут API «на всякий случай, чтобы наверняка», а через месяц выясняют, что дописать клиенту простое «ваш заказ готов» нельзя: нужен утверждённый шаблон. Живая переписка превращается в конструктор из согласованных фраз, и часть смысла автоматизации теряется. Обратная ошибка: подключить QR и начать с рассылки по базе из тысячи номеров. Это самый быстрый способ потерять номер. Подключение по QR предназначено для ответов на входящие, а не для холодной рассылки. ## Как мы это сделали у себя Мы поддерживаем подключение по QR и держим для этого собственный шлюз. Причины две. Первая: бизнесу в Казахстане нужен именно его номер, тот, что на визитке, в 2ГИС и в Instagram. Перевод такого номера в API означает, что владелец потеряет к нему обычный доступ с телефона. Вторая: живой диалог. Наш бот отвечает свободным текстом, присылает фото работ, понимает голосовые. В шаблонной модели половина этого невозможна. Взамен мы взяли на себя обязанность вести себя аккуратно, и это записано в правилах платформы жёстко: автоматика может отвечать и может переподключаться после разрыва, который прислал сам WhatsApp, но не имеет права по своей инициативе рвать живую сессию или запрашивать новую привязку. Это делает только человек кнопкой. Такие же ограничители стоят на любых фоновых обращениях к серверу мессенджера: у них есть потолок и они обязаны сходиться, а не повторяться по кругу. Именно об этом стоит спрашивать любую платформу, а не только про цену: что она делает с вашим номером в фоне, когда вы на неё не смотрите. Telegram при этом подключается параллельно и бесплатно, и мы советуем держать оба канала: если с одним что-то случится, переписка продолжится в другом. ## Частые вопросы **Можно ли подключить бота к обычному WhatsApp без Business-приложения?** Да, подключение по QR работает и с обычным приложением, и с WhatsApp Business. Второе удобнее из-за витрины и быстрых ответов, но для бота разницы нет. **Что будет с перепиской в телефоне?** Она останется. Бот работает как дополнительное устройство, поэтому все диалоги видны вам в приложении, а вы можете в любой момент вмешаться и ответить руками. **Сколько устройств можно подключить?** WhatsApp разрешает несколько привязанных устройств одновременно, поэтому бот не занимает ваше место: телефон продолжает работать как обычно. **Что если номер заблокируют?** Заявку на проверку подаёт владелец из приложения. Вся переписка и заявки при этом остаются в кабинете платформы, теряется канал, а не база клиентов. Именно поэтому мы советуем сразу подключить и Telegram. **Можно перейти с QR на API позже?** Да, но номер придётся регистрировать под API, и обычным приложением на нём пользоваться уже не получится. Планируйте это заранее. --- Подробнее: [подключение WhatsApp по QR](/docs/guide/02-channels/21-whatsapp-wazzup), [подключение Telegram](/docs/guide/02-channels/22-telegram), [правила антибана](/docs/guide/02-channels/23-anti-ban). --- ## Бот или живой оператор: где проходит граница URL: https://dosai.pro/blog/bot-ili-zhivoy-operator # Бот или живой оператор: где проходит граница Продавцы автоматизации любят обещать замену сотрудников. На практике так почти не бывает, и обещание вредит: владелец ждёт увольнения администратора, не получает его и решает, что бот не работает. Полезнее смотреть иначе. У любого отдела продаж или ресепшена есть дыры, которые он физически не закрывает. Бот работает в этих дырах. ## Что бот закрывает лучше человека **Ночь, выходные и обед.** Половина сообщений в малом бизнесе приходит вне рабочего времени: человек вспомнил о деле вечером и написал. Утром администратор ответит, но выбор часто уже сделан. **Одновременные обращения.** Менеджер ведёт один разговор за раз. В пике, после рекламного запуска или в праздники, очередь растягивается, и хвост её остывает. Бот ведёт все диалоги параллельно. **Одинаковые вопросы.** Цены, адрес, часы работы, что взять с собой, есть ли парковка. Это львиная доля переписки и самая утомительная её часть. **Первичный сбор данных.** Марка машины, площадь квартиры, возраст ребёнка, что беспокоит. К моменту, когда диалог доходит до человека, вводные уже собраны. **Дисциплина.** Бот не забывает уточнить телефон, не теряет заявку в личных сообщениях и не уходит в отпуск с базой клиентов в своём телефоне. ## Что человек делает лучше бота **Сложные и спорные случаи.** Претензия, нестандартная ситуация, вопрос на грани компетенции. Здесь бот должен передавать диалог, а не изображать эксперта. **Дожим дорогой сделки.** Мебель на заказ, недвижимость, крупный ремонт. Бот доводит до замера или консультации, дальше работает человек. **Эмоционально тяжёлые разговоры.** Медицина, юридические проблемы, всё, где человеку нужно сочувствие, а не эффективность. **Торг и индивидуальные условия.** Скидки, рассрочки, особые договорённости. Бот может действовать в заданных рамках, но решение остаётся за вами. ## Как считать выгоду на своих числах Забудьте про чужие кейсы с процентами. Считайте по своей переписке за месяц. **Шаг 1. Сколько обращений осталось без ответа дольше часа.** Откройте WhatsApp и посчитайте руками, это отрезвляет. Обычно цифра больше, чем ожидает владелец. **Шаг 2. Какая доля обращений становится клиентом.** Если из десяти покупают двое, конверсия 20 %. **Шаг 3.** Средний чек одной сделки. Потери за месяц = пропущенные обращения × конверсия × чек. Если получилось 30 пропущенных, конверсия 20 % и чек 25 000 ₸, то месяц стоит вам 150 000 ₸ недополученного. Подписка платформы при этом двузначная в долларах. Вопрос закрывается на первой спасённой заявке. Обратный случай тоже бывает: пять обращений в месяц, все обработаны за минуты, ничего не теряется. Тогда бот вам сейчас не нужен, и честный ответ звучит именно так. ## Схема, которая работает на практике Не «бот вместо менеджера», а «бот на входе, человек на решениях». 1. Бот отвечает первым, всегда и мгновенно. 2. Закрывает типовые вопросы по вашим материалам. 3. Собирает данные: имя, телефон, суть запроса. 4. Записывает на время или выставляет счёт, если это ваш сценарий. 5. Передаёт человеку по правилам, которые вы задали: сложный вопрос, крупная сумма, недовольство, прямая просьба позвать живого. 6. Менеджер вступает в тот же диалог, бот замолкает и не мешает. Ключевая деталь в шестом пункте. Если платформа не умеет корректно передавать разговор человеку, вы получите либо бота, который лезет в чужую беседу, либо менеджера, который не видит, о чём уже говорили. ## Чего делать не стоит **Прятать бота.** Выдавать его за живого сотрудника не нужно: люди узнают, а неприятный осадок остаётся. Достаточно короткого «я ассистент, помогу с записью и ценами, сложное передам человеку». **Оставлять бота без присмотра в первые недели.** Читайте диалоги, правьте инструкцию. Первая версия почти всегда отвечает не так, как вам хочется. **Автоматизировать всё подряд.** Если весь разговор с клиентом это одна фраза «приезжайте, посмотрим», боту там нечего делать. ## Частые вопросы **Клиенты не разозлятся, что им отвечает робот?** Раздражает не бот, а бесполезный ответ и невозможность добраться до человека. Быстрый конкретный ответ и понятный путь к живому сотруднику работают лучше, чем тишина до утра. **Можно поставить бота только на нерабочее время?** Можно, и это разумный первый шаг для осторожных. Днём отвечают люди, вечером и в выходные бот собирает заявки. **Сколько людей нужно, чтобы всё это обслуживать?** Один человек, который читает диалоги и правит текст инструкции. Отдельная должность не нужна. **Бот справится с потоком после рекламы?** Да, это его сильная сторона: очередь не копится. Именно в пиках он окупается быстрее всего. --- Дальше: [диалоги и перехват оператором](/docs/guide/04-crm/40-dialogs), [лиды и статусы](/docs/guide/04-crm/41-leads), [уведомления о горячих заявках](/docs/guide/03-tools/35-notifications). --- ## Заработок на настройке чат-ботов: как это устроено URL: https://dosai.pro/blog/zarabotok-na-nastroyke-chat-botov # Заработок на настройке чат-ботов: как это устроено Спрос на автоматизацию переписки растёт, а собрать бота на платформе может человек без опыта разработки. Отсюда профессия: интегратор, который настраивает ботов чужому бизнесу. Разберём деловую сторону: за что реально платят, как считать цену и где обычно теряются деньги. ## За что клиент платит на самом деле Не за бота. Собрать бота теперь может он сам, и часть клиентов пробует. Платят за то, чего у него нет. **За понимание, что автоматизировать.** Владелец знает свой бизнес, но не знает, какие сценарии дадут результат, а какие сожгут время. Разговор «покажите вашу переписку за неделю» стоит дороже, чем сборка. **За тексты.** Инструкция боту это работа копирайтера и продавца одновременно. Владелец обычно пишет её казённым языком, и бот выходит бездушным. **За то, что заработало.** Клиенту нужен не конструктор, а поток заявок. Он платит за переход из состояния «переписка теряется» в состояние «заявки в списке». **За спокойствие.** Канал отвалился, бот ответил не так, пришёл странный вопрос. Владелец не хочет в этом разбираться сам. ## Как считать цену Три модели, каждая со своими последствиями. **Разовая настройка.** Собрали, передали, попрощались. Просто продать, тяжело жить: доход не накапливается, а клиент возвращается с правками, за которые неловко брать деньги. **Настройка плюс сопровождение.** Разовая оплата за запуск, дальше ежемесячная за поддержку и правки. Здесь появляется предсказуемый доход, и это единственная модель, в которой имеет смысл держать больше пяти клиентов. **Доля от результата.** Звучит красиво, работает редко: атрибуцию заявок к боту клиент оспорит, а считать вы будете дольше, чем зарабатывать. Практичная схема выглядит так: фиксированная сумма за запуск с понятным составом работ плюс ежемесячная за сопровождение, внутрь которой уже включены расходы на платформу. Клиент получает один счёт и одного ответственного. ## Где теряются деньги **Бесконечные правки без границ.** Если в договорённости не написано, сколько правок входит в сопровождение, вы будете дорабатывать бота вечно. Простое правило: правки текстов входят, новые сценарии считаются отдельно. **Проекты без сопровождения.** Через месяц у клиента изменились цены, бот отвечает неправду, виноваты вы, а денег с проекта уже нет. **Слишком дешёвый вход.** Настройка за символическую сумму привлекает клиентов, которые не ценят результат и торгуются на каждом шаге. **Отсутствие своей панели.** Когда проектов пять и каждый живёт в отдельном аккаунте с отдельной картой, вы тратите вечера на биллинг вместо работы. ## Что должна уметь платформа, когда проектов больше пяти Это отдельный список требований, который на первом проекте не виден, а на шестом становится больным. **Все проекты в одном аккаунте.** Не десять входов с разными паролями, а один кабинет со списком. **Разделение доступа.** Клиенту можно дать доступ к его переписке, не пуская в настройки и не показывая другие проекты. **Понятные деньги по каждому проекту.** Видно, сколько потратил конкретный клиент, и можно выставить ему счёт. **Быстрое клонирование.** Второй салон красоты настраивается копией первого, а не с нуля. **Уведомления, которые доходят до вас.** Канал упал у клиента, а узнать об этом должны вы, а не клиент. **Работа под своим именем.** Клиент видит ваш бренд, а не логотип платформы: для агентства это вопрос позиционирования. Мы строили DOS AI в том числе под этот сценарий: один аккаунт, много проектов, у каждого свой бот, канал, баланс и права. Плюс есть реферальная механика, если вы приводите клиентов, которые платят сами. ## С чего начать, если опыта нет **Соберите бота себе или знакомому бесплатно.** Первый проект нужен не ради денег, а ради понимания, где спотыкается настройка. **Возьмите нишу, которую понимаете.** Салон, автосервис, школа, клиника: если вы знаете, как устроен день такого бизнеса, вы напишете инструкцию боту в разы точнее. **Соберите один показательный кейс с цифрами.** Сколько обращений было без ответа до и после. Это единственный аргумент, который работает в переговорах. **Продавайте не бота, а результат.** «Настрою чат-бота» звучит как расход. «Ваши вечерние обращения перестанут теряться» звучит как доход. **Не обещайте того, чего платформа не делает.** Обещанные напоминания о записи, которых нет, или рассылки, за которые банят номер, вернутся к вам претензией. ## Частые вопросы **Нужно ли уметь программировать?** Нет для типовых сценариев: инструкция пишется обычным текстом, интеграции с таблицами и календарём настраиваются в кабинете. Программирование пригодится, если клиенту нужна связка с его самописной системой. **Сколько времени занимает один проект?** Первый обычно несколько дней вместе с изучением платформы. Дальше типовой проект собирается за несколько часов, если материалы клиента готовы. **Как объяснить клиенту расход на ответы ИИ?** Честно и заранее: есть абонентская часть за канал и расход по факту переписки. Многие интеграторы включают это в свою ежемесячную сумму, чтобы клиент видел один счёт. **Что делать, если у клиента заблокировали номер?** Заявку на проверку подаёт владелец номера из приложения, за него это не сделает ни платформа, ни интегратор. Ваша задача до этого: не допускать рассылок по холодной базе, не ставить бота на свежую симку и выбирать платформу, которая аккуратно обращается с сессией. Подробнее про два способа подключения и их риски: [QR или Business API](/blog/whatsapp-qr-ili-business-api). --- Дальше: [роли и доступ в проекте](/docs/guide/07-team/70-roles), [реферальная программа](/docs/guide/06-money/63-referrals), [бесплатный курс от нуля до запуска](/learn). --- ## ИИ-агент и чат-бот: где проходит разница URL: https://dosai.pro/blog/ii-agent-i-chat-bot-raznica # ИИ-агент и чат-бот: где проходит разница Термин «ИИ-агент» за последние пару лет прилепили почти ко всему, где есть языковая модель. Полезное различие всё же существует, и оно не про модель, а про права. **Чат-бот отвечает словами.** Он читает вопрос и пишет ответ. Дальше человек сам идёт что-то делать. **Агент совершает действия.** Он не только отвечает, но и вызывает функции: смотрит расписание, создаёт запись, выставляет счёт, заводит карточку клиента, отправляет файл, передаёт диалог человеку. Разница видна на одном диалоге. Бот: «Записаться можно по телефону +7 700 000 00 00 или напишите нам, какое время вам удобно». Агент: «Завтра свободно 11:20 и 16:40. Записал вас на 16:40, администратору отправлено уведомление». Во втором случае в вашем календаре появилась строка, а в CRM карточка. Это не красивее сформулированный ответ, это поступок. ## Из чего состоит агент **Модель.** Понимает вопрос, поддерживает разговор, решает, что делать дальше. **Инструменты (функции).** Конкретные действия, которые ему разрешены: посмотреть свободные окна, записать, выставить счёт, найти в базе знаний, позвать человека. Каждый инструмент это код, а не текст в инструкции. **Память диалога.** Он помнит, что обсуждали выше, поэтому не переспрашивает имя в четвёртый раз. **Правила и ограничители.** Что можно, чего нельзя, когда обязательно звать живого сотрудника. Убираете инструменты и остаётся собеседник. Убираете ограничители и получаете собеседника, который может наделать дел. ## Почему инструменты важнее модели Владельцы часто спрашивают, какая модель внутри, будто от этого зависит результат. На практике качество решает не модель, а то, откуда берутся факты. Если бот называет цену из памяти разговора, он рано или поздно ошибётся. Если он вызывает функцию, которая читает ваш прайс, ошибиться негде. Если он обещает время «на глаз», он запишет двоих на один час. Если он берёт свободные окна из вашего календаря, такого не случится. Поэтому правильный вопрос при выборе платформы не «какая у вас модель», а «какие действия бот умеет делать по-настоящему и откуда он берёт данные». ## Где агенту нужны тормоза Право действовать это и есть источник риска. Три места, где ограничители обязательны. **Деньги.** Подтверждение оплаты, скидка, возврат. Одной просьбы в инструкции тут мало: убедительное «я оплатил» модель принимает на веру. Поэтому проверка должна стоять в платформе, а не в тексте: у нас функция подтверждения не выполнится, пока в диалоге нет присланного чека. Подробный разбор: [почему бот выдумывает](/blog/pochemu-bot-vydumyvaet). **Общение от вашего имени.** Агент говорит голосом компании. Границы того, что он может обещать, задаются заранее, а не после первой жалобы. **Массовые действия.** Всё, что затрагивает много людей сразу, не должно запускаться агентом самостоятельно. Это правило мы применяем и к себе: автоматика в платформе отвечает на входящие, но не рассылает по базе. ## Агент внутри вашего бизнеса и агент снаружи Есть ещё одно различие, о котором редко говорят. Агент может работать двумя способами. **Наружу**, разговаривая с вашими клиентами в мессенджере. Это то, что обычно и называют чат-ботом. **Внутрь**, помогая вам управлять делами. Например, вы спрашиваете у своего ИИ-помощника: «сколько заявок пришло вчера и кому не ответили», а он читает данные вашего кабинета и отвечает. Это работает через открытый интерфейс, к которому подключаются внешние ИИ-помощники: у нас для этого есть публичный API и подключение по MCP, описанное в [статье для разработчиков](/docs/guide/08-developers/84-ai-agents). Второй сценарий пока встречается реже, но растёт быстрее: он превращает кабинет из места, куда надо заходить, в источник данных, который отвечает на вопросы. ## Частые вопросы **Мне нужен агент или хватит бота?** Если задача сводится к ответам на вопросы, хватит бота. Как только появляется «и запиши», «и выставь счёт», «и заведи заявку», нужен агент с функциями. **Агент дороже?** Сам по себе нет: разница в настройке, а не в тарифе. Расход на ответы модели немного выше, потому что агент делает дополнительные шаги, но речь про доли цента на диалог. **Может ли агент работать с моей CRM?** Если у CRM есть открытый интерфейс, да. Мы поддерживаем несколько популярных систем и вебхуки для остальных. **Что будет, если агент ошибётся?** Зависит от того, поставлены ли ограничители. Правильно настроенная система ошибается словами, а не действиями: неудачная формулировка исправима, ложное подтверждение оплаты стоит денег. --- Дальше: [функции бота](/docs/guide/03-tools/30-functions), [подключение ИИ-агентов по MCP](/docs/guide/08-developers/84-ai-agents), [ИИ-бот и сценарный бот](/blog/ii-bot-ili-scenarnyy-bot). --- ## ИИ-бот и сценарный бот: в чём разница на практике URL: https://dosai.pro/blog/ii-bot-ili-scenarnyy-bot # ИИ-бот и сценарный бот: в чём разница на практике Оба называются «чат-бот», стоят по-разному и ломаются в разных местах. Разберём без терминов, на диалогах. ## Сценарный бот: дерево кнопок Работает по заранее нарисованной схеме. Клиент нажимает кнопку, бот выдаёт заготовленный ответ и показывает следующие кнопки. Выглядит так: > **Бот:** Здравствуйте! Выберите: 1) Услуги и цены 2) Записаться 3) Контакты > **Клиент:** 1 > **Бот:** Выберите категорию: 1) Терапия 2) Хирургия 3) Ортодонтия Пока человек идёт по дереву, всё работает отлично: быстро, дёшево, предсказуемо, ничего не выдумывается. Ломается на первом шаге в сторону: > **Клиент:** У меня скол на переднем зубе, вчера откололся кусочек. Это дорого? И можно сегодня? > **Бот:** Выберите: 1) Услуги и цены 2) Записаться 3) Контакты Человек задал два вопроса живым языком. Бот повторил меню. В этот момент часть людей уходит. ## ИИ-бот: понимает текст В основе языковая модель. Она читает сообщение целиком, понимает смысл и отвечает своими словами, опираясь на ваши материалы. Тот же диалог: > **Клиент:** У меня скол на переднем зубе, вчера откололся кусочек. Это дорого? И можно сегодня? > **Бот:** Скол переднего зуба обычно восстанавливают композитом за один визит, у нас это от 12 000 тенге в зависимости от объёма. Сегодня есть окно в 16:40 и в 18:20, какое удобнее? Разница видна сразу: ответ на оба вопроса, конкретика, следующий шаг. При этом цена взята из загруженного прайса, а время из реального расписания, а не придумано. Где ломается ИИ-бот: он может сочинить факт, если вы не дали ему данные и не поставили ограничители. Про это у нас отдельный разбор: [почему бот выдумывает](/blog/pochemu-bot-vydumyvaet). ## Сравнение по тому, что важно на практике **Свободный текст.** Сценарный не понимает, ИИ понимает. Реальные клиенты пишут именно свободным текстом, с опечатками, сокращениями и по три вопроса в одном сообщении. **Голосовые сообщения.** Сценарный не умеет вообще. ИИ расшифровывает и отвечает по сути. В нишах, где пишут из машины или на бегу, это половина входящих. **Два языка.** Сценарный требует отдельной ветки на каждый язык. ИИ определяет язык по сообщению и отвечает на нём же, для Казахстана это заметная разница. **Правки.** Сценарный меняется перерисовкой схемы. ИИ меняется правкой текста инструкции, это делает владелец за пять минут. **Предсказуемость.** Сценарный отвечает буквально одинаково всегда. ИИ формулирует по-разному, и это плюс для живости, но требует проверки перед запуском. **Цена.** Сценарный дешевле: за ответ по кнопке никто не платит. У ИИ каждый ответ стоит долю цента, потому что его пишет модель. ## Что выбирать под задачу **Сценарный подходит**, если у вас узкий набор действий и никакого разговора не нужно: проверить статус заказа по номеру, забрать промокод, пройти опрос из трёх вопросов. Здесь кнопки быстрее и надёжнее. **ИИ подходит**, когда клиенты задают разные вопросы своими словами, а ответ зависит от контекста: клиники, салоны, автосервисы, школы, магазины с большим ассортиментом, услуги с расчётом под задачу. **Рабочая схема обычно посередине.** Разговор ведёт ИИ, а всё, что связано с деньгами, записью и передачей заявки, делают функции с жёсткими проверками. Тогда вы получаете и живой диалог, и предсказуемые действия. ## На что смотреть при выборе платформы Слово «ИИ» сегодня пишут почти все, включая полностью сценарные конструкторы, где ИИ подключается одним блоком в цепочке. Проверить просто: напишите боту продавца что-нибудь нестандартное и посмотрите, ответит он по смыслу или покажет меню. Ещё три вопроса, которые отделяют настоящее от рекламы: **Откуда бот берёт цены?** Из загруженных документов или из текста, вписанного в настройки? Второе быстро расходится с реальностью. **Как бот узнаёт свободное время?** Из вашего календаря или из воображения? **Что произойдёт, если бот не знает ответа?** Хороший бот честно передаёт диалог человеку. Плохой сочиняет. ## Частые вопросы **ИИ-бот дороже сценарного?** Немного. Абонентская часть сопоставима, разница в оплате ответов модели: на потоке малого бизнеса это единицы долларов в месяц. Если сравнивать с потерянными заявками от бота, который не понял вопрос, разница уходит в ноль. **Клиент поймёт, что говорит с ботом?** Часто нет, особенно в коротких деловых диалогах. Мы не советуем выдавать бота за человека: честная фраза «я ассистент, могу помочь с записью и ценами» не мешает конверсии, зато снимает неприятный момент, когда человек догадывается сам. **Можно ли перевести существующего сценарного бота на ИИ?** Обычно проще собрать заново: сценарии превращаются в текст инструкции, а дерево кнопок теряет смысл. Материалы (прайс, описания услуг) переносятся как есть в базу знаний. **А если ИИ ответит не так, как я хочу?** Вы правите инструкцию и проверяете в тестовом чате. Это занимает минуты и не требует разработчика. --- Дальше: [как бот думает](/docs/guide/00-start/01-how-bot-thinks), [системный промпт](/docs/guide/01-bot/11-system-prompt) и [бесплатный курс от нуля до запуска](/learn). --- ## Почему ИИ-бот выдумывает и что с этим делать URL: https://dosai.pro/blog/pochemu-bot-vydumyvaet # Почему ИИ-бот выдумывает и что с этим делать Сначала пример, а не теория. Бизнес принимает оплату переводом: клиент кидает деньги, присылает чек, бот подтверждает бронь. В инструкции боту написано прямым текстом: подтверждай только при наличии чека. Клиент пишет «оплатил, чек позже», звучит убедительно, и бот отвечает «оплата учтена». Денег нет, место занято. Это не выдуманный сценарий и не редкость: так ведёт себя любой бот на языковой модели, где единственной защитой служит просьба в тексте инструкции. Модель прочитала правило, согласилась с ним и всё равно поступила по-своему, потому что собеседник звучал уверенно. Дальше про то, почему так происходит и что помогает. ## Модель не знает фактов, она продолжает текст Языковая модель не хранит базу данных с вашими ценами и расписанием. Она предсказывает, какое продолжение разговора выглядит правдоподобно. Если правдоподобное продолжение это «да, конечно, чистка стоит 15 000 тенге», модель его напишет, даже если цены она не видела. Это не сбой и не плохая настройка. Это устройство инструмента. Вопрос не в том, как заставить модель никогда не ошибаться, а в том, как построить систему, где её ошибка не доходит до клиента. Три типа выдумок встречаются чаще всего. **Цены и условия.** Бот называет цифру, которой нет в ваших материалах. Клиент приходит с этой цифрой, вы оказываетесь виноваты. **Свободное время и наличие.** Бот обещает записать на завтра в семь вечера, потому что это звучит хорошо, а не потому что окно свободно. **Свершившиеся действия.** Самое опасное. Бот сообщает, что оплата принята, заявка отправлена, менеджер уведомлён, хотя ничего из этого не произошло. ## Уровень первый: у бота должны быть настоящие данные Первое лекарство очевидное: если бот берёт цены из вашего документа, у него меньше поводов сочинять. Загруженный прайс, описания услуг, условия работы. Это называется базой знаний, и это база любой честной автоматизации. Важная деталь, которую часто упускают: бот должен уметь честно сказать «не знаю». Инструкция вида «отвечай на любой вопрос клиента» толкает модель выдумывать, потому что молчать ей запрещено. Инструкция «если ответа в материалах нет, скажи, что уточнишь у администратора, и передай диалог» даёт ей законный выход. ## Уровень второй: действия делает не модель Когда бот «записывает на приём», работу выполняет не языковая модель. Она лишь решает, что пора вызвать функцию записи, а дальше код смотрит в ваш календарь и возвращает реально свободные окна. Разница принципиальная. Модель не может обещать время, которого нет, потому что список времён приходит не из её фантазии, а из вашего расписания. То же с остатками, с ценами по позициям, с любыми данными, которые живут в вашей таблице или системе. Правило простое: чем больше фактов бот получает вызовом функции, а не из памяти разговора, тем меньше он врёт. Если платформа предлагает «просто напиши в промпте свои цены», знайте, что часть ответов будет придумана. ## Уровень третий: предохранитель на денежных действиях Вернёмся к примеру с оплатой. Первые два уровня там обычно есть: и прайс в базе знаний, и функция подтверждения. Не хватает третьего. В нашей платформе для этого есть механика, которая называется предусловиями. Это факты о диалоге, которые проверяются **по базе данных до вызова функции**, а не пожеланием в тексте инструкции. Для подтверждения оплаты предусловие звучит так: клиент прислал файл или фото в этом диалоге. Если такого сообщения в переписке нет, функция не выполнится. Модель может согласиться, посочувствовать, поверить в честное слово. Бронь всё равно не подтвердится, потому что проверку делает не она. Похожие предусловия имеют смысл везде, где ошибка стоит денег или репутации: - подтверждение оплаты только при присланном чеке; - передача заявки менеджеру только когда собран телефон; - отправка коммерческого предложения только после трёх реплик клиента, чтобы бот не выстреливал им в первое же «привет». Ключевое отличие от инструкции: инструкцию модель интерпретирует, предусловие она обойти не может. ## Чего не стоит делать **Ужесточать промпт до бесконечности.** «НИКОГДА не подтверждай оплату без чека» большими буквами работает лучше, чем ничего, но остаётся просьбой. Хорошо написанный промпт снижает частоту выдумок, но не исключает их. **Ставить модель подешевле в надежде, что она будет осторожнее.** Обычно наоборот: чем слабее модель, тем охотнее она домысливает. **Верить, что «наш бот на ИИ не ошибается».** Это признак того, что продавец либо не понимает инструмент, либо не проверял его на живых диалогах. ## Как проверить бота до запуска на клиентах Тестовый чат существует ровно для этого. Прежде чем подключать рабочий номер, поговорите со своим ботом сами и попробуйте его сломать. Сценарии, которые стоит прогнать обязательно: **Спросите то, чего нет в материалах.** Правильный ответ: честное «уточню» и передача человеку. Неправильный: уверенная цифра из ниоткуда. **Скажите «я оплатил», не присылая ничего.** Бот не должен подтверждать. **Попросите записать на время, которого точно нет.** Бот должен предложить существующее окно, а не согласиться на ваше. **Попросите скидку.** Бот должен остаться в рамках, которые вы задали, а не выдумать акцию. **Напишите путано и с ошибками.** Так пишут реальные клиенты. Если бот проходит эти пять сценариев, вы уже впереди большинства внедрений. ## Частые вопросы **Можно ли полностью исключить выдумки?** Нет, пока в основе лежит языковая модель. Можно сделать так, что выдумка не превращается в действие: цена берётся из документа, время из календаря, деньги подтверждаются чеком. Тогда цена ошибки падает с «потеряли 200 тысяч» до «бот неудачно сформулировал». **Сценарный бот по кнопкам не врёт. Может, взять его?** Он действительно не врёт, потому что не понимает. Взамен вы получаете дерево кнопок, из которого человек выпадает на первом же нестандартном вопросе. Разумный вариант обычно посередине: ИИ ведёт разговор, а все значимые действия закрыты функциями и предусловиями. **Как понять, что бот выдумал, если я не читаю все диалоги?** Смотрите на расхождения: бронь есть, оплаты нет; клиент пришёл с ценой, которой у вас нет. Плюс полезно раз в неделю открывать несколько случайных диалогов целиком: беглый просмотр ленты такие вещи не показывает, а чтение подряд показывает сразу. **Помогает ли запретить боту говорить о деньгах вообще?** Иногда да, и это нормальное решение для чувствительных ниш. Бот отвечает на вопросы, а всё, что касается оплаты, передаёт человеку. --- Подробнее в руководстве: [функции бота и предусловия](/docs/guide/03-tools/30-functions), [база знаний](/docs/guide/03-tools/31-knowledge-base), [системный промпт](/docs/guide/01-bot/11-system-prompt) и [тестовый чат](/docs/guide/01-bot/14-test-chat). --- ## Сколько стоит чат-бот для бизнеса URL: https://dosai.pro/blog/skolko-stoit-chat-bot-dlya-biznesa # Сколько стоит чат-бот для бизнеса Вопрос звучит просто, а ответы разлетаются от нуля до нескольких миллионов тенге. Разброс не потому, что кто-то жадный, а потому, что под словом «чат-бот» продают три разных товара: разработку под заказ, доступ к платформе и рабочее время программиста. Разберём каждый способ по реальным деньгам, включая расходы, которые обычно не называют на первой встрече. ## Способ первый: заказать в агентстве Публичные прайсы казахстанских агентств на разработку чат-бота начинаются примерно от 150 000 ₸. За эти деньги вы получаете бота, собранного под ваш бизнес: сценарии, тексты, подключение канала, иногда интеграцию с вашей таблицей или CRM. Три вещи про эту сумму. **Это стоимость сборки, а не владения.** Бот живёт на какой-то платформе или на сервере, и за них платят отдельно: подписка сервиса, хостинг, оплата ответов ИИ. Иногда это включают в первый год, иногда нет. **Любая правка это заявка исполнителю.** Поменялся прайс, добавилась услуга, изменились часы работы. У агентства это отдельная работа, оплачиваемая по часам или пакетам. У бизнеса, где цены двигаются каждый месяц, это превращается в постоянную статью расходов. **Скорость реакции зависит от чужой загрузки.** Ошибка в тексте бота, которую вы могли бы исправить за минуту, ждёт свободного разработчика. Когда способ оправдан: сложная интеграция с медицинской системой или складским учётом, нестандартная логика, требования безопасности, под которые нужен отдельный контур. Когда переплата: типовые задачи вроде ответов на вопросы, записи на время и приёма заявок. ## Способ второй: платформа по подписке Здесь вы платите не за сборку, а за доступ. Бот настраивается вами или интегратором за несколько часов, а дальше живёт на подписке. Ценообразование обычно состоит из двух частей, и вторую часто забывают учесть. **Абонентская плата за канал или тариф.** У DOS AI это $25 в месяц за WhatsApp-канал, Telegram бесплатный. У других сервисов встречается плата за количество диалогов, подписчиков или сообщений. **Оплата ответов ИИ.** Каждый ответ бота, который пишет не скрипт, а языковая модель, стоит денег. Считается по токенам, то есть по объёму текста в вопросе и ответе. На практике для малого бизнеса это единицы долларов в месяц, но цифра зависит от того, сколько вам пишут и насколько длинные ответы даёт бот. Про то, из чего складывается цена одного сообщения, у нас есть отдельный разбор в руководстве: [сколько стоит сообщение](/docs/guide/06-money/61-message-cost). **Чего в этой модели нет:** отдельного счёта за каждую правку. Прайс, часы работы, тон общения и сценарии вы меняете сами текстом. Когда способ оправдан: типовые задачи, живой бизнес с меняющимися ценами, желание видеть переписку и заявки в одном месте. Когда не подходит: нужна глубокая интеграция с системой, у которой нет открытого доступа. ## Способ третий: написать самому Кажется самым дешёвым: библиотеки бесплатные, доступ к языковой модели по цене токенов, сервер за несколько долларов в месяц. Реальная стоимость складывается из другого. Работающий бот это не «скрипт, который отвечает». Это очередь входящих, чтобы сообщения не терялись при всплеске. Хранилище переписки. Обработка разрывов канала. Ограничение частоты, чтобы не сжечь бюджет на модель. Логи, чтобы понимать, почему бот ответил именно так. Панель, где менеджер увидит диалоги. И самое неприятное: постоянное сопровождение, потому что мессенджеры меняют правила без предупреждения. Мы сами написали и содержим такую инфраструктуру, поэтому оценка не теоретическая: это не выходной программиста, это несколько месяцев работы и постоянное дежурство после запуска. Когда способ оправдан: у вас есть команда разработки и бот это часть продукта. Когда это ловушка: «у меня знакомый программист сделает за неделю». Через месяц знакомый занят, а бот молчит. ## Скрытые расходы, о которых спрашивают редко **Простой канала.** Номер отвалился, никто не заметил, клиенты пишут в пустоту. Стоимость такого дня считается не в подписке, а в потерянных заявках. Спрашивайте, увидите ли вы, что канал упал, и как быстро. **Переделки после запуска.** Первая версия бота почти всегда отвечает не так, как вам хочется. Вопрос в том, правите вы это сами за пять минут или ждёте исполнителя. **Обучение сотрудников.** Если переписка живёт в отдельной панели, менеджеров придётся туда переселить. Это время, а иногда и сопротивление. **Ошибки бота, которые стоят денег.** Отдельная история: бот, который подтверждает оплату, которой не было, или обещает клиенту скидку, которой нет. Одной строчкой в инструкции это не закрывается, нужны ограничители в самой платформе: у нас, например, денежная функция физически не выполнится, пока клиент не прислал чек. Спрашивайте про такие предохранители до покупки, а не после первого случая. ## Как посчитать окупаемость на своих числах Считать «экономию на зарплате администратора» бессмысленно, если администратора вы увольнять не собираетесь. Считайте по заявкам. Возьмите переписку за последний месяц и ответьте на три вопроса. **Сколько человек написали и не получили ответа в течение часа?** Это ваш верхний предел потерь. Часть из них ушла к тому, кто ответил. **Какая доля обращений превращается в клиента?** Если из десяти написавших покупает двое, то каждое потерянное обращение это 0,2 сделки. **Сколько вы зарабатываете на одной сделке?** Умножьте на предыдущие два числа. Пример на условных значениях: 40 пропущенных или поздних ответов в месяц, конверсия 20 %, средний чек 30 000 ₸. Потери 240 000 ₸ в месяц. При подписке в $25 вопрос окупаемости закрывается на первой же спасённой заявке. Числа подставьте свои, потому что для мастера маникюра и для мебельного производства они отличаются в десятки раз. Важен сам подсчёт: он переводит разговор из «бот это модно» в «бот это столько-то денег». ## Сколько стоит попробовать Правило, которое стоит применять к любому варианту: не платите за бота, которого вы не видели в работе. У платформ это обычно бесплатный период или стартовый баланс. У нас регистрация даёт $5 на баланс без карты, бот проверяется в тестовом чате до подключения номера, а первые 14 дней после подключения WhatsApp-канал не тарифицируется. У агентства аналог этого правила звучит так: попросите показать живого бота, собранного для похожего бизнеса, и напишите ему сами. ## Частые вопросы **Есть ли бесплатные чат-боты?** Бесплатные тарифы есть у многих конструкторов, но обычно они сценарные: бот отвечает по кнопкам, а не понимает текст. Как только вы подключаете языковую модель, появляется расход на её ответы, и он не может быть нулевым. Бесплатным остаётся Telegram-канал: за сам канал никто не берёт денег. **Почему цены отличаются в десять раз?** Потому что сравниваются разные вещи: сборка под ключ, доступ к платформе и часы разработчика. Прежде чем сравнивать цифры, уточните, что именно входит в каждую и кто платит за содержание после запуска. **Что дороже в долгую: агентство или подписка?** Если бизнес типовой и правки нужны регулярно, подписка обычно выигрывает уже на втором-третьем месяце. Если нужна нестандартная интеграция, разовая разработка может оказаться единственным вариантом. **Сколько стоит поддержка бота?** На платформе поддержка это ваше время на правку текста. При разработке на заказ уточняйте стоимость часа и время реакции до подписания договора, а не после первой поломки. --- Дальше по теме: [из чего складывается цена сообщения](/docs/guide/06-money/61-message-cost), [подписка и баланс](/docs/guide/06-money/60-billing) и [как выбрать чат-бота для WhatsApp по шести признакам](/docs/guide/00-start/05-how-to-choose-whatsapp-bot). --- ## Чат-бот для бизнеса в Казахстане: что работает на практике URL: https://dosai.pro/blog/chat-bot-dlya-biznesa-v-kazakhstane # Чат-бот для бизнеса в Казахстане: что работает на практике Большая часть материалов про чат-боты написана для другого рынка: там клиент приходит на сайт, оставляет заявку в форме, платит картой на странице оплаты. В Казахстане путь другой, и бот, собранный по чужой схеме, спотыкается на первых же шагах. Разберём отличия, которые реально меняют настройку. ## Клиент приходит не с сайта Малый бизнес здесь живёт в Instagram, 2ГИС и сарафане. Сайт часто либо отсутствует, либо служит визиткой, на которую никто не заходит. Точка контакта одна: номер WhatsApp. Отсюда первое следствие: автоматизировать нужно не форму на сайте, а переписку на том номере, который уже указан в профиле и на вывеске. Схемы, где бот живёт на отдельном номере или в виджете на сайте, здесь дают в разы меньше диалогов просто потому, что туда никто не пишет. Второе следствие: бот обязан работать на существующем номере компании, а не на новом. Именно поэтому подключение по QR-коду для местного бизнеса практичнее официального API, где номер придётся переводить под API и терять к нему обычный доступ с телефона. Разбор различий у нас есть отдельно: [QR или Business API](/blog/whatsapp-qr-ili-business-api). ## Люди пишут голосовыми Доля голосовых сообщений в переписке здесь заметно выше, чем предполагают западные сценарии. Человек за рулём, на объекте, с ребёнком на руках наговаривает вопрос вместо того, чтобы печатать. Для бота это означает жёсткое требование: он обязан расшифровывать голосовые и отвечать по сути. Бот, который на голосовое отвечает «пожалуйста, напишите текстом», теряет часть клиентов сразу и выглядит бестолково. ## Два языка в одном диалоге Клиент может начать по-русски, продолжить по-казахски и вставить пару фраз вперемешку. Отдельные ветки под каждый язык, как в сценарных конструкторах, здесь превращаются в мучение. Рабочее решение: бот определяет язык по сообщению и отвечает на нём же, без отдельной настройки и без выбора языка кнопками в начале диалога. Один бот, оба языка, переключение по ходу разговора. ## Оплата проходит через Kaspi Просить казахстанского клиента ввести данные карты на незнакомой странице значит терять часть оплат. Привычный сценарий здесь другой: перевод по номеру или счёт, который открывается в приложении банка. Что из этого следует для бота. **Счёт выставляется прямо в переписке.** Клиент получает ссылку и платит там, где ему привычно, не выходя из WhatsApp. **Оплата переводом требует проверки.** Если вы принимаете переводы, бот должен просить чек и подтверждать заказ только при реально присланном файле. Слова «я оплатил» не должны запускать бронь, и держится это проверкой в платформе, а не пожеланием в инструкции. **Цена подписки и цена для клиента это разные валюты.** Наша подписка стоит $25 в месяц, а счета, которые бот выставляет вашим покупателям, идут в тенге, как они привыкли. ## Ниши, где это выстреливает первым По нашим внедрениям быстрее всего эффект виден там, где много одинаковых вопросов и запись на время: клиники и стоматологии, салоны и барбершопы, автосервисы, автошколы, учебные центры, студии. Общее у них одно: клиент выбирает быстро и уходит к тому, кто ответил первым. Медленнее эффект в длинных сделках вроде мебели на заказ или недвижимости, но там бот полезен другим: он собирает вводные и не даёт заявке остыть, пока менеджер занят. Отдельные разборы по нишам мы держим в [каталоге сценариев](/for). ## Чего здесь делать не стоит **Рассылки по холодной базе в WhatsApp.** Самый быстрый путь потерять рабочий номер компании. Мы намеренно не делаем такую функцию. **Ставить бота на новую симку.** Свежий номер без истории переписки подозрителен для антиспама и незнаком клиентам. **Прятать живого человека.** В сервисах, где решение стоит дорого, клиент хочет убедиться, что за ботом кто-то есть. Быстрый и понятный путь к менеджеру повышает доверие, а не снижает. **Копировать сценарии из чужого рынка целиком.** Формулировки, привычки оплаты и даже время активности здесь другие: пик переписки часто приходится на вечер, после работы. ## С чего начать, если решили попробовать 1. Возьмите переписку за последний месяц и посчитайте, сколько обращений остались без ответа дольше часа. Это ваш потенциал. 2. Соберите материалы, которые уже есть: прайс, описание услуг, частые вопросы. Это станет базой знаний бота. 3. Опишите словами, как должен вести себя администратор: что говорить, чего не обещать, когда звать человека. 4. Проверьте бота в тестовом чате, задавая ему вопросы своих клиентов, включая неудобные. 5. Подключите WhatsApp по QR и первую неделю читайте диалоги каждый день, правя формулировки. Пятый пункт важнее остальных. Бот, которого запустили и не читают, через месяц отвечает совсем не так, как вам казалось. ## Частые вопросы **Нужно ли ИП или ТОО, чтобы подключить бота?** Для работы бота нет. Юридическое лицо понадобится, если вы принимаете оплату от клиентов через платёжный сервис: это требование самих платёжных систем, а не платформы. **Бот понимает казахский?** Да, отвечает на языке собеседника, включая казахский, и расшифровывает голосовые на нём же. **Работает ли это за пределами Казахстана?** Да, платформа облачная и к стране не привязана: нужен WhatsApp или Telegram. Kaspi это местное удобство, а не условие работы. **Сколько времени занимает запуск?** Первый работающий бот собирается за час-полтора вместе с загрузкой прайса. Неделя уходит на то, чтобы довести ответы до состояния, когда за них не стыдно. --- Дальше: [каталог сценариев по нишам](/for), [сколько стоит чат-бот](/blog/skolko-stoit-chat-bot-dlya-biznesa), [бесплатный курс от нуля до запуска](/learn).