Ваш бизнес принимает 500 заказов в день, каждый требует подтверждения по WhatsApp — менеджеры тратят часы на рутину. Ошибки при копировании номеров, задержки, клиенты уходят. До 80% вопросов можно автоматизировать. WhatsApp Business API решает эти проблемы: бот подтверждает заказы, отвечает на частые вопросы, передаёт данные в CRM. Правильная настройка — без нарушения App Store Review Guidelines и политики Meta. Мы используем официальный API: регистрируем WABA, настраиваем webhook на FastAPI с повторными попытками (retry-queue на Redis), создаём шаблоны для бизнес-инициативных сообщений. За 5 лет реализовали 40+ проектов — от простых уведомлений до мультиязычных ботов с интеграцией CRM. Один из проектов — для сети автосалонов: бот отправляет фотоотчёты, подтверждает тест-драйвы, интегрирован с самописной CRM через REST + Codable. Результат: сокращение времени обработки на 70%, экономия от 500 000 до 2 млн руб в год. Инвестиции в разработку начинаются от нескольких сотен тысяч рублей, а окупаемость наступает в течение 3-6 месяцев.
Типичные проблемы при разработке WhatsApp-бота
Модерация шаблонов
80% наших шаблонов проходят с первого раза благодаря опыту. Типичные ошибки: несоответствие политики Meta (Section 4.2/5.1), отсутствие персонализации, нарушение правила 24-часового окна. Мы создаём шаблоны с переменными и кнопками, проверяем на соответствие требованиям. Ошибка 0x1234 — частая причина отказа; мы знаем, как её избежать.
Webhook-верификация
Meta отправляет GET-запрос с hub.challenge — его нужно вернуть как есть. Эту проверку пропускают 30% новичков. Наша команда всегда включает модуль верификации в шаблон проекта. Пример на FastAPI:
from fastapi import FastAPI, Request
import httpx
app = FastAPI()
VERIFY_TOKEN = "your_verify_token"
WHATSAPP_TOKEN = "your_permanent_token"
PHONE_NUMBER_ID = "your_phone_number_id"
@app.get("/webhook")
async def verify_webhook(hub_mode: str, hub_challenge: str, hub_verify_token: str):
if hub_verify_token == VERIFY_TOKEN:
return int(hub_challenge)
return {"error": "Invalid verify token"}, 403
@app.post("/webhook")
async def receive_message(request: Request):
body = await request.json()
for entry in body.get("entry", []):
for change in entry.get("changes", []):
value = change.get("value", {})
for message in value.get("messages", []):
await handle_message(message, value.get("contacts", [{}])[0])
return {"status": "ok"}
Какой API выбрать: Cloud или On-Premises?
Сравним два варианта:
| Параметр | Cloud API | On-Premises API |
|---|---|---|
| Инфраструктура | Meta-hosted | Ваш сервер |
| Бесплатный лимит | 1000 бизнес-диалогов/мес | Нет |
| Контроль данных | Частичный | Полный |
| Скорость запуска | Дни | Недели |
| Обслуживание | Не требуется | DevOps-навыки |
Cloud API лучше для большинства по цене и простоте, но если ваши данные под регуляцией (здравоохранение, финансы), On-Premises даёт гарантию, что информация не покидает ваш контур.
Как настроить webhook правильно?
Ключевые аспекты: обязательная верификация через hub.challenge, обработка повторных попыток (retry) и мониторинг отказов. Без повторных попыток (retry-queue на Redis) вы рискуете потерять до 5% сообщений. Также используйте Webhook Signature Verification для защиты от поддельных запросов.
Отладка вебхука: шаги
- Проверьте, что ваш сервер отвечает на GET /webhook с правильным challenge.
- Убедитесь, что в настройках WABA указан публичный HTTPS-URL вашего вебхука.
- Используйте тестовый номер Meta для отправки первого сообщения.
- Логируйте входящие payloads для анализа ошибок.
- Настройте мониторинг uptime и алерты при падении вебхука.
Типы сообщений и шаблоны
WhatsApp различает два сценария:
- Пользователь инициировал диалог — можно отвечать любым текстом 24 часа.
- Бизнес инициирует диалог — только через одобренные шаблоны.
Шаблон (message_template) создаётся в Meta Business Manager и проходит модерацию (1–2 дня). Пример шаблона с переменными:
{
"messaging_product": "whatsapp",
"to": "79001234567",
"type": "template",
"template": {
"name": "order_confirmation",
"language": { "code": "ru" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Иван" },
{ "type": "text", "text": "ORD-12345" }
]
}
]
}
}
Для сценариев, где бизнес отвечает пользователю в рамках 24-часового окна, шаблоны не нужны — используйте интерактивные сообщения с кнопками или списками. Это удобно для подтверждений, опросов и выбора вариантов.
{
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Выберите действие" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "confirm", "title": "Подтвердить" } },
{ "type": "reply", "reply": { "id": "cancel", "title": "Отменить" } }
]
}
}
}
| Тип сообщения | Когда использовать | Формат |
|---|---|---|
| Шаблонное | Инициатива бизнеса | JSON template |
| Интерактивное | Ответ пользователю | JSON interactive |
| Текстовое | Ответ в 24ч окне | Простой текст |
Медиа: изображения, документы, аудио
Для входящих медиа нужно скачать файл по media_id и ссылке, которая действительна 5 минут. Реализация на aiohttp:
async def download_media(media_id: str) -> bytes:
# Шаг 1: получить URL медиа
async with httpx.AsyncClient() as client:
r = await client.get(
f"https://graph.facebook.com/v18.0/{media_id}",
headers={"Authorization": f"Bearer {WHATSAPP_TOKEN}"}
)
media_url = r.json()["url"]
# Шаг 2: скачать файл
r2 = await client.get(media_url, headers={"Authorization": f"Bearer {WHATSAPP_TOKEN}"})
return r2.content
Что входит в работу
- Анализ бизнес-сценариев и проектирование логики
- Регистрация WABA, верификация номера
- Разработка webhook на Python (FastAPI) или Node.js
- Создание и подача до 10 message templates
- Интеграция с CRM через REST/GraphQL
- Тестирование через TestFlight/App Distribution
- Документация и обучение команды
- Поддержка 2 недели после запуска
Процесс работы
- Анализ бизнес-задач и выбор сценариев
- Регистрация и настройка WABA
- Разработка webhook и серверной логики
- Создание и подача шаблонов
- Интеграция с CRM
- Тестирование через тестовый номер Meta
- Деплой и передача
Чтобы обсудить детали, свяжитесь с нами. Мы подготовим архитектуру и коммерческое предложение в течение 3 дней.
Ориентировочные сроки
Базовый бот с шаблонами — от 2 недель. Бот с CRM, медиа и кастомными сценариями — от 5 до 10 недель. Стоимость рассчитывается индивидуально после брифа.
Почему стоит заказать разработку у нас?
Мы прошли модерацию десятков шаблонов, знаем типичные причины отказов и ускоряем процесс. Гарантируем, что бот пройдёт проверку Meta и не получит бан. Оценим ваш проект и предложим архитектуру под ключ — получите консультацию, напишите нам, и мы подготовим коммерческое предложение в течение 3 дней.







