Mensagens

Evento: messages · Transporte: POST para o seu receptor

Receba mensagens novas e projeções de mensagens enviadas pela instância. Use o objeto message como ponto de partida para identificar conversa, remetente, conteúdo e ID.

Quando é enviado

O fluxo de mensagens pode produzir eventos recebidos e enviados. O payload depende do tipo de mensagem e da origem; texto, mídia, reações e atualizações relacionadas não têm conteúdo idêntico.

Como processar

  1. Identifique a instância autorizada e a conversa em message.chatid.
  2. Preserve message.id e message.messageid; não converta os IDs em números.
  3. Aplique deduplicação adequada ao seu processamento. Não responda automaticamente a toda mensagem sem verificar sua origem.
  4. Para acompanhar entrega/leitura, use também messages_update.

O objeto chat pode acompanhar a mensagem. chatSource indica a origem do snapshot quando disponível.

Habilitar este evento

Adicione messages à lista events do webhook da instância. Preserve os outros eventos de que sua integração precisa.

{
  "enabled": true,
  "url": "https://seu-sistema.example/hooks/whatsapp",
  "events": [
    "messages"
  ]
}

Envie essa configuração para POST /webhook, usando o header token. O JSON acima configura a assinatura; os exemplos de entrega abaixo são o que seu servidor recebe.

Campos do payload

O envelope comum vem na raiz. Campos condicionais podem estar ausentes ou nulos conforme o evento; não use a tabela como obrigação de presença de todos os campos.

CampoTipoSignificado
EventTypestringObrigatório. Tipo de evento, por exemplo connection ou messages.
ownerstringObrigatório. Consulte o objeto ou exemplo correspondente.
tokenstringObrigatório. Token da instância; dado sensível.
BaseUrlstringObrigatório. Consulte o objeto ou exemplo correspondente.
instanceNamestringConsulte o objeto ou exemplo correspondente.
messageobjectMensagem normalizada. Campos disponíveis variam conforme o tipo e a origem.
message.idstringIdentificador retornado pelo sistema; preserve como string.
message.messageidstringID da mensagem no WhatsApp.
message.chatidstringJID do contato, grupo ou canal.
message.senderstringJID do remetente.
message.senderNamestringNome disponível do remetente.
message.fromMebooleanMensagem enviada pela conta conectada.
message.wasSentByApibooleanOrigem na API quando esse campo estiver presente na mensagem.
message.isGroupbooleanIdentifica conversa de grupo.
message.messageTypestringTipo de mensagem normalizado.
message.textstringTexto ou legenda disponível.
message.messageTimestampintegerTimestamp da mensagem em milissegundos Unix.
message.contentvariávelConteúdo específico do tipo de mensagem; não possui um formato único.
message.statusstringEstado disponível da mensagem; pode estar vazio.
chatobjectSnapshot de chat. Atualize pelos campos recebidos; não trate o evento como lista completa.
chat.idstringID local do chat.
chat.wa_chatidstringJID da conversa.
chat.namestringNome disponível.
chat.wa_isGroupbooleanConversa de grupo.
chat.wa_isBlockedbooleanEstado de bloqueio no snapshot.
chat.wa_archivedbooleanEstado de arquivamento.
chat.wa_unreadCountintegerQuantidade de mensagens não lidas disponível.
chat.wa_labelvariávelEtiquetas associadas, conforme a projeção do chat. Pode ser texto JSON; normalize antes de usar.
chatSourcestringOrigem do snapshot de chat quando presente, por exemplo updated.

Exemplos de entrega

Exemplos ilustrativos com identificadores fictícios. O conteúdo específico e os campos opcionais variam.

Mensagem de texto recebida

{
  "EventType": "messages",
  "owner": "5511999999999",
  "token": "INSTANCE_TOKEN",
  "BaseUrl": "https://seu-servidor.example",
  "instanceName": "Atendimento",
  "message": {
    "id": "5511999999999:MSG_EXEMPLO",
    "messageid": "MSG_EXEMPLO",
    "chatid": "5511888888888@s.whatsapp.net",
    "sender": "5511888888888@s.whatsapp.net",
    "senderName": "Contato de exemplo",
    "fromMe": false,
    "isGroup": false,
    "messageType": "Conversation",
    "text": "Olá, preciso de ajuda.",
    "messageTimestamp": 1788868800000
  }
}

Responder ao webhook

Seu receptor deve aceitar o POST JSON e devolver uma resposta 2xx rapidamente, após validar e registrar o recebimento. O corpo da resposta não é um comando para a API. Processe trabalho demorado separadamente.

O worker não repete automaticamente uma entrega HTTP malsucedida. Consulte diagnóstico de webhooks e implemente a reconciliação necessária. Eventos repetidos ou fora de ordem ainda precisam ser tolerados pelo receptor.

Referências