No se puede hacer solicitud POST con Webhook

Descripción

Estoy intentando usar el widget Webhook para conectarme a Telegram. Esto es lo que hago:


:warning: Importante: ¡en lugar de localhost uso una URL de ngrok!

Sin embargo, cuando pruebo esto obtengo el siguiente error:

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

Sin embargo, cuando uso el widget de Telegram para hacer básicamente lo mismo, puedo conectarme y todo funciona perfectamente.

Buscando en línea vi que varias personas enfrentaron el mismo problema, como se puede ver aquí: Webhook interprets all sent requests as GET · Issue #12751 · n8n-io/n8n
Intentés seguir las sugerencias de este hilo pero sin éxito.

Pregunta

¿Sabes qué podría estar haciendo mal? ¿Alguna sugerencia posible sobre cómo evitar este error?

Información sobre tu configuración de n8n

  • Versión de n8n: v2
  • Base de datos (predeterminado: SQLite): Sqlite
  • Configuración EXECUTIONS_PROCESS de n8n (predeterminado: own, main): main
  • Ejecutando n8n a través de (Docker, npm, n8n cloud, desktop app): docker
  • Sistema operativo: Linux Mint

@Federico_Gentile ese 404 significa que un GET realmente llegó al nodo aunque esté configurado para POST, así que algo está cambiando el método, no la configuración del nodo.

Dos causas usuales con ngrok:

  1. Probar abriendo la URL en un navegador. La barra de direcciones siempre envía GET. Un POST tiene que venir de curl/Postman o Telegram.
  2. Un redireccionamiento que degrada el método. Si llamas a la URL http:// de ngrok (o golpeas un redireccionamiento de barra diagonal final), el 301/302 a https convierte tu POST en GET. Usa la URL https de ngrok directamente, y establece WEBHOOK_URL=https://tu-dominio-ngrok para que n8n emita https.

¿Cómo estás enviando la solicitud fallida: navegador, curl o Telegram setWebhook?

Muchas gracias por tu respuesta. Hasta ahora estoy enviando la solicitud a través de la barra de búsqueda del navegador, así que eso podría ser la razón. Si quiero probarlo correctamente, ¿qué me recomendarías utilizar entonces?

@Federico_Gentile sí, exacto, la barra de búsqueda envía un GET, así que siempre incidirá en ese error.

Para probar, envía un POST real. Lo más rápido es con curl:

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

Una trampa con la URL de prueba: haz clic en “Listen for test event” primero, solo captura una única solicitud mientras está escuchando activamente. Postman también funciona, solo establece el método en POST.

Para la configuración real de Telegram, cambia a la URL de producción, activa el flujo de trabajo y luego apunta el setWebhook de Telegram a esa URL https. Telegram envía actualizaciones como POST, así que se comportará igual que tu disparador de Telegram ya lo hace.

El error está ocurriendo porque Telegram está intentando acceder a tu URL de webhook con una solicitud GET, mientras que tu nodo Webhook de n8n está configurado para aceptar solo solicitudes POST.

Algunos puntos a verificar:

  1. Asegúrate de usar la URL de Producción (o la URL de Prueba activa mientras estés escuchando) de n8n y no abrir la URL directamente en un navegador. Los navegadores envían solicitudes GET por defecto.
  2. Verifica que el webhook de Telegram esté registrado correctamente:

https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<YOUR_NGROK_URL>/webhook/<path>
  1. Después de configurar el webhook, verifica con:

https://api.telegram.org/bot<BOT_TOKEN>/getWebhookInfo
  1. En n8n, haz clic en “Escuchar evento de prueba” si usas la URL de Prueba. Los webhooks de prueba solo funcionan mientras el flujo de trabajo está escuchando activamente.
  2. Confirma que la ruta del Telegram Bot Trigger/Webhook coincida exactamente con la ruta configurada en n8n y que ngrok esté reenviando las solicitudes al puerto correcto de n8n.
  3. Si visitas manualmente la URL del webhook en un navegador y ves:

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

eso es en realidad el comportamiento esperado porque el punto de conexión solo acepta solicitudes POST.

¡Muchas gracias @achamm! ¡Esta era la respuesta correcta!

estás bienvenido y estoy abierto a responder cualquier pregunta que tengas