Por que o Discord limita webhooks a 30 mensagens por minuto por canal
🔍 WiseChecker

Por que o Discord limita webhooks a 30 mensagens por minuto por canal

Webhooks do Discord são uma forma prática de enviar mensagens automaticamente de apps externos, jogos ou scripts para um canal. No entanto, você pode ter notado que, ao enviar mais de 30 mensagens rapidamente, o Discord começa a rejeitar algumas. Isso não é um bug ou restrição aleatória. É um limite de taxa deliberado imposto pelo Discord para proteger seus servidores e manter uma experiência justa para todos os usuários.

O motivo principal desse limite é o gerenciamento de carga do servidor. Sem limites de taxa, um webhook mal configurado ou um script descontrolado poderia inundar um canal com milhares de mensagens por segundo. Isso degradaria o desempenho para todos no servidor e poderia até derrubar a infraestrutura de backend do Discord. O limite de 30 mensagens por minuto por canal por webhook é uma válvula de segurança que previne abusos, ao mesmo tempo que permite notificações legítimas de alta frequência.

Este artigo explica exatamente por que o limite de 30 por minuto existe, como o sistema de limitação de taxa do Discord funciona internamente e o que você pode fazer para trabalhar dentro ou ao redor dessa restrição usando técnicas adequadas.

Principais conclusões: Limites de taxa de webhook do Discord explicados

  • Cabeçalho de limite de taxa X-RateLimit-Remaining: Mostra quantas requisições você ainda pode enviar antes de ser bloqueado naquela janela.
  • Cabeçalho Retry-After: Informa ao seu script exatamente quantos segundos esperar antes de enviar a próxima requisição.
  • Fila de webhook com backoff: Em vez de enviar 30 mensagens instantaneamente, espaçe-as em pelo menos 2 segundos cada para ficar abaixo do limite.

ADVERTISEMENT

Como o Discord limita a taxa de webhooks

O Discord usa um algoritmo de janela deslizante para rastrear quantas requisições um webhook fez nos últimos 60 segundos. A janela não é um minuto fixo no relógio. Ela desliza para frente a cada requisição. Por exemplo, se você enviar uma mensagem no tempo 0 e outra no tempo 55 segundos, ambas contam para a mesma janela. A requisição mais antiga sai da janela após 60 segundos desde que foi feita.

O limite é de 30 requisições por webhook por canal. Isso significa que cada webhook tem seu próprio contador. Se você tem dois webhooks diferentes no mesmo canal, cada um pode enviar até 30 mensagens por minuto. O limite não é por usuário ou por bot. É por URL de webhook.

Quando você excede o limite, o Discord retorna o código de status HTTP 429 com um corpo JSON contendo um campo retry_after em milissegundos. Seu cliente deve esperar exatamente essa duração antes de enviar outra requisição. Ignorar isso e tentar novamente imediatamente só prolongará a proibição ou desabilitará temporariamente seu webhook.

Por que não um limite maior?

A infraestrutura do Discord lida com milhões de conexões simultâneas. Um único servidor pode ter centenas de webhooks. Se cada webhook pudesse enviar 100 mensagens por minuto, uma integração mal configurada poderia gerar 10.000 mensagens por minuto para um canal. Isso sobrecarregaria o gateway, aumentaria a latência de voz e texto e consumiria armazenamento excessivo. O limite de 30 por minuto é um equilíbrio entre utilidade e estabilidade.

Cabeçalhos de limite de taxa que você deve ler

Toda resposta da API de webhook do Discord inclui estes cabeçalhos:

  • X-RateLimit-Limit — Sempre 30 para webhooks
  • X-RateLimit-Remaining — Quantas requisições restam na janela atual
  • X-RateLimit-Reset — Timestamp Unix de quando a janela reinicia
  • X-RateLimit-Reset-After — Milissegundos até a janela reiniciar
  • Retry-After — Segundos para esperar quando você atinge o limite

Seu script deve analisar esses cabeçalhos e atrasar conforme necessário. Não codifique um atraso fixo de 2 segundos. Use o valor Retry-After da resposta 429.

Trabalhando dentro do limite de 30 mensagens

