Os webhooks do Discord são uma forma poderosa de enviar mensagens automatizadas de serviços externos para seus canais. No entanto, você pode perceber que blocos de código markdown — destinados a exibir código formatado ou texto monoespaçado — aparecem como texto simples e sem formatação. Isso geralmente acontece porque o payload do webhook não inclui o cabeçalho Content-Type correto ou usa um método de formatação não suportado. Este artigo explica por que os blocos de código falham ao renderizar e fornece etapas exatas para corrigir o problema, tanto para payloads JSON quanto para integrações de terceiros.
Principais Conclusões: Corrigindo a Renderização de Blocos de Código em Webhooks do Discord
- Defina o cabeçalho Content-Type como application/json: Garante que o Discord interprete o payload como JSON válido e processe o markdown corretamente.
- Use três crases com identificador de linguagem: Envolva o código em “`linguagem“` para ativar o realce de sintaxe e a renderização adequada do bloco.
- Escape barras invertidas em strings JSON: Barras invertidas duplas (\n) preservam quebras de linha dentro de blocos de código; caso contrário, elas se tornam texto literal \n.
Por que os Webhooks do Discord Exibem Blocos de Código como Texto Simples
Os webhooks do Discord aceitam payloads JSON que contêm um campo content. Quando você inclui três crases (```) nesse campo, o analisador de mensagens do Discord deve convertê-las em um bloco de código estilizado. Se o bloco de código aparecer como texto simples, a causa raiz é quase sempre uma das três coisas:
Cabeçalho Content-Type Incorreto
O endpoint do webhook espera que a requisição tenha um cabeçalho Content-Type definido como application/json. Se você enviar o payload como text/plain ou application/x-www-form-urlencoded, o Discord trata todo o corpo como texto bruto e não analisa o markdown. Os delimitadores do bloco de código se tornam caracteres literais.
Escape JSON Incorreto
Dentro de uma string JSON, as barras invertidas devem ser escapadas. Se o seu bloco de código contiver barras invertidas (comuns em caminhos do Windows ou regex), você precisa escrever \\ em vez de \. Além disso, as quebras de linha dentro do campo content devem ser representadas como \n — não quebras de linha reais no corpo JSON. Se você usar quebras de linha literais, o JSON fica malformado e o Discord pode ignorar o markdown.
Formatação de Serviços de Terceiros
Serviços como GitHub, GitLab ou ferramentas de monitoramento enviam webhooks usando sua própria estrutura de payload. Alguns serviços envolvem o código em tags HTML <pre> ou usam um sabor diferente de markdown. O Discord não renderiza HTML; ele processa apenas markdown no estilo Discord. Se o serviço enviar <pre>código</pre>, você verá as tags como texto simples.
Passos para Corrigir a Renderização de Blocos de Código em Webhooks do Discord
Siga estes passos para garantir que o payload do seu webhook renderize blocos de código corretamente. As instruções se aplicam a qualquer cliente HTTP (curl, Postman ou um script personalizado).
- Defina o cabeçalho Content-Type como application/json
Ao enviar a requisição, inclua o cabeçalhoContent-Type: application/json. Sem isso, o Discord trata o corpo como texto simples e ignora o markdown. No curl, use-H "Content-Type: application/json". No Postman, selecione a aba “Body”, escolha “raw” e defina o formato como “JSON”. - Envolva o código em três crases com um identificador de linguagem
Dentro do campocontent, escreva seu bloco de código como:```python\nprint("Hello")\n```
O identificador de linguagem (por exemplo, python, javascript, bash) ativa o realce de sintaxe. Sem ele, o bloco ainda renderiza como texto monoespaçado, mas sem cores. Sempre inclua uma quebra de linha (\n) após as crases de abertura e antes das crases de fechamento. - Escape barras invertidas e quebras de linha na string JSON
Em JSON, cada barra invertida deve ser duplicada. Por exemplo, um caminho do WindowsC:\Users\Nomese tornaC:\\Users\\Nome. As quebras de linha devem ser escritas como\n— não quebras de linha reais. Um payload correto se parece com:{"content": "```\nC:\\Users\\Nome\n```"} - Teste com um payload mínimo usando curl
Execute este comando em um terminal, substituindoWEBHOOK_URLpela URL do seu webhook:curl -H "Content-Type: application/json" -X POST -d '{"content":"```\nHello\n```"}' WEBHOOK_URL
Se a mensagem mostrar um bloco de código com “Hello”, a correção funciona. Caso contrário, verifique novamente o cabeçalho e o escape. - Se estiver usando um serviço de terceiros, modifique o payload antes de enviar
Se você não puder alterar o webhook de saída do serviço, use um serviço intermediário como Zapier, Make ou uma função serverless personalizada para transformar o payload. Por exemplo, substitua<pre>...</pre>por```...```e defina o cabeçalho Content-Type correto.
Se os Webhooks do Discord Ainda Mostrarem Texto Simples Após a Correção Principal
URL do Webhook Contém uma Barra Final ou Caracteres Extras
Uma URL de webhook malformada pode fazer com que o Discord rejeite o payload ou ignore a formatação. Certifique-se de que a URL termine exatamente com /slack ou /github, dependendo do tipo de integração. Para webhooks personalizados, a URL deve se parecer com https://discord.com/api/webhooks/123456/abc123, sem barras extras ou parâmetros de consulta.
Payload Excede os Limites de Caracteres
O Discord limita uma mensagem de webhook a 2000 caracteres. Se o seu bloco de código ultrapassar esse limite, o Discord trunca a mensagem e pode remover as crases de fechamento, fazendo com que o bloco apareça como texto simples. Divida a saída longa em várias chamadas de webhook ou use o campo embeds, que permite até 6000 caracteres por embed.
Usando o Tipo de Webhook Errado (Compatível com Slack vs Personalizado)
O Discord suporta webhooks compatíveis com Slack no endpoint /slack. Se você enviar um payload formatado para Slack para um webhook personalizado (ou vice-versa), o markdown pode não ser analisado corretamente. Para webhooks personalizados, use sempre o campo content. Para webhooks compatíveis com Slack, use o campo text. Verifique a URL do seu webhook: se terminar com /slack, use o formato Slack.
Formatos de Payload de Webhook: Personalizado vs Compatível com Slack
| Item | Webhook Personalizado | Webhook Compatível com Slack |
|---|---|---|
| Sufixo do endpoint | Nenhum (URL de webhook simples) | /slack anexado à URL do webhook |
| Campo principal para conteúdo | content |
text |
| Suporte a markdown | Markdown completo do Discord | Markdown do Slack (limitado) |
| Sintaxe de bloco de código | “`linguagem“` | “`linguagem“` (mesmo, mas pode exigir mrkdwn_in: ["text"]) |
| Cabeçalho Content-Type | application/json |
application/json |
Webhooks do Discord que exibem blocos de código como texto simples são quase sempre causados por um cabeçalho Content-Type ausente ou incorreto, escape JSON inadequado ou um serviço de terceiros enviando formatação não suportada. Ao definir o cabeçalho corretamente, usar três crases com um identificador de linguagem e escapar barras invertidas e quebras de linha, você pode restaurar a renderização adequada dos blocos de código. Para problemas persistentes, verifique o tipo de URL do webhook e os limites de caracteres. Como dica avançada, use o objeto embed do Discord com o campo description para incluir trechos de código mais longos sem quebrar o markdown.