Skip to main content
O WhatsApp identifica todo participante — usuários, grupos, listas de transmissão e feeds de status — com um JID (Jabber ID). JIDs vêm do protocolo XMPP e seguem o formato local@server. Você os encontra o tempo todo no Baileys: como destino de sock.sendMessage, no key.remoteJid de cada mensagem recebida e como parâmetro de consultas a grupos e contatos. O WhatsApp moderno identifica a mesma pessoa de duas formas, dependendo do contexto. Ambas são JIDs:
  • PNJID — Phone Number Jabber Identifier. Vive em @s.whatsapp.net e é derivado do número de telefone do usuário. É o identificador legado e o que você usa para procurar alguém pelo número.
  • LIDJID — Linked Identity Jabber Identifier. Vive em @lid e é um identificador opaco por usuário que o WhatsApp atribui para anonimizar números em grupos, comunidades e outras superfícies compartilhadas. É o identificador padrão no Baileys 7.x e posteriores.
As duas formas se referem à mesma conta. O WhatsApp permite resolver um PNJID para o seu LIDJID (mas não o contrário) — veja Resolução PNJID ↔ LIDJID.

Formatos de JID

Usuário (PNJID)

[ddi][numero]@s.whatsapp.netExemplo: [email protected]

Usuário (LIDJID)

[lid]@lidExemplo: 123456789012345@lid

Grupo

[timestamp]-[random]@g.usExemplo: [email protected]

Lista de transmissão

[timestamp]@broadcastExemplo: 1234567890@broadcast

Stories / Status

status@broadcastConstante fixa — todas as atualizações de status vão para este JID.

Newsletter

[id]@newsletterExemplo: 12345@newsletter
Domínios menos comuns que você pode encontrar:

Regras do número de telefone

Ao construir um PNJID a partir de um número:
Sempre use o JID retornado por sock.onWhatsApp em vez do que você construiu. O WhatsApp pode normalizar o número para um JID canônico.

PN ↔ LID: o modelo de identidade dupla

Desde 2024, o WhatsApp vem migrando de identificadores de número de telefone para LIDs (Linked Identity JIDs). Um LID é opaco e por usuário — esconde o número de telefone subjacente para que sua conta apareça em grupos grandes, comunidades e canais sem vazar o número. No Baileys 7.x e posteriores:
  • Novas sessões Signal são criadas em formato LID por padrão.
  • Um único usuário tem tanto um PNJID ([email protected]) quanto um LIDJID (...@lid). Eles se referem à mesma pessoa.
  • Os campos participant em grupos costumam ser LIDs; participantAlt carrega o PN correspondente, e vice-versa.
  • MessageKey.remoteJidAlt e MessageKey.participantAlt dão a você o identificador alternativo para mensagens diretas e mensagens de grupo/transmissão/canal respectivamente.
  • O tipo Contact agora expõe um único id mais campos phoneNumber (quando id é LID) e lid (quando id é PN).
Não tente “restaurar” PN JIDs no seu app. Migre seu armazenamento, indexação e roteamento para LIDs — o WhatsApp trata LIDs como o identificador canônico daqui pra frente.

Resolução PNJID ↔ LIDJID

O WhatsApp permite resolver um número para o seu LID. O caminho inverso — de LID para número — não é geralmente suportado. Use onWhatsApp para verificações pontuais de existência por PN, e o store lidMapping em sock.signalRepository para conversões diretas:
Um evento lid-mapping.update dispara sempre que o Baileys aprende um novo par PN ↔ LID pela rede. Para consultas de diretório mais avançadas, veja Protocolo USync.

Compartilhamento de número entre contas

Como LIDs escondem números por padrão, o WhatsApp fornece flags explícitas de opt-in para trocá-los quando ambos os lados concordam:
  • Empresas podem solicitar o número do destinatário com { requestPhoneNumber: true } em uma mensagem enviada.
  • Usuários podem compartilhar seu número com { sharePhoneNumber: true }.
Empresas usam LIDs desde 2023; usuários foram incluídos ao longo de 2024.

JIDs multi-aparelho

No protocolo multi-aparelho do WhatsApp, uma única conta pode ter múltiplos aparelhos conectados. Cada aparelho recebe um sufixo: 5511999999999:[email protected] ou 123456789012345:3@lid. A parte antes do : é o usuário, e o número depois é o ID do aparelho. É por isso que você nunca deve comparar ou dividir JIDs com operações de string — uma mensagem do aparelho :0 e uma do :2 pertencem ao mesmo usuário.

Helpers de JID

O Baileys exporta um conjunto de helpers em @whiskeysockets/baileys. Sempre use eles em vez de manipulação manual de string.

Parsing e codificação

O campo domainType no resultado decodificado corresponde ao enum WAJIDDomains:

Verificações de tipo

areJidsSameUser compara somente a parte do usuário — não cruza fronteiras PN/LID. Para verificar se um PNJID e um LIDJID se referem à mesma conta, resolva ambos para a mesma forma antes via getLIDForPN.
isJidUser de versões anteriores foi removido. Use isPnUser ou isLidUser dependendo da forma desejada.

Constantes comuns

META_AI_JID é o JID legado em @c.us da conta da Meta AI, mas o helper isJidMetaAI(jid) casa apenas com o servidor @bot — o domínio que as interações com o bot da Meta AI usam atualmente. Os dois são intencionalmente diferentes e isJidMetaAI(META_AI_JID) retorna false. Compare contra META_AI_JID diretamente quando precisar identificar essa conta específica.

Padrões práticos

Roteamento de mensagens por tipo

Filtrando eventos com shouldIgnoreJid

Verificar se dois JIDs são do mesmo usuário

Deduplicar PN e LID do mesmo usuário


O que não fazer

Nunca divida uma string JID com .split('@') ou compare JIDs com ===. JIDs podem ter sufixos de aparelho (:2), campos de agente, domínios alternativos (@lid, @hosted.lid) ou dualidade PN/LID que fazem comparações de string falharem silenciosamente.