Pular para o conteúdo principal
O WhatsApp endereça usuários de duas formas, e o zapo expõe ambas. Entender a distinção importa assim que você mexe com grupos, porque o WhatsApp está migrando as identidades de grupo para LID por privacidade.

PN vs LID

Um LID (“linked identity”) é um identificador estável e opaco que representa um usuário sem expor seu número de telefone. O WhatsApp usa LIDs cada vez mais em grupos e comunidades para que os membros possam interagir sem compartilhar seu número.

Addressing mode

Ao enviar para um grupo, a mensagem é endereçada aos participantes por PN ou por LID — o addressingMode: 'pn' | 'lid'. O zapo resolve isso automaticamente: ele varre os participantes do grupo e usa lid se qualquer participante for um LID, caso contrário pn. O servidor pode confirmar ou sobrepor a escolha, o que é refletido de volta no resultado do publish:
Normalmente você não define isso por conta própria — é derivado da composição do grupo.

O que você recebe em uma mensagem de entrada

WaIncomingMessageEvent.key carrega ambos os identificadores quando o servidor os fornece. Em grupos, o remetente é key.participant; em chats 1:1 é key.remoteJid. Cada um ganha um campo *Alt paralelo com o endereçamento alternativo.
Então, em um grupo endereçado por LID, você normalmente verá key.participant como um @lid e key.participantAlt como o JID de telefone (se o servidor o compartilhar).

Respondendo — qual JID usar

O client.message.send aceita tanto um JID PN quanto um LID e normaliza o destino para você, então você raramente precisa converter:
Sempre prefira enviar por LID quando você tiver um. O LID é a identidade que preserva privacidade e é compatível com o futuro, para a qual o WhatsApp está migrando — endereçar um peer por LID é a escolha à prova de futuro e evita vazar/depender de números de telefone. Recorra ao PN apenas quando nenhum LID estiver disponível.Obtenha o LID a partir de key.participantAlt / key.remoteJidAlt do evento de entrada (quando o primário for um PN) ou resolva-o com getLidsByPhoneNumbers.
Em um grupo, sempre responda para event.key.remoteJid (o JID do grupo), não para o JID de um participante. Para chats 1:1, prefira o LID do peer; event.key.remoteJid também funciona, sendo ele um PN ou um LID.

Mapeando um número de telefone para o seu LID

Para resolver LIDs de um conjunto de números de telefone, use o profile coordinator:
lidJid é null quando o servidor não tem mapeamento de LID para aquele número.

Mudanças de LID

O LID de um usuário pode mudar (no lado do servidor, por privacidade). Quando isso acontece, você recebe um mex_notification do tipo lid_change:
O zapo cuida da contabilidade subjacente da sessão Signal; este evento é para seus próprios caches/contabilidade.

Onde a ligação PN ↔ LID é armazenada

Vários schemas de app-state rastreiam o relacionamento e o sincronizam entre seus dispositivos (veja mutações de chat):

Sessões Signal

As sessões Signal são indexadas pelo JID canônico (PN ou LID) mais o id do dispositivo. O zapo canonicaliza as variantes de servidor hospedado (hosted.lidlid, hosted → s.whatsapp.net) antes das buscas, e mantém sessões para ambas as formas de endereçamento. Se você algum dia precisar forçar uma nova sincronização de sessão para um peer, use:
Última modificação em 29 de maio de 2026