Ao tentar enviar uma mensagem usando um webhook do Discord, você pode ver o erro Invalid Form Body. Esse erro significa que o payload JSON enviado para a URL do webhook contém dados que o Discord não consegue processar. A causa geralmente é um campo obrigatório ausente, um tipo de dado incorreto ou um caractere que viola as regras de conteúdo do Discord. Este artigo explica os motivos mais comuns para esse erro e fornece correções passo a passo para cada caso.
Principais Conclusões: Corrigindo Invalid Form Body em Webhooks do Discord
- Estrutura do payload JSON: O payload deve incluir exatamente os campos obrigatórios como
contentouembedse nenhum campo extra. - Limites de tamanho do conteúdo: O campo
contentnão pode exceder 2000 caracteres; descrições de embed são limitadas a 4096 caracteres. - Regras do objeto embed: Cada embed deve ter um campo
title,descriptionouurl, e o total de campos de embed não pode exceder 25.
Por que os Webhooks do Discord Retornam Invalid Form Body
Os webhooks do Discord aceitam requisições HTTP POST com um corpo JSON. O servidor valida o payload contra regras estritas. Se alguma regra for violada, o Discord retorna o erro Invalid Form Body junto com o nome do campo específico e o motivo. A causa raiz é quase sempre uma das seguintes:
Campos Obrigatórios Ausentes
O payload mais simples deve conter pelo menos o campo content ou um array embeds com pelo menos um objeto embed. Se você enviar um corpo JSON vazio {} ou omitir ambos os campos, o Discord rejeita.
Tipos de Dados Incorretos
O Discord espera tipos de dados específicos para cada campo. Por exemplo, content deve ser uma string, embeds deve ser um array, e color dentro de um embed deve ser um inteiro. Enviar um número onde se espera uma string, ou vice-versa, dispara o erro.
Violações de Caractere ou Tamanho
O Discord impõe limites de caracteres em quase todos os campos de texto. O campo content é limitado a 2000 caracteres. Títulos de embed podem ter até 256 caracteres, descrições até 4096, e texto de rodapé até 2048. Exceder esses limites causa o erro.
Passos para Corrigir o Erro Invalid Form Body
A correção depende da mensagem de erro exata. Abaixo estão os padrões de erro mais comuns e suas soluções.
Correção 1: Adicione o Campo Content
- Verifique se seu payload tem o campo
content
Se seu corpo JSON for{}ou contiver apenas um arrayembeds, o Discord exige pelo menos um desses campos. Adicione"content": "Sua mensagem aqui"à raiz do objeto JSON. - Verifique se o campo content é uma string
Certifique-se de que o valor decontentestá entre aspas duplas. Enviar"content": 123falhará porque 123 é um inteiro, não uma string.
Correção 2: Corrija a Estrutura do Objeto Embed
- Garanta que cada embed tenha pelo menos um campo obrigatório
Cada objeto embed deve conter um campotitle,descriptionouurl. Um objeto embed vazio{}produzirá o erro. Adicione pelo menos um desses campos. - Verifique a contagem de campos do embed
Um embed pode ter até 25 campos no arrayfields. Se você tiver 26 ou mais campos, reduza o número para 25 ou menos. - Valide o valor da cor
O campocolordeve ser um inteiro representando um código de cor decimal. Por exemplo,"color": 16711680para vermelho. Não use strings hex como"#FF0000".
Correção 3: Ajuste o Texto para os Limites de Tamanho
- Conte os caracteres em
content
Use uma ferramenta de contagem de caracteres para verificar se o campocontenttem 2000 caracteres ou menos. Se exceder o limite, encurte a mensagem. - Verifique o tamanho da descrição do embed
O campodescriptiondentro de um embed é limitado a 4096 caracteres. Se sua descrição for mais longa, divida-a em vários embeds ou trunque o texto. - Ajuste o título e o texto do rodapé do embed
Títulos de embed não podem exceder 256 caracteres. O texto do rodapé não pode exceder 2048 caracteres. Reduza esses valores se necessário.
Correção 4: Remova Caracteres Não Suportados
- Escape caracteres especiais no JSON
Aspas duplas dentro de uma string devem ser escapadas com uma barra invertida:\". Novas linhas podem ser representadas como\n. Barras invertidas devem ser duplicadas:\\. Verifique se há caracteres não escapados no seu payload. - Evite Unicode não suportado
O Discord suporta a maioria dos caracteres Unicode, mas alguns caracteres de controle (U+0000 a U+001F) não são permitidos. Remova ou substitua-os.
Se o Erro Persistir Após a Correção Principal
Mesmo após corrigir o payload, você ainda pode receber o erro. Aqui estão verificações adicionais a serem feitas.
URL do Webhook Está Incorreta ou Expirada
Verifique se a URL do webhook está completa e inclui o ID e token corretos. Um erro de digitação na URL causará um erro 404 ou 400, que pode parecer semelhante. Copie a URL do webhook diretamente de Configurações do Servidor Discord > Integrações > Webhooks.
Payload Contém Campos Extras
O Discord ignora campos desconhecidos, mas pode rejeitar o payload se um campo tiver um tipo inesperado. Por exemplo, adicionar "tts": "yes" em vez de "tts": true falhará porque tts deve ser booleano. Remova quaisquer campos dos quais você não tem certeza.
Limitação de Taxa Não é o Problema
Se você enviar muitas requisições rapidamente, o Discord pode retornar um erro 429 Too Many Requests, não Invalid Form Body. A mensagem de erro dirá claramente 429. Se você vir 400 com Invalid Form Body, o problema é o payload, não o limite de taxa.
Campos do Payload do Webhook do Discord: Obrigatórios vs Opcionais
| Campo | Obrigatório | Tamanho Máximo / Tipo |
|---|---|---|
content |
Sim, se não houver embeds |
String, 2000 caracteres |
embeds |
Sim, se não houver content |
Array de objetos embed, máximo 10 embeds |
embeds[].title |
Não, mas pelo menos um dos campos title, description ou url é obrigatório por embed | String, 256 caracteres |
embeds[].description |
Não | String, 4096 caracteres |
embeds[].color |
Não | Inteiro (código de cor decimal) |
embeds[].fields |
Não | Array, máximo 25 objetos de campo |
Após corrigir o payload, teste o webhook enviando uma mensagem simples primeiro. Use uma ferramenta como Postman ou curl para enviar uma requisição POST para a URL do webhook com um corpo JSON mínimo: {"content": "Mensagem de teste"}. Assim que isso funcionar, adicione gradualmente mais campos. Se o erro reaparecer, verifique o campo que você acabou de adicionar. Essa abordagem incremental isola o problema rapidamente.