Вебхуки

Платформа отправляет вебхуки на ваш webhook_url сразу после обработки события. События отправляются HTTP POST без повторных запросов клиента.

Формат

  • Заголовки:

    • X-Bot-Id — идентификатор бота (строка с цифрами).

    • X-Timestamp — RFC3339 timestamp отправки события, помогает отсечь реплеи.

    • X-Signaturesha256=<hex(hmac_sha256(body, api_token))>. Передавайте заголовок целиком в проверку.

  • Тело application/json:

{
  "event": "direct_link",
  "user_tg_id": "799001234"
}

Для rewarded тело то же, только event меняется на rewarded. Поле user_tg_id обязательно, передаётся строкой с цифрами (Telegram user id).

Проверка подписи (Python)

from fastapi import FastAPI, Request, HTTPException
from botads import verify_signature, parse_webhook_payload

app = FastAPI()
API_TOKEN = "<api_token>"

@app.post("/webhook")
async def handle_webhook(request: Request):
    body = await request.body()
    signature = request.headers.get("X-Signature", "")  # формат sha256=<hex>
    bot_id = request.headers.get("X-Bot-Id")
    ts = request.headers.get("X-Timestamp")

    if not verify_signature(body, signature, API_TOKEN):
        raise HTTPException(status_code=401, detail="invalid signature")

    payload = parse_webhook_payload(body)
    # bot_id и ts можно логировать/валидировать на свежесть для защиты от реплеев
    # payload.event -> "direct_link" или "rewarded"
    # payload.user_tg_id -> строка Telegram user id
    return {"status": "ok"}

Отвечайте 2xx как можно быстрее, чтобы не потерять событие.

Последнее обновление