Skip to main content
Webhook e WebSocket compartilham o mesmo envelope e o mesmo catálogo de eventos. A única diferença é o canal de entrega, o data é idêntico. Esta página documenta os 6 tipos: message.exchange, message.status, call.update, group.flow, instance.state e label.update.

Envelope

Filtragem é feita pelo nome do event no campo events da config. Vazio = todos os tipos.

Filtragem e roteamento

Quando byEvents=true (apenas em webhook), o nome do evento é anexado à URL:
  • Config: url: "https://app/wh", byEvents: true
  • Delivery: POST https://app/wh/message.exchange
Útil para roteamento por endpoint sem precisar inspecionar o payload.

message.exchange

Mensagens enviadas e recebidas (texto, mídia, sticker, documento, áudio, enquete, contato, localização, etc.), edits e revogações.

Payload

Campos condicionais

Apenas os campos relevantes para o tipo da mensagem são preenchidos. Edits têm edit populado; revogações chegam com type: "message_revoke" em data.message.type.
chat.isCommunity aparece apenas quando true, indica que o chat é o canal de aviso (parent / announcement channel) de uma comunidade WhatsApp. Subgrupos vinculados a uma comunidade continuam com type: "group" e sem o campo isCommunity. Em grupos comuns e DMs o campo também é omitido.
media.base64 só aparece quando mediaBase64=true na config (webhook ou WebSocket). Caso contrário, use media.url (whatsapp.net, expira) ou media.s3Url (se S3 estiver configurado na instância).

adOrigin — atribuição de origem (Click-to-WhatsApp)

Presente apenas na primeira mensagem recebida de uma conversa iniciada por um anúncio Meta ou por um ponto de entrada (link wa.me, busca, QR). Permite rotear o lead por campanha sem consultar o banco. Dois cenários:
  • Anúncio nativo (Click-to-WhatsApp / Call Ads)entryPointSource é ctwa_ad e vem o bloco completo: sourceId (ID do anúncio — agrupa leads por campanha), ctwaClid (chave de atribuição da Meta, use na Conversions API), sourceApp, sourceUrl, title, body, mediaType, greetingMessageBody, além de conversionSource, entryPointExternalSource, ctwaPayload (token base64 para a Conversions API), originalImageUrl e clickToWhatsappCall.
  • Ponto de entrada sem anúncio — link wa.me (click_to_chat_link), busca do WhatsApp (global_search_new_chat), QR code, etc. Vem apenas entryPointSource (e, quando disponível, entryPointApp / entryPointDelaySeconds), sem sourceId / ctwaClid — a Meta não anexa dados de anúncio a esses.
Mensagens orgânicas — e qualquer mensagem que não seja a primeira da conversa — não trazem adOrigin. O texto pré-preenchido de um anúncio não é prova de origem: a atribuição confiável vem de sourceId / ctwaClid.

Exemplo (recebimento de imagem)


message.status

Recibos de entrega: delivered, read, played, etc.

Payload

Enum status

  • messageSender em grupos: JID do autor original da mensagem (relevante quando alguém leu uma mensagem de outro participante).
  • chat.isCommunity segue a mesma regra de message.exchange: presente e true apenas quando o chat é o canal de aviso de comunidade.

call.update

Eventos de chamada: oferta, aceite, recusa, encerramento, latência.

Payload

Enum type

Para rejeitar chamadas automaticamente, configure autoRejectCalls=true no bloco settings da instância, você ainda recebe os eventos offer + rejected no webhook.

group.flow

Mudanças em grupos: membros, metadata, settings.

Payload, participant change

Subtipos de metadata


instance.state

Mudanças no estado da própria instância (conexão, QR, ban, pareamento).

Payload

Enum state

Para o seu cliente saber quando recarregar o QR na UI, escute instance.state com state=qr_ready e renderize data.codes[0].

label.update

Edição/associação de etiquetas (WhatsApp Business labels).

Payload

Combinações type × action


Eventos não emitidos (internos)

Capturados pelo handler whatsmeow mas não propagados via webhook/WS:
  • *events.Picture, mudança de foto de perfil (apenas logado).
  • *events.FBMessage, Facebook Business (apenas logado).
  • *events.HistorySync, sync de histórico (processado e gravado em DB).
Se você precisar consumir alguma dessas mudanças, faça polling pelos endpoints REST correspondentes (perfil, histórico).

Referências

Configurar webhook

Filtre os eventos via events[] na config.

Configurar WebSocket

Mesma sintaxe de filtro do webhook.

Conectar via WebSocket

Receba os eventos em tempo real.

Visão geral de Eventos

Comparação webhook x WebSocket.