MAATRIX / Блог / VPS для WhatsApp-бота: официальный Cloud API

VPS для WhatsApp-бота: официальный Cloud API

VPS для WhatsApp-бота: Cloud API и стабильный сервер
Блог MAATRIX · 2026-07-07

WhatsApp-бот отличается от Telegram: платформа работает через официальный Cloud API от Meta, а вебхукам нужен публичный HTTPS-адрес. Разберём правильный путь: приём вебхуков за nginx с TLS, проверка подписи и честно — о рисках неофициальных библиотек.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Официальный Cloud API против неофициальных обёрток

У WhatsApp два пути. Первый — официальный WhatsApp Cloud API от Meta: вы регистрируете приложение, получаете номер и токен, платите за диалоги по тарифам Meta. Второй — неофициальные библиотеки, эмулирующие WhatsApp Web (например, на базе веб-клиента).

Второй путь дешевле и проще на старте, но нарушает условия WhatsApp: номер могут заблокировать в любой момент без предупреждения. Для бизнеса это неприемлемо. Ниже — путь через официальный Cloud API.

  • Cloud API — легально, стабильно, но платно по диалогам.
  • Неофициальные обёртки — риск бессрочного бана номера.
  • Вебхуки — WhatsApp требует публичный HTTPS-эндпоинт.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для WhatsApp-бота

Что потребуется от VPS

Для Cloud API боту нужен публичный домен с валидным TLS-сертификатом — Meta шлёт вебхуки только на HTTPS. Значит, на VPS ставим веб-сервер, домен и certbot.

sudo apt update && sudo apt install -y nginx python3-venv git ufw certbot python3-certbot-nginx
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Направьте A-запись домена на IP сервера и выпустите сертификат:

sudo certbot --nginx -d bot.example.com

Приём вебхука на Flask

Cloud API требует два обработчика: GET для верификации эндпоинта и POST для входящих сообщений. Минимальный сервер на Flask:

python3 -m venv ~/wa/.venv && source ~/wa/.venv/bin/activate
pip install flask requests gunicorn
from flask import Flask, request
import os
app = Flask(__name__)
VERIFY = os.environ['VERIFY_TOKEN']

@app.get('/webhook')
def verify():
    if request.args.get('hub.verify_token') == VERIFY:
        return request.args.get('hub.challenge'), 200
    return 'forbidden', 403

@app.post('/webhook')
def incoming():
    data = request.get_json()
    # разбор data['entry'][0]['changes'][0]['value']['messages']
    print(data)
    return 'ok', 200

Запускаем через gunicorn на localhost, наружу проксирует nginx:

gunicorn -w 2 -b 127.0.0.1:8000 app:app

nginx как reverse proxy

nginx принимает HTTPS от Meta и проксирует на gunicorn. certbot уже добавил TLS-блок; добавьте location для вебхука:

server {
    listen 443 ssl;
    server_name bot.example.com;
    location /webhook {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    # ssl_certificate ... (добавлено certbot)
}
sudo nginx -t && sudo systemctl reload nginx

Отправка сообщений и проверка подписи

Ответ пользователю — POST-запрос к graph.facebook.com с токеном Cloud API:

curl -s -X POST \
  "https://graph.facebook.com/v20.0/${PHONE_NUMBER_ID}/messages" \
  -H "Authorization: Bearer ${WA_TOKEN}" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","to":"79001234567","type":"text","text":{"body":"Привет из бота"}}'

Обязательно проверяйте подпись входящих вебхуков заголовком X-Hub-Signature-256 — иначе кто угодно сможет слать вам фейковые события.

import hmac, hashlib
def valid(body: bytes, sig: str, secret: str) -> bool:
    mac = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest('sha256=' + mac, sig)

Где брать сервер и частые ошибки

WhatsApp-боту нужен стабильный сервер с белым IP и валидным TLS — на нём держится доставка вебхуков. На тарифах MAATRIX это AMD EPYC + NVMe от $8/мес, root-доступ для nginx и certbot, локации UK, США и РФ для стабильного доступа к Graph API. Ежедневные бэкапы сохранят конфиг и токены. Оплата картой РФ, СБП, криптой или токеном MAAT.

  • Неофициальная библиотека — риск бессрочного бана бизнес-номера.
  • Вебхук без TLS — Meta не подключит эндпоинт; сертификат обязателен.
  • Нет проверки подписи — приём поддельных событий.
  • Медленный ответ на POST — Meta ретраит вебхук; отвечайте 200 сразу, обработку выносите в очередь.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для WhatsApp-бота

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Можно ли сделать WhatsApp-бота бесплатно?

Сам сервер и код — да, но Cloud API от Meta тарифицирует диалоги. Часть сервисных сообщений бесплатна, платные диалоги считаются по прайсу Meta для вашего региона.

Почему не взять библиотеку на WhatsApp Web?

Она нарушает условия WhatsApp: номер могут заблокировать без предупреждения и без возврата. Для бизнеса используйте официальный Cloud API.

Обязателен ли домен для WhatsApp-бота?

Да. Cloud API доставляет вебхуки только на публичный HTTPS-адрес с валидным сертификатом, поэтому домен и TLS необходимы.