Ihren ersten n8n-Workflow erstellen: Webhooks, API-Aufrufe und Benachrichtigungen

14 Min. Lesezeit·Matthieu|

Erstellen Sie zwei echte n8n-Workflows auf Ihrer selbst gehosteten Instanz. Ein Webhook, der Wetterdaten abruft und an Discord sendet, und ein RSS-Monitor, der neue Artikel in einen Kanal postet.

Sie haben n8n auf Ihrem VPS am Laufen. Und jetzt?

In diesem Tutorial erstellen Sie zwei echte Workflows. Keine Spielbeispiele, die Daten ins Nichts zurücksenden. Das sind Automatisierungen, die Sie tatsächlich in Betrieb behalten werden:

  1. Wetter-Webhook: eine HTTP-Anfrage empfangen, die Wetter-API von wttr.in aufrufen, die Antwort formatieren und an einen Discord-Kanal senden.
  2. RSS-Monitor: einen Blog-RSS-Feed regelmäßig prüfen und neue Artikel auf Discord posten.

Beide Workflows behandeln die grundlegenden n8n-Konzepte während der Erstellung: Nodes, Verbindungen, Ausdrücke (Expressions), das Draft/Publish-System von n8n 2.0 und die Fehlerbehandlung.

Voraussetzungen:

  • Eine laufende n8n-Instanz auf Ihrem VPS. Falls Sie noch keine haben, folgen Sie zuerst n8n mit Docker Compose auf einem VPS installieren.
  • Ein Discord-Server, auf dem Sie einen Webhook erstellen können (oder ein Slack-Workspace. Die Anleitungen sind austauschbar; wir verwenden hier Discord).
  • Grundlegende Vertrautheit mit dem Terminal und curl.

Was sind n8n-Nodes und -Verbindungen?

Nodes sind die einzelnen Schritte in einem Workflow. Jeder Node erledigt eine Aufgabe: einen Trigger empfangen, eine HTTP-Anfrage ausführen, Daten transformieren oder eine Nachricht senden. Verbindungen sind die Linien zwischen den Nodes. Sie leiten Daten von der Ausgabe eines Nodes zur Eingabe des nächsten weiter. Jeder Workflow ist eine Kette von Nodes, die von links nach rechts verbunden sind.

Die in diesem Tutorial verwendeten Node-Typen:

Node Zweck
Webhook Lauscht auf eingehende HTTP-Anfragen und startet den Workflow
HTTP Request Ruft eine externe API auf und gibt die Antwort zurück
Set Erstellt oder formt Datenfelder um
If Verzweigt den Workflow basierend auf einer Bedingung
Discord Sendet eine Nachricht über einen Webhook an einen Discord-Kanal
RSS Feed Trigger Fragt einen RSS-Feed ab und löst aus, wenn neue Einträge erscheinen
Error Trigger Fängt Workflow-Fehler ab und startet einen Benachrichtigungs-Workflow

Wie erstellen Sie Ihren ersten n8n-Workflow?

Öffnen Sie Ihre n8n-Instanz im Browser. Klicken Sie auf Add workflow auf der Workflows-Seite. n8n zeigt Ihnen eine leere Arbeitsfläche mit einem Trigger-Node-Platzhalter.

Dieser erste Workflow macht Folgendes: einen Stadtnamen über einen HTTP-Webhook empfangen, das aktuelle Wetter von wttr.in abrufen, das Ergebnis formatieren und in einen Discord-Kanal posten.

Schritt 1: Einen Discord-Webhook erstellen

Bevor Sie in n8n bauen, brauchen Sie einen Ort zum Senden der Benachrichtigungen.

  1. Öffnen Sie Ihren Discord-Server. Rechtsklicken Sie auf den Kanal, in dem Sie Wetter-Updates erhalten möchten.
  2. Wählen Sie Kanal bearbeiten > Integrationen > Webhooks.
  3. Klicken Sie auf Neuer Webhook. Geben Sie ihm einen Namen wie n8n Weather Bot.
  4. Klicken Sie auf Webhook-URL kopieren. Speichern Sie diese URL. Sie sieht so aus: https://discord.com/api/webhooks/123456789/abcDEF...

