Communityn8ngithub.com

ashtonfeliciano/n8n-Workflow-Engineer

n8n-Workflows erstellen, debuggen und absichern. Verwenden Sie diesen Skill, wenn der Benutzer n8n-Workflow-JSON bearbeitet, stille Fehler behebt, mit Code-Knoten, Telegram-/Gmail-/HTTP-Request-Knoten, geplanten Triggern, Paired-Item-Tracking, Deduplizierung mit statischen Daten oder Bulk-Operationen über die n8n-REST-API arbeitet. Deckt die v2.x-UI-Besonderheiten ab. Nicht für Automatisierungen außerhalb von n8n.

Was ist n8n-Workflow-Engineer?

Dieser Skill dient als Spezialist für die Entwicklung und Fehlerbehebung von n8n-Workflows. Er deckt ein breites Spektrum an Aufgaben ab, vom Entwurf und Debuggen von Workflow-JSON bis hin zur Lösung von kniffligen Problemen wie stillen Fehlern, Paired-Item-Verknüpfungen und Deduplizierung mit statischen Daten. Der Skill konzentriert sich auf die n8n v2.x-Oberfläche und unterstützt gängige Knotentypen wie Telegram, Gmail, HTTP-Request, Code, Switch und Merge. Er bietet detaillierte Anleitungen zur Fehlerbehebung, bewährte Methoden und konkrete Codebeispiele für häufige Szenarien, einschließlich der Arbeit mit der n8n-REST-API, der Zeitzonenkonfiguration und der Pipeline-Beobachtbarkeit. Das zugrunde liegende Prinzip ist ein gründlicher Prüf- und Testansatz: Vor jeder Änderung wird der gesamte Workflow analysiert, und die Ergebnisse werden mithilfe von Ausführungsprotokollen und echten geplanten Läufen überprüft.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ashtonfeliciano/claude-skills-pack/tree/HEAD/skills/n8n-workflow-engineer

Installed? Explore more n8n skills: ashtonfeliciano/n8n-evaluations-runner, hubgunter4-ops/configurador-de-nodos-n8n, hubgunter4-ops/experto-en-n8n-mcp · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

n8n Workflow Engineer

Wann auslösen

  • Bearbeiten oder Erstellen von n8n-Workflow-JSON
  • Debuggen von n8n: "Knoten wird nicht ausgeführt", "Paired-Item nicht verfügbar", "Statische Daten werden nicht dauerhaft gespeichert"
  • Bulk-Operationen (umbenennen, wiederholen, löschen) über die n8n-REST-API
  • Telegram-, Gmail-, HTTP-Request-, Code-, Switch-, Merge-Knoten-Muster
  • Geplanter Trigger / Zeitzone / Cron-Verhalten in n8n
  • n8n v2.x UI-Verhalten (Veröffentlichen/Veröffentlichung rückgängig machen, Archivieren)

Harte Regeln

  1. Prüfen vor dem Bearbeiten. Lesen Sie das vollständige Workflow-JSON → präsentieren Sie die Ergebnisse → bestätigen Sie → wenden Sie es in einem Durchgang an. Niemals blind patchen.
  2. Testen über geplanten Trigger. Manuelles "Ausführen" setzt $workflow.staticData zurück. Der Deduplizierungsnachweis erfordert einen echten Cron-Durchlauf.
  3. Überprüfen Sie das tatsächliche Ergebnis. Prüfen Sie das Ausführungsprotokoll und den Endzustand (die Nachricht ist angekommen, die Zeile existiert). Ein Knoten, der ok: true zurückgibt, ist ein gutes Zeichen, kein Beweis. Die UI-Synchronisationsverzögerung täuscht Beobachter.
  4. Passen Sie den Code-Knoten-Modus an die Rückgabesignatur an. Falscher Modus + falsche Rückgabe = stille Teilverarbeitung.

Kurzreferenz — die häufigsten Fehler

