data é idêntico.
Esta página documenta os 6 tipos: message.exchange, message.status, call.update, group.flow, instance.state e label.update.
Envelope
event no campo events da config. Vazio = todos os tipos.
Filtragem e roteamento
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
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êmedit 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.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_ade 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 deconversionSource,entryPointExternalSource,ctwaPayload(token base64 para a Conversions API),originalImageUrleclickToWhatsappCall. - Ponto de entrada sem anúncio — link wa.me (
click_to_chat_link), busca do WhatsApp (global_search_new_chat), QR code, etc. Vem apenasentryPointSource(e, quando disponível,entryPointApp/entryPointDelaySeconds), semsourceId/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
messageSenderem grupos: JID do autor original da mensagem (relevante quando alguém leu uma mensagem de outro participante).chat.isCommunitysegue a mesma regra demessage.exchange: presente etrueapenas quando o chat é o canal de aviso de comunidade.
call.update
Eventos de chamada: oferta, aceite, recusa, encerramento, latência.
Payload
Enum type
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
label.update
Edição/associação de etiquetas (WhatsApp Business labels).
Payload
Combinações type × action
Eventos não emitidos (internos)
Capturados pelo handlerwhatsmeow 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).
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.