Как сделать ИИ чат-бота для WhatsApp: Cloud API, вебхуки и путь без кода
Марк Ингер, CEO · Pleep
ИИ-бот для WhatsApp собирается из трёх частей: официального канала WhatsApp Business Platform (Cloud API от Meta), вебхука, который принимает входящие сообщения, и модели, которая формулирует ответ. Отправка сообщения — это несколько строк кода, а вся сложность приходится на приём входящих, проверку подписи вебхука, шаблоны и 24-часовое окно. Если разработчика нет, те же три части закрывает готовая платформа за настройку в интерфейсе.
Ниже — обе дороги по шагам, с тем, что именно нужно завести в Meta, какие значения понадобятся в коде и какие ошибки съедают первый день.
Два пути и чем они отличаются
| Свой бот на Cloud API | Готовая платформа | |
|---|---|---|
| Что делаете вы | Приложение Meta, сервер, вебхук, логика диалога | Подключение номера и описание задачи агента |
| Нужен разработчик | Да | Нет |
| Срок до первого ответа клиенту | Дни-недели | Часы |
| Кто платит Meta за сообщения | Вы напрямую | Вы, через платформу или напрямую |
| Что вы контролируете | Всё, включая модель и хранение данных | Настройки в интерфейсе |
| Что ломается | Вебхуки, токены, шаблоны, окно 24 часа | То же самое, но чинит платформа |
Обе дороги ведут через один и тот же официальный канал. Автоматизация через обычное приложение WhatsApp нарушает правила Meta, и номер могут заблокировать, поэтому вариант «подключить неофициальный шлюз» здесь не рассматривается.
Что нужно завести до первой строчки кода
Эти вещи заводятся в Meta один раз и нужны при любом пути:
- Meta Business Portfolio — бизнес-аккаунт в Meta Business Suite, где живут ваши активы. Портфолио выбирается при подключении WABA и потом не меняется, поэтому выбирайте сразу тот, что останется рабочим.
- Facebook Page с правами администратора у вас лично.
- Номер телефона. Либо новый, либо тот, что уже зарегистрирован в приложении WhatsApp Business.
- Платёжное средство, привязанное к Meta. Без него исходящие шаблонные сообщения отправляться не будут.
Для сценария, где номер остаётся в приложении WhatsApp Business, добавляется ещё два требования: номер должен быть активен в приложении и не иметь предупреждений от Meta, а версия приложения — актуальной. Новый номер лучше «прогреть» неделю перед подключением: свежие номера чаще получают ограничения.
Шаг 1. Приложение, тестовый номер и песочница
В Developer Hub WhatsApp Business Platform заводится приложение и открывается доступ к Cloud API. Meta даёт бесплатные тестовые номера, примеры кода, вебхуки и песочницу, поэтому первые эксперименты не требуют ни купленного номера, ни платёжного средства.
Готовую коллекцию запросов удобно взять из рабочего пространства Meta в Postman — это тот же Cloud API, только без написания клиента.
Шаг 2. Phone Number ID и токен доступа
В консоли приложения, в разделе WhatsApp → Getting started, лежат два значения, вокруг которых строится всё остальное.
| Значение | Где взять | На что влияет |
|---|---|---|
WA_PHONE_NUMBER_ID | App Dashboard → WhatsApp → Getting started → Phone number ID | Номер-отправитель |
CLOUD_API_ACCESS_TOKEN | Там же, временный токен; для рабочего стенда — токен системного пользователя | Авторизация запросов |
CLOUD_API_VERSION | Версия Graph API, задаётся вручную | Формат запросов и ответов |
Временный токен живёт часы и нужен ровно для первого «Hello world». Для всего, что работает дольше одного вечера, берите токен системного пользователя: иначе бот замолчит посреди дня, и выглядеть это будет как поломка вебхука, хотя дело в истёкшем токене.
Шаг 3. Первое исходящее сообщение
Дальше отправляется один текстовый запрос на адрес Cloud API с указанием номера-отправителя, номера получателя и тела сообщения. Ответ должен вернуть код 200.
Важная деталь, из-за которой теряют полдня: код 200 не означает, что сообщение доставлено. Он означает, что Cloud API принял запрос. Если клиенту ничего не пришло, почти всегда дело в окне 24 часа (см. ниже), а не в коде.
Отдельно про SDK: официальный Node.js SDK для Cloud API архивирован. Его quickstart всё ещё полезен как описание переменных окружения и минимального сценария, но закладывать архивный пакет в новый продакшен не стоит — работайте с HTTP-эндпоинтами напрямую или через свой тонкий клиент.
Шаг 4. Вебхук для входящих сообщений
Отправка — это половина бота. Чтобы принимать сообщения, нужен публичный HTTPS-адрес, который вы регистрируете как вебхук в настройках приложения. Meta подтверждает адрес при подключении, а затем шлёт на него события: входящие сообщения, статусы доставки и прочитанности, изменения.
Две вещи, которые нужно сделать сразу, а не «потом»:
- Проверять подпись входящих запросов. Иначе ваш эндпоинт открыт для любого, кто узнает URL. В официальном репозитории whatsapp-api-examples для этого есть готовый пример
signature-validation-with-webhooks-payloads, а базовый приёмник — вreceive-webhook-js. - Отвечать на вебхук быстро и обрабатывать асинхронно. Meta ждёт быстрый ответ; генерацию ответа моделью выносите в очередь, иначе начнутся повторные доставки и дубли сообщений клиенту.
В том же репозитории лежат примеры для шаблонов (message-templates-js), медиа (media-messages-js) и интерактивных сообщений (interactive-messages-js) — это быстрее, чем собирать тела запросов по документации.
Шаг 5. Подключите модель
Логика «понял → уточнил → ответил» — это вызов модели между вебхуком и отправкой. У OpenAI Responses API для этого есть всё необходимое:
instructions— системная инструкция: кто агент, что он продаёт, чего не обещает;input— текущее сообщение клиента;tools— функции, которые модель вызывает сама: посмотреть цену, проверить слот, создать сделку в CRM;previous_response_idилиconversation— состояние многоходового диалога, чтобы бот помнил предыдущие реплики;- структурированный вывод — когда от модели нужен не текст, а поля: имя, город, бюджет, готовность к записи.
База знаний подключается через инструмент поиска по вашим документам. Главное правило формулируется в инструкции, а не в коде: чего нет в документах, того агент не придумывает, а обещает уточнить. Без этого пункта бот однажды уверенно назовёт несуществующую цену.
Шаг 6. Шаблоны, категории и окно 24 часа
Когда клиент пишет первым, открывается 24-часовое окно обслуживания: внутри него можно отвечать свободным текстом. После закрытия окна возобновить переписку можно только утверждённым шаблоном — это описано, например, в документации 360dialog про платные и бесплатные сообщения.
Meta делит сообщения на категории, и от категории зависит и модерация, и цена:
| Категория | Для чего | Типичный пример |
|---|---|---|
| Service | Ответы внутри открытого окна | Ответ на вопрос клиента |
| Utility | Транзакционные уведомления | Статус заказа, напоминание о записи |
| Authentication | Коды подтверждения | Одноразовый пароль |
| Marketing | Промо и реактивация | Акция, возврат неактивного клиента |
Практический вывод для архитектуры бота: агент должен отвечать сразу, а сценарий follow-up — заранее иметь утверждённые шаблоны. Если вы планируете догонять клиентов через сутки, шаблоны нужно отправить на модерацию до запуска, а не после. Про механику массовых отправок есть отдельный разбор — как сделать рассылку в WhatsApp.
Путь без кода: что делает платформа
Готовая платформа закрывает ровно те же шаги: подключение через Meta, вебхуки, хранение диалогов, шаблоны, база знаний и передача человеку. Меняется не результат, а то, кто дежурит, когда истёк токен.
В WhatsApp-интеграции Pleep подключение идёт через вход в Facebook, после чего в карточке канала видно WABA ID и Phone Number ID — те же значения, что вы бы доставали руками. Перед подключением мастер проверяет готовность: есть ли Meta Business Portfolio, есть ли Facebook Page с правами администратора, зарегистрирован ли номер, привязано ли платёжное средство.
Выбирается один из двух режимов:
- WhatsApp на телефоне. Номер остаётся в приложении WhatsApp Business, удалять его не нужно, вы продолжаете отвечать с телефона, а ИИ работает в тех же чатах.
- WhatsApp и звонки. Отдельный номер полностью под управлением ИИ: отвечать вручную можно только через Pleep, зато этот номер можно подключить к голосовым звонкам.
Настройка агента идёт обычной перепиской, а не конструктором сценариев; заявки уходят в amoCRM или Битрикс24, запись — в Google Календарь или Altegio, наличие товара проверяется в МойСклад, счёт выставляется через Kaspi Pay. Агент работает на русском и казахском. Если подключение застревает на стороне Meta, доступен бесплатный 30-минутный звонок с помощью в настройке.
Тарифы: Light — 42 380 ₸/мес ($81.50) при 1 500 текстовых сообщениях и без голоса, Business — 68 380 ₸ ($131.50) при том же объёме. Цена складывается из базы и использования, минуты голосового агента считаются отдельно по 50 ₸ (или $0,12 при оплате в долларах), сборы Meta за сообщения идут сверху. Пробный период — 7 дней. Актуальные условия — в тарифах, остальные каналы и сервисы — на странице интеграций.
Сравнение локальных и глобальных платформ по цене, казахскому языку и официальному WABA собрано отдельно: лучший чат-бот для WhatsApp в Казахстане.
Чек-лист перед запуском
- Отправьте тестовое сообщение и дождитесь кода 200 и реальной доставки в телефон.
- Напишите боту с чужого номера и убедитесь, что вебхук получил событие.
- Проверьте подпись запроса на подделанном payload — эндпоинт должен его отклонить.
- Задайте вопрос, ответ на который есть в базе знаний, и вопрос, которого там нет.
- Дождитесь закрытия 24-часового окна и проверьте, что follow-up уходит шаблоном, а не свободным текстом.
- Проверьте передачу человеку: после перехвата менеджером бот не должен отвечать параллельно.
- Убедитесь, что заявка появилась в CRM вместе с контекстом диалога, а не только с фактом обращения.
Что ломается чаще всего
| Симптом | Что проверить |
|---|---|
| 200 от API, но клиент ничего не получил | Открыто ли 24-часовое окно; нужен ли здесь шаблон |
| Бот работал и внезапно замолчал | Истёкший временный токен вместо токена системного пользователя |
| Вебхук не приходит | Публичный HTTPS, подтверждение адреса, подписка на нужные события |
| Клиент получает по два одинаковых ответа | Медленный ответ вебхуку и повторные доставки от Meta |
| Шаблон не отправляется | Статус модерации и категория сообщения |
| Бот придумывает цены | В инструкции нет запрета отвечать вне базы знаний |
| Номер получил ограничение | Автоматизация шла через обычное приложение, а не через официальный API |
Частые вопросы
Можно ли сделать ИИ-бота для WhatsApp без официального API?
Технически такие шлюзы существуют, но автоматизация через обычное приложение WhatsApp нарушает правила Meta, и риск несёт тот номер, который уже знают ваши клиенты. Для рабочего бота используется только WhatsApp Business Platform.
Сколько времени занимает разработка своими силами?
Отправка первого сообщения — вечер. Рабочий бот с вебхуками, проверкой подписи, базой знаний, шаблонами и передачей в CRM — недели, и дальше его нужно поддерживать: токены, версии API, модерация шаблонов.
Нужен ли отдельный номер телефона?
Не обязательно. Номер, уже зарегистрированный в приложении WhatsApp Business, можно подключить так, что вы продолжите отвечать с телефона. Отдельный номер нужен, если тем же номером должен принимать и совершать голосовые звонки ИИ-агент.
Что такое Phone Number ID и чем он отличается от номера?
Номер — это то, что видит клиент. Phone Number ID — идентификатор этого номера внутри Cloud API, он подставляется в запросы на отправку. Оба значения находятся в консоли приложения и отображаются в карточке канала после подключения.
Почему приходит код 200, а сообщение не доставлено?
Код 200 подтверждает, что Cloud API принял запрос, а не что клиент получил сообщение. Чаще всего окно 24 часа уже закрылось: свободный текст в этот момент отправить нельзя, нужен утверждённый шаблон.
Какую модель выбрать для бота?
Для диалога с базой знаний и вызовом функций подходит любая современная модель с поддержкой инструментов и структурированного вывода. Практическая разница обычно не в модели, а в инструкции, качестве базы знаний и в том, что бот делает, когда ответа нет.
Можно ли обойтись без разработчика?
Да, если задача — отвечать, квалифицировать и записывать. Готовая платформа берёт на себя подключение через Meta, вебхуки, шаблоны и интеграции с CRM. Разработчик нужен, когда логика диалога завязана на вашу внутреннюю систему, которой нет среди готовых интеграций.