SymptomUrsacheLösung
HTTP-Request an localhost:4000 gibt "refused/timeout" zurückn8n im Docker-Bridge-ModusVerwenden Sie das Host-Gateway: oft 172.17.0.1 auf der Standard-Bridge (prüfen mit docker network inspect bridge), oder mappen Sie host.docker.internal:host-gateway in extra_hosts
Telegram-Nachricht kommt nie an, kein FehlerIPv6-DNS-TimeoutNODE_OPTIONS=--dns-result-order=ipv4first in docker-compose
new Date() gibt UTC zurück, obwohl Cron in ESTContainer fehlt die Umgebungsvariable TZSetzen Sie sowohl TZ als auch GENERIC_TIMEZONE auf Ihre Zeitzone
parse_mode: Markdown schlägt still fehl oder verzerrtUngepaarte * oder _ in KI-AusgabeVerwenden Sie parse_mode: HTML + bereinigen Sie vor dem Senden
401 auf LiteLLM HTTP-Request-KnotenFehlender Auth-HeaderFügen Sie Authorization: Bearer {{ $env.LITELLM_API_KEY }} hinzu
ECONNABORTED: timeout of 15000ms bei Claude-AufrufStandard-Timeout 15sSetzen Sie options.timeout: 90000
PUT auf /api/v1/workflows/:id gibt 400 zurückZusätzliche Felder im BodyReduzieren Sie auf: nur name, nodes, connections, settings, staticData
Knotenumbenennung unterbricht Workflow stillschweigendVerbindungsreferenzen beziehen sich auf den alten NamenErsetzen Sie (replace_all) den alten Namen sowohl in nodes[].name als auch in connections{}-Schlüsseln
Paired-Item nach Code-Aggregation nicht verfügbarN→1→M hat Item-Abstammung verlorenSetzen Sie executeOnce: true, iterieren Sie explizit mit $('UpstreamNode').all()
Deduplizierung mit statischen Daten "funktioniert nicht" bei manuellem LaufManuelles Ausführen setzt statische Daten zurückNur über geplanten Cron testen

Code-Knoten — die Modus-/Rückgaberegeln

Jeder Code-Knoten hat einen mode-Parameter. Nichtübereinstimmung = stille Fehler.

ModusZugriffsmusterRückgabe
runOnceForAllItems (Standard)const items = $input.all();return items.map(...) — muss Array sein
runOnceForEachItem$json ist das aktuelle Itemreturn { json: ... } — einzelnes Objekt, KEIN Array

Symptome einer Nichtübereinstimmung:

  • runOnceForAllItems + Zugriff auf $json → nur das erste Item wird stillschweigend verarbeitet
  • runOnceForEachItem + Rückgabe eines Arrays → Validierungsfehler "Eine 'json'-Eigenschaft ist kein Objekt"

Deduplizierungsmuster (workflowübergreifender Zustand)

const store = $getWorkflowStaticData('global');
store.jobIds = store.jobIds || [];

const newItems = items.filter(item => !store.jobIds.includes(item.json.id));

// Neue IDs speichern, auf letzte 500 begrenzen, um unbegrenztes Wachstum zu vermeiden
store.jobIds = [...store.jobIds, ...newItems.map(i => i.json.id)].slice(-500);

return newItems;

Wichtig: staticData bleibt nur über geplante Läufe hinweg bestehen. Manuelles Ausführen setzt es zurück. Überprüfen Sie die Deduplizierung, indem Sie zwei aufeinanderfolgende geplante Läufe beobachten, nicht durch zweimaliges Klicken auf "Ausführen".

Bereinigung des Laufzeit-Caches

// Am Anfang des ersten Code-Knotens — flüchtige Caches bereinigen, aber workflowübergreifenden Zustand erhalten
const store = $getWorkflowStaticData('global');
for (const k of Object.keys(store)) {
  if (k.startsWith('cjob_') || k.startsWith('cprep_') || k === 'pendingJobs') {
    delete store[k];
  }
}
// NIEMALS jobIds löschen — workflowübergreifende Deduplizierung ist darauf angewiesen

Pipeline-Beobachtbarkeitsmuster

Setzen Sie Zähler an jedem wichtigen Code-Knoten. Lesen Sie sie im Formatierungsschritt. Hängen Sie sie an die Nachricht an.

// Stufe 1 — Ticker erstellen
const store = $getWorkflowStaticData('global');
store.pipeline = { ticker_count: tickers.length, fixed_count: fixed.length };

// Stufe 2 — Signale berechnen
store.pipeline = store.pipeline || {};
store.pipeline.signal_count = results.length;

// Final — Nachricht formatieren
const pl = store.pipeline || {};
const pf = (n) => (n === undefined || n === null) ? '?' : String(n);
const pipelineBlock =
  '\n\n📊 Pipeline\n' +
  'Ticker erstellen: ' + pf(pl.ticker_count) + '\n' +
  'Signale:         ' + pf(pl.signal_count);

Paired-Item-Problem + Workaround

Symptom: Nach einem Aggregationsknoten (N Items → 1 Prompt → 1 LLM-Antwort → Aufteilung in M Items) wirft der nachgelagerte $('UpstreamNode').item.json den Fehler "Paired item data for item from node 'X' is unavailable".

