Não é possível fazer requisição POST com Webhook

Descrição

Estou tentando usar o widget Webhook para conectar ao Telegram. Isto é o que faço:


:warning: Importante: ao invés de localhost, na verdade uso a URL do ngrok!

Porém quando testo isso recebo o seguinte erro:

{
"code": 404,
"message": "This webhook is not registered for GET requests. Did you mean to make a POST request?"
}

Porém quando uso o widget Telegram para fazer basicamente a mesma coisa, consigo conectar e tudo funciona perfeitamente.

Pesquisando online vi que várias pessoas enfrentaram o mesmo problema, como pode ser visto aqui: Webhook interprets all sent requests as GET · Issue #12751 · n8n-io/n8n
Tentei seguir as sugestões deste tópico mas sem sucesso.

Pergunta

Você sabe o que posso estar fazendo errado? Alguma sugestão possível sobre como evitar esse erro?

Informações sobre sua configuração n8n

  • Versão n8n: v2
  • Banco de dados (padrão: SQLite): Sqlite
  • Configuração n8n EXECUTIONS_PROCESS (padrão: own, main): main
  • Executando n8n via (Docker, npm, n8n cloud, desktop app): docker
  • Sistema operacional: Linux Mint

@Federico_Gentile esse 404 significa que um GET realmente chegou ao nó mesmo que ele esteja configurado para POST, então algo está mudando o método, não a configuração do nó.

Duas causas comuns com ngrok:

  1. Testar abrindo a URL no navegador. A barra de endereços sempre envia GET. Um POST tem que vir de curl/Postman ou Telegram.
  2. Um redirect que rebaixa o método. Se você chamar a URL http:// do ngrok (ou clicar em um redirect de barra final), o 301/302 para https transforma seu POST em GET. Use a URL https do ngrok diretamente e configure WEBHOOK_URL=https://seu-dominio-ngrok para que o n8n emita https.

Como você está enviando a requisição com falha: navegador, curl ou Telegram setWebhook?

Muito obrigado pela resposta. Até agora estou enviando a solicitação pela barra de pesquisa do navegador, então essa pode ser uma razão. Se eu quiser testá-lo corretamente, o que você recomendaria usar então?

@Federico_Gentile isso, é isso aí, a barra de busca envia um GET então sempre vai bater naquele erro.

Para testar, envia um POST de verdade. O mais rápido é curl:

curl -X POST -H "Content-Type: application/json" -d '{"hello":"world"}' https://your-ngrok-domain/webhook-test/9390c7f6-894b-4948-9579-8d9ec556dc7b

Uma pegadinha com a Test URL: clica em “Listen for test event” primeiro, ela só captura um único request enquanto tá escutando ativamente. Postman também funciona, é só configurar o método para POST.

Para a configuração real do Telegram, muda para a Production URL, ativa o workflow e depois aponta o setWebhook do Telegram para aquela URL https. O Telegram manda updates como POST, então vai funcionar igual ao teu Telegram Trigger já faz.

O erro está acontecendo porque o Telegram está tentando acessar a URL do seu webhook com uma solicitação GET, enquanto seu nó Webhook do n8n está configurado para aceitar apenas solicitações POST.

Algumas coisas para verificar:

  1. Certifique-se de que você está usando a URL de Produção (ou a URL de Teste ativa enquanto estiver ouvindo) do n8n e não abrindo a URL diretamente em um navegador. Navegadores enviam solicitações GET por padrão.
  2. Verifique se o webhook do Telegram está registrado corretamente:

https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<YOUR_NGROK_URL>/webhook/<path>
  1. Após configurar o webhook, verifique-o com:

https://api.telegram.org/bot<BOT_TOKEN>/getWebhookInfo
  1. No n8n, clique em “Ouvir evento de teste” se estiver usando a URL de Teste. Webhooks de teste só funcionam enquanto o fluxo de trabalho estiver ouvindo ativamente.
  2. Confirme que o caminho do Telegram Bot Trigger/Webhook corresponde exatamente ao caminho configurado no n8n e que o ngrok está encaminhando solicitações para a porta correta do n8n.
  3. Se você visitar manualmente a URL do webhook em um navegador e vir:

{
  "code": 404,
  "message": "This webhook is not registered for GET requests. Did you mean to make a POST request?"
}

esse é um comportamento esperado, porque o endpoint aceita apenas solicitações POST.

Muito obrigado @achamm ! Essa foi a resposta certa!

você é bem-vindo e estou aberto para responder qualquer pergunta sua