evolution-api icon indicating copy to clipboard operation
evolution-api copied to clipboard

[BUG] Erro no número do WhatsApp e pushName quando o evento vem de anúncio

Open andersonfelipev opened this issue 3 weeks ago • 13 comments

📋 Bug Description

Quando a mensagem recebida vem de um anúncio do WhatsApp/Meta Ads, o Evolution API retorna o identificador do usuário em um formato incorreto. Em vez de retornar o remoteJid no formato padrão:

[email protected]

ele retorna:

11927141003400@lid

Além disso, o campo pushName vem como null somente quando a origem é um anúncio.

Isso quebra fluxos de identificação de leads, webhooks e automações que dependem do número correto.

🔄 Steps to Reproduce

Configurar uma instância Evolution API conectada ao WhatsApp Business API via Baileys.

Criar um anúncio no Facebook/Instagram usando o botão Enviar mensagem pelo WhatsApp.

Acessar o webhook ou logs de eventos recebidos pelo Evolution API.

Observar que:

remoteJid vem em formato @lid

pushName vem null

Compare com qualquer mensagem recebida fora de anúncio, onde tudo funciona normalmente.

✅ Expected Behavior

O Evolution API deveria retornar o remoteJid sempre no formato padrão [email protected], independentemente da origem da conversa.

O campo pushName deveria vir preenchido como ocorre em conversas comuns.

❌ Actual Behavior

Quando o lead inicia o contato via anúncio:

O remoteJid vem como XXXXXXXXXXXX@lid, o que impossibilita extrair o número real.

O pushName retorna null mesmo que o contato possua nome no WhatsApp.

As mensagens vindas de anúncio fogem do padrão esperado e acabam quebrando automações.

🌍 Environment

  • OS: Ubuntu 22.04
  • Node.js: 18.x
  • Evolution API version: 2.3.6
  • Database: PostgreSQL 14
  • Connection type: Baileys
  • Deployment: Docker Swarm (stack com o container do Evolution API)

📋 Logs

Exemplo real do payload recebido quando a origem é anúncio:

{
  "event": "messages.upsert",
  "instance": "NOME DA INSTANCIA",
  "data": {
    "key": {
      "remoteJid": "11927141003400@lid",
      "fromMe": false,
      "id": "AC412D8403E76D920E62FB7B63F3CF39"
    },
    "pushName": null,
    "status": "DELIVERY_ACK",
    "message": {
      "messageContextInfo": {
        "messageSecret": {}
      },
      "conversation": "Olá, eu quero saber mais sobre a mentoria."
    },
    "contextInfo": {
      "mentionedJid": [],
      "groupMentions": [],
      "conversionSource": "FB_Ads",
      "conversionData": {},
      "conversionDelaySeconds": 0,
      "externalAdReply": {},
      "entryPointConversionSource": "ctwa_ad",
      "entryPointConversionApp": "facebook",
      "entryPointConversionDelaySeconds": 0,
      "trustBannerAction": 4294967295,
      "ctwaSignals": "all,all",
      "ctwaPayload": {}
    },
    "messageType": "conversation",
    "messageTimestamp": 1764178557,
    "instanceId": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2",
    "source": "android"
  },
  "destination": "https://webhookn8n.dominio.com/webhook/54608597-bc77-4fa4-afb0-0d0ea3fc45a2",
  "date_time": "2025-11-26T14:45:04.495Z",
  "sender": "[email protected]",
  "server_url": "https://evolution.dominio.com",
  "apikey": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2"
}

Payload esperado (quando não é anúncio):

{
  "event": "messages.upsert",
  "instance": "NOME DA INSTANCIA",
  "data": {
    "key": {
      "remoteJid": "[email protected]",
      "remoteJidAlt": "232134862233733@lid",
      "fromMe": true,
      "id": "3EB0BF8072876BE899FE20",
      "participant": "",
      "addressingMode": "pn"
    },
    "pushName": "Instituto Pastore",
    "status": "SERVER_ACK",
    "message": {
      "conversation": "tudo bem"
    },
    "contextInfo": {
      "mentionedJid": [],
      "groupMentions": [],
      "stanzaId": "A507F13EEC05FFCB8692DB0A8856F91A",
      "participant": "[email protected]",
      "quotedMessage": {
        "conversation": "Hoje até final da tarde te envio as agendas tá",
        "messageContextInfo": {
          "messageSecret": {}
        }
      },
      "disappearingMode": {
        "initiator": 0,
        "trigger": 1,
        "initiatedByMe": false
      }
    },
    "messageType": "conversation",
    "messageTimestamp": 1764253714,
    "instanceId": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2",
    "source": "web"
  },
  "destination": "https://webhookn8n.dominio.com/webhook/54608597-bc77-4fa4-afb0-0d0ea3fc45a2",
  "date_time": "2025-11-27T11:28:35.080Z",
  "sender": "[email protected]",
  "server_url": "https://evolution.dominio.com",
  "apikey": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2"
}

