72b6879f4b
- 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
46 lines
4.4 KiB
Markdown
46 lines
4.4 KiB
Markdown
Чтобы зарегистрировать 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). |