Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[BUG] 2.4.0-rc2: incoming text replies flattened to 'conversation' — contextInfo (stanzaId/quotedMessage/mentionedJid) lost in webhook and storage

Aberta
#2,713 0 comentários 2 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
typescript
Domínio
api, backend, databases

Direção de pesquisa

Start at the MESSAGES_UPSERT webhook handling and the normalization path that produces messageType and the Message table payload; compare 2.4.0-rc2 with the reported 2.3.x behavior. Reproduce a text reply and a media reply, then verify that text replies retain extendedTextMessage.contextInfo, including stanzaId and mentionedJid, in both the webhook and storage.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Describe the bug

On 2.4.0-rc2, incoming text replies (quoted messages) are delivered to webhooks flattened: the message arrives as messageType: "conversation" with only the text and messageSecret — the extendedTextMessage wrapper and its contextInfo (stanzaId, participant, quotedMessage) are destroyed before reaching the webhook consumer. The quote relationship is unrecoverable downstream.

The same flattening happens in Evolution's own storage: our production Message table contains zero rows with messageType = 'extendedTextMessage' (2,164 conversation rows in the last 2 days alone).

Notably, replies with media still work: when a reply is an image/audio/video/document quoting another message, contextInfo is preserved inside the media wrapper (imageMessage.contextInfo, etc.). Only text replies lose the quote.

Sending works fine: POST /message/sendText with quoted: { key: { id }, message: { conversation } } delivers a proper native reply on the device (even though the sent message is also stored flattened as plain conversation — storage-side symptom of the same normalization).

Actual webhook payload (captured, credentials redacted)

The sender replied on his phone (long-press → Reply) to a text message in a group. WhatsApp on both devices shows the quote card. The messages.upsert webhook delivered:

{
  "event": "messages.upsert",
  "instance": "...",
  "data": {
    "key": {
      "remoteJid": "[email protected]",
      "fromMe": false,
      "id": "2A7E3A15419D180DE3B4",
      "participant": "2581376053441@lid",
      "participantAlt": "[email protected]",
      "addressingMode": "lid"
    },
    "pushName": "...",
    "message": {
      "messageContextInfo": {
        "threadId": [],
        "messageSecret": { "0": 221, "1": 251, "...": "..." }
      },
      "conversation": "Teste"
    },
    "messageType": "conversation",
    "messageTimestamp": 1787780498,
    "source": "unknown",
    "status": "DELIVERY_ACK",
    "contextInfo": { "threadId": [], "messageSecret": { "...": "..." } }
  }
}

Expected behavior

A text reply should be delivered as it comes from Baileys:

{
  "messageType": "extendedTextMessage",
  "message": {
    "extendedTextMessage": {
      "text": "Teste",
      "contextInfo": {
        "stanzaId": "<quoted message id>",
        "participant": "<quoted author jid>",
        "quotedMessage": { "conversation": "..." }
      }
    }
  }
}

This worked on v2.3.x (we have integrations built on contextInfo.stanzaId and contextInfo.mentionedJid that were functional before upgrading).

Steps to reproduce

  1. Run evoapicloud/evolution-api:2.4.0-rc2 (Docker, Postgres provider).
  2. Webhook enabled with MESSAGES_UPSERT.
  3. From a phone that participates in a group (group using addressingMode: "lid" in our case), long-press any text message → Reply → send a text reply.
  4. Observe the webhook payload: messageType is conversation, no contextInfo.stanzaId/quotedMessage.
  5. Also check the Message table: the row is stored as {"conversation": "..."} only.
  6. Counter-test: reply with a photo quoting a message → imageMessage.contextInfo arrives intact.

Side effect of the same (or related) regression: mentionedJid for text mentions is also lost, since it lives in the same discarded contextInfo.

Environment

  • Evolution API: 2.4.0-rc2 (evoapicloud/evolution-api:2.4.0-rc2)
  • Deploy: Docker Compose (evolution + postgres:15 + redis)
  • Provider: Baileys (WhatsApp Web), single instance, group with addressingMode: "lid"
  • Downgrade to 2.3.7 is not viable for us: instances stopped working there after WhatsApp's LID migration (which motivated the upgrade to rc2).

Happy to provide more captured payloads or test a patched build.

Linguagem predominante
TypeScript
Estrelas
9.7k
Forks
7.3k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de evolution-foundation/evolution-api

Todas as issues de evolution-foundation/evolution-api

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.