📝 Additional Context

Esse comportamento só ocorre quando o usuário abre o chat a partir de um anúncio da Meta funcionando como ponto de entrada.

Em mensagens iniciadas diretamente (contato manual), o Evolution API funciona corretamente.

Outros projetos que usam Baileys costumam fazer a conversão automática do @lid para @s.whatsapp.net.

Esse bug dificulta a identificação correta dos leads, o armazenamento do número real e o cruzamento com outros sistemas de CRM/automação.

andersonfelipev avatar Nov 27 '25 15:11 andersonfelipev

O meu deu erro também, mas resolvi dessa forma: Em algumas versões da BAILEYS / Evolution API , quando o contato usa WhatsApp Business, o remoteJid pode vir com o sufixo diferente:

@lid

Ou vir vazio/indefinido, dependendo da origem

Nesses casos, a API fornece remoteJidAlt como o JID alternativo, que geralmente é o JID normalizado, por exemplo:

[email protected]

Resolvi assim: Sua expressão resolve isso perfeitamente

{{ ( $json.body.data.key.remoteJid.endsWith('@lid') ? $json.body.data.key.remoteJidAlt : $json.body.data.key.remoteJid ) .toString() .replace(/[\n\r\t ]+/g, '') }}

O que ela faz? Se o JID terminar com @lid → usa remoteJidAlt Isso corrige o formato quando vem de contas Business ou Multi-Device.

Senão → usa o próprio remoteJid Isso cobre WhatsApp normal.

.replace(/[\n\r\t ]+/g, '') Remove quebras de linha, tabs e espaços.

///////////////////////////////// ENGLISH

Mine gave an error too, but I solved it this way:

In some versions of BAILEYS / Evolution API, when the contact uses WhatsApp Business, the remoteJid may come with a different suffix:

@lid

Or it may come empty/undefined depending on the source.

In these cases, the API provides remoteJidAlt as the alternative JID, which is usually the normalized JID, for example:

[email protected]

I solved it like this: Your expression handles this perfectly:

{{ ( $json.body.data.key.remoteJid.endsWith('@lid') ? $json.body.data.key.remoteJidAlt : $json.body.data.key.remoteJid ) .toString() .replace(/[\n\r\t ]+/g, '') }}

What does it do? If the JID ends with @lid → it uses remoteJidAlt This fixes the format when it comes from Business or Multi-Device accounts.

Otherwise → it uses remoteJid This covers regular WhatsApp accounts.

.replace(/[\n\r\t ]+/g, '') Removes line breaks, tabs, and any extra spaces.

modopraiano avatar Nov 28 '25 16:11 modopraiano

Fala querido, cara eu fiz isso para resolver quando a origem do lead não vem de um anuncio meta, agora quando vem da meta não esta vindo certo, vem apenas o remoteJid sem o remoteJidAlt e ainda vem sem o nome da pessao

andersonfelipev avatar Nov 28 '25 17:11 andersonfelipev

@andersonfelipev também estou vendo algumas conversas vindo só com @lid, na 2.3.6

TiagoGouvea avatar Nov 29 '25 12:11 TiagoGouvea

A questão é que a requisição nem chega da Evolution, ele não dispara o evento quando é um lead do tráfego. É uma merda mesmo, tu vai pra 3.2.6 e dispositivo android consegue conectar no qrcode, mas não consegue receber o disparo de mensagens vindas do tráfego, tu volta pra 3.2.4 e recebe vindo do tráfego porém não conecta no QRCode. São dois bugs que já poderiam ser corrigidos e estão a dias sem correção.

FernandoBolzan avatar Nov 29 '25 14:11 FernandoBolzan

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

andersonfelipev avatar Nov 29 '25 15:11 andersonfelipev

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

FernandoBolzan avatar Nov 29 '25 19:11 FernandoBolzan

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

claro posso, você tá usando docker compose?

andersonfelipev avatar Nov 29 '25 19:11 andersonfelipev

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

claro posso, você tá usando docker compose?

isso, via portainer

FernandoBolzan avatar Nov 29 '25 19:11 FernandoBolzan

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

claro posso, você tá usando docker compose?

