Instância cai em ciclo após stream:error <ack class="status" type="media"/> (Status de mídia), mesmo com ignoreStatus=true
Maintainers usually reply within 5 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
Research direction
Start by tracing handling of events.StreamError, the ignoreStatus filter, and status@broadcast message or ack processing. Use the supplied logs and repeated Status ID as the reproduction context. Done means status media does not trigger a fatal restart when ignoreStatus=true, and the stream error or status ack is handled without repeated delivery.
Written by the indexing model from the issue text.
Description
Welcome!
- Yes, I have searched for similar issues on GitHub and found none.
What did you do?
Olá, time Evolution GO!
Somos o Zapdo (zapdo.com.br), uma plataforma brasileira de pedidos para delivery que usa o Evolution GO como conexão principal do WhatsApp das lojas. Começamos a usar o projeto há pouco tempo, gostamos muito e queremos contribuir para que ele fique cada vez mais estável. Por isso, deixamos abaixo tudo o que coletamos sobre um comportamento que observamos em produção. Se precisarem de mais registros ou de algum teste do nosso lado, é só pedir.
Parece ser o mesmo caso relatado na issue #185 (a origem é a mesma). No nosso ambiente, porém, a instância reconecta sozinha em cerca de 4 s, e a queda volta em ciclo.
Ambiente
Imagem: evoapicloud/evolution-go:latest (criada em 2026-09-30T03:44:41Z)
Docker com Traefik na frente e Postgres em container separado (max_connections=100; 57 conexões em uso: 51 ociosas, 1 ativa)
VPS com 4 GB de RAM (871 MB usados, sem swap) e disco em 7%. Nenhum reinício de container e nenhum OOM.
2 instâncias ativas, ambas com ignoreGroups=true e ignoreStatus=true, sem proxy
Webhook HTTP com as subscriptions MESSAGE SEND_MESSAGE READ_RECEIPT PRESENCE HISTORY_SYNC CHAT_PRESENCE CALL CONNECTION LABEL CONTACT GROUP NEWSLETTER QRCODE BUTTON_CLICK PICTURE USER_ABOUT
disconnect_reason vazio nas duas instâncias
O que acontece
Um contato do número publica um Status com mídia (vídeo/imagem).
O servidor do WhatsApp responde com stream:error, que o Evolution registra como evento não tratado.
O Evolution detecta a desconexão e reinicia a instância. A reconexão leva cerca de 4 s.
Depois de cerca de 50 minutos, o mesmo Status (mesmo id) volta a gerar o erro e a instância cai de novo.
Na instância afetada foram 17 quedas em 24 h. A outra instância, no mesmo servidor e com a mesma configuração, teve 0 ocorrências desse erro. A diferença entre elas é só o volume de Status recebidos: a afetada recebe dezenas por hora, incluindo um vídeo de 96 MB.
Registros (instância dc37071f-3ee4-4305-ab15-f32b61d1772d)
2026/10/01 19:26:47 [WARN] Unhandled event *events.StreamError: &{Code: Raw:stream:error</stream:error>}
2026/10/01 19:26:47 [INFO] Disconnected detected, restarting instance
2026/10/01 20:16:51 [WARN] Unhandled event *events.StreamError: &{Code: Raw:stream:error</stream:error>}
2026/10/01 20:16:51 [INFO] Disconnected detected, restarting instance
2026/10/01 21:06:54 [WARN] Unhandled event *events.StreamError: &{Code: Raw:stream:error</stream:error>}
2026/10/01 21:06:54 [INFO] Disconnected detected, restarting instance
2026/10/01 22:37:01 [WARN] Unhandled event *events.StreamError: &{Code: Raw:stream:error</stream:error>}
2026/10/01 22:37:01 [INFO] Disconnected detected, restarting instance
O id 3EB0354FFD61697A73B009 aparece três vezes, sempre com cerca de 50 minutos de intervalo.
Logo antes das quedas, os registros mostram muitos Status chegando, por exemplo:
2026/10/01 20:06:34 [INFO] ===== MESSAGE RECEIVED ===== ID: 3A073E1ACB1B47C9A6AABEFB716B7058, From: status@broadcast, Type: media, Size: 96812914 bytes
O que esperávamos
Com ignoreStatus=true, que Status (status@broadcast) não afetassem a sessão. Na prática, o filtro só evita o envio ao webhook, mas o recebimento e o ack continuam acontecendo.
Que um stream:error do tipo ack class="status" fosse tratado sem derrubar a conexão, ou que o ack do Status fosse confirmado ou descartado corretamente, para o WhatsApp não reentregá-lo.
Sugestões (com todo respeito ao conhecimento do time)
Tratar *events.StreamError com como erro não fatal.
Quando ignoreStatus=true, enviar o ack/receipt de status@broadcast sem processar nem baixar a mídia.
Registrar o disconnect_reason com o conteúdo bruto do stream error, para facilitar o diagnóstico.
Referências
Issue #185: mesmo stream:error <ack class="status" ...>, no caso dela sem reconexão
Issues #109, #112 e #118: conexões Postgres acumuladas em reconexões (acompanhamos nosso pool por esse motivo)
Obrigado pelo trabalho no projeto! Estamos à disposição para testar uma build com correção.
Equipe Zapdo
What did you expect?
Com ignoreStatus=true, que Status (status@broadcast) não afetassem a sessão. Na prática, o filtro só evita o envio ao webhook, mas o recebimento e o ack continuam acontecendo. Também esperávamos que um stream:error do tipo ack class="status" fosse tratado sem derrubar a conexão — ou que o ack do Status fosse confirmado/descartado corretamente, para o WhatsApp não reentregá-lo.
What did you observe instead of what you expected?
Um contato do número publica um Status com mídia (vídeo/imagem) e o servidor do WhatsApp responde com stream:error , que o Evolution registra como evento não tratado (*events.StreamError). O Evolution detecta a desconexão e reinicia a instância; a reconexão leva cerca de 4 s. Em produção, a instância caiu 17× em 24 h, em ciclos de ~50 min, com o mesmo id de Status reentregue a cada queda. Outra instância no mesmo servidor e mesma configuração teve 0 ocorrências — a diferença é só o volume de Status: a afetada recebe dezenas por hora, incluindo um vídeo de 96 MB.
Screenshots/Videos
No response
Which version are you using?
latest (imagem evoapicloud/evolution-go:latest, criada em 2026-09-30)
What is your environment?
Linux
If applicable, paste the log output
Docker com Traefik na frente e Postgres em container separado (max_connections=100; 57 conexões em uso: 51 ociosas, 1 ativa). VPS com 4 GB de RAM (871 MB usados, sem swap), disco em 7%. Nenhum reinício de container, nenhum OOM. 2 instâncias ativas com ignoreGroups=true e ignoreStatus=true, sem proxy. Webhook HTTP com subscriptions MESSAGE SEND_MESSAGE READ_RECEIPT PRESENCE HISTORY_SYNC CHAT_PRESENCE CALL CONNECTION LABEL CONTACT GROUP NEWSLETTER QRCODE BUTTON_CLICK PICTURE USER_ABOUT. disconnect_reason vazio nas duas instâncias.
Additional Notes
No response
- Dominant language
- Go
- Stars
- 918
- Forks
- 488
- Avg merge
- 5m
- Merged PRs (30d)
- 1
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from evolution-foundation/evolution-go
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
evolution-foundation/evolution-go#193 ·
Maintainers usually reply within 5 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
evolution-foundation/evolution-go#104 ·
Maintainers usually reply within 5 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
evolution-foundation/evolution-go#101 ·
Maintainers usually reply within 5 days
-
POST /group/participant always returns 400 "participants is required and cannot be empty" (wrong validation middleware on route)Possibly taken A pull request linked to this issue is open or already merged. Openbug
Difficulty 1/5 Under an hour Newbie friendliness 88/100
evolution-foundation/evolution-go#97 · 2 comments ·
Maintainers usually reply within 5 days
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
evolution-foundation/evolution-go#204 · 1 comment ·
Maintainers usually reply within 5 days
All issues in evolution-foundation/evolution-go
Similar issues
-
bug from-studio
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
esengine/DeepSeek-Reasonix#12355 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
gke-labs/kube-agents#2612 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
bluesky-social/indigo#1496 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Gentleman-Programming/gentle-ai#5371 ·
Maintainers usually reply within 1 day