message como um WaIncomingMessageEvent.
O payload do evento
WaIncomingMessageEvent carrega uma key rica (um superset de Proto.IMessageKey) e alguns campos no topo do objeto. Passe o evento (ou apenas sua key) literalmente para responder / editar / reagir / revogar / fixar / manter.
Você também recebe aqui suas próprias mensagens enviadas (sincronização multi-dispositivo), marcadas com
key.fromMe === true. Filtre-as se quiser apenas tráfego de entrada.Extraindo texto
O texto de uma mensagem fica em campos diferentes dependendo do seu tipo. Um pequeno helper cobre os casos comuns:Identificando o tipo da mensagem
message é uma union protobuf — inspecione qual campo está definido:
Enviando recibos
Oclient.message.sendReceipt marca mensagens como recebidas/lidas/reproduzidas. A forma mais simples recebe o(s) evento(s) diretamente:
Chamadas
Read-only A sinalização de chamadas recebidas aparece como o evento read-onlycall (WaIncomingCallEvent). O zapo reporta chamadas — ele não inicia, aceita nem rejeita.
type (a etapa da sinalização), callId, callCreatorJid / callerPnJid (quem está ligando), isVideo, groupJid (chamadas de grupo) e callerPushName. Não há API para atender uma chamada.
Addons
Addons são complementos criptografados anexados a uma mensagem: reações, votos em enquetes e comentários. Eles aparecem como o eventomessage_addon.
Descriptografia automática
Os addons são descriptografados e emitidos para você por padrão — basta se inscrever emmessage_addon:
Descriptografia manual
Passeaddons: { autoDecrypt: false } para receber o payload criptografado e descriptografar sob demanda a partir do evento da mensagem de origem:
Mensagens de protocolo
Edições, revogações e outras atualizações em nível de protocolo chegam emmessage_protocol como WaIncomingProtocolMessageEvent (que estende o evento de mensagem com um campo protocolMessage):
Solicitando histórico antigo
O fluxo inicial de pareamento sincroniza uma janela limitada do histórico de mensagens. Para buscar mensagens mais antigas de um chat específico sob demanda, chameclient.message.requestHistorySync:
history_sync_chunk, do mesmo jeito que o histórico inicial. Inscreva-se antes de chamar se precisar reagir a ele:
oldestMsgId, oldestMsgFromMe e oldestMsgTimestampMs da mensagem mais antiga visível para paginar para trás corretamente. Omita count para deixar o servidor aplicar o padrão (~50).
Recibos (entrada)
Quando outras pessoas leem ou reproduzem suas mensagens, você recebe eventosreceipt:
event.messageIds é o conjunto completo de stanza ids que este recibo confirma. O WhatsApp agrupa recibos de read/delivery em um único <receipt> carregando um bloco <list><item id=…/> — messageIds espelha o externalIds do wa-web: itens da lista primeiro, depois event.stanzaId anexado por último. Recibos de mensagem única contêm apenas [event.stanzaId].
Eventos
receipt ainda expõem stanzaId / chatJid diretamente (eles estendem WaIncomingBaseEvent); a renomeação se aplica somente aos payloads de message, message_addon e message_bot_chunk, que agora usam event.key. O event.stanzaId ainda é o último id do batch — itere messageIds para cobrir o resto.