- Refactored max_bot from nested packages to flat module structure - Q2: Extended BotUser model (patronymic, email, org, address, vcf_raw, contact_hash, phone_verified, email_verified, last_interaction, total_conversations, total_tickets) - Q2: VCF parser (FN, N, TEL, EMAIL, ORG, ADR), upsert on re-contact, NLP history context (_get_user_history_context -> YandexGPT) - Q1: Broadcast preview modal with 10s confirmation timer - Q3: CSS var(--white)->var(--bg-card), var(--text)->var(--text-primary) - Q4: bot_settings showNotification(), editable max_bot_id - Q5: Webhook secret passthrough via X-Max-Bot-Api-Secret - Masking sensitive keys, dialog_cleared handler, migrate via _add_column_if_not_exists() - Rate limit (asyncio.sleep 0.5 per 10), dead code removed, conv.intent context in contact.py - Portal pages: bot_consent, bot_kb (edit), bot_settings, bot_test, bot_tickets, portal_settings - Tests: 21/21 passing, added test_yandex_gpt.py, test_email_sender.py - Deploy: deploy_full.sh, schema.sql, seed_knowledge_base.sql
4.4 KiB
Чтобы зарегистрировать URL https://max.aegisone.ru/webhook в качестве вебхука на платформе MAX, необходимо отправить POST-запрос на метод /subscriptions через API. Для этого потребуется токен бота, сам URL и, опционально, дополнительные параметры — типы событий и секретный ключ для проверки подписи.
Требования к URL вебхука Протокол: только HTTPS. HTTP не поддерживается.
Порт: только 443. Порт в URL не указывается.
Сертификат: должен быть выдан доверенным центром сертификации. Самоподписанные сертификаты не поддерживаются.
Доменное имя в URL должно совпадать с CN (Common Name) или SAN (Subject Alternative Name) сертификата.
Сервер должен предоставлять полную цепочку сертификатов.
Параметры запроса При отправке POST-запроса на /subscriptions укажите следующие параметры в теле запроса:
url (обязательный) — HTTPS-адрес вашего endpoint, например https://max.aegisone.ru/webhook. update_types (необязательный) — массив типов событий, которые хочет получать бот. Полный список типов событий можно найти в документации MAX. maxo.readthedocs.io +1 secret (необязательный) — строка от 5 до 256 символов, состоящая из букв (A-Z, a-z), цифр (0-9) и дефиса. Если указать этот параметр, MAX будет добавлять его в заголовок X-Max-Bot-Api-Secret каждого callback-запроса. На сервере можно проверять это значение для верификации запросов.
Пример запроса
bash
curl -X POST "https://platform-api.max.ru/subscriptions"
-H "Authorization: YOUR_BOT_TOKEN"
-H "Content-Type: application/json"
-d '{
"url": "https://max.aegisone.ru/webhook",
"update_types": ["message_created", "bot_started"],
"secret": "your_secret_key"
}'
В заголовке Authorization передаётся токен бота без префикса Bearer.
Дополнительные сведения После успешной регистрации вебхука MAX будет отправлять HTTPS POST-запросы на указанный URL при наступлении выбранных событий. Вебхук-эндпоинт должен возвращать HTTP 200 в течение 30 секунд. Любой другой код ответа или превышение тайм-аута считается ошибкой доставки.
Если доставка не удалась, MAX выполняет до 10 повторных попыток с экспоненциально растущим интервалом. Если в течение 8 часов не получен успешный ответ, бот автоматически отписывается от вебхука. Одновременно можно использовать только один механизм доставки событий: либо вебхук, либо long polling. При регистрации вебхука long polling автоматически отключается.
Проверка подписки Чтобы убедиться, что подписка прошла успешно, можно отправить GET-запрос на /subscriptions с токеном бота в заголовке. В ответе следует проверить, что указанный URL и параметры (если они задавались) соответствуют ожидаемым.
Если при регистрации возникает ошибка, стоит проверить корректность токена, JSON-запроса и соответствие URL требованиям (HTTPS на порту 443).