Discord Webhook Envia Mensagens Duplicadas: Corrigir
🔍 WiseChecker

Discord Webhook Envia Mensagens Duplicadas: Corrigir

Seu webhook do Discord está postando a mesma mensagem várias vezes, poluindo o canal e confundindo sua equipe. Isso acontece quando o cliente do webhook envia o mesmo payload mais de uma vez, geralmente devido a novas tentativas após um timeout de rede ou a um script de automação mal configurado. Este artigo explica as três principais causas de mensagens duplicadas em webhooks e fornece correções passo a passo para cada cenário.

Principais Conclusões: Corrigindo Mensagens Duplicadas no Webhook do Discord

  • URL do webhook em múltiplos scripts: Verifique se apenas um script ou serviço envia para a mesma URL do webhook ao mesmo tempo.
  • Lógica de nova tentativa automática no seu código: Desabilite ou limite as tentativas de repetição no seu cliente HTTP ou ferramenta de automação.
  • Limitação de taxa e desduplicação de mensagens do Discord: Adicione um nonce único ou chave de idempotência a cada chamada de webhook.

ADVERTISEMENT

Por que os Webhooks do Discord Postam Mensagens Duplicadas

Webhooks do Discord são requisições HTTP POST simples. Quando seu script ou serviço envia a mesma requisição POST duas vezes, o Discord trata cada requisição como uma mensagem separada. As causas técnicas mais comuns são:

Novas Tentativas Automáticas por Timeout HTTP

Muitas bibliotecas de cliente HTTP e plataformas de automação (como Zapier, Make ou scripts Python personalizados) tentam novamente automaticamente se o servidor não responder dentro de um timeout. Se o Discord responder lentamente ou a conexão cair brevemente, o cliente repete o mesmo payload, criando uma mensagem duplicada.

Múltiplos Scripts ou Serviços Usando a Mesma URL do Webhook

Se você tem duas automações separadas — por exemplo, uma ação do GitHub e uma ferramenta de monitoramento — ambas configuradas para enviar para a mesma URL do webhook, elas podem disparar no mesmo evento, causando duas postagens idênticas. Isso não é uma duplicata verdadeira, mas parece idêntica para os visualizadores do canal.

Falta de Chave de Idempotência ou Nonce

O Discord não desduplica automaticamente requisições de webhook. Diferente de algumas APIs que exigem uma chave de idempotência, o Discord trata cada POST como uma nova mensagem. Seu script deve lidar com a desduplicação do seu lado, geralmente rastreando IDs de mensagens enviadas ou usando um nonce único no payload.

Passos para Corrigir Postagens Duplicadas de Webhook

Método 1: Verifique Múltiplos Gatilhos ou Scripts

  1. Liste todos os serviços que usam a URL do webhook
    Revise suas plataformas de automação, pipelines de CI/CD e quaisquer scripts personalizados. Faça uma lista de cada serviço que tem a URL do webhook configurada.
  2. Desabilite todos os gatilhos, exceto um
    Pause ou desabilite todas as automações, exceto uma. Envie um evento de teste. Se apenas uma mensagem aparecer, você encontrou a causa. Reative os serviços um por um para identificar quais se sobrepõem.
  3. Use URLs de webhook únicas por serviço
    Crie um webhook separado no Discord para cada serviço. Vá em Configurações do Servidor > Integrações > Webhooks > Novo Webhook. Dê a cada webhook um nome e canal distintos. Atualize cada automação para usar sua própria URL.

Método 2: Desabilite ou Limite as Novas Tentativas HTTP

  1. Identifique a configuração do cliente HTTP
    No seu script ou ferramenta de automação, encontre a seção que lida com requisições HTTP. Procure por configurações chamadas “retry”, “maxRetries” ou “attempts”.
  2. Defina as tentativas como 0 ou 1
    Altere o número de tentativas para 0 para desabilitar completamente as repetições, ou 1 para permitir apenas uma nova tentativa. Por exemplo, em um script Python usando a biblioteca requests, defina max_retries=0 em um HTTPAdapter personalizado. No Zapier, desabilite as tentativas nas configurações da ação do webhook.
  3. Aumente o timeout em vez de tentar novamente
    Defina um valor de timeout maior para que o cliente aguarde a resposta do Discord antes de concluir que a requisição falhou. Um timeout de 10 a 15 segundos geralmente é suficiente.

Método 3: Adicione um Nonce Único a Cada Chamada de Webhook

  1. Gere um identificador único por mensagem
    No seu script, crie um UUID ou uma string baseada em timestamp. Por exemplo, em JavaScript: const nonce = Date.now().toString();.
  2. Inclua o nonce no payload do webhook
    Adicione o campo nonce ao payload JSON. O Discord não usa o nonce para desduplicação, mas você pode usá-lo em seu próprio banco de dados para verificar se uma mensagem já foi enviada.
  3. Armazene nonces enviados e pule duplicatas
    Antes de enviar um novo webhook, verifique uma lista local ou banco de dados de nonces enviados recentemente. Se o nonce já existir, pule a requisição POST. Isso evita postagens duplicadas mesmo que seu script seja executado duas vezes.

ADVERTISEMENT

Se os Webhooks do Discord Ainda Postarem Duplicatas Após a Correção

Postagens de webhook aparecem após uma reinicialização do servidor

Se seu script de automação é executado em um servidor que reinicia, ele pode reprocessar eventos pendentes. Adicione um atraso de inicialização de 10 a 30 segundos e verifique se há nonces armazenados antes da reinicialização. Limpe a fila de eventos na inicialização para evitar repetir eventos antigos.

Mensagens duplicadas apenas durante horários de pico

O Discord pode responder lentamente durante períodos de alto tráfego, acionando novas tentativas no seu cliente. Aumente o timeout para 20 segundos e reduza as tentativas para 1. Verifique também se a API do Discord está retornando respostas 429 (limitação de taxa). Se sim, implemente backoff exponencial na sua lógica de repetição.

Mensagens duplicadas de um webhook do GitHub ou GitLab

Plataformas de CI/CD frequentemente enviam webhooks para eventos de push e pull_request. Revise a configuração do webhook nas configurações do repositório e desabilite eventos que você não precisa. Por exemplo, se você só quer notificações para pushes, desmarque eventos de pull_request.

Item Script Local (Python/Node) Plataforma de Automação (Zapier/Make)
Controle de tentativas Manual no código Configurações específicas da plataforma
Desduplicação por nonce Fácil de implementar Geralmente não suportado nativamente
Múltiplos gatilhos Você controla todas as instâncias Pode ter gatilhos duplicados ocultos
Melhor para Fluxos de trabalho personalizados Integrações sem código

Agora você conhece as três principais causas de mensagens duplicadas em webhooks do Discord: múltiplos gatilhos, novas tentativas automáticas e falta de desduplicação. Comece desabilitando todas as automações, exceto uma, para ver se as duplicatas param. Em seguida, ajuste as configurações de repetição no seu cliente HTTP. Para uma solução permanente, adicione um nonce único a cada chamada de webhook e armazene os identificadores enviados. Se você usa uma plataforma como Zapier, considere mudar para um script personalizado para ter controle total sobre a lógica de repetição e desduplicação.

ADVERTISEMENT