Meta WhatsApp Webhook Verification schlägt auf n8n Cloud fehl (GET hub.challenge response Problem)

Problem/Fehler/Frage beschreiben:
Ich habe versucht, auf ein geschlossenes Thema zu antworten, das genau dasselbe Problem diskutiert, aber da es gesperrt ist, erstelle ich einen neuen Thread.
Ich kann meine Meta WhatsApp Cloud API Webhook-URL in n8n Cloud nicht verifizieren. Meta schlägt bei der Validierung der Callback-URL fehl.

Welche Fehlermeldung wird angezeigt (falls vorhanden)?
Die Meta Developer Console zeigt einen allgemeinen Callback-Verifizierungsfehler an, wenn auf „Verifizieren und Speichern

Hi @Abo_Anad_Abo_Anad Willkommen!
Meta sendet die Verifizierung als GET und die Nachrichtenübermittlungen als POST, und der Webhook-Node registriert jeweils nur eine Methode. Ein Node, der auf POST sitzt, gibt daher 404 an die Verifizierungsanfrage zurück und Meta zeigt nur seinen allgemeinen Callback-Fehler an. Öffne die Node-Einstellungen und aktiviere „Allow Multiple HTTP Methods

Hallo @Abo_Anad_Abo_Anad

Der Fehler wird mit großer Sicherheit durch eines von drei Dingen verursacht: Verwendung der Test-URL statt der Production-URL, ein falscher JSON-Pfad in deinem Ausdruck (Abfrageparameter sind verschachtelt) oder die Antwort wird als application/json statt als text/plain versendet.

Wenn du in der Meta Developer Console auf „Verify and Save

Fortsetzung der Diskussion von Meta Whats-app Web hook Verification failing on n8n Cloud (GET hub.challenge response issue):

Das ist fast immer eine von zwei Sachen, und beide sind leicht zu übersehen.

Zunächst das Antwortformat. Meta’s Verifizierungsaufruf ist ein GET mit drei Query-Parametern: hub.mode, hub.verify_token und hub.challenge. Es erwartet hub.challenge als reinen Text mit einem 200er-Status zurück. n8n’s Standard-Web-Hook-Antwort ist JSON, also erhält Meta etwas wie {“challenge”:“123”} statt nur 123 und lehnt es ab.

Lösung:

  1. Stell auf dem Web hook Node “Respond to” auf “Using Respond to Web hook node”
  2. Füge einen Respond to Web hook Node hinzu
  3. Setze Respond With = Text
  4. Response Body = {{ $json.query[‘hub.challenge’] }}

Text, nicht JSON. Diese eine Einstellung ist normalerweise das ganze Problem.

Zweites, und das erwischt viele Leute in der Cloud: Vergewissere dich, dass du Meta die Production-URL gegeben hast, nicht die Test-URL, und dass der Workflow wirklich aktiv ist. Die Test-URL hört nur auf einen Aufruf, nachdem du “Listen for test event” klickst und geht dann aus dem Netz, sodass die Verifizierung stillschweigend fehlschlägt, obwohl alles im Editor richtig aussieht.

Noch eine Sache, die dir später Kopfschmerzen spart: Meta nutzt GET für die Verifizierung und POST für tatsächliche eingehende Nachrichten, auf derselben URL. Wenn du die nicht trennst, läuft deine Nachrichtenverarbeitungslogik auch beim Verifizierungsaufruf. Füge direkt nach dem Web hook einen Switch oder IF ein, der {{ $json.headers[‘x-forwarded-method’] }} oder das Vorhandensein von $json.query[‘hub.mode’] prüft, und leite die beiden Pfade separat weiter.

Es lohnt sich, zu überprüfen, dass hub.verify_token mit dem übereinstimmt, was du im Meta-Dashboard gesetzt hast, bevor du antwortest, statt die Challenge bedingungslos zurückzugeben.