Zum Inhalt springen
hilfmirmal...Arbeit abgeben. Digitale Mitarbeiter entlasten dich.
Erstgespräch

n8n-Lernpfad · Präsentation · Teil 4

Daten von außen

Folien zum n8n-Lernpfad: HTTP Request, Split Out, Filter, Sort, Limit, Aggregate, dazu ein Webhook mit Postfach und Sender. Kontrolle: die Zahl am Node.

Ein Kurs von Erik Lorenscheit, Gründer von hilfmirmal · Zuletzt aktualisiert am

Teil 4 · Daten von außen

Daten, die du nicht selbst tippst

In Teil 3 hast du eine Frage ins Internet geschickt und eine Antwort bekommen. Jetzt kommt eine ganze Liste zurück, und danach drehst du die Richtung um. Keine neuen Formeln zum Selberschreiben. Nur klicken, ausführen, hinschauen.

Fragen: Produktliste aus dem Internet
  1. Manuell startenManual Trigger
  2. Produkte abrufenHTTP Request
  3. Liste aufteilenSplit Out
  4. Filtern, sortieren, kürzenFilter, Sort, Limit
  5. Alle in ein ItemAggregate
Zugestellt bekommen: das Postfach
  1. Webhook empfangenWebhook
  2. Eingang normalisierenEdit Fields
  3. Bestätigung sendenRespond to Webhook

hilfmirmal.de · n8n-Lernpfad

Erklärung zur Folie

Teil 3 war viel Neues auf einmal: die erste Uhr, der erste If. Wenn du da noch nicht sicher bist, ist das normal. Dieser Teil wird ruhiger.

Du tippst keine Daten mehr ein, n8n holt sie selbst. Zuerst fragst du eine Schnittstelle nach dreißig Produkten und machst daraus eine Top-5-Liste. Dann drehst du die Richtung um: n8n bekommt ein Postfach, und ein zweiter Workflow wirft eine Nachricht hinein. Alle Bausteine stellst du per Klick ein. Du lernst vor allem eins: hinschauen, was rauskommt, und die Zahl oben rechts am Node lesen. Leg dir dafür einen neuen Workflow an, zum Beispiel „Produktliste“.

Zwei Richtungen: fragen und zugestellt bekommen

Richtung Wer ist aktiv? Node Beispiel
n8n fragt n8n HTTP Request Wetter abrufen, Produktliste holen
n8n bekommt zugestellt das andere System Webhook Shop meldet Bestellung, Formular meldet Eingabe

Erst fragen, dann zugestellt bekommen. Lektion 4 im Lernpfad spielt beide Richtungen zum Anklicken durch.

Merk dir

Beim Fragen ist n8n aktiv. Beim Zustellen ist es das andere System, und n8n wartet.

Erklärung zur Folie

Es gibt genau zwei Richtungen, wie Daten in n8n kommen. Entweder n8n fragt: Es geht ins Internet und holt sich etwas. Das war der Schirmcheck in Teil 3, n8n hat den Wetterdienst gefragt. Der Node dafür heißt HTTP Request.

Oder n8n bekommt etwas zugestellt. Dann ist das andere System aktiv: Ein Shop meldet eine Bestellung, ein Formulardienst meldet, dass jemand etwas ausgefüllt hat. Der Node dafür heißt Webhook, und er ist ein Trigger, weil er den Workflow startet. Kurzer Test für dich: Der Schirmcheck, welche Richtung? Fragen. Ein Shop meldet eine Bestellung? Zugestellt.

HTTP Request: n8n stellt eine Frage im Internet

Feld Was du einträgst Hier
Method GET = fragen, POST = schicken GET
URL die Adresse https://dummyjson.com/products
Send Query Parameters Zusatzwünsche hinter dem Fragezeichen an, limit = 30
Authentication Zugangsdaten None

dummyjson.com ist ein Übungsdienst mit erfundenen Produkten. Kein Konto, keine Kosten.

Merk dir

Will ein Dienst Zugangsdaten, kommen sie unter Authentication als Credential hinein. Nie in ein Textfeld.

Erklärung zur Folie

So baust du es: Add first step, „Trigger manually“, umbenennen in „Manuell starten“. Dann Plus, Suche „HTTP Request“, umbenennen in „Produkte abrufen“.

Vier Felder, mehr brauchst du nicht. GET steht schon drin. Die URL tippst du ab. Send Query Parameters schaltest du an: Name limit, Value 30. Heißt: Gib mir dreißig Stück, nicht alle. Authentication bleibt auf None, der Dienst will keinen Ausweis. Execute step: Rechts kommt genau ein Item. Antwortet der Dienst nicht, stell im Reiter Settings des Nodes Retry On Fail an.

Die Antwort lesen: ein Item, und eine Liste darin

{
  "products": [
    { "title": "Essence Mascara Lash Princess", "price": 9.99, "rating": 2.56, ... },
    ...
  ],
  "total": 194
}
  • Geschweifte Klammer: ein Datensatz mit Feldern.
  • Eckige Klammer: eine Liste. Hier stecken die 30 Produkte drin.
  • Oben rechts im Output: Schema, Table, JSON. Schema zeigt nur die Feldnamen, das ist die entspannte Ansicht.
Erklärung zur Folie

Du musst das nicht lesen können wie jemand, der programmiert. Du musst nur zwei Klammern unterscheiden. Es kommt ein Datensatz zurück, und in dem steckt unter products eine Liste mit dreißig Produkten. Daneben total, die Gesamtzahl beim Dienst.

Klick im Output auf Schema und klapp products auf: Da stehen unter anderem title, price, rating und category. Und schau oben an den Node. Da steht eine 1, ein Item. Die dreißig Produkte sind noch eingepackt.

Split Out: aus einer Liste werden Items

  • Im Menü: Plus, Suche „Split Out“, umbenennen in „Liste aufteilen“.
  • Fields To Split Out: products. Tippen oder aus dem Schema links ins Feld ziehen.
  • Vorher: 1 Item mit einer Liste von 30 Produkten.
  • Nachher: 30 Items, jedes ein Produkt.

Merk dir

Ab hier läuft jeder weitere Node dreißig Mal, einmal pro Produkt. Die Zahl oben rechts am Node springt von 1 auf 30.

Erklärung zur Folie

Execute step, dann schau auf die Zahl am Node: 30. Rechts in der Table-Ansicht steht eine Zeile pro Produkt.

Das ist die wichtigste Regel in n8n, deshalb steht sie hier gleich zweimal: Ein Node läuft einmal pro Item. Du baust ihn einmal, n8n wendet ihn auf jedes Item an. Und die Zahl oben rechts sagt dir immer, wie viele gerade unterwegs sind. Lektion 10 zeigt das Prinzip noch einmal zum Ausprobieren. Im Lernpfad blendest du sie oben mit dem Schalter „Fortgeschritten“ ein.

Felder auswählen: nur behalten, was du brauchst

Edit Fields „Felder auswählen“, vier Felder, Werte per Drag-and-drop aus dem Schema:

Name Typ Wert
produkt String {{ $json.title }}
preis Number {{ $json.price }}
bewertung Number {{ $json.rating }}
kategorie String {{ $json.category }}

Include Other Input Fields bleibt aus: Der Rest fliegt raus. Immer noch 30 Items.

Achtung

preis und bewertung brauchen den Typ Number. Als String sortiert der Sort nach Zeichen, nicht nach Wert.

Erklärung zur Folie

Jedes Produkt hat rund zwanzig Felder, du brauchst vier. Und hier ist der Trick, mit dem du nichts tippen musst: Add Field, Name produkt. Dann packst du links im Schema title mit der Maus und ziehst es rechts in das Feld Value. n8n schreibt die Expression selbst: {{ $json.title }}, das Feld title aus dem Item, das gerade durchläuft.

Dasselbe dreimal: preis aus price, bewertung aus rating, kategorie aus category. Execute step: immer noch dreißig Items, jetzt mit vier sauberen Feldern. Bleibt preis ein String, steht nach dem Sortieren 9.99 über 100, weil n8n dann Zeichen vergleicht.

Filter, Sort, Limit: drei Werkzeuge, drei Klicks

Node Name im Workflow Einstellung Items
Filter Bewertung ab 4? bewertung, Number, is greater than or equal to, 4 von 30 auf etwa 13
Sort Nach Preis sortieren Type Simple, Field preis, Order Descending bleibt
Limit Nur die ersten 5 Max Items 5 auf 5

Merk dir

Filter wirft weg, was nicht passt: kein zweiter Ausgang, kein roter Node. Die Zahl am Node zeigt, wie viele übrig sind.

Wann Filter und wann If: Lektion 12.

Erklärung zur Folie

Der Filter sieht aus wie der If aus Teil 3, hat aber nur einen Ausgang. Was nicht passt, ist weg. Links ziehst du bewertung aus dem Schema hinein, in der Mitte Number, is greater than or equal to, rechts eine 4. Execute step: Aus dreißig werden ungefähr dreizehn. Die genaue Zahl kann sich ändern, es sind Übungsdaten. Brauchst du die verworfenen Items später noch, nimm einen If.

Sort: Type Simple, Add Field To Sort By, Feld preis, Order Descending, das teuerste oben. Gleiche Zahl wie vorher, nur die Reihenfolge ist neu. Limit: Max Items 5, Keep First Items. Execute step: fünf. Geh danach die Zahlen an den Nodes entlang, von „Produkte abrufen“ bis „Nur die ersten 5“: 1, 30, 30, etwa 13, 13, 5. Diese Zahlen erzählen die ganze Geschichte.

Aggregate: alles wieder in ein Item packen

  • Im Menü: Plus, Suche „Aggregate“, umbenennen in „Alle in ein Item“.
  • Aggregate: All Item Data (Into a Single List).
  • Put Output in Field: produkte.
  • Aus 5 Items wird 1 Item mit einer Liste produkte von 5 Produkten.

Merk dir

Das Gegenteil von Split Out. Du brauchst es, wenn am Ende eine Nachricht rausgehen soll, nicht fünf.

Erklärung zur Folie

Execute step, die Zahl am Node: 1. Die fünf Produkte stecken wieder in einem Item, in der Liste produkte. Klapp sie im Schema auf, da sind sie.

Wozu? Stell dir vor, am Ende soll eine Mail mit den fünf Top-Produkten rausgehen. Ohne Aggregate schickt n8n fünf Mails, eine pro Item. Mit Aggregate ist es eine Mail mit einer Liste darin. Aggregate gibt in beiden Modi genau ein Item aus, die Zahl am Node hilft hier also nicht. Fehlt die Liste produkte und stehen stattdessen einzelne Feldlisten wie produkt und preis im Output, steht der Modus auf Individual Fields statt auf All Item Data.

Zum Nachbauen: die Produktliste

Holen und auspacken
  1. Manuell startenManual Trigger
  2. Produkte abrufenHTTP Request
  3. Liste aufteilenSplit Out
  4. Felder auswählenEdit Fields
Auswählen und einpacken
  1. Bewertung ab 4?Filter
  2. Nach Preis sortierenSort
  3. Nur die ersten 5Limit
  4. Alle in ein ItemAggregate
  5. ZusammenfassungEdit Fields
  • Item-Zahlen von „Produkte abrufen“ bis „Zusammenfassung“: 1, 30, 30, etwa 13, 13, 5, 1, 1.
  • „Zusammenfassung“ macht aus der Liste einen Satz. Felder und Formel stehen auf der nächsten Folie.
Erklärung zur Folie

Führ die Kette einmal komplett mit Execute workflow aus und geh die Zahlen an den Nodes entlang. Stimmen sie, hast du alles richtig eingestellt. Stimmt eine nicht, öffnest du genau diesen Node und vergleichst Input und Output.

Gewöhn dir auch hier eine Sticky Note an: was der Workflow tut und welche Item-Zahlen du erwartest. Dann weißt du in einem Monat noch, ob er richtig läuft.

Aus der Liste einen Satz bauen

Edit Fields „Zusammenfassung“ mit drei Feldern. In text kommt diese Expression:

{{ $json.produkte.map(p => p.produkt + ' (' + p.preis + ' USD)').join(', ') }}
Feld Typ, Schalter, Wert
titel String, Fixed, Top-Produkte ab Bewertung 4
text String, Expression, die Formel oben
anzahl Number, Expression, {{ $json.produkte.length }}, ergibt 5

Beide Expressions stehen als Rezept im Expression-Baukasten, text dort nur mit den Namen.

Achtung

Leerzeichen zählen mit: vor der Preisklammer, vor USD, nach dem Komma.

Erklärung zur Folie

Das ist die längste Expression in diesem Teil, und du musst sie nicht selbst schreiben. Kopier sie, aber lies sie einmal laut: Nimm die Liste produkte aus Aggregate, mach mit map aus jedem Produkt den Namen mit dem Preis in Klammern und häng mit join alles mit Komma aneinander. Die Vorschau unter dem Feld zeigt dir den fertigen Satz.

Den Anfang „Top-Produkte ab Bewertung 4“ legst du als eigenes Feld titel an, Schalter auf Fixed, also fester Text. So bleibt die Formel kürzer. Brauchst du beides in einem Text, etwa für eine Mail, schreibst du im nächsten Node {{ $json.titel }}: {{ $json.text }}, wie in Teil 2.

Im Expression-Baukasten ist das Rezept „Aggregate: Anzahl in der Liste“ genau die Formel für anzahl. Das Rezept „Aggregate: Liste als Satz“ ist die Grundform von text: nur die Namen, ohne Preis. Dort klickst du sie zusammen und probierst sie mit Beispieldaten aus. Den Preis in Klammern setzt du so dazu wie oben.

Die Zahl am Node ist deine Kontrolle

  • Nach jedem Execute step steht oben rechts am Node die Zahl der Items.
  • Von 1 auf 30: Split Out hat gearbeitet.
  • Von 30 auf 13: Der Filter hat 17 weggeworfen.
  • Von 13 auf 5: Das Limit hat gekürzt.
  • Von 5 auf 1: Aggregate hat eingepackt.
  • 0: Hier ist alles weg. Diesen Node öffnen, Input und Output vergleichen.

Merk dir

Kein Node ist rot, und trotzdem kann das Ergebnis falsch sein. Die Zahl merkt es zuerst.

Erklärung zur Folie

Probier die Falle selbst aus: Stell im Filter die 4 auf 9 und drück Execute step. Null Items. Kein Fehler, nichts rot, aber ab hier ist alles leer. Merkst du das erst am Ende, suchst du lange. Schaust du auf die Zahl, siehst du es sofort. Danach stellst du zurück auf 4.

Wenn etwas nicht stimmt: Zahlen entlanggehen, den ersten Node finden, an dem die Zahl nicht passt, öffnen, Input und Output vergleichen. Der Item-Zahlen-Trainer übt genau das, ganz ohne n8n.

Webhook: ein anderes System klingelt bei dir

  • Webhook ist ein Trigger. Im Menü: Add first step, „On webhook call“. n8n baut daraus eine Adresse.
  • Test URL: gilt nur, solange du auf Execute workflow gedrückt hast und der Node „Listening“ zeigt, höchstens zwei Minuten lang. Eine Nachricht pro Klick.
  • Production URL: dauerhaft, erst nach Publish.
  • HTTP Method POST: Der Sender schickt Daten mit. Die landen im Output unter body.
  • Respond to Webhook: die Antwort an den Sender, zum Beispiel „angenommen“.
Erklärung zur Folie

Jetzt die zweite Richtung: zugestellt bekommen. Das Bild dazu ist ein Postfach mit Klingel. n8n stellt eine Adresse bereit, und wer etwas an diese Adresse schickt, löst den Workflow aus.

Im Webhook gibst du einen Path ein, zum Beispiel mein-postfach. Oben im Node stehen dann zwei Adressen: Test URL und Production URL. Zum Üben reicht Test. Lauschen lässt du den Webhook mit Execute workflow auf dem Canvas oder im geöffneten Node mit „Listen for test event“. Bei Respond stellst du „Using 'Respond to Webhook' Node“ ein. Dann antwortet der Node Respond to Webhook, hier am Ende der Kette. Höflichkeit unter Systemen: Wer klingelt, bekommt eine Antwort.

Der Sender: HTTP Request mit POST

Postfach
  1. Webhook empfangenWebhook
  2. Eingang normalisierenEdit Fields
  3. Bestätigung sendenRespond to Webhook
Sender
  1. Manuell startenManual Trigger
  2. Nachricht bauenEdit Fields
  3. Nachricht sendenHTTP Request
  4. Antwort lesenEdit Fields
  1. Postfach: Execute workflow. Der Webhook zeigt „Listening“.
  2. Sender: Execute workflow, innerhalb von zwei Minuten. Die Nachricht geht an die Test URL.
  3. Im Sender steht rechts die Antwort, im Postfach liegt die Nachricht unter body.
Erklärung zur Folie

Der Sender ist nichts Neues. Es ist der HTTP Request von der Produktliste, nur mit Method POST statt GET. Vorher hat er gefragt, jetzt schickt er.

Öffne die zwei Workflows in zwei Browser-Tabs und stell beide fertig ein, wie auf der nächsten Folie. Erst dann lässt du das Postfach lauschen, denn nach zwei Minuten hört es von selbst auf. Im ersten Tab startest du das Postfach, der Webhook wartet. Im zweiten startest du gleich danach den Sender. Jetzt steht im Sender in „Antwort lesen“ der Status angenommen, und im Postfach ist der Lauf durch: Unter body liegt die Nachricht. Wichtig: Das Postfach muss lauschen, bevor du sendest. Sonst ist niemand zu Hause.

Postfach und Sender einstellen

Node Einstellung
Webhook empfangen HTTP Method POST, Path mein-postfach, Respond: Using 'Respond to Webhook' Node
Eingang normalisieren absender = {{ $json.body.absender }}, betreff = {{ $json.body.betreff }}
Bestätigung senden Respond With JSON, Response Body { "status": "angenommen" }
Nachricht bauen absender Muster GmbH, betreff ein kurzer Satz, vorgang V-1001
Nachricht senden POST, URL = Test URL des Postfachs, Send Body an, JSON, drei Felder
Antwort lesen antwort_status = {{ $json.status }}
Erklärung zur Folie

Die Test URL kopierst du oben aus dem Webhook-Node. Sie endet auf webhook-test/mein-postfach. Im Sender stellst du im HTTP Request Send Body an, Body Content Type JSON, Specify Body „Using Fields Below“, und legst drei Felder an: absender, betreff, vorgang. Die Werte ziehst du aus dem Schema von „Nachricht bauen“.

Im Postfach kannst du die Expressions für absender und betreff vorher tippen. Sobald die erste Nachricht da war, ziehst du sie aus dem Schema unter body. Den Webhook-Simulator kannst du vorher durchklicken, ganz ohne n8n.

Wenn es hakt: Liste und Webhook

Symptom Ursache Was tun
Split Out: 0 Items, „wasn't found“ Feldname falsch geschrieben products aus dem Schema ziehen
Sort sortiert komisch preis ist ein String Typ Number in „Felder auswählen“
Filter liefert 0 Grenze zu hoch Zahl lesen, Input gegen Output
Filter rot: „Wrong type“ bewertung ist Text Typ Number in „Felder auswählen“
Aggregate: Feldlisten statt produkte Modus Individual Fields All Item Data, Feld produkte
Sender bekommt 404 Postfach lauscht nicht, Pfad anders erst Postfach starten, URL kopieren
Postfach zeigt kein „Listening“ mehr lauscht höchstens zwei Minuten Postfach neu starten, gleich senden
body im Postfach leer Send Body aus oder keine Felder Send Body an, JSON, drei Felder
zweite Nachricht kommt nicht an Test URL gilt für eine Nachricht Postfach neu starten, dann senden
Erklärung zur Folie

Diese neun Dinge gehen bei Listen und Webhooks am häufigsten schief. Bei der Liste hilft fast immer derselbe Blick: Zahl am Node lesen, den ersten Node mit falscher Zahl öffnen, Input gegen Output.

Bei Split Out verrät dir die Zahl sogar die Ursache. 0 Items und rechts im Output der Hinweis „The field … wasn't found in any input item“: Der Feldname stimmt nicht, etwa Products statt products. Bleibt es bei 1 Item, gibt es das Feld, aber es steckt keine Liste darin, etwa total. Liefert der Filter 0 Items und bleibt grün, war die Grenze zu hoch. Wird er rot und meldet „Wrong type“, kommt bewertung als Text an. Dann stellst du in „Felder auswählen“ den Typ auf Number.

Beim Webhook ist es meistens die Reihenfolge. Erst lauscht das Postfach, dann sendet der Sender, und zwar innerhalb von zwei Minuten. Danach hört das Postfach von selbst auf. Und die Adresse kopierst du, statt sie abzutippen. Schon ein falscher Buchstabe im Pfad ergibt einen 404.

Dein Auftrag

  1. Nachbauen: die Produktliste komplett. Einmal ausführen, die Item-Zahl jedes Nodes notieren.
  2. Abwandeln: Filter auf 4.5, Sortierung Ascending, Limit 3. Nach jeder Variante die Zahlen notieren und erklären.
  3. Titel anpassen: Ändert sich die Filtergrenze, passt du die Zahl in titel der Zusammenfassung an.
  4. Postfach und Sender: zwei Workflows. Nachricht schicken, Antwort und body prüfen. Dann im Postfach nur den Pfad ändern, wieder lauschen lassen, noch einmal senden.

Merk dir

Das Postfach nicht veröffentlichen. Zum Üben reicht die Test URL.

Erklärung zur Folie

Erwartete Zahlen, als Richtwerte, weil sich die Übungsdaten ändern können. Grundlauf von „Produkte abrufen“ bis „Zusammenfassung“, wie auf der Folie zum Nachbauen: 1, 30, 30, etwa 13, 13, 5, 1, 1. Davor zeigt „Manuell starten“ eine 1. Filter 4.5: etwa 6 nach dem Filter, das Limit kürzt trotzdem auf 5. Ascending: dieselben Zahlen, aber jetzt stehen die billigsten oben. Limit 3: am Ende 3 statt 5, die Liste in Aggregate hat drei Einträge.

Beim Postfach geht es um den Pfad: Hat das Postfach einen anderen Pfad als die URL im Sender, bekommt der Sender einen 404. Der Pfad muss auf beiden Seiten gleich sein. Kopier die neue Test URL in den Sender, lass das Postfach lauschen und sende noch einmal.

Wer noch weiter will: Tausch den Manual Trigger gegen einen Schedule Trigger, täglich um 8 Uhr. Oder nimm in „Felder auswählen“ ein fünftes Feld lager aus stock dazu und prüf, ob es bis hinten durchkommt. Zum Schluss zwei Sätze für dich: Welchen Baustein kann ich jemandem zeigen? Wo habe ich am längsten gehangen?

Was bleibt hängen?

  1. Was macht Split Out, und woran siehst du, dass es funktioniert hat?

    Antwort

    Aus einem Item mit einer Liste darin werden dreißig Items. Die Zahl am Node springt von 1 auf 30.

  2. Warum ist die Zahl am Node wichtiger als die Farbe?

    Antwort

    Ein Node kann grün sein und trotzdem 0 Items liefern. Grün heißt nur, dass er durchgelaufen ist.

  3. Wer ist beim Webhook aktiv, wer beim HTTP Request?

    Antwort

    Webhook: Das andere System sendet. HTTP Request: n8n fragt, auch der Sender mit POST.

  4. Warum schweigt das Postfach, wenn niemand Execute workflow gedrückt hat?

    Antwort

    Die Test URL gilt nur bei „Listening“, höchstens zwei Minuten lang. Dauerhaft gilt die Production URL, erst nach Publish.

Erklärung zur Folie

Beantworte die Fragen zuerst für dich, dann klapp die Antworten auf. Zum Nachlesen: Lektion 4 für Webhook und Schnittstellen, Lektion 10 für Items. Beides hast du hier mit den Händen gemacht, da ist das Nachlesen leicht.

Im nächsten Teil geht es um Regeln: Wer darf was freigeben? Ein Formular davor ist dort ein Zusatz.

Wohin darf ich dich bringen?