Сверка с официальной реализацией MAX
Аудит выполнен 7 октября 2026 года по двум upstream-источникам:
- OpenAPI
0.0.33, repository HEAD1a4a502fab096aa3a15d83d7ea95667ffb44d2ac(schema.yaml—5af13bddab6a16b991cbe2640c78d02e2a3047da); - официальный Go SDK, ветка
v2, commit13264f872c743f55dcf7a8dfce43a16a055b46ab(v2.4.3).
Wire contract определяется актуальной OpenAPI и воспроизводимым поведением MAX. Go SDK используется как behavioral reference: для request construction, updates, uploads, errors и retries. Он не задаёт архитектуру Python API.
Результат по областям
| Область | Результат сверки |
|---|---|
| Bot, chats, messages, comments | Текущие endpoints, query/body shapes и response models покрыты high-level методами, кроме удалённых операций |
| Updates | Все 19 discriminator OpenAPI типизированы; 36 update/Webhook fixtures Go SDK v2 проходят parsing |
| Attachments и keyboards | Все текущие attachment и семь button types представлены; документированные сочетания вложений проверяются локально |
| Uploads | Multipart field data, type-specific token source и XML/empty responses согласованы с Go SDK и документацией |
| Errors и retries | Wire error сохраняется в payload; timeout отделён от прочих network errors; повторяется только безопасный или явно разрешённый запрос |
| Polling и Webhook | Marker, cancellation, filters, secret и HTTP response semantics сверены; механизмы доставки одновременно не запускаются |
Осознанные различия
Удалённые и legacy API
Удалённые и устаревшие методы намеренно не возвращались в aiomax2:
GET /chatsотсутствует в актуальной OpenAPI и текущем Go SDK v2. Официальная документация сообщает, что метод больше не поддерживается с июня 2026 года.DELETE /chats/{chatId}всё ещё присутствует в официальном Go SDK v2, но отсутствует в актуальной OpenAPI и документации MAX.POST /chats/{chatId}/membersвсё ещё присутствует в OpenAPI0.0.33и официальном Go SDK v2, однако официальная документация MAX сообщает об удалении метода с 30 сентября 2026 года. Поэтомуadd_membersнамеренно не реализован.- Поля Webhook-подписки
versionиself_signed_certвсё ещё присутствуют в Go SDK v2, но отсутствуют в актуальной OpenAPI.aiomax2их не отправляет. - Поле
BotInfo.is_officialприсутствует в Go SDK v2, но отсутствует в актуальной OpenAPI и документации MAX, поэтому не является частью типизированного публичного APIaiomax2.
Отличия реализации
- Go upload client не добавляет Authorization на upload host. Текущий media
guide MAX явно требует token для image upload, поэтому
aiomax2добавляет его только для image flow. Video, audio и file upload не наследуют API Authorization. - Go
updateRaw.FromRaw()сводит wire events к одной плоской структуре.aiomax2сохраняет исходные typed update models. Для FSM callback actor берётся изcallback.user, а не из recipient исходного сообщения: это пользователь, фактически нажавший кнопку. bot_admin_permissions_changedприсутствует в актуальной OpenAPI и Webhook, но отсутствует в текущем GoUpdateTypeи пока недоступен через Long Polling. Событие поддерживается по контракту OpenAPI.- Client-side rate limiting, строгий TLS, typed exception hierarchy и
bounded
attachment.not.readyretry — дополнительные защитные свойства Python-клиента, не меняющие wire contract MAX.
Известные особенности MAX
- Comment update payload в OpenAPI называется
messageи ссылается на обычныйMessage, хотя comment endpoints возвращаютCommentMessage.aiomax2следует discriminator contract без искусственной конвертации. - Notification-only callback сериализуется по OpenAPI и в live-наблюдении
возвращал
success=true,message=null, но уведомление могло не отображаться в Web, Android и iOS. Библиотека не создаёт message fallback. - Устаревшее поле
User.nameвсё ещё возвращается MAX и присутствует в официальных Go fixtures. Оно типизировано как optional; для нового кода используйтеfirst_nameиlast_name. - Неизвестный будущий
update_typeостаётся genericUpdate, а новые поля сохраняются благодаряextra="allow".
Полная таблица endpoints и эксплуатационных ограничений находится в покрытии API.