Перейти к содержанию

Webhook-подписки

Подписка определяет HTTPS endpoint и типы events, которые MAX отправляет боту.

import os

WEBHOOK_PATH = "/webhook"
webhook_base_url = os.environ["MAX_WEBHOOK_BASE_URL"].rstrip("/")
webhook_secret = os.environ["MAX_WEBHOOK_SECRET"]
webhook_url = f"{webhook_base_url}{WEBHOOK_PATH}"

subscriptions = await bot.get_subscriptions()

await bot.subscribe(
    webhook_url,
    secret=webhook_secret,
    update_types=["message_created", "message_callback", "bot_started"],
)

await bot.unsubscribe(webhook_url)

Указывайте только events, для которых приложение зарегистрировало handlers. Список можно получить через dispatcher.resolve_used_update_types():

await bot.subscribe(
    webhook_url,
    secret=secret,
    update_types=dispatcher.resolve_used_update_types(),
)

url должен начинаться с https://. Если указан secret, допустимы 5–256 ASCII-символов A-Z, a-z, 0-9, _ и -; aiomax2 проверяет эти правила до HTTP-запроса. Legacy-поля Go SDK version и self_signed_cert не отправляются: в актуальной OpenAPI subscription body их больше нет.

Активная Webhook-подписка несовместима с GET /updates. Перед локальным Long Polling удалите подписку. Требования к HTTPS, secret и timeout описаны в Webhook guide.

Актуальная документация MAX помечает bot_admin_permissions_changed как Webhook-only: в resolve_used_update_types() событие учитывается, но через Long Polling пока не доставляется. Полная таблица событий и ручных способов воспроизведения приведена в live smoke-test.