Documentation

Bridge API

max

MAX QR Bridge

Канал подключает пользовательскую MAX-сессию через номер телефона, SMS code и optional password_2fa. Adapter работает как отдельный transport listener.

provider: maxchannel_type: max_qr_bridgeupdated: 2026-05-06

Connect

Как проходит подключение

Клиент подключает канал в кабинете. После статуса connected входящие события идут в webhook, а outbound API начинает принимать отправку в этот канал.

  1. Шаг 1

    Пользователь создает MAX-канал в /my/channels и вводит номер телефона.

  2. Шаг 2

    Bridge отправляет challenge в transport adapter MAX.

  3. Шаг 3

    Пользователь вводит SMS code, затем password_2fa, если MAX запросил пароль.

  4. Шаг 4

    После успешного входа channel session переходит в connected.

Inbound

Что приходит из канала

Text

Работает

message.type = text, provider = max, data.chat.external_id используется для ответа.

Photo, video

Работает

Скачиваются из MAX, сохраняются в Bridge storage и отдаются через signed URL.

Audio, voice

Работает

Bridge сохраняет файл и добавляет duration/voice metadata, если MAX отдал поля.

Sticker, animation, document

Работает

Нормализуются в общий attachments[] контракт, когда MAX отдает download source.

Contacts and shares

Частично

Событие приходит с распознанным message.type, но file-like download есть только для вложений.

Sender metadata

Частично

first_name, last_name, display_name, avatar подтягиваются best-effort из contact cache. phone обычно недоступен.

Reply and forwarded context

Частично

Bridge best-effort извлекает message.reply_to и message.forwarded из raw message.link. На prod подтверждено, что current MAX update stream часто отдает только linked text пересланного сообщения, а comment пользователя при forward может вообще не приходить.

Outbound

Что можно отправлять через API

Для outbound используйте POST /v1/messages, bearer API key со scope messages:send, channel_id подключенного канала и provider chat id из inbound webhook.

Text

Работает

POST /v1/messages с content.type = text отправляет текст в MAX chat id.

Photo, video, file

Работает

content.type = media, до 10 вложений, типы photo, video, file, optional caption в text.

Audio and voice outbound

Частично

Отправляйте как file, пока отдельные voice/audio semantics не выделены в публичном API.

Проверка

Что уже проверено

Проверено

  • Phone challenge, SMS code и password_2fa.
  • Connected-сессия сохраняется после обновления страницы и перелогина.
  • Inbound text, photo и video.
  • Inbound voice/audio, sticker, animation/GIF и document после storage upload.
  • Webhook metadata: first_name, last_name, display_name и avatar best-effort.
  • Outbound text и базовый outbound media flow.

Что осталось

  • Финальная публичная матрица MAX file-like типов после дополнительных live-smoke тестов.
  • Prod smoke для message.reply_to и message.forwarded на реальных reply/forward сообщениях.
  • Отдельные outbound semantics для voice/audio.
  • Delete/revoke, read receipts и reactions в текущем MAX user-session stream пока не подтверждены.

API notes

Практические заметки для интеграции

Пример recipient

31398414

Для private dialog отвечайте в data.chat.external_id, а не в data.from.external_id.

Если provider не отдал стабильный download source, вложение придет со status = failed и error_code = attachment_download_not_supported.

Для MAX Bridge теперь best-effort смотрит в raw message.link, чтобы заполнить message.reply_to и message.forwarded. До отдельного prod smoke это остается partial contract, а не гарантированный yes.

Для MAX Bridge сначала пытается взять text/comment из wrapper самого сообщения, и только потом падает в linked payload. На 29 апреля 2026 года prod probe показывает wrapper shape id,time,type,sender,cid,text,attaches,link: если text пустой, Bridge видит только linked text пересланного сообщения, а comment пользователя в этом surface может быть недоступен.

Channels

Сравнить с другими каналами