Ваш бізнес приймає 500 замовлень на день, кожне потребує підтвердження через WhatsApp — менеджери витрачають години на рутину. Помилки при копіюванні номерів, затримки, клієнти йдуть. До 80% питань можна автоматизувати. WhatsApp Business API вирішує ці проблеми: бот підтверджує замовлення, відповідає на часті питання, передає дані в CRM. Правильне налаштування — без порушення політики Meta. Ми використовуємо офіційний API: реєструємо WABA, налаштовуємо webhook на FastAPI з повторними спробами (retry-queue на Redis), створюємо шаблони для бізнес-ініціативних повідомлень. За 5 років реалізували 40+ проектів — від простих сповіщень до багатомовних ботів з інтеграцією CRM. Один із проектів — для мережі автосалонів: бот надсилає фотозвіти, підтверджує тест-драйви, інтегрований з самописною CRM через REST + Codable. Результат: значне скорочення часу обробки та суттєва економія коштів. Окупність настає протягом 3-6 місяців.
Типові проблеми при розробці WhatsApp-бота
Модерація шаблонів
80% наших шаблонів проходять з першого разу завдяки досвіду. Типові помилки: невідповідність політиці Meta, відсутність персоналізації, порушення правила 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": "ua" },
"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 днів.