Behandeln Sie diese URL wie ein Passwort. Jeder, der sie hat, kann in Ihren Kanal posten.

Schritt 2: Den Webhook-Trigger-Node hinzufügen

Klicken Sie auf den +-Button auf dem Trigger-Platzhalter der Arbeitsfläche. Suchen Sie nach Webhook und wählen Sie ihn aus.

Konfigurieren Sie den Webhook:

  • HTTP Method: POST
  • Path: weather

Lassen Sie alles andere auf den Standardwerten. Der Path macht Ihre Webhook-URL einzigartig. Mit dem Path weather lauten Ihre Webhook-URLs:

  • Test-URL: https://ihre-n8n-domain.com/webhook-test/weather
  • Produktions-URL: https://ihre-n8n-domain.com/webhook/weather

Beachten Sie den Unterschied: /webhook-test/ vs /webhook/. Diese Unterscheidung ist wichtig. Dazu gleich mehr.

Schritt 3: Den Webhook mit curl testen

Klicken Sie auf Listen for test event im Webhook-Node. n8n wartet jetzt auf eine eingehende Anfrage auf der Test-URL.

Öffnen Sie ein Terminal auf Ihrem lokalen Rechner und senden Sie eine Testanfrage:

curl -X POST https://your-n8n-domain.com/webhook-test/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Paris"}'

Wechseln Sie zurück zu n8n. Der Webhook-Node sollte ein grünes Häkchen mit den empfangenen Daten anzeigen. Sie sehen den JSON-Body mit city: "Paris" im Ausgabepanel.

Falls nichts passiert, prüfen Sie:

  • Ihre n8n-Instanz ist aus dem Internet erreichbar (Reverse Proxy ist konfiguriert).
  • Sie haben Listen for test event geklickt, bevor Sie die curl-Anfrage gesendet haben.
  • Die URL stimmt genau überein, einschließlich des /webhook-test/-Präfix.

Schritt 4: Den HTTP-Request-Node hinzufügen (Wetter-API aufrufen)

Klicken Sie auf den +-Button rechts neben dem Webhook-Node. Suchen Sie nach HTTP Request und fügen Sie ihn hinzu.

Konfigurieren Sie ihn:

  • Method: GET
  • URL: https://wttr.in/{{ $json.city }}?format=j1

Der Teil {{ $json.city }} ist ein n8n-Ausdruck (Expression). Er liest das Feld city aus den eingehenden Webhook-Daten. Wenn jemand {"city": "Paris"} sendet, ersetzt n8n den Ausdruck durch Paris, sodass die finale URL https://wttr.in/Paris?format=j1 lautet.

Der Parameter ?format=j1 weist wttr.in an, strukturiertes JSON statt des ASCII-Art-Wetterberichts zurückzugeben.

Klicken Sie auf Test step, um nur diesen Node auszuführen. Sie sollten eine JSON-Antwort mit Wetterdaten sehen, die Felder wie current_condition, temp_C, weatherDesc und weitere enthält.

Genau hinschauen: Schauen Sie sich das Ausgabepanel an. Die Antwort ist verschachtelt. Die aktuelle Temperatur befindet sich unter $json.current_condition[0].temp_C und die Beschreibung unter $json.current_condition[0].weatherDesc[0].value. Sie brauchen diese Pfade im nächsten Schritt.

Schritt 5: Einen Set-Node zum Formatieren der Nachricht hinzufügen

Die rohe Antwort der Wetter-API ist umfangreich. Sie brauchen nur wenige Felder für die Discord-Nachricht.

Fügen Sie einen Set-Node nach dem HTTP-Request-Node hinzu. Klicken Sie auf Add field und erstellen Sie diese Zuweisung:

Feldname Typ Wert (Ausdruck)
message String Weather in {{ $('Webhook').item.json.city }}: {{ $json.current_condition[0].temp_C }}°C, {{ $json.current_condition[0].weatherDesc[0].value }}. Humidity: {{ $json.current_condition[0].humidity }}%. Wind: {{ $json.current_condition[0].windspeedKmph }} km/h.

