📋 Bug Description
Descrição do bug
Em instâncias de WhatsApp Cloud API oficial (com coexistência / smb_message_echoes ativos), o processamento de mensagens quebra com erro 500 sempre que o payload da Meta chega sem o campo contacts[0].profile.
O handler assume que todo evento traz contacts[0].profile.name, mas em alguns payloads da Cloud API — principalmente echoes (smb_message_echoes, mensagens fromMe: true vindas do app WhatsApp Business em coexistência) — o objeto contacts vem apenas com wa_id, sem o objeto profile. Isso faz o messageHandle tentar ler .name de undefined.
Ambiente
Versão: Evolution API v2.4.0 (imagem evoapicloud/evolution-api:homolog)
Canal: WhatsApp Cloud API (oficial)
Coexistência ativa, com smb_message_echoes assinado no webhook da Meta
Como reproduzir
Onboarding de um número em coexistência (Cloud API + app WhatsApp Business).
Assinar o campo smb_message_echoes no webhook do app na Meta.
Enviar uma mensagem pelo celular (app WhatsApp Business) ou receber uma mensagem cujo payload venha sem profile.
O evento chega, é logado como recebido, e em seguida estoura o erro.
Erro (stack trace)
ERROR [ChannelStartupService]
TypeError: Cannot read properties of undefined (reading 'name')
at Gs.messageHandle (/evolution/dist/main.js:309:776)
at Gs.eventHandler (/evolution/dist/main.js:309:9611)
at async Gs.connectToWhatsapp (/evolution/dist/main.js:300:17656)
🔄 Steps to Reproduce
- Fazer onboarding de um número em coexistência (Cloud API + app WhatsApp Business), via embedded signup com featureType: whatsapp_business_app_onboarding.
- Assinar o campo smb_message_echoes no webhook do app na Meta.
- Enviar uma mensagem pelo celular (app WhatsApp Business) — ou receber uma mensagem cujo payload venha sem contacts[0].profile.
- O evento chega e é logado como recebido; em seguida estoura o erro 500.
✅ Expected Behavior
A mensagem (echo do app / coexistência) deveria ser processada e gravada normalmente, mesmo quando o payload da Meta não traz contacts[0].profile — usando wa_id como fallback para o nome do contato.
❌ Actual Behavior
O processamento quebra com "TypeError: Cannot read properties of undefined (reading 'name')" no messageHandle, virando um unhandledRejection com status 500. A mensagem não é gravada/exibida no Chat, e o log fica poluído com o erro toda vez que chega um payload sem profile.
🌍 Environment
- OS: Ubuntu 22.04.5 LTS
- Node.js version: (a que vem na imagem oficial)
- Evolution API version: 2.4.0 (imagem evoapicloud/evolution-api:homolog)
- Database: PostgreSQL 14
- Connection type: WhatsApp Cloud API (oficial) com coexistência / smb_message_echoes
📋 Logs
ERROR [ChannelStartupService]
TypeError: Cannot read properties of undefined (reading 'name')
at Gs.messageHandle (/evolution/dist/main.js:309:776)
at Gs.eventHandler (/evolution/dist/main.js:309:9611)
at async Gs.connectToWhatsapp (/evolution/dist/main.js:300:17656)
ERROR [unhandledRejection]
{ status: 500, error: 'Internal Server Error', message: [ "TypeError: Cannot read properties of undefined (reading 'name')" ] }
📝 Additional Context
Causa provável: o handler acessa contacts[0].profile.name diretamente. Em payloads de echo/coexistência, o contacts vem só com wa_id, sem o objeto profile.
Funciona (tem profile):
"contacts": [ { "profile": { "name": "Nay" }, "wa_id": "555194069106" } ]
Quebra (sem profile):
"contacts": [ { "wa_id": "555198194969" } ]
Sugestão de correção: usar optional chaining com fallback, ex:
const name = contact?.profile?.name ?? contact?.wa_id ?? '';
📋 Bug Description
Descrição do bug
Em instâncias de WhatsApp Cloud API oficial (com coexistência / smb_message_echoes ativos), o processamento de mensagens quebra com erro 500 sempre que o payload da Meta chega sem o campo contacts[0].profile.
O handler assume que todo evento traz contacts[0].profile.name, mas em alguns payloads da Cloud API — principalmente echoes (smb_message_echoes, mensagens fromMe: true vindas do app WhatsApp Business em coexistência) — o objeto contacts vem apenas com wa_id, sem o objeto profile. Isso faz o messageHandle tentar ler .name de undefined.
Ambiente
Versão: Evolution API v2.4.0 (imagem evoapicloud/evolution-api:homolog)
Canal: WhatsApp Cloud API (oficial)
Coexistência ativa, com smb_message_echoes assinado no webhook da Meta
Como reproduzir
Onboarding de um número em coexistência (Cloud API + app WhatsApp Business).
Assinar o campo smb_message_echoes no webhook do app na Meta.
Enviar uma mensagem pelo celular (app WhatsApp Business) ou receber uma mensagem cujo payload venha sem profile.
O evento chega, é logado como recebido, e em seguida estoura o erro.
Erro (stack trace)
ERROR [ChannelStartupService]
TypeError: Cannot read properties of undefined (reading 'name')
at Gs.messageHandle (/evolution/dist/main.js:309:776)
at Gs.eventHandler (/evolution/dist/main.js:309:9611)
at async Gs.connectToWhatsapp (/evolution/dist/main.js:300:17656)
🔄 Steps to Reproduce
✅ Expected Behavior
A mensagem (echo do app / coexistência) deveria ser processada e gravada normalmente, mesmo quando o payload da Meta não traz contacts[0].profile — usando wa_id como fallback para o nome do contato.
❌ Actual Behavior
O processamento quebra com "TypeError: Cannot read properties of undefined (reading 'name')" no messageHandle, virando um unhandledRejection com status 500. A mensagem não é gravada/exibida no Chat, e o log fica poluído com o erro toda vez que chega um payload sem profile.
🌍 Environment
📋 Logs
📝 Additional Context
Causa provável: o handler acessa contacts[0].profile.name diretamente. Em payloads de echo/coexistência, o contacts vem só com wa_id, sem o objeto profile.
Funciona (tem profile):
"contacts": [ { "profile": { "name": "Nay" }, "wa_id": "555194069106" } ]
Quebra (sem profile):
"contacts": [ { "wa_id": "555198194969" } ]
Sugestão de correção: usar optional chaining com fallback, ex:
const name = contact?.profile?.name ?? contact?.wa_id ?? '';