[BUG] 2.4.0-rc2: incoming text replies flattened to 'conversation' — contextInfo (stanzaId/quotedMessage/mentionedJid) lost in webhook and storage
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
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
- Run
evoapicloud/evolution-api:2.4.0-rc2(Docker, Postgres provider). - Webhook enabled with
MESSAGES_UPSERT. - 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. - Observe the webhook payload:
messageTypeisconversation, nocontextInfo.stanzaId/quotedMessage. - Also check the
Messagetable: the row is stored as{"conversation": "..."}only. - Counter-test: reply with a photo quoting a message →
imageMessage.contextInfoarrives 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
- Inclui um Dockerfile ou arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de evolution-foundation/evolution-api
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
evolution-foundation/evolution-api#2723 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
evolution-foundation/evolution-api#2704 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
evolution-foundation/evolution-api#2702 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
evolution-foundation/evolution-api#2700 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
evolution-foundation/evolution-api#2675 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de evolution-foundation/evolution-api
Issues semelhantes
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
supabase/agent-skills#611 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 68/100
polka-codes/test#345 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 92/100
GoogleChromeLabs/project-sesame#217 ·
Mantenedores costumam responder em até 12 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
solana-foundation/solana-com#2202 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100