Corrigir Erro 401 no Webhook do Discord Mesmo com URL no Formato Correto
🔍 WiseChecker

Corrigir Erro 401 no Webhook do Discord Mesmo com URL no Formato Correto

Você tem uma URL de webhook do Discord que parece correta, mas ao tentar enviar uma mensagem, a API do Discord retorna um erro 401 Não Autorizado. Esse erro significa que o Discord rejeitou sua solicitação porque não pôde verificar sua identidade, mesmo que a estrutura da URL do webhook pareça válida. A causa raiz é quase sempre um erro sutil de formatação na própria URL, uma incompatibilidade entre o ID e o token do webhook, ou uma restrição de permissão no webhook ou no canal de destino. Este artigo explica as causas exatas do erro 401 em webhooks do Discord e fornece correções passo a passo para resolvê-lo.

Principais conclusões: Corrigindo erros 401 em webhooks do Discord

  • Formato da URL do webhook https://discord.com/api/webhooks/{id}/{token}: A parte do token é uma string base64 de 68 caracteres que deve ser exata e não truncada.
  • Configurações do webhook > Editar permissões do canal: O webhook deve ter a permissão Enviar Mensagens no canal de destino, e o canal não deve estar restrito.
  • Método de requisição HTTP POST com corpo JSON: Envie uma requisição POST com um payload JSON contendo um campo content para a URL completa do webhook.

ADVERTISEMENT

Por que os webhooks do Discord retornam um erro 401 Não Autorizado

Os webhooks do Discord usam um sistema de autenticação de duas partes embutido na URL: um ID de webhook e um token de webhook. O ID é um identificador numérico para o webhook. O token é uma string codificada em base64 de 68 caracteres que atua como a chave secreta. Quando você envia uma requisição POST para https://discord.com/api/webhooks/{id}/{token}, o Discord procura o webhook pelo seu ID e verifica se o token fornecido corresponde exatamente ao token armazenado. Se alguma parte estiver errada, o Discord responde com HTTP 401 Não Autorizado.

Um erro 401 não significa que o webhook foi excluído ou que o canal não existe mais. Significa que as credenciais de autenticação fornecidas são inválidas. Os motivos mais comuns são:

  • Copiar a URL incorretamente, faltando um caractere ou incluindo um espaço extra.
  • Usar uma URL de webhook de um webhook excluído ou regenerado. Quando você regenera um token de webhook, a URL antiga para de funcionar.
  • Enviar a requisição para o endpoint errado, como /webhooks/{id} sem o token.
  • Usar um método HTTP diferente de POST, como GET ou PUT, que o Discord não suporta para envio de mensagens.
  • Fazer a requisição de um servidor ou bot diferente que não possui o par correto de ID e token do webhook.

Outra causa menos comum é um problema de permissão no canal. Se o webhook foi restrito manualmente nas permissões do canal ou se o canal é um tópico privado que o webhook não pode acessar, o Discord pode retornar um 401 mesmo que a URL esteja correta. Isso acontece porque o Discord verifica as permissões após a autenticação. Se o webhook existe, mas não tem permissão para postar naquele canal, a API retorna 401 em vez de um erro mais descritivo.

