Text
Работаетmessage.type = text, включая emoji-only сообщения и private/group chats.
WhatsApp в Bridge подключается как linked device: либо через QR, либо через phone link code. Worker WhatsApp работает через отдельный Bridge VPN gateway, чтобы не смешивать сетевой маршрут с MAX.
Connect
Клиент подключает канал в кабинете. После статуса connected входящие события идут в webhook, а outbound API начинает принимать отправку в этот канал.
Шаг 1
Пользователь создает WhatsApp-канал в /my/channels.
Шаг 2
Для QR flow Bridge показывает linked-device QR, пользователь сканирует его в WhatsApp на телефоне.
Шаг 3
Для link-code flow Bridge принимает номер телефона и показывает pairing code, который нужно ввести в WhatsApp в Linked devices.
Шаг 4
После успешной пары channel session переходит в connected, listener начинает принимать входящие события.
Inbound
message.type = text, включая emoji-only сообщения и private/group chats.
Media скачивается через Baileys, сохраняется в Bridge storage и приходит в attachments[].
Voice/audio сохраняются как attachments с metadata.is_voice и duration best-effort.
Стикеры и документы проходят через общий storage/download flow.
data.chat.type = group, data.chat.title и sender participant metadata подтягиваются best-effort.
Outbound
Для outbound используйте POST /v1/messages, bearer API key со scope messages:send, channel_id подключенного канала и provider chat id из inbound webhook.
POST /v1/messages с content.type = text отправляет сообщение в WhatsApp JID.
content.type = media поддерживает photo, video, file/document, audio, voice note, GIF/animation и sticker.
Если передать несколько вложений в attachments[], Bridge отправит их последовательно в рамках одного API-запроса; content.text уйдет как caption у первого вложения.
Если передать reply_to.provider_message_id, Bridge отправит quoted reply в тот же чат.
Проверка
/my/channels.message.deleted для revoke/delete событий WhatsApp.API notes
Пример recipient
79161234567@s.whatsapp.net
Для ответа используйте data.chat.external_id, например 79161234567@s.whatsapp.net или group JID.
Для reply_to используйте reply_to.provider_message_id из входящего webhook-события.
Если в attachments[] несколько элементов, Bridge отправит их последовательно; provider_message_id в /v1/messages/{id} останется первым message id, а внутренний usage считает фактическое количество отправленных provider messages.
Входящие message.reply_to и message.forwarded для WhatsApp извлекаются best-effort из contextInfo и raw message wrapper. Если WhatsApp отдает только marker пересылки без source metadata, Bridge все равно сохраняет forwarded как object с null-полями. На 28 апреля 2026 года это уже подтверждено на prod.
Для whatsapp_qr_bridge revoke/delete теперь приходит отдельным webhook message.deleted; service payload protocolMessage больше не публикуется как обычный message.inbound.
Channels