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.
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.
- 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 campoid. 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. - 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 forhttps://discord.com/api/webhooks/123456/abcdef, então o ID do webhook é123456e o token éabcdef. - 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.1Content-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. - 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.
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.