Passos para corrigir o erro 401 do webhook do Discord

  1. Verifique a URL do webhook caractere por caractere
    Abra seu servidor do Discord e vá em Configurações do Servidor > Integrações > Webhooks. Clique no webhook que você está usando. Copie a URL completa do webhook novamente. Cole em um editor de texto simples que não formate links automaticamente. Verifique se a URL começa com https://discord.com/api/webhooks/. Após a barra, deve haver um ID numérico, depois outra barra e, em seguida, um token de 68 caracteres. O token contém apenas letras, números e os caracteres hífen e sublinhado. Não inclua espaços à direita, quebras de linha ou caracteres extras.
  2. Regenere o token do webhook se a URL estiver desatualizada
    Na mesma página de configurações do webhook, clique no botão Copiar URL do Webhook novamente. Se você vir um botão Regenerar ao lado da URL, o token do webhook foi regenerado em algum momento. Clique em Regenerar e copie a nova URL. Atualize seu código ou serviço com esta nova URL. A URL antiga agora sempre retornará um 401.
  3. Verifique o ID e o token do webhook no seu código
    Se você estiver construindo a URL manualmente no código, certifique-se de usar https://discord.com/api/webhooks/{webhookId}/{webhookToken}. Não anexe segmentos de caminho extras ou parâmetros de consulta. Imprima ou registre a URL completa para confirmar se corresponde à do Discord. Se você estiver usando uma biblioteca ou serviço de terceiros, verifique se a biblioteca não está modificando a URL.
  4. Envie uma requisição POST com o tipo de conteúdo correto
    Use o método HTTP POST. Defina o cabeçalho Content-Type como application/json. O corpo da requisição deve ser um objeto JSON com pelo menos um campo content. Por exemplo: {"content": "Olá do webhook"}. Não use GET, PUT ou outros métodos. Se estiver testando com curl, use: curl -X POST -H "Content-Type: application/json" -d '{"content":"teste"}' https://discord.com/api/webhooks/{id}/{token}
  5. Verifique as permissões do canal para o webhook
    Vá para o canal de texto de destino no Discord. Clique no ícone de engrenagem para abrir Configurações do Canal > Permissões. Role até a função Webhooks ou o nome específico do webhook. Certifique-se de que a permissão Enviar Mensagens esteja marcada com um visto verde. Se o canal for um tópico privado, o webhook não pode postar lá. Use um canal de texto padrão. Verifique também se o canal tem modo lento ou está temporariamente bloqueado por um moderador.
  6. Teste o webhook com uma ferramenta simples
    Use uma ferramenta de teste de webhook como o Discord Webhook Tester ou o botão de teste embutido no Discord. Nas configurações do webhook, clique em Enviar Mensagem de Teste. Se a mensagem de teste funcionar, a URL do webhook é válida e o problema está no seu código ou serviço. Se o teste também retornar um 401, o webhook em si está quebrado e você precisa criar um novo webhook.
  7. Crie um novo webhook se tudo mais falhar
    Em Configurações do Servidor > Integrações > Webhooks, clique em Novo Webhook. Dê um nome, selecione o canal de destino e clique em Criar. Copie a nova URL e use-a em sua aplicação. Exclua o webhook antigo para evitar confusão.

ADVERTISEMENT

Se o Discord ainda retornar 401 após a correção principal

A URL do webhook contém um espaço ou caractere invisível

Ao copiar uma URL de webhook do Discord, alguns navegadores ou gerenciadores de área de transferência inserem um espaço à direita ou um caractere de largura zero. Cole a URL em um editor hexadecimal ou use um decodificador de URL para verificar caracteres ocultos. Se encontrar algum, remova-o e tente a requisição novamente.

Usando o método HTTP errado

O Discord só aceita requisições POST para enviar mensagens via webhooks. Se você usar GET, a API retorna 401. Se usar PUT, PATCH ou DELETE, o Discord também pode retornar 401. Sempre confirme que seu cliente HTTP está enviando uma requisição POST.

O webhook pertence a um servidor Discord diferente

Você pode ter copiado a URL do webhook de um servidor, mas está tentando usá-la em um servidor ou canal diferente. Os webhooks são específicos do servidor. Vá para a página de Integrações do servidor onde você deseja que o webhook poste e crie um novo webhook lá.

Limitação de taxa ou bloqueio de IP

Se você enviar muitas requisições em um curto período, o Discord pode bloquear temporariamente seu endereço IP e retornar um 401 ou 429. Aguarde 10 minutos e tente novamente com uma única requisição de teste. Se funcionar, reduza a frequência de requisições para dentro dos limites de taxa do Discord (5 requisições por segundo por webhook).

Webhook excluído por um moderador

Verifique a página de Integrações em Configurações do Servidor. Se o webhook não aparecer mais na lista, ele foi excluído. Crie um novo webhook e atualize seu código com a nova URL.

Item URL do Webhook Correta URL do Webhook Incorreta
Formato https://discord.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_- https://discord.com/api/webhooks/123456789012345678 (token ausente)
Tamanho do token 68 caracteres Qualquer outro tamanho
Método HTTP POST GET, PUT, PATCH, DELETE
Cabeçalho Content-Type application/json text/plain ou cabeçalho ausente
Corpo da requisição JSON com campo content Corpo vazio ou dados não JSON

Agora você pode identificar e corrigir um erro 401 em qualquer webhook do Discord verificando o formato da URL, regenerando o token, verificando permissões e usando o método HTTP correto. Da próxima vez que criar um webhook, copie a URL imediatamente e armazene-a de forma segura. Para uso avançado, considere usar os cabeçalhos de limite de taxa do webhook do Discord para evitar ser bloqueado.

ADVERTISEMENT