Workarounds (in der Reihenfolge der Präferenz):

  1. Setzen Sie executeOnce: true auf den nachgelagerten Code-Knoten, iterieren Sie explizit:

    const upstream = $('UpstreamNode').all();
    const outputs = [];
    for (let i = 0; i < parsed.length; i++) {
      outputs.push({ json: { ...parsed[i], original: upstream[i].json } });
    }
    return outputs;
    
  2. Übergeben Sie IDs über statische Daten; suchen Sie sie downstream explizit nach.

  3. pairedItem.sourceOverwrite — fragil, letzter Ausweg.

Telegram-Muster

HTML-Modus — nur 7 Tags erlaubt

<b>, <i>, <u>, <s>, <a>, <code>, <pre> — alles andere wirft 400 Bad Request: Unsupported start tag.

Drei-Schutzebenen für KI-generierte Inhalte

  1. Prompt: Sagen Sie der KI explizit, welche Tags erlaubt sind
  2. Bereinigen: Entfernen Sie nicht unterstützte Tags im Code vor dem Senden
  3. Escape: HTML-escaped Sie Benutzer-/KI-Inhalte (& → &amp;, < → &lt;, > → &gt;) vor dem Einbetten

n8n-Attribution-Fußzeile unterdrücken

"additionalFields": {
  "parse_mode": "HTML",
  "appendAttribution": false,
  "disable_web_page_preview": true
}

Token-in-.env vs. Credential

Bevorzugen Sie das Umgebungsvariablen + HTTP-Request-Muster gegenüber dem integrierten Telegram-Knoten + Credential:

  • Portierbar über Migrationen hinweg
  • Einfacher zu rotieren (nano .env + Container-Neustart)
  • Kein DB-Verschlüsselungsschlüssel-Sperrrisiko
  • Muster: POST https://api.telegram.org/bot{{ $env.BOT_TOKEN }}/sendMessage
  • Nachteil: Das Token befindet sich in der Request-URL, kann also in Ausführungsdaten, Proxy-Logs und Fehlermeldungen auftauchen. Deaktivieren Sie das Speichern von Ausführungsdaten für diesen Workflow oder verwenden Sie das integrierte Telegram-Credential, wenn andere Ihre Logs lesen können.

Gmail-OAuth-Muster

ProblemLösung
invalid_grant ... refresh token revokedOAuth im "Test"-Modus läuft nach ~7 Tagen ab. Erneute Authentifizierung über die UI oder App in den Produktionsmodus versetzen.
Leere payload.headers (Von/Betreff leer)Standardmäßig entfernt simple: true Header. Setzen Sie options.simple: false.
Fehlende Sicherheitswarnungen / QuittungenSchließen Sie -category:promotions -category:social -category:updates nicht aus — Gmail routet 90% der relevanten E-Mails dorthin. Verwenden Sie nur is:unread newer_than:Nd.
Als gelesen markieren über mehrere Konten hinwegPro Konto sind separate Credentials erforderlich. Ein Gmail-Credential kann nicht mit den Nachrichten-IDs eines anderen Kontos arbeiten.

REST-API-Muster (Bulk-Operationen)

Auth: X-N8N-API-KEY: <key> Header.

EndpunktHinweise
GET /api/v1/workflowsGibt alle zurück (paginiert). Client-seitig filtern.
GET /api/v1/workflows/:idVollständiges Workflow-JSON.
PUT /api/v1/workflows/:idStreng: nur name, nodes, connections, settings, staticData. settings selbst hat eine Whitelist (siehe unten). Entfernen Sie alles andere bei einem GET-dann-PUT-Roundtrip.
DELETE /api/v1/workflows/:idLöscht tatsächlich (die UI bietet nur Archivierung). Für Bulk-Bereinigung verwenden.
POST /api/v1/workflows/:id/activateEntspricht dem Veröffentlichen in der v2.x-UI.

Whitelist für das settings-Feld (PUT-Body)

executionOrder, timezone, saveExecutionProgress, saveDataErrorExecution, saveDataSuccessExecution, saveManualExecutions, callerPolicy, callerIds, errorWorkflow, executionTimeout

Knoten-type ist nach der Erstellung unveränderlich

Ein PUT, das node.type ändert, gibt 200 zurück, aber der Typ bleibt gleich. Zum Konvertieren (z.B. telegram → httpRequest): Ersetzen Sie das gesamte Knotenobjekt (neue UUID für id, gleicher name). Verbindungen werden nach Name aufgelöst, daher ist die namenserhaltende Ersetzung sicher.

n8n v2.x UI-Besonderheiten

Alt (v1.x)Neu (v2.x)
Aktivieren-UmschalterVeröffentlichen (grüner Button, oben rechts) / Veröffentlichung rückgängig machen
Workflow löschenNur archivieren (für echtes Löschen die REST-API verwenden)

HTTP-Request-Knoten — Must-Haves für LLM-Aufrufe

{
  "method": "POST",
  "url": "http://172.17.0.1:4000/v1/chat/completions",
  "sendHeaders": true,
  "headerParameters": {
    "parameters": [
      {"name": "Content-Type", "value": "application/json"},
      {"name": "Authorization", "value": "=Bearer {{ $env.LITELLM_API_KEY }}"}
    ]
  },
  "sendBody": true,
  "contentType": "raw",
  "rawContentType": "application/json",
  "body": "={{ JSON.stringify({model:'<your-model-alias>',messages:[{role:'user',content:$json.prompt}],temperature:0.3}) }}",
  "options": {
    "timeout": 90000,
    "retry": { "tries": 2, "waitBetweenTries": 5000 }
  }
}

n8n-Container hat kein curl

Für HTTP-Tests innerhalb des Containers verwenden Sie das integrierte https-Modul von Node über docker exec:

docker exec n8n node -e "const https=require('https'); /* request */"

SSH-Vorbereitung (vor jedem Heredoc auf VPS)

ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=10 <user>@<host>
# Prompt prüfen: [<user>@<host> ...]$
# Erst DANN das Heredoc einfügen

Das Einfügen eines Bash-Heredocs in PowerShell nach einem SSH-Drop = hunderte Parse-Fehler.

Eval-Suite-Muster (nur Logik)

Mock-Input-Tests über die n8n-Evaluierungs-Funktion erkennen logische Regressionen, ohne API-Guthaben zu verbrauchen. Führen Sie sie VOR und NACH jeder Änderung an Filterlogik, Schlüsselwortlisten oder Validierungsregeln erneut aus.

Anti-Pattern

Anti-PatternStattdessen tun
"Führen Sie es nochmal aus, sehen Sie, ob es funktioniert"Lesen Sie zuerst das Ausführungsprotokoll von Anfang bis Ende
Einen Knoten nach dem anderen über viele Roundtrips patchenGesamte Datei prüfen → gebündeltes Patch-Skript → in einem Durchgang verifizieren
parse_mode: Markdown für KI-Ausgabe verwendenparse_mode: HTML + Bereiniger
API-Schlüssel / Chat-IDs im Workflow-JSON hartcodierenReferenzieren Sie {{ $env.KEY }}, speichern Sie in <secret-file> (chmod 600)
Knoten umbenennen, ohne Verbindungen zu aktualisierenreplace_all auf den Knotennamen sowohl in nodes[].name als auch in connections{}-Schlüsseln
Manuelles Ausführen zum Testen der DeduplizierungAuf geplanten Trigger warten
Standard-httpRequest-Timeout für LLM-AufrufeMinimum 90000ms setzen
Mischen von runOnceForAllItems und $jsonModus an Zugriffsmuster anpassen

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills

ashtonfeliciano/n8n-evaluations-runner

Build and run zero-API-cost logic test suites for n8n workflows. Use when adding test coverage to filter logic, scoring functions, validators, keyword lists, resume maps, or any pure-JS code-node logic. Outputs grouped pass/fail/pending report via Telegram. Run before AND after any logic change to catch regressions without burning API credits.

community

hubgunter4-ops/configurador-de-nodos-n8n

Ayuda a configurar nodos de n8n con reglas de dependencia complejas y conexiones de IA. Agiliza la creación de flujos de trabajo automatizados gestionando dependencias de nodos intrincadas e integraciones de IA.

community

hubgunter4-ops/experto-en-n8n-mcp

Guía a los desarrolladores a seleccionar y configurar herramientas y formatos de nodo del Protocolo de Contexto de Modelo MCP dentro de los flujos de trabajo de n8n. Proporciona orientación estructurada para integrar herramientas MCP.

community

caiqueDeOliveira-dev/homelab

HomeLab Agent — Gerencia Home Assistant, ESP32 satellites, dispositivos Zigbee/Matter/Thread, automações físicas, cameras, sensores. Camada de decisão e execução no hardware (não orquestração de software = Automação/n8n).

community

hubgunter4-ops/experto-en-n8n-mcp

Guía a los desarrolladores a seleccionar y configurar herramientas y formatos de nodo del Protocolo de Contexto de Modelo MCP dentro de los flujos de trabajo de n8n. Proporciona orientación estructurada para integrar herramientas MCP.

community

hubgunter4-ops/experto-en-validacion-de-n8n

Corrige errores de validación de n8n consultando un catálogo de errores integrado. Optimiza el proceso de depuración, permitiendo identificar rápidamente problemas y resolver problemas de configuración del flujo de trabajo.

community