[BUG] chats.update / initial history sync discard the archived flag before it reaches webhooks or the database
Mantenedores costumam responder em até 5 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 67/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- postgresql, typescript
Direção de pesquisa
Start in whatsapp.baileys.service.ts and compare the chats.update and messaging-history.set handlers with the compiled path cited in the issue. Then inspect the Prisma Chat model and the findChats flow. Done means archived state reaches webhook payloads, persists on Chat rows, and is returned by findChats, with the relevant migration and tests or reproduction checks passing.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
📋 Bug Description
When a chat is archived/unarchived on the phone (or any linked device), Baileys emits the change via chats.update with an archived: true/false field. Evolution's chats.update handler in whatsapp.baileys.service.ts (WHATSAPP-BAILEYS integration) discards every field except remoteJid before forwarding to the webhook or writing to the DB:
"chats.update": async (e) => {
const chatsRaw = e.map(chat => ({ remoteJid: chat.id, instanceId: this.instanceId }));
this.sendDataWebhook('chats.update', chatsRaw);
for (const chat of e)
await this.prismaRepository.chat.updateMany({
where: { instanceId: this.instanceId, remoteJid: chat.id, name: chat.name },
data: { remoteJid: chat.id },
});
}
(from compiled dist/api/integrations/channel/whatsapp/whatsapp.baileys.service.js, v2.3.7)
The messaging-history.set handler (emits chats.set) does the same trim, and additionally only forwards chats not already in the Chat table — so even a fresh reconnect can't backfill archive state for chats Evolution already knows about.
The Chat Postgres table also has no archived column at all:
Table "public.Chat"
id | remoteJid | labels | createdAt | updatedAt | instanceId | name | unreadMessages
So there is currently no way for an integrator to learn a chat's real archived state via webhook, DB, or GET /chat/findChats/:instance — it's dropped at the earliest point in Evolution's own pipeline.
🔄 Steps to Reproduce
- Connect an instance (WHATSAPP-BAILEYS) with the
chats.updatewebhook enabled. - Archive (or unarchive) any chat directly on the linked phone.
- Inspect the delivered
chats.updatewebhook payload. - Check the
Chatrow for thatremoteJidviaGET /chat/findChats/:instanceor Postgres directly.
✅ Expected Behavior
chats.update carries the chat's current archived boolean, it's persisted on the Chat row, and findChats returns it — so integrators can mirror the phone's real archived list instead of maintaining a local-only flag.
❌ Actual Behavior
chats.update/chats.set payloads only ever contain {remoteJid, instanceId[, name]}. archived is silently discarded.
🌍 Environment
- OS: Ubuntu (Docker host)
- Evolution API version: 2.3.7
- Integration: WHATSAPP-BAILEYS
- Database: PostgreSQL 13
📝 Additional Context / Proposed Fix
Sketch of a fix, for whoever picks this up:
- Add
archived Boolean @default(false)to theChatPrisma model (migration). - In
chats.update, forwardarchived: chat.archivedin the webhook payload and include it in thechat.updateManywrite. - In
messaging-history.set, same field addition; consider also letting already-known chats'archived/pinned/muteEndTimerefresh on reconnect, since today only brand-new chats get forwarded at all. - Confirm
findChatsselects/returns the new column once it exists.
Related: #2495 looks like a different symptom in the same area (write-side archiveChat endpoint erroring) — this is the read side: archive state never reaching the integrator in the first place.
- Linguagem predominante
- TypeScript
- Estrelas
- 9.9k
- Forks
- 7.4k
- 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é 5 dias
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
evolution-foundation/evolution-api#2704 ·
Mantenedores costumam responder em até 5 dias
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
evolution-foundation/evolution-api#2702 · 2 comentários · 3 reações ·
Mantenedores costumam responder em até 5 dias
-
[BUG] Cloud API: a single unknown wamid in a `statuses` batch silently drops the whole batch (`return` instead of `continue`)Talvez já em andamento @vin1i assumiu há 59 dias. Aberta
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é 5 dias
-
[BUG] Chatwoot integration duplicates messages when a device re-delivers the same key.id — getExistingSourceIds exists but is never called on the live pathTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
evolution-foundation/evolution-api#2675 ·
Mantenedores costumam responder em até 5 dias
Todas as issues de evolution-foundation/evolution-api
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
VictoriaMetrics/victorialogs-datasource#747 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 79/100
Mantenedores costumam responder em até 1 dia
-
bug from-studio
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
esengine/DeepSeek-Reasonix#14608 ·
Mantenedores costumam responder em até 1 dia
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
getarcaneapp/arcane#4590 ·
Mantenedores costumam responder em até 1 dia
-
支持对已取消(cancelled)任务生成报告Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
Clouditera/VulnHunter#57 ·