Pular para o conteúdo principal
O WaClient é um emissor de eventos fortemente tipado. Cada atividade de entrada — mensagens, recibos, mudanças em grupos, presença — é exposta como um evento com um payload tipado.
Plugins podem contribuir com seus próprios eventos tipados; eles aparecem em client.on apenas quando o plugin está no array plugins. Veja o guia de VoIP para um exemplo — seus eventos voip_* ficam disponíveis quando voipPlugin() está instalado.

Escutando

on, once e off são todos verificados por tipo contra o mapa de eventos — o tipo do payload é inferido a partir do nome do evento, então os listeners têm autocomplete completo.

Auth e conexão

O evento connection é uma union discriminada por status:
Veja Reconexão para o padrão de tratamento.

Mensagens

Veja Recebendo mensagens para detalhes do payload e extração de texto.

Mensagens indisponíveis

Algumas stanzas <message> recebidas carregam um marcador <unavailable/> no lugar de um corpo criptografado — uma view-once cujo conteúdo já foi consumido, ou uma mensagem hosted/bot que o servidor não conseguiu fazer fanout. Não há nada para decifrar, mas a chegada em si ainda é informação útil (audit logs, linhas “esta mensagem não está mais disponível” na UI). A lib ackeia e emite um evento tipado message_unavailable com discriminador kind:
Não há payload message — o corpo realmente sumiu (ou nunca foi criptografado para este device).

Presença e chat-state

Grupos, newsletters e perfis

Estado, histórico e MEX

Kinds de notificação MEX

WaMexNotificationEvent é uma union discriminada por kind. Toda variante carrega operationName (a operação GraphQL upstream) e errors: readonly WaMexNotificationGraphQlError[] (quaisquer erros GraphQL que o servidor anexou — tipicamente vazio).
Os kinds *_hint (username_update_hint, text_status_update_hint) trazem apenas um contactHash, não o valor novo — o servidor está dizendo “algo mudou para esse bucket” e o client é responsável por refetch pelo caminho normal de perfil / status.

Companion host (mobile-primary)

Emitidos pelo coordinator client.mobile quando uma sessão mobile-primary linka, revoga ou falha ao provisionar um device companion. Os três só disparam em sessão mobile-primary.

Falhas

Eventos de debug

Uma família de eventos debug_* expõe internals de baixo nível — frames brutos, nodes decodificados, erros de decode, stanzas não tratadas e erros do client. São úteis para depuração de protocolo, mas barulhentos; inscreva-se seletivamente.
Os eventos de registro mobile (mobile_registration_code, mobile_account_takeover_notice) existem para o caminho de registro mobile e não fazem parte do fluxo companion padrão.
Última modificação em 12 de julho de 2026