Skip to content

[BUG] Cloud API v2.4.0: erro "Cannot read properties of undefined (reading 'name')" no messageHandle #2630

Description

@willianbrescovit

📋 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

  1. Fazer onboarding de um número em coexistência (Cloud API + app WhatsApp Business), via embedded signup com featureType: whatsapp_business_app_onboarding.
  2. Assinar o campo smb_message_echoes no webhook do app na Meta.
  3. Enviar uma mensagem pelo celular (app WhatsApp Business) — ou receber uma mensagem cujo payload venha sem contacts[0].profile.
  4. 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 ?? '';

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions