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
embedsem vez decontentpara textos longos: Embeds permitem até 6000 caracteres no campodescriptione 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
contentedescriptionno seu código para evitar truncamento silencioso.
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
- Converta seu payload de
contentparaembeds
Substitua o campocontentpor um arrayembeds. Mova o corpo principal do texto paraembeds[0].description. Este campo permite até 4096 caracteres. Exemplo de estrutura do payload:{ "embeds": [{ "description": "Seu texto longo aqui..." }] } - 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 arrayembeds. Cada objeto embed pode ter sua própriadescriptionde até 4096 caracteres. Você pode enviar até 10 embeds por chamada de webhook, dando uma capacidade total de 40.960 caracteres. - Use
fieldsdentro de um único embed para dados estruturados
Se seu conteúdo for tabular ou tiver seções rotuladas, use o arrayfieldsdentro de um embed. Cada campo tem umnamee umvalue. Ovaluepode conter até 1024 caracteres. Você pode incluir até 25 campos por embed, permitindo 25.600 caracteres de conteúdo estruturado. - 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. - Valide a contagem de caracteres antes de enviar
No seu código, verifique o comprimento decontente de cadadescriptionantes de enviar. Se o comprimento exceder o limite, levante um erro ou mude automaticamente para o modo de divisão. Isso evita truncamento silencioso.
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
descriptionexcede 4096 caracteres - Mais de 10 embeds em um único payload
- Array
fieldsdo 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.