Conversas e números

Como identificar contatos e grupos no chatId, e o que são LID e BSUID.

Toda conversa é identificada por um chatId. Nos envios você pode mandar só o número; nos eventos ele sempre chega completo.

FormatoExemploQuando aparece
Número com DDI e DDD5511999999999Nos seus envios (vira 5511999999999@c.us)
Contato5511999999999@c.usNos eventos, sempre que o número do contato é conhecido
LID36576092528787@lidSó quando o WhatsApp não informa o número por trás do LID
Grupo120363000000000000@g.usGrupos (só API OnZap)
BSUIDBR.abc123@bsuidAPI oficial: usuário com nome de usuário, sem número visível
  • Nos envios, o campo phone é aceito como apelido de chatId.
  • Nono dígito: no Brasil, o número é conferido e o nono dígito, resolvido automaticamente. Nos eventos, o chatId vem como o WhatsApp registrou o número: contas antigas aparecem sem o nono dígito (556199998888@c.us). Por isso use o chatId como chave da conversa, e não o número digitado.
  • Número de origem desconhecida? Use GET /contacts/check-exists?phone=5511999999999 antes de enviar: ele diz se o número tem WhatsApp e devolve o chatId certo.

LID

O WhatsApp está trocando o número pelo LID (um identificador de privacidade) em várias conversas, e a mesma pessoa pode chegar ora como 5561999998888@c.us, ora como 36576092528787@lid. Para o seu sistema não ficar com duas conversas da mesma pessoa, a OnZap converte o LID no número sempre que ele é conhecido, em tudo o que você usa como chave:

  • nos eventos, chatId, from.id e os ids de mensagem (id, quotedId, e o messageId de confirmações, reações, mensagens apagadas e editadas) saem com o número (...@c.us);
  • nas respostas da API (conversas, histórico, contatos, grupos), os JIDs e ids de mensagem seguem a mesma regra; o histórico de uma conversa pelo número (GET /chats/5561999998888@c.us/messages) já inclui o que chegou pelo LID;
  • o LID original vem junto em chatLid e from.lid (nos eventos) e em lid (nas respostas), para quem quiser guardar os dois. As rotas /lids mostram o par LID ↔ número como ele é;
  • só quando o WhatsApp não informa o número o chatId continua ...@lid (e from.phone vem vazio). Responda usando esse mesmo chatId; o envio funciona igual.

Guarde o chatId como chave da conversa. Se você já tem conversas antigas com @lid, junte-as pelo chatLid das mensagens novas.

Grupos

Em grupos, o chatId é o do grupo (@g.us) e from é quem mandou a mensagem. As mensagens enviadas pela própria conta chegam com fromMe: true e o mesmo chatId do grupo.

Nome e foto da conversa

Nas mensagens (message e message.any), chatName e chatPicture descrevem a conversa, não quem mandou:

  • Grupo: chatName é o assunto do grupo e chatPicture, a foto do grupo.
  • Contato: chatName é o nome do contato (o da agenda do celular ou, na falta, o do perfil), inclusive nas mensagens enviadas pela conta, em que from é você.

chatPicture (como from.picture) é um link temporário; sem foto visível, ele responde 404. Só na API OnZap.

Quem mandou: fromMe e from

SituaçãofromMefrom
Mensagem recebidafalseO contato (id, phone, pushName, picture); em grupo, o participante
Enviada pela contatrueA própria conta (na API oficial vem vazio)

Nas enviadas, source diz a origem: api (por esta API) ou app (pelo celular ou outro aparelho conectado).