Skip to content

v2.3.X: Unique Incoming Messages Incorrectly Flagged as "Duplicated" and Not Sent to Webhook #2110

Description

@sluy

Welcome!

  • Yes, I have searched for similar issues on GitHub and found none.

What did you do?

Hello Evolution API Team,

We are experiencing a critical issue with version v2.3.5 using the evoapicloud/evolution-api:v2.3.5 Docker image.

Bug Description
The API is incorrectly identifying some new, unique incoming messages as duplicates. When this occurs, the message is immediately discarded, leading to two major problems:

The console logs the error Duplicated ignored: [MESSAGE_ID].

The message is never emitted through the messages_upsert event to our configured webhook.

We confirm that these are not actual duplicate messages; they are completely new, unique messages being wrongfully discarded by the system.

Our current presumption is that the issue is related to the message ID cache management in Redis, which seems to be prematurely caching the message ID or misidentifying it as already processed upon initial receipt.

Steps to Reproduce
Run v2.3.5 with a correctly configured Redis instance for caching.

Receive a new, unique message from a contact.

Observe the API logs (the issue is intermittent and only affects some messages).

Current Behavior
The log displays Duplicated ignored: [MESSAGE_ID] for a message that is not a duplicate.

The messages_upsert event is not triggered, and the message data is not sent to the webhook.

Expected Behavior
All new and unique messages should be processed correctly.

The messages_upsert event should be reliably triggered, and the message data sent to the webhook endpoint.

Workaround (Temporary Solution)
The issue is immediately resolved by disabling the Redis cache in the Evolution API configuration. When the instance runs without Redis, all messages are processed correctly.

Note: We recognize this is not a sustainable long-term solution as it removes the intended protection against actual duplicate messages, especially after a server restart.

Thank you for your prompt attention to this matter. This bug is significantly impacting our production operations.

What did you expect?

he new messages should have been processed, and the messages_upsert event should have been reliably sent to our webhook.

What did you observe instead of what you expected?

The system incorrectly flagged the new messages as "Duplicated," logged Duplicated ignored: [MESSAGE_ID], and failed to send the event to the webhook.

Screenshots/Videos

No response

Which version of the API are you using?

2.3.X

What is your environment?

Linux

Other environment specifications

No response

If applicable, paste the log output

No response

Additional Notes

No response