isso, via portainer

blz, vc vai procurar por pela vou te passar o passo a passo:

1 - você vai producrar por CONFIG_SESSION_PHONE_VERSION e se tiver comentado vc descomenta 2 - voce vai acessar o site https://wppconnect.io/whatsapp-versions e vai pegar o numero da ultima versão sem a parte do -alpha exemplo: no site tá 2.3000.1030430275-alpha vc vai pegar apenas 2.3000.1030430275 3 - e vai definir a CONFIG_SESSION_PHONE_VERSION=2.3000.1030430275 e atualizar 4 - testa e me fala

andersonfelipev avatar Nov 29 '25 19:11 andersonfelipev

Jajá vou testar! Agradeço demais!!!

Em sáb., 29 de nov. de 2025 às 16:48, Anderson Cavacante < @.***> escreveu:

andersonfelipev left a comment (EvolutionAPI/evolution-api#2267) https://github.com/EvolutionAPI/evolution-api/issues/2267#issuecomment-3591897414

@FernandoBolzan https://github.com/FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

claro posso, você tá usando docker compose?

isso, via portainer

blz, vc vai procurar por pela vou te passar o passo a passo:

1 - você vai producrar por CONFIG_SESSION_PHONE_VERSION e se tiver comentado vc descomenta 2 - voce vai acessar o site https://wppconnect.io/whatsapp-versions e vai pegar o numero da ultima versão sem a parte do -alpha exemplo: no site tá 2.3000.1030430275-alpha vc vai pegar apenas 2.3000.1030430275 3 - e vai definir a CONFIG_SESSION_PHONE_VERSION=2.3000.1030430275 e atualizar 4 - testa e me fala

— Reply to this email directly, view it on GitHub https://github.com/EvolutionAPI/evolution-api/issues/2267#issuecomment-3591897414, or unsubscribe https://github.com/notifications/unsubscribe-auth/BGGV5HIYM3264ZIUJW5X7FT37H2CNAVCNFSM6AAAAACNMHAMWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTKOJRHA4TONBRGQ . You are receiving this because you were mentioned.Message ID: @.***>

FernandoBolzan avatar Nov 29 '25 19:11 FernandoBolzan

📋 Bug Description

Quando a mensagem recebida vem de um anúncio do WhatsApp/Meta Ads, o Evolution API retorna o identificador do usuário em um formato incorreto. Em vez de retornar o remoteJid no formato padrão:

[email protected]

ele retorna:

11927141003400@lid

Além disso, o campo pushName vem como null somente quando a origem é um anúncio.

Isso quebra fluxos de identificação de leads, webhooks e automações que dependem do número correto.

🔄 Steps to Reproduce

Configurar uma instância Evolution API conectada ao WhatsApp Business API via Baileys.

Criar um anúncio no Facebook/Instagram usando o botão Enviar mensagem pelo WhatsApp.

Acessar o webhook ou logs de eventos recebidos pelo Evolution API.

Observar que:

remoteJid vem em formato @lid

pushName vem null

Compare com qualquer mensagem recebida fora de anúncio, onde tudo funciona normalmente.

✅ Expected Behavior

O Evolution API deveria retornar o remoteJid sempre no formato padrão [email protected], independentemente da origem da conversa.

O campo pushName deveria vir preenchido como ocorre em conversas comuns.

❌ Actual Behavior

Quando o lead inicia o contato via anúncio:

O remoteJid vem como XXXXXXXXXXXX@lid, o que impossibilita extrair o número real.

O pushName retorna null mesmo que o contato possua nome no WhatsApp.

As mensagens vindas de anúncio fogem do padrão esperado e acabam quebrando automações.

🌍 Environment

  • OS: Ubuntu 22.04
  • Node.js: 18.x
  • Evolution API version: 2.3.6
  • Database: PostgreSQL 14
  • Connection type: Baileys
  • Deployment: Docker Swarm (stack com o container do Evolution API)

📋 Logs

Exemplo real do payload recebido quando a origem é anúncio:

{ "event": "messages.upsert", "instance": "NOME DA INSTANCIA", "data": { "key": { "remoteJid": "11927141003400@lid", "fromMe": false, "id": "AC412D8403E76D920E62FB7B63F3CF39" }, "pushName": null, "status": "DELIVERY_ACK", "message": { "messageContextInfo": { "messageSecret": {} }, "conversation": "Olá, eu quero saber mais sobre a mentoria." }, "contextInfo": { "mentionedJid": [], "groupMentions": [], "conversionSource": "FB_Ads", "conversionData": {}, "conversionDelaySeconds": 0, "externalAdReply": {}, "entryPointConversionSource": "ctwa_ad", "entryPointConversionApp": "facebook", "entryPointConversionDelaySeconds": 0, "trustBannerAction": 4294967295, "ctwaSignals": "all,all", "ctwaPayload": {} }, "messageType": "conversation", "messageTimestamp": 1764178557, "instanceId": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2", "source": "android" }, "destination": "https://webhookn8n.dominio.com/webhook/54608597-bc77-4fa4-afb0-0d0ea3fc45a2", "date_time": "2025-11-26T14:45:04.495Z", "sender": "[email protected]", "server_url": "https://evolution.dominio.com", "apikey": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2" } Payload esperado (quando não é anúncio):

{ "event": "messages.upsert", "instance": "NOME DA INSTANCIA", "data": { "key": { "remoteJid": "[email protected]", "remoteJidAlt": "232134862233733@lid", "fromMe": true, "id": "3EB0BF8072876BE899FE20", "participant": "", "addressingMode": "pn" }, "pushName": "Instituto Pastore", "status": "SERVER_ACK", "message": { "conversation": "tudo bem" }, "contextInfo": { "mentionedJid": [], "groupMentions": [], "stanzaId": "A507F13EEC05FFCB8692DB0A8856F91A", "participant": "[email protected]", "quotedMessage": { "conversation": "Hoje até final da tarde te envio as agendas tá", "messageContextInfo": { "messageSecret": {} } }, "disappearingMode": { "initiator": 0, "trigger": 1, "initiatedByMe": false } }, "messageType": "conversation", "messageTimestamp": 1764253714, "instanceId": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2", "source": "web" }, "destination": "https://webhookn8n.dominio.com/webhook/54608597-bc77-4fa4-afb0-0d0ea3fc45a2", "date_time": "2025-11-27T11:28:35.080Z", "sender": "[email protected]", "server_url": "https://evolution.dominio.com", "apikey": "54608597-bc77-4fa4-afb0-0d0ea3fc45a2" }

📝 Additional Context

Esse comportamento só ocorre quando o usuário abre o chat a partir de um anúncio da Meta funcionando como ponto de entrada.

Em mensagens iniciadas diretamente (contato manual), o Evolution API funciona corretamente.

Outros projetos que usam Baileys costumam fazer a conversão automática do @lid para @s.whatsapp.net.

Esse bug dificulta a identificação correta dos leads, o armazenamento do número real e o cruzamento com outros sistemas de CRM/automação.

Simplobot1 avatar Nov 30 '25 15:11 Simplobot1

Conseguiu resolver? estou com o mesmo problema... conseguiu alguma forma?

Simplobot1 avatar Nov 30 '25 15:11 Simplobot1

@FernandoBolzan a parte do 3.2.4 vc pode trocar a versão do whatsapp web que volta a conectar

Como? Pode me dar um help?

claro posso, você tá usando docker compose?

isso, via portainer

blz, vc vai procurar por pela vou te passar o passo a passo:

1 - você vai producrar por CONFIG_SESSION_PHONE_VERSION e se tiver comentado vc descomenta 2 - voce vai acessar o site https://wppconnect.io/whatsapp-versions e vai pegar o numero da ultima versão sem a parte do -alpha exemplo: no site tá 2.3000.1030430275-alpha vc vai pegar apenas 2.3000.1030430275 3 - e vai definir a CONFIG_SESSION_PHONE_VERSION=2.3000.1030430275 e atualizar 4 - testa e me fala

Infelizmente não funcionou, e fiz exatamente como falou. Versão 3.2.4 da Evolution com a versão 2.3000.1030430275 da WPPConnect. :(

FernandoBolzan avatar Nov 30 '25 16:11 FernandoBolzan

Estou com o mesmo problema. Pelo que vi, é a Meta que está enviando desse jeito para bloquear automações não oficiais. Mensagens de outras fontes chegam normal no webhook; só as do Meta ADS vêm com o @LID, supostamente por causa de políticas de proteção de dados.

Dev-Rafhael avatar Dec 04 '25 18:12 Dev-Rafhael

Parece que o problema real, é que estão chegando 2 ou 3 webhooks quando c conversa é criada.

O primeiro vem só com @lid, o segundo já vem com @s.whatsapp.. então temos que lidar com isso. Em alguns deles vem os metadados de campanha.

Estou implementando um workaround com código, mas imagino que a galera do n8n vai sofrer pra resolver.

TiagoGouvea avatar Dec 05 '25 12:12 TiagoGouvea