Corrigir erro 405 Method Not Allowed ao usar PATCH em webhook do Discord
🔍 WiseChecker

Corrigir erro 405 Method Not Allowed ao usar PATCH em webhook do Discord

Ao enviar uma requisição PATCH para a URL de um webhook do Discord para modificar uma mensagem existente, você pode receber o erro 405 Method Not Allowed. Esse erro ocorre porque os webhooks do Discord aceitam apenas requisições POST para criar mensagens e não suportam PATCH para editar mensagens após o envio. Este artigo explica por que o erro 405 acontece, fornece os métodos HTTP corretos para operações com webhooks e mostra como editar mensagens usando os endpoints e permissões adequados da API do Discord.

Principais conclusões: Corrigindo erro 405 Method Not Allowed em PATCH de webhook do Discord

  • A URL do webhook aceita apenas requisições POST: Use POST para enviar novas mensagens; PATCH não é suportado nas URLs de webhook.
  • Use o endpoint da API do Discord para editar mensagens: Envie requisições PATCH para https://discord.com/api/v10/webhooks/{webhook.id}/{webhook.token}/messages/{message.id} em vez disso.
  • Use o ID da mensagem para editar: Você deve capturar o ID da mensagem retornado pelo POST inicial para direcionar a mensagem correta.

ADVERTISEMENT

Por que os webhooks do Discord retornam 405 em requisições PATCH

Os webhooks do Discord são projetados para entrega de mensagens unidirecional. Quando você cria um webhook, o Discord gera uma URL que aceita apenas requisições POST. Essa URL destina-se a enviar novas mensagens para um canal. A URL do webhook não suporta requisições PATCH, PUT, DELETE ou GET. Se você enviar uma requisição PATCH para essa URL, o servidor do Discord responde com HTTP 405 Method Not Allowed porque o endpoint não está configurado para lidar com esse método HTTP.

O erro 405 não é um bug. É uma limitação de design intencional. As URLs de webhook são endpoints simples e sem estado que não mantêm uma sessão nem rastreiam mensagens anteriores. Para editar uma mensagem que você já enviou por meio de um webhook, você deve usar a API REST do Discord, que fornece um endpoint dedicado para edição de mensagens. Esse endpoint requer o ID do webhook, o token do webhook e o ID da mensagem que você deseja modificar.

Como os métodos HTTP mapeiam as ações do webhook

Os webhooks do Discord seguem um mapeamento estrito de métodos HTTP:

  • POST — Enviar uma nova mensagem. Este é o único método aceito na URL do webhook.
  • PATCH — Editar uma mensagem existente. Requer o ID da mensagem e é enviado para o endpoint da API, não para a URL do webhook.
  • DELETE — Excluir uma mensagem existente. Também usa o endpoint da API com o ID da mensagem.
  • GET — Não suportado para webhooks. Use a API para recuperar o histórico de mensagens, se necessário.

Passos para corrigir o erro 405 Method Not Allowed em requisições PATCH

Para corrigir o erro 405, você deve parar de enviar requisições PATCH para a URL do webhook e, em vez disso, usar o endpoint correto da API do Discord. Siga estas etapas para editar mensagens enviadas por meio de um webhook.

  1. Capture o ID da mensagem ao enviar a mensagem inicial
    Quando você envia uma requisição POST para a URL do webhook, o Discord retorna uma resposta JSON que inclui o campo id. Este é o ID da mensagem. Armazene esse ID em seu aplicativo ou script. Por exemplo, se você usar uma ferramenta como curl, o corpo da resposta contém o objeto completo da mensagem.
  2. Construa a URL do endpoint de edição
    Construa a URL para editar a mensagem usando este formato:
    https://discord.com/api/v10/webhooks/{webhook.id}/{webhook.token}/messages/{message.id}
    Substitua {webhook.id}, {webhook.token} e {message.id} pelos seus valores reais. O ID e o token do webhook fazem parte da sua URL de webhook. Por exemplo, se sua URL de webhook for https://discord.com/api/webhooks/123456/abcdef, então o ID do webhook é 123456 e o token é abcdef.
  3. Envie uma requisição PATCH para o endpoint de edição
    Use o método HTTP PATCH para enviar o conteúdo atualizado da mensagem para o endpoint de edição. Inclua a mesma estrutura de payload JSON que você usaria para uma requisição POST. Por exemplo, para atualizar o campo content:
    PATCH /api/v10/webhooks/123456/abcdef/messages/789012 HTTP/1.1
    Content-Type: application/json
    { "content": "Conteúdo da mensagem atualizado" }
    Se a requisição for bem-sucedida, o Discord retorna uma resposta 200 OK com o objeto da mensagem atualizada.
  4. Lide com erros do endpoint de edição
    Se você receber um 404 Not Found, o ID da mensagem está incorreto ou a mensagem foi excluída. Se receber um 403 Forbidden, o token do webhook é inválido ou o webhook foi excluído. Verifique se o ID do webhook, o token e o ID da mensagem estão corretos.

ADVERTISEMENT

Se o Discord ainda retornar 405 após mudar para o endpoint da API

Você ainda está enviando PATCH para a URL do webhook

Verifique novamente a URL em sua requisição PATCH. Se a URL contiver /webhooks/{id}/{token} sem /messages/{message.id}, você ainda está atingindo o endpoint do webhook. Adicione /messages/{message.id} à URL.

Sua biblioteca HTTP cliente usa o método errado

Algumas bibliotecas HTTP cliente usam POST ou GET como padrão. Defina explicitamente o método como PATCH em seu código. Por exemplo, em Python com a biblioteca requests, use requests.patch(url, json=payload).

Seu token de webhook expirou ou foi revogado

Se o token do webhook for inválido, o Discord retorna 403 Forbidden, não 405. No entanto, se você estiver usando um token desatualizado, a requisição pode ser mal direcionada. Gere uma nova URL de webhook nas configurações do canal do Discord e atualize seu aplicativo.

URL do webhook vs endpoint da API: principais diferenças

Item URL do webhook Endpoint da API
Finalidade Apenas enviar novas mensagens Ler, editar, excluir mensagens existentes
Métodos HTTP suportados POST PATCH, DELETE, GET
Requer ID da mensagem Não Sim
Autenticação Token na URL Token na URL
Exemplo de URL /api/webhooks/123/abc /api/webhooks/123/abc/messages/456

Usar o endpoint correto é essencial. A URL do webhook é apenas para envio. O endpoint da API com o ID da mensagem é necessário para edição. Sempre capture e armazene o ID da mensagem retornado pelo POST inicial para permitir edições futuras.

Agora você sabe por que os webhooks do Discord retornam 405 Method Not Allowed em requisições PATCH e como corrigir usando o endpoint correto da API. Em seguida, revise qualquer código existente que envie requisições PATCH e atualize a URL para incluir /messages/{message.id}. Para edição avançada de mensagens, você também pode modificar embeds, componentes e anexos usando o mesmo endpoint com os campos JSON apropriados.

ADVERTISEMENT