Kann keine POST-Anfrage mit Webhook durchführen

Beschreibung

Ich versuche, das Webhook-Widget zu verwenden, um eine Verbindung zu Telegram herzustellen. So gehe ich vor:


:warning: Wichtig: Anstelle von localhost verwende ich tatsächlich eine ngrok-URL!

Wenn ich dies jedoch teste, erhalte ich den folgenden Fehler:

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

Wenn ich jedoch das Telegram-Widget verwende, um im Grunde dasselbe zu tun, kann ich mich verbinden und alles funktioniert perfekt.

Bei meiner Online-Recherche habe ich festgestellt, dass mehrere Personen auf das gleiche Problem gestoßen sind, wie hier zu sehen ist: Webhook interprets all sent requests as GET · Issue #12751 · n8n-io/n8n
Ich habe versucht, den Vorschlägen aus diesem Thread zu folgen, aber ohne Erfolg.

Frage

Wisst ihr, was ich falsch machen könnte? Gibt es einen Vorschlag, wie ich diesen Fehler vermeiden kann?

Informationen zu deinem n8n-Setup

  • n8n-Version: v2
  • Datenbank (Standard: SQLite): Sqlite
  • n8n EXECUTIONS_PROCESS-Einstellung (Standard: own, main): main
  • n8n wird ausgeführt über (Docker, npm, n8n cloud, Desktop-App): docker
  • Betriebssystem: Linux Mint

@Federico_Gentile dieser 404 bedeutet, dass ein GET tatsächlich den Node erreicht hat, obwohl dieser auf POST eingestellt ist. Also ändert sich die Methode, nicht die Node-Konfiguration.

Zwei häufige Ursachen bei ngrok:

  1. Tests durch das Öffnen der URL im Browser. Die Adressleiste sendet immer GET. Ein POST muss von curl/Postman oder Telegram kommen.
  2. Eine Umleitung, die die Methode herabstuft. Wenn du die http:// ngrok-URL aufrufst (oder eine Umleitung mit nachfolgendem Schrägstrich auslöst), wandelt die 301/302 zu https deinen POST in einen GET um. Nutze die https ngrok-URL direkt und setze WEBHOOK_URL=https://your-ngrok-domain, damit n8n https sendet.

Wie sendest du die fehlgeschlagene Anfrage: Browser, curl oder Telegram setWebhook?

Vielen Dank für die Antwort. Bisher sende ich die Anfrage über die Suchleiste des Browsers, das könnte also ein Grund sein. Wenn ich es korrekt testen möchte, was würdest du mir dann empfehlen zu verwenden?

@Federico_Gentile ja, genau das ist es, die Suchleiste sendet ein GET, daher wird immer dieser Fehler ausgelöst.

Zum Testen sendest du einen echten POST. Am schnellsten geht das mit curl:

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

Eine Sache mit der Test-URL: Klick erst auf „Listen for test event

Der Fehler tritt auf, weil Telegram versucht, deine Webhook-URL mit einer GET-Anfrage aufzurufen, während dein n8n Webhook-Knoten so konfiguriert ist, dass er nur POST-Anfragen akzeptiert.

Hier sind ein paar Dinge zum Überprüfen:

  1. Stelle sicher, dass du die Production URL (oder die aktive Test-URL während des Abhörens) von n8n verwendest und nicht die URL direkt im Browser öffnest. Browser senden standardmäßig GET-Anfragen.
  2. Überprüfe, dass der Telegram-Webhook korrekt registriert ist:

https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=<YOUR_NGROK_URL>/webhook/<path>
  1. Überprüfe den Webhook anschließend mit:

https://api.telegram.org/bot<BOT_TOKEN>/getWebhookInfo
  1. Klicke in n8n auf **„Auf Test-Event abhören

Vielen Dank @achamm! Das war die richtige Antwort!

Du bist willkommen und ich bin offen dafür, jede Frage für dich zu beantworten