Ich stoße auf einen gewissen logischen Engpass bei einem Automations-Workflow und wollte sehen, wie andere mit unübersichtlichen eingehenden Webhook-Daten umgehen.
Das Szenario: Ich habe einen externen Dienst, der Daten via Webhook sendet, um einen n8n-Workflow auszulösen. Die eingehende JSON-Payload-Struktur ändert sich jedoch gelegentlich je nach Ereignistyp – manchmal sind Schlüssel verschachtelt, manchmal werden sie als flache Arrays zurückgegeben.
Was ich versucht habe: Ich verwende derzeit Standard-IF-Knoten und einen Code-Knoten mit JavaScript, um zu prüfen, ob Schlüssel vorhanden sind, bevor ich sie den nachfolgenden HTTP-Request-Knoten zuordne. Aber wenn eine Schema-Änderung unerwartet auftritt, verursacht das Fehler bei der nachgelagerten Ausführung.
Hat jemand ein sauberes, robustes Muster entwickelt, um schwankende Webhook-Schemas in n8n zu normalisieren, bevor die Daten an nachgelagerte Apps weitergegeben werden? Nutzt ihr spezifische Fehlerbehandlungs-Sub-Workflows oder erweitertes Expression-Parsing?
Ich freue mich über jeden Einblick oder Best Practice, die ihr teilen könnt!
Hallo @Maaz Willkommen!
Das resiliente Muster besteht darin, nicht auf der rohen Payload zu verzweigen, sondern sie einmal in einem einzelnen Code-Node direkt nach dem Webhook zu normalisieren, in ein festes Schema, auf das sich jeder nachgelagerte Node verlassen kann. Erzwinge dort die Form und lese Schlüssel defensiv, sodass eine Schemaänderung nur diesen einen Node berührt, anstatt die HTTP Request Nodes zu beschädigen:
Die ?. und ?? sind der Teil, der die Resilience bringt: Sie lesen verschachtelte oder fehlende Schlüssel, ohne einen Fehler auszulösen, sodass ein verschobenes oder fehlendes Feld null wird, anstatt einen schwerwiegenden Fehler zu verursachen. Verzweige von dort aus auf den normalisierten Typ mit einem Switch-Node anstatt mit verketteten IFs (jeder Branch gibt immer noch die gleichen Felder aus), stelle On Error auf Continue ein (mit Error-Ausgabe) auf den HTTP Request Nodes, sodass ein schlechtes Element zu einem Error-Branch geht, anstatt die Ausführung zu stoppen, und richte den Workflow auf einen dedizierten Error Trigger-Workflow unter Options > Settings aus, sodass alles, was noch durchschlüpft, erfasst und gemeldet wird.