A maneira mais confiável de ficar abaixo do limite é enfileirar suas mensagens e enviá-las a uma taxa controlada. Se você precisa enviar 60 mensagens, não as dispare todas de uma vez. Em vez disso, envie uma a cada 2 segundos. Isso mantém você em 30 por minuto sem atingir a resposta 429.

  1. Calcule seu intervalo de envio
    Divida 60 segundos pelo número desejado de mensagens por minuto. Para 30 mensagens, 60 / 30 = 2 segundos entre envios. Para 20 mensagens, 60 / 20 = 3 segundos.
  2. Implemente uma fila com temporizador
    No seu código, coloque as mensagens em uma fila. Um loop separado remove uma mensagem a cada N segundos e chama o webhook. Se você receber um 429, leia o valor Retry-After e pause o temporizador por esse período.
  3. Use uma biblioteca com limitação de taxa embutida
    Muitos wrappers da API do Discord, como discord.js (para Node.js) ou discord.py (para Python), lidam com limites de taxa automaticamente. Eles enfileiram requisições e respeitam o Retry-After. Use-os em vez de chamadas HTTP brutas.
  4. Agrupe mensagens em embeds
    Cada chamada de webhook pode conter até 10 embeds. Em vez de enviar 10 mensagens separadas com um embed cada, envie uma mensagem com 10 embeds. Isso reduz o número de chamadas de API.
  5. Use múltiplos webhooks para canais paralelos
    Se você precisa enviar mais de 30 mensagens por minuto no total, crie webhooks separados para canais diferentes. Cada webhook tem seu próprio limite de 30 por minuto. Distribua suas mensagens entre os canais.

ADVERTISEMENT

Erros comuns que disparam o limite de taxa

“Enviei 30 mensagens em 30 segundos e fui bloqueado”

A janela deslizante conta os últimos 60 segundos. Enviar 30 mensagens nos primeiros 30 segundos e depois mais 10 nos próximos 30 segundos excederá o limite porque as primeiras mensagens ainda estão na janela. Você deve esperar 60 segundos a partir da primeira mensagem para que o contador reinicie.

“Esperei 60 segundos, mas ainda recebo 429”

O cabeçalho Retry-After pode indicar uma espera maior se o estado interno do Discord ainda estiver sendo limpo. Sempre use o valor Retry-After da resposta 429, não um sleep fixo de 60 segundos.

“Meu bot envia mensagens mais rápido que o webhook”

Contas de bot têm limites de taxa diferentes dos webhooks. Um bot pode enviar até 5 mensagens por segundo por canal, mas webhooks são limitados a 30 por minuto. Não presuma que a mesma velocidade se aplica.

“Uso múltiplos webhooks em um canal, mas ainda sou limitado”

Cada webhook tem seu próprio contador. Se você tem 3 webhooks no mesmo canal, cada um pode enviar 30 mensagens por minuto. Isso dá um total de 90 mensagens por minuto para aquele canal. Verifique se cada webhook é uma URL separada.

Limites de webhook: webhook único vs múltiplos webhooks

Item Webhook Único Múltiplos Webhooks (3 em um canal)
Mensagens por minuto 30 90
Escopo do limite de taxa Por URL de webhook Por URL de webhook, contadores independentes
Complexidade de implementação Baixa — uma fila Média — precisa distribuir mensagens entre URLs
Risco de atingir o limite Alto se enviar rajadas Menor se balanceado corretamente
Recomendado para Alertas de baixa frequência Logs ou notificações de alta frequência

Usar múltiplos webhooks é a única maneira de aumentar a taxa de transferência por canal sem violar os limites de taxa. Cada URL de webhook deve ser criada separadamente em Configurações do Servidor > Integrações > Webhooks.

O limite de 30 mensagens por minuto por webhook é uma restrição necessária para manter o Discord estável e responsivo para todos os usuários. Ao entender o algoritmo de janela deslizante e respeitar o cabeçalho Retry-After, você pode enviar mensagens de forma confiável sem erros. Se precisar de maior taxa de transferência, use múltiplos webhooks em canais diferentes ou agrupe conteúdo em embeds. Sempre teste sua integração com uma pequena rajada antes de implantar em produção. Monitore o cabeçalho X-RateLimit-Remaining em seus logs para detectar problemas de limite iminentes precocemente.

ADVERTISEMENT