Activity

  1. added
    bugSomething isn't working
    on Oct 20, 2025
  2. cleytoncoro commented on Oct 20, 2025

    @cleytoncoro

    Here too.

    Recebi uma mensagem e ela não foi adicionada.
    Mas identifiquei seu ID por outro app e achei que há logs relativos a ela falando que foi ignorada:
    v2.3.5 163 - Mon Oct 20 2025 11:51:46 INFO [ChannelStartupService] [string] Message duplicated ignored: 3FBD63295E1412****

  3. cleytoncoro commented on Oct 20, 2025

    @cleytoncoro

    Ah, estou usando REDIS também // I'm using REDIS here too.

  4. joaovcoliveira commented on Oct 21, 2025

    @joaovcoliveira

    Same happening here for a while

  5. KokeroO commented on Oct 21, 2025

    @KokeroO
    Contributor

    Essas mensagens ignoradas são de ADS?

  6. cleytoncoro commented on Oct 21, 2025

    @cleytoncoro

    Não. São mensagens normais.

  7. cleytoncoro commented on Oct 21, 2025

    @cleytoncoro

    Vi alguns relatos de mensagens sendo perdidas lá no discord tbm. Talvez seja o mesmo problema.

  8. joaovcoliveira commented on Oct 21, 2025

    @joaovcoliveira

    Essas mensagens ignoradas são de ADS?

    Inicialmente os problemas eram só com mensagens provenientes de ads (como reportei aqui: #2066), mas ultimamente até mensagens normais estão passando por isso.

  9. cleytoncoro commented on Oct 21, 2025

    @cleytoncoro

    Para ajudar no debug eu posso afirmar com segurança que:

    1. são mensagens de usuários normais. não são ads.
    2. o ID da mensagem perdida (conferi no WA web olhando a store) é o mesmo ID que está no log como "duplicated".
    3. a mensagem não é retornada pela evolution chamando o endpoint chat/findMessages/, ou seja, não foi nem adicionada.

    Sobre o item 3, verifiquei sem filtros. Ou seja, o ID da mensagem perdida não foi adicionada nem mesmo com ID diferente em outro chat (jid VS lid).

  10. KokeroO commented on Oct 21, 2025

    @KokeroO
    Contributor

    Muito estranho, porque aqui não tenho esse problema. Mas não uso com webhook, somente com chatwoot.
    Eu que implementei essa rotina de mensagens ignorada. Uso a uns 8 meses nos clientes sem problemas.

  11. BryanLucas7 commented on Oct 21, 2025

    @BryanLucas7

    Aqui também, está acontecendo com a primeira mensagem em específico, seja de ads ou não. Não chega no Chatwoot e também não chega no webhook no n8n. Vou atualizar para a versão 2.3.6 para ver se melhora.

  12. cleytoncoro commented on Oct 21, 2025

    @cleytoncoro

    Na verdade não vai para o webhook pois ela nem é inserida no banco da evolution.
    Ou seja, se não vai para o webhook, em teoria não vai para o chatwoot também.

    Não sei se tem relação com a rotina de ignorar mensagem. Apenas posso dizer que a mensagem chegou nos logs da evolution pois apareceu nessa linha.

  13. cleytoncoro commented on Oct 21, 2025

    @cleytoncoro

    Ah, a mensagem perdida em questão era a primeira enviada pela pessoa tbm. Ela enviou 3, as 2ª e 3ª foram recebidas. a primeira não.

  14. KokeroO commented on Oct 21, 2025

    @KokeroO
    Contributor

    Olha, eu ate me disponibilizo pra a gente fazer uma call e testarmos junto, vou fazendo as alterações em call até a gente descobrir onde é o problema, dai faço a correção pra a proxima versão. Porque realmente, aqui pra mim nao ocorre

  15. KokeroO commented on Oct 21, 2025

    @KokeroO
    Contributor

    Mas assim, peço que testei a 2.3.6. Porque tinha feito uma alteração que possa ser que implicava no recebimento de ADS. Precisava que fizessem um teste nessa parte.

  16. 10 remaining items

  17. abdelrhmanfawzym commented on Oct 27, 2025

    @abdelrhmanfawzym

    i have similar issue
    some messages received in whatsapp but doesn't received on evolution api last Version: 2.3.6

  18. joaovcoliveira commented on Oct 27, 2025

    @joaovcoliveira

    still facing the same issue after updating to version 2.3.6:

    Image

    Looking at the logs, the only references to the contact phone number I could find are these:

    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    �[1m�[34m[Evolution API]�[0m �[1m�[34m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[34m v2.3.6 �[1m�[34m 163 �[0m �[1m�[34m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[34m�[44m�[1m INFO �[0m �[33m�[1m [ChannelStartupService]�[0m �[34m�[1m [string]�[0m �[34m Message duplicated ignored: AC4575535349F5F5550B05978E45DF29 �[0m
    Closing open session in favor of incoming prekey bundle
    Closing session: SessionEntry {
      _chains: {
        'BbcT+x+gf/WJnSl9a': { chainKey: [Object], chainType: 2, messageKeys: {} },
        'Bc+NEZEm6I3yn3uLKYlkXsMP0DWnf1jEBzeL5q52b9Ab': { chainKey: [Object], chainType: 1, messageKeys: {} }
      },
      registrationId: 1441595647,
      currentRatchet: {
        ephemeralKeyPair: {
          pubKey: <Buffer >,
          privKey: <Buffer >
        },
        lastRemoteEphemeralKey: <Buffer >,
        previousCounter: 0,
        rootKey: <Buffer 0>
      },
      indexInfo: {
        baseKey: <Buffer >,
        baseKeyType: 2,
        closed: -1,
        used: 1761394383397,
        created: 1761394383397,
        remoteIdentityKey: <Buffer >
      }
    }
    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:04   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:04   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    
  19. fcperez96 commented on Oct 28, 2025

    @fcperez96

    still facing the same issue after updating to version 2.3.6:

    Image

    Looking at the logs, the only references to the contact phone number I could find are these:

    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    �[1m�[34m[Evolution API]�[0m �[1m�[34m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[34m v2.3.6 �[1m�[34m 163 �[0m �[1m�[34m - �[1m�[37m Sat Oct 25 2025 09:13:03   �[0m �[34m�[44m�[1m INFO �[0m �[33m�[1m [ChannelStartupService]�[0m �[34m�[1m [string]�[0m �[34m Message duplicated ignored: AC4575535349F5F5550B05978E45DF29 �[0m
    Closing open session in favor of incoming prekey bundle
    Closing session: SessionEntry {
      _chains: {
        'BbcT+x+gf/WJnSl9a': { chainKey: [Object], chainType: 2, messageKeys: {} },
        'Bc+NEZEm6I3yn3uLKYlkXsMP0DWnf1jEBzeL5q52b9Ab': { chainKey: [Object], chainType: 1, messageKeys: {} }
      },
      registrationId: 1441595647,
      currentRatchet: {
        ephemeralKeyPair: {
          pubKey: <Buffer >,
          privKey: <Buffer >
        },
        lastRemoteEphemeralKey: <Buffer >,
        previousCounter: 0,
        rootKey: <Buffer 0>
      },
      indexInfo: {
        baseKey: <Buffer >,
        baseKeyType: 2,
        closed: -1,
        used: 1761394383397,
        created: 1761394383397,
        remoteIdentityKey: <Buffer >
      }
    }
    �[1m�[32m[Evolution API]�[0m �[1m�[32m  �[1m�[32m v2.3.6 �[1m�[32m 163 �[0m �[1m�[32m - �[1m�[37m Sat Oct 25 2025 09:13:04   �[0m �[32m�[42m�[1m LOG �[0m �[33m�[1m [BaileysMessageProcessor]�[0m �[32m�[1m [string]�[0m �[32m Processing batch of 1 messages �[0m
    �[1m�[36m[Evolution API]�[0m �[1m�[36m [89aa24c8-efe5-47fe-8570-05997a773e79] �[1m�[36m v2.3.6 �[1m�[36m 163 �[0m �[1m�[36m - �[1m�[37m Sat Oct 25 2025 09:13:04   �[0m �[36m�[46m�[1m DEBUG �[0m �[33m�[1m [ChannelStartupService]�[0m �[36m�[1m [string]�[0m �[36m Updating contact: {
      "id": "<number>@s.whatsapp.net",
      "notify": "🌹Cláudia 🌹"
    } �[0m
    

    Same issue here, same version

  20. juliancesar commented on Oct 28, 2025

    @juliancesar

    +1 - 2.3.6

  21. juniortopanotti commented on Oct 29, 2025

    @juniortopanotti
    Contributor

    Mesmo problema aqui, desde quando comecei a utilizar a evolution, não lembro a versão mas me ocorre desde a 2.3.0

    [Evolution API] [prod-disparando-wpp] v2.3.6 156 - Wed Oct 29 2025 07:52:31 INFO [ChannelStartupService] [string] Message duplicated ignored: AC434CB94FEA59E11A71B84192B93127

    De cada 10 contatos, 3 ocorre esse problema seja na primeira mensagem ou qualquer outra se a conversa ja ta iniciada.

    Não loga no console o upsert como deveria, só aparenta o erro e os webhooks e sqs não são disparados.

  22. pedroarthuralvesdeoliveira commented on Oct 30, 2025

    @pedroarthuralvesdeoliveira

    UP

  23. brunosantanarj commented on Oct 31, 2025

    @brunosantanarj

    Same problem here in version 2.3.6. The frequency of the problem seems to be progressively increasing.

  24. renansko-vilela commented on Nov 5, 2025

    @renansko-vilela

    Look this PR:

    #2186

  25. robsonrosa commented on Nov 15, 2025

    @robsonrosa

    Eu tenho uma teoria: percebo que esse problema acontece majoritariamente com anúncios, mas não somente com anúncios. Eu já tive problemas em que a mensagem descartada era um link que a pessoa mandou. Mas percebo um padrão: mensagens com link preview ou outros metadados.

    Fiz uma rápida análise aqui e constatei que nesses casos são enviados dois eventos: notify e append. O notify contém o texto puro da mensagem e o append agrega link preview, metadados e afins.

    Conclusão: Por race condition, latência de rede, enfim, o append chega antes do notify. Ele vai gravar no cache, pois a chave é instancia_id, porém vai ser descartado mais adiante, pois não possui message.

              const messageKey = `${this.instance.id}_${received.key.id}`;
              const cached = await this.baileysCache.get(messageKey);
    
              if (cached && !editedMessage && !requestId) {
                this.logger.info(`Message duplicated ignored: ${received.key.id}`);
                continue;
              }
    
              await this.baileysCache.set(messageKey, true, this.MESSAGE_CACHE_TTL_SECONDS);
    
              if (
                (type !== 'notify' && type !== 'append') ||
                editedMessage ||
                received.message?.pollUpdateMessage ||
                !received?.message
              ) {
                continue;
              }

    Proposta de solução 1: validar se a mensagem é válida antes de salvar no cache:

              const messageKey = `${this.instance.id}_${received.key.id}`;
              const cached = await this.baileysCache.get(messageKey);
    
              if (cached && !editedMessage && !requestId) {
                this.logger.info(`Message duplicated ignored: ${received.key.id}`);
                continue;
              }
    
              // primeiro descarta
              if (
                (type !== 'notify' && type !== 'append') ||
                editedMessage ||
                received.message?.pollUpdateMessage ||
                !received?.message
              ) {
                continue;
              }
    
              // só salva se não for descartável
              await this.baileysCache.set(messageKey, true, this.MESSAGE_CACHE_TTL_SECONDS);

    Proposta de solução 2: diferenciar notify e append na lógica de deduplicação:

              // adiciona _${type}
              const messageKey = `${this.instance.id}_${received.key.id}_${type}`;
              const cached = await this.baileysCache.get(messageKey);
    
              if (cached && !editedMessage && !requestId) {
                this.logger.info(`Message duplicated ignored: ${received.key.id}`);
                continue;
              }
    
              await this.baileysCache.set(messageKey, true, this.MESSAGE_CACHE_TTL_SECONDS);
    
              if (
                (type !== 'notify' && type !== 'append') ||
                editedMessage ||
                received.message?.pollUpdateMessage ||
                !received?.message
              ) {
                continue;
              }
    
  26. thiagocalixtoo commented on Nov 18, 2025

    @thiagocalixtoo

    mesmo problema por aqui, na 2.3.6, uso o redis e a evolution, primeira mensagem (resto chega normal), seguem os logs:

    Image
  27. cdiegosr commented on Dec 15, 2025

    @cdiegosr

    nem a v2.3.7 resolveu aqui

  28. victorfelipedolcec commented on Jan 20, 2026

    @victorfelipedolcec

    aqui ainda com problemade duplicar msgs, estou na 2.3.7

  29. thiagocalixtoo commented on Jan 22, 2026

    @thiagocalixtoo

    Resolvi o meu problema de as vezes perder a primeira mensagem de um novo contato.

    Não sei se funcionará para todo mundo, eu utilizo o portainer e nele eu uso uma stack para montar a evolution, voce pode analisar o que eu fiz, adaptar pro seu cenário/aplicação e testar se funciona, faça um backup das informações originais antes!

    Comigo o motivo provável é uma Race Condition (Condição de Corrida).

    🔴 O Problema
    Ao receber um contato novo, a Evolution API dispara vários webhooks quase simultaneamente:

    Criação de Contato (CONTACTS_UPSERT)

    Criação de Chat (CHATS_UPSERT)

    Atualização de Presença (PRESENCE_UPDATE)

    Mensagem Recebida (MESSAGES_UPSERT)

    Isso causa um gargalo no processamento do receptor. Muitas vezes, a mensagem é descartada porque o sistema ainda está tentando processar a criação do contato ou do chat.

    🟢 A Solução
    A solução consiste em desativar os webhooks redundantes. Como o payload de MESSAGES_UPSERT já contém as informações do contato e do chat, os outros eventos são desnecessários para a maioria dos fluxos.

    Principais mudanças:

    Desativar PRESENCE_UPDATE: Este é o maior causador de ruído.

    Desativar CONTACTS_* e CHATS_*: Evita a disputa de escrita no banco de dados.

    Manter apenas MESSAGES_UPSERT=true: Foco total no recebimento da mensagem.

    Exemplo de uma stack yaml (a minha ta basicamente assim mas com umas infos a mais)

    version: "3.7"

    services:
    evolution_api:
    image: evoapicloud/evolution-api:latest
    volumes:
    - evolution_instances:/evolution/instances
    networks:
    - network_public
    environment:
    - SERVER_URL=https://sua-api.dominio.com.br
    - AUTHENTICATION_TYPE=apikey
    - AUTHENTICATION_API_KEY=SUA_CHAVE_GLOBAL_AQUI
    - LANGUAGE=pt-BR

      ## Banco de Dados
      - DATABASE_ENABLED=true
      - DATABASE_CONNECTION_URI=postgresql://user:password@host:5432/database
      
      ## Cache (Essencial para estabilidade)
      - CACHE_REDIS_ENABLED=true
      - CACHE_REDIS_URI=redis://redis:6379/2
      - CACHE_REDIS_SAVE_INSTANCES=true
    
      ## --- CONFIGURAÇÃO DE WEBHOOKS (CORREÇÃO DA RACE CONDITION) ---
      - WEBHOOK_GLOBAL_ENABLED=false
      - WEBHOOK_EVENTS_MESSAGES_UPSERT=true    # Único essencial para entrada
      - WEBHOOK_EVENTS_MESSAGES_SET=false       # Evita spam no carregamento
      - WEBHOOK_EVENTS_PRESENCE_UPDATE=false    # O "Vilão" - Mantenha false
      - WEBHOOK_EVENTS_CONTACTS_UPSERT=false    # Redundante
      - WEBHOOK_EVENTS_CHATS_UPSERT=false       # Redundante
      - WEBHOOK_EVENTS_CONNECTION_UPDATE=true
      ## -------------------------------------------------------------
    
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      labels:
        - traefik.enable=1
        - traefik.http.routers.evolution.rule=Host(`sua-api.dominio.com.br`)
        - traefik.http.services.evolution.loadbalancer.server.port=8080
    

    volumes:
    evolution_instances:
    external: true

    networks:
    network_public:
    external: true

  30. gsulzbacher commented on Mar 3, 2026

    @gsulzbacher

    resolveram o problema?

  31. gsulzbacher commented on Mar 3, 2026

    @gsulzbacher

    aqui o que resolveu aparentemente foi usar a versão 2.3.4 do evolution, estou testando para ver se vai continuar funcionando. Se estiverem com problemas de não gerar o qrcode na versão 2.3.4, tentem mudar a whatsapp_version dentro da env

    https://wppconnect.io/pt-BR/whatsapp-versions/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions