Corrigir truncamento de webhook do Discord em 2000 caracteres sem aviso
🔍 WiseChecker

Corrigir truncamento de webhook do Discord em 2000 caracteres sem aviso

Ao enviar uma mensagem por webhook do Discord, o conteúdo frequentemente é cortado em exatamente 2000 caracteres sem erro ou aviso. Isso acontece porque o Discord impõe um limite rígido de 2000 caracteres no campo content do payload. Se sua mensagem exceder esse limite, o Discord trunca silenciosamente o texto e você perde os caracteres restantes. Este artigo explica por que ocorre o truncamento, como dividir ou reestruturar seu payload para evitar o limite e o que fazer se seus dados ainda forem cortados.

Principais conclusões: Corrigir truncamento de webhook do Discord em 2000 caracteres

  • Use embeds em vez de content para textos longos: Embeds permitem até 6000 caracteres no campo description e suportam vários campos.
  • Divida seu payload em várias chamadas de webhook: Envie mensagens separadas em sequência se o texto total exceder 6000 caracteres.
  • Verifique a contagem de caracteres antes de enviar: Valide o comprimento de content e description no seu código para evitar truncamento silencioso.

ADVERTISEMENT

Por que os webhooks do Discord truncam conteúdo sem aviso

Os webhooks do Discord aceitam um payload JSON com vários campos. O campo content contém texto simples e é limitado a 2000 caracteres. Se você enviar um payload onde content excede 2000 caracteres, o Discord aceita a requisição com uma resposta 200 OK, mas corta a mensagem no caractere 2000. Nenhum erro é retornado, então muitos desenvolvedores assumem que a mensagem foi enviada por completo.

A causa raiz é que o Discord prioriza o desempenho em vez de validação rigorosa. Em vez de rejeitar o payload e forçar o remetente a corrigi-lo, o Discord trunca silenciosamente o texto para se ajustar aos seus limites internos. Esse comportamento se aplica tanto a webhooks criados via Configurações do Servidor > Integrações quanto aos enviados pela API do Discord.

Limites de caracteres do webhook do Discord por campo

Os limites variam dependendo do campo usado:

  • content: 2000 caracteres
  • embeds[0].description: 4096 caracteres (até 6000 para contas bot com certas permissões)
  • embeds[0].title: 256 caracteres
  • embeds[0].fields[].name: 256 caracteres
  • embeds[0].fields[].value: 1024 caracteres
  • embeds[0].footer.text: 2048 caracteres
  • embeds[0].author.name: 256 caracteres

Se você precisar enviar mais de 6000 caracteres no total, deve dividir a mensagem em várias chamadas de webhook.

Passos para corrigir o truncamento do webhook usando embeds

  1. Converta seu payload de content para embeds
    Substitua o campo content por um array embeds. Mova o corpo principal do texto para embeds[0].description. Este campo permite até 4096 caracteres. Exemplo de estrutura do payload:
    { "embeds": [{ "description": "Seu texto longo aqui..." }] }
  2. Divida o texto em vários campos de embed
    Se seu texto exceder 4096 caracteres, divida-o em seções lógicas. Coloque cada seção em um objeto embed separado dentro do array embeds. Cada objeto embed pode ter sua própria description de até 4096 caracteres. Você pode enviar até 10 embeds por chamada de webhook, dando uma capacidade total de 40.960 caracteres.
  3. Use fields dentro de um único embed para dados estruturados
    Se seu conteúdo for tabular ou tiver seções rotuladas, use o array fields dentro de um embed. Cada campo tem um name e um value. O value pode conter até 1024 caracteres. Você pode incluir até 25 campos por embed, permitindo 25.600 caracteres de conteúdo estruturado.
  4. Envie várias chamadas de webhook em sequência
    Se seu texto total exceder 40.960 caracteres, escreva um loop no seu código que divida o texto em partes. Para cada parte, envie uma requisição POST separada para a URL do webhook. Adicione um pequeno atraso (500ms) entre as chamadas para evitar limitação de taxa.
  5. Valide a contagem de caracteres antes de enviar
    No seu código, verifique o comprimento de content e de cada description antes de enviar. Se o comprimento exceder o limite, levante um erro ou mude automaticamente para o modo de divisão. Isso evita truncamento silencioso.

ADVERTISEMENT

Se o Discord ainda truncar ou rejeitar o webhook

O conteúdo do webhook ainda é cortado em 2000 caracteres

Isso geralmente significa que você ainda está usando o campo content em vez de embeds. Verifique novamente seu payload JSON. Se você vir "content": "..." com uma string longa, substitua por um array embeds. Verifique também se você não está enviando acidentalmente dois payloads onde o primeiro usa content e o segundo usa embeds.

Webhook retorna um erro 400 Bad Request

Um erro 400 significa que seu payload está malformado ou excede limites que o Discord rejeita. Causas comuns incluem:

  • Embed description excede 4096 caracteres
  • Mais de 10 embeds em um único payload
  • Array fields do embed tem mais de 25 itens
  • Tamanho total do payload excede 8 MB

Verifique o corpo da resposta de erro para detalhes. O Discord retorna um objeto JSON com um campo message que descreve o problema.

A mensagem aparece, mas está faltando algum texto

Isso pode acontecer se você tiver vários embeds e um deles tiver uma description que excede 4096 caracteres. O Discord trunca esse embed silenciosamente. Valide cada embed individualmente antes de enviar. Verifique também se você não está misturando content e embeds no mesmo payload, porque content ainda é limitado a 2000 caracteres.

Comparação de limites de caracteres: content vs embeds

Item Campo content Campo embeds
Máx. caracteres por mensagem 2000 até 40.960 (10 embeds x 4096 description)
Truncamento silencioso Sim, em 2000 caracteres Sim, por embed em 4096 caracteres
Suporte a formatação Apenas markdown básico Markdown, campos, cores, timestamps
Número de mensagens por requisição 1 1 (com até 10 embeds)

Use embeds para qualquer mensagem que exceda 2000 caracteres. Divida em várias chamadas de webhook se precisar de mais de 40.960 caracteres no total.

Agora você pode enviar mensagens longas por webhooks do Discord sem perder dados. Comece convertendo seu payload de content para embeds. Adicione validação de caracteres no seu código para detectar truncamento antes que aconteça. Para mensagens muito grandes, implemente um loop que envie várias chamadas de webhook com um atraso para permanecer dentro dos limites de taxa.

ADVERTISEMENT