Der Ausdruck {{ $('Webhook').item.json.city }} greift auf die Ausgabe des Webhook-Nodes zurück, um den Stadtnamen zu erhalten. Die $json-Referenzen ohne Node-Namen beziehen sich auf den unmittelbar vorherigen Node (HTTP Request).

Klicken Sie auf Test step. Die Ausgabe sollte ein einzelnes message-Feld zeigen mit etwa:

Weather in Paris: 14°C, Partly cloudy. Humidity: 72%. Wind: 15 km/h.

Schritt 6: Den Discord-Node hinzufügen

Fügen Sie einen Discord-Node nach dem Set-Node hinzu.

  1. Setzen Sie Connection Type auf Webhook.
  2. Klicken Sie unter Credential for Discord auf Create New Credential.
  3. Fügen Sie Ihre Discord-Webhook-URL aus Schritt 1 in das Feld Webhook URL ein. Klicken Sie auf Save.
  4. Setzen Sie Operation auf Send a Message.
  5. Verwenden Sie im Feld Message den Ausdruck: {{ $json.message }}

Klicken Sie auf Test step. Prüfen Sie Ihren Discord-Kanal. Die Wetternachricht sollte von Ihrem Bot gepostet worden sein.

Überprüfung: Öffnen Sie Discord. Die Nachricht sollte in dem Kanal erscheinen, für den Sie den Webhook konfiguriert haben. Falls nicht, überprüfen Sie die Webhook-URL in den Credential-Einstellungen.

Schritt 7: Den gesamten Workflow testen

Gehen Sie zurück zum Webhook-Node. Klicken Sie erneut auf Listen for test event. Senden Sie eine weitere curl-Anfrage:

curl -X POST https://your-n8n-domain.com/webhook-test/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Tokyo"}'

Beobachten Sie, wie die Ausführung durch alle vier Nodes fließt. Jeder Node wird grün, sobald er abgeschlossen ist. Ein Wetterbericht für Tokyo sollte in Ihrem Discord-Kanal erscheinen.

Prüfen Sie den Executions-Tab in der linken Seitenleiste. Sie sehen einen Log-Eintrag für diese Testausführung mit Timing, Status und den Daten an jedem Node. Dieses Ausführungslog ist der Ort, an dem Sie Probleme debuggen.

Wie empfängt der n8n-Webhook-Node externe Daten?

Der Webhook-Node erstellt einen HTTP-Endpunkt auf Ihrer n8n-Instanz. Wenn ein externer Dienst (oder ein curl-Befehl) eine Anfrage an diesen Endpunkt sendet, empfängt n8n die Daten und startet den Workflow. Der Node unterstützt die Methoden GET, POST, PUT, PATCH, DELETE und HEAD. POST mit einem JSON-Body ist das häufigste Muster.

Wie testen Sie einen n8n-Webhook mit curl?

Das haben Sie oben bereits gemacht. Hier ist, was zählt:

Test-URL Produktions-URL
Pfadformat /webhook-test/<path> /webhook/<path>
Wann aktiv Nur solange Sie „Listen for test event" oder „Execute workflow" im Editor geklickt haben Nur nachdem Sie den Workflow veröffentlicht haben
Zeigt Daten im Editor Ja, live im Ausgabepanel des Nodes Nein (prüfen Sie den Executions-Tab)
Anwendungsfall Erstellen und Debuggen Echte externe Integrationen

Verwenden Sie während der Entwicklung immer die Test-URL. Sie zeigt Ihnen Daten, die in Echtzeit durch jeden Node fließen. Die Produktions-URL funktioniert erst nach der Veröffentlichung des Workflows.

Was ist der Unterschied zwischen Draft- und veröffentlichten Workflows in n8n 2.0?

n8n 2.0 hat das Speichern vom Aktivieren getrennt. Ihre Änderungen bleiben im Entwurf und beeinflussen die Live-Version nicht, bis Sie explizit veröffentlichen. Seit n8n 2.4 (Januar 2026) speichert der Editor Ihre Arbeit alle paar Sekunden automatisch. Es gibt keinen manuellen Save-Button mehr.

So funktioniert die Reihenfolge:

  1. Sie erstellen und testen Ihren Workflow mit der Test-URL. n8n speichert dabei automatisch.
  2. Ihre Änderungen existieren nur als Entwurf. Die Live-Version (falls vorhanden) läuft unverändert weiter.
  3. Sie klicken auf Publish. Jetzt ist die Produktions-URL aktiv und der Workflow läuft automatisch, wenn er ausgelöst wird.
  4. Wenn Sie den Workflow später bearbeiten, bleiben Ihre Änderungen im Entwurf, bis Sie erneut veröffentlichen.

In n8n 1.x waren Speichern und Aktivieren dieselbe Aktion. Das ist nicht mehr so.

Veröffentlichen Sie jetzt Ihren Wetter-Workflow. Klicken Sie auf Publish oben rechts (oder drücken Sie Shift+P). Der Workflow-Status ändert sich zu „Active".

Überprüfen Sie mit curl unter Verwendung der Produktions-URL:

curl -X POST https://your-n8n-domain.com/webhook/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Berlin"}'

Prüfen Sie Discord. Der Wetterbericht für Berlin sollte erscheinen. Schauen Sie dann in den Executions-Tab in n8n, um die Produktionsausführung im Log zu sehen.

Wie behandeln Sie Fehler in einem n8n-Workflow?

Der Error-Trigger-Node fängt Workflow-Fehler ab und startet einen separaten Benachrichtigungs-Workflow. Wenn ein aktiver Workflow fehlschlägt (z.B. die Wetter-API ist nicht erreichbar oder Discord lehnt die Nachricht ab), löst n8n den Error Trigger im verknüpften Fehler-Workflow aus. Das funktioniert nur bei veröffentlichten, automatisch ausgelösten Ausführungen. Manuelle Testausführungen lösen ihn nicht aus.

Einen Fehlerbenachrichtigungs-Workflow erstellen

  1. Gehen Sie zurück zur Workflows-Seite. Klicken Sie auf Add workflow. Nennen Sie ihn Error Handler.
  2. Fügen Sie einen Error Trigger-Node als Trigger hinzu. Dieser Node empfängt automatisch Fehlerdaten, wenn ein verknüpfter Workflow fehlschlägt.
  3. Fügen Sie einen Discord-Node nach dem Error Trigger hinzu.
  4. Konfigurieren Sie ihn mit demselben Discord-Webhook-Credential, das Sie zuvor erstellt haben.
  5. Setzen Sie die Nachricht auf:
⚠️ Workflow failed: {{ $json.workflow.name }}
Error: {{ $json.execution.error.message }}
Execution ID: {{ $json.execution.id }}
  1. Der Fehler-Workflow aktiviert sich automatisch, weil er einen Error-Trigger-Node enthält. Eine separate Veröffentlichung ist nicht nötig.

Den Fehler-Workflow mit Ihrem Wetter-Workflow verknüpfen

  1. Öffnen Sie Ihren Weather-Webhook-Workflow.
  2. Klicken Sie auf das Drei-Punkte-Menü (⋮) oben rechts, dann auf Settings.
  3. Wählen Sie unter Error Workflow den Error Handler-Workflow aus, den Sie gerade erstellt haben.
  4. Klicken Sie auf Publish, um die Änderung zu übernehmen.

Wenn jetzt die Wetter-API ausfällt oder ein Node in Ihrem Workflow während einer Produktionsausführung einen Fehler wirft, erhalten Sie eine Discord-Benachrichtigung mit dem Workflow-Namen, der Fehlermeldung und der Ausführungs-ID. Mit dieser ID können Sie die fehlgeschlagene Ausführung im Executions-Tab finden und genau untersuchen, was schiefgelaufen ist.

Das ist ein Muster, das Sie in jedem Workflow verwenden sollten. Erstellen Sie einen Error-Handler-Workflow und verknüpfen Sie dann alle anderen Workflows damit.

Kurzreferenz für n8n-Ausdrücke

Ausdrücke (Expressions) ermöglichen den Zugriff auf Daten vorheriger Nodes. Sie stehen in doppelten geschweiften Klammern {{ }} und sind in den meisten Node-Feldern verfügbar.

Ausdruck Was er macht
{{ $json.fieldName }} Zugriff auf ein Feld der Ausgabe des vorherigen Nodes
{{ $json.nested.field }} Zugriff auf verschachtelte JSON-Eigenschaften
{{ $('NodeName').item.json.field }} Zugriff auf die Ausgabe eines bestimmten Nodes über dessen Namen
{{ $json.current_condition[0].temp_C }} Zugriff auf ein Array-Element
{{ $now.toFormat('yyyy-MM-dd') }} Aktuelles Datum, formatiert mit Luxon
{{ $now.toFormat('HH:mm') }} Aktuelle Uhrzeit (24-Stunden-Format)
{{ $if($json.score > 80, "high", "low") }} Bedingter Ausdruck
{{ $json['field with spaces'] }} Klammer-Notation für Sonderzeichen

n8n verwendet Luxon für die Datumsverarbeitung. Wenn Sie Datumsangaben aus API-Antworten formatieren müssen, stehen Ihnen Luxon-Methoden auf jedem DateTime-Objekt zur Verfügung.

Wie erstellen Sie einen RSS-Feed-Monitor-Workflow in n8n?

Erstellen Sie jetzt einen zweiten Workflow, der nach Zeitplan statt über einen Webhook läuft. Dieser überwacht einen RSS-Feed und postet neue Artikel auf Discord.

Schritt 1: Den Workflow erstellen

Klicken Sie auf Add workflow auf der Workflows-Seite. Nennen Sie ihn RSS to Discord.

Schritt 2: Den RSS Feed Trigger hinzufügen

Klicken Sie auf den Trigger-Platzhalter und suchen Sie nach RSS Feed Trigger. Fügen Sie ihn hinzu.

Konfigurieren Sie ihn:

  • Feed URL: Verwenden Sie einen beliebigen Blog-RSS-Feed. Zum Beispiel: https://blog.n8n.io/rss/ (der Blog von n8n).
  • Poll Times: Setzen Sie auf Every X > Value: 30 > Unit: Minutes.

Das prüft den Feed alle 30 Minuten auf neue Einträge. Der RSS Feed Trigger merkt sich, welche Einträge er bereits gesehen hat. Beim ersten Lauf gibt er alle aktuellen Einträge aus. Danach nur noch neue.

Klicken Sie auf Fetch Test Event, um die aktuellen Feed-Einträge abzurufen. Sie sollten Einträge mit Feldern wie title, link, contentSnippet, isoDate und creator sehen.

Schritt 3: Einen Set-Node zum Formatieren der Nachricht hinzufügen

Fügen Sie einen Set-Node hinzu. Erstellen Sie ein Feld:

Feldname Typ Wert (Ausdruck)
message String 📰 New post: **{{ $json.title }}**\n{{ $json.link }}\nPublished: {{ $json.isoDate }}

Das \n fügt Zeilenumbrüche in der Discord-Nachricht ein. Die ** um den Titel machen ihn in Discords Markdown fett.

Schritt 4: Den Discord-Node hinzufügen

Fügen Sie einen Discord-Node hinzu. Verwenden Sie dasselbe Webhook-Credential. Setzen Sie die Nachricht auf {{ $json.message }}.

Klicken Sie auf Test step. Eine formatierte Blog-Post-Benachrichtigung sollte in Ihrem Discord-Kanal erscheinen.

Schritt 5: Den Workflow veröffentlichen

Klicken Sie auf Publish. Der RSS Feed Trigger prüft den Feed jetzt alle 30 Minuten und postet neue Einträge auf Discord.

Error Handler verknüpfen: Öffnen Sie die Workflow-Einstellungen und setzen Sie den Error Workflow auf Ihren Error Handler-Workflow. Veröffentlichen Sie erneut, um die Änderung zu übernehmen.

Überprüfung: Prüfen Sie den Executions-Tab nach 30 Minuten (oder ändern Sie das Poll-Intervall vorübergehend auf 1 Minute). Sie sollten eine protokollierte Ausführung sehen, auch wenn es keine neuen Einträge gab (der Workflow läuft, produziert aber keine Ausgabe, wenn nichts neu ist).

Wie exportieren und importieren Sie n8n-Workflows?

Exportieren Sie Ihre Workflows als JSON, um sie zu sichern, zu teilen oder zwischen n8n-Instanzen zu verschieben.

Einen Workflow exportieren

  1. Öffnen Sie den Workflow, den Sie exportieren möchten.
  2. Klicken Sie auf das Drei-Punkte-Menü (⋮) > Download.
  3. n8n speichert eine .json-Datei auf Ihrem Computer.

Sie können auch über die Kommandozeile exportieren, wenn Sie Shell-Zugang zum n8n-Container haben:

docker exec n8n n8n export:workflow --id=<workflow-id> --output=/tmp/workflow.json

Einen Workflow importieren

  1. Klicken Sie auf der Workflows-Seite auf das Drei-Punkte-Menü > Import from file.
  2. Wählen Sie Ihre .json-Datei.
  3. n8n importiert den Workflow als Entwurf. Überprüfen Sie ihn, aktualisieren Sie die Credentials und veröffentlichen Sie ihn dann.

Hinweis: Exportierte Workflows enthalten keine Credentials. Sie müssen diese nach dem Import auf einer neuen Instanz neu einrichten.

Fehlerbehebung

Webhook gibt 404 zurück: Die Test-URL ist nur aktiv, solange „Listen for test event" im Editor geöffnet ist. Die Produktions-URL ist nur nach der Veröffentlichung des Workflows aktiv. Stellen Sie sicher, dass Sie die richtige URL für den richtigen Modus verwenden.

Discord-Nachricht erscheint nicht: Überprüfen Sie die Webhook-URL in Ihrem Discord-Credential. Testen Sie sie direkt mit curl:

curl -X POST "https://discord.com/api/webhooks/YOUR/WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{"content": "Test message from curl"}'

Wenn das funktioniert, aber n8n nicht, liegt das Problem in der Konfiguration Ihres n8n-Discord-Nodes.

Ausdruck gibt undefined zurück: Öffnen Sie den Expression-Editor (klicken Sie auf das Feld, dann auf den Expression-Toggle). n8n zeigt verfügbare Daten aus vorherigen Nodes an. Prüfen Sie den genauen Feldpfad. Häufiger Fehler: $json.field verwenden, wenn die Daten in $json.data.field verschachtelt sind.

RSS Feed Trigger löst beim ersten Lauf für alle Einträge aus: Das ist erwartetes Verhalten. Bei der ersten Ausführung nach der Veröffentlichung gibt der Trigger alle aktuellen Feed-Einträge aus, weil er keine Historie hat, was er bereits verarbeitet hat. Nachfolgende Läufe geben nur neue Einträge aus.

Fehler-Workflow löst nicht aus: Fehler-Workflows lösen nur bei veröffentlichten, automatisch ausgeführten Workflows aus. Manuelle Testausführungen lösen sie nicht aus. Überprüfen Sie, ob der Fehler-Workflow in den Einstellungen des Haupt-Workflows verknüpft ist.

Logs prüfen: Wenn auf Anwendungsebene von n8n etwas nicht stimmt, prüfen Sie die Container-Logs:

docker logs n8n --tail 50

Für laufende Überwachung:

docker logs n8n -f

Nächste Schritte

Zwei funktionierende Workflows und ein Error Handler. Von hier aus:

  • Sichern Sie Ihre Webhook-Endpunkte mit Authentifizierungs-Headern ab.
  • Fügen Sie KI-Verarbeitung mit Ollama oder Claude zu Ihren Workflows hinzu.
  • Lesen Sie den vollständigen Leitfaden zur Produktionshärtung.
  • Lernen Sie die Grundlagen von Docker Compose für die Verwaltung von Multi-Service-Stacks. Siehe Docker Compose für Multi-Service-VPS-Deployments.

Copyright 2026 Virtua.Cloud. Alle Rechte vorbehalten. Dieser Inhalt ist ein Originalwerk des Virtua.Cloud-Teams. Vervielfältigung, Wiederveröffentlichung oder Weiterverbreitung ohne schriftliche Genehmigung ist untersagt.

Bereit, es selbst auszuprobieren?

Stellen Sie Ihren eigenen Server in Sekunden bereit. Linux, Windows oder FreeBSD.

VPS-Angebote ansehen