n8n Workflow Automation Cheat Sheet¶
Überblick¶
n8n ist eine leistungsstarke, Open-Source-Workflow-Automatisierungsplattform, die es Nutzern ermöglicht, verschiedene Systeme, Services und APIs zu verbinden, um automatisierte Workflows mit minimaler Codierung zu erstellen. Was n8n von anderen Automatisierungswerkzeugen unterscheidet, ist seine einzigartige Kombination aus Flexibilität, Erweiterbarkeit und KI-Fähigkeiten, die es sowohl für einfache Automatisierungen als auch für komplexe Unternehmensabläufe geeignet macht.
Als selbst-hostable Lösung gibt n8n den Nutzern vollständige Kontrolle über ihre Daten und Workflows, indem er sich mit Datenschutz- und Sicherheitsfragen befasst, die mit Cloud-only Lösungen kommen. Seine knotenbasierte visuelle Schnittstelle ermöglicht eine intuitive Workflow-Erstellung und bietet weiterhin die Tiefen- und Anpassungsmöglichkeiten, die technische Benutzer benötigen. Mit Unterstützung von JavaScript-Transformationen, bedingter Logik, Fehlerbehandlung und einer wachsenden Integrationsbibliothek hat sich n8n als Favorit bei Entwicklern und technischen Teams entwickelt, die Prozesse automatisieren wollen, ohne die Kontrolle oder Fähigkeiten zu gefährden.
In der KI-Ära hat sich n8n als Schlüsselinstrument für die Orchestrierung von KI-Workflows positioniert, mit integrierten Knoten für populäre KI-Dienste und der Fähigkeit, kundenspezifische Integrationen mit jedem API-accessible KI-Modell oder Service zu erstellen. Dies macht es zu einem unverzichtbaren Werkzeug für Organisationen, die KI in ihre Geschäftsprozesse integrieren möchten, während sie die Governance und Kontrolle beibehalten.
Installation und Inbetriebnahme¶
Selbstgepflegte Installation¶
```bash
Using npm¶
npm install n8n -g n8n start
Using Docker¶
docker run -it --rm \ --name n8n \ -p 5678:5678 \ -v ~/.n8n:/home/node/.n8n \ n8nio/n8n
Using Docker Compose¶
Create docker-compose.yml with:¶
version: '3'¶
services:¶
n8n:¶
image: n8nio/n8n¶
restart: always¶
ports:¶
- "5678:5678"¶
volumes:¶
- ~/.n8n:/home/node/.n8n¶
environment:¶
- N8N_ENCRYPTION_KEY=your-secret-key¶
- N8N_PROTOCOL=https¶
- N8N_HOST=n8n.example.com¶
docker-compose up -d ```_
Cloud Installation¶
n8n bietet eine Cloud-Version unter n8n.cloud mit verschiedenen Preisträgern, von frei nach Unternehmen.
Umweltkonfiguration¶
```bash
Basic configuration¶
export N8N_ENCRYPTION_KEY=your-secret-key export N8N_PROTOCOL=https export N8N_HOST=n8n.example.com export N8N_PORT=5678
Database configuration (PostgreSQL)¶
export DB_TYPE=postgresdb export DB_POSTGRESDB_HOST=postgres export DB_POSTGRESDB_PORT=5432 export DB_POSTGRESDB_DATABASE=n8n export DB_POSTGRESDB_USER=n8n export DB_POSTGRESDB_PASSWORD=password
Queue configuration (Redis)¶
export QUEUE_BULL_REDIS_HOST=redis export QUEUE_BULL_REDIS_PORT=6379
Authentication¶
export N8N_BASIC_AUTH_ACTIVE=true export N8N_BASIC_AUTH_USER=admin export N8N_BASIC_AUTH_PASSWORD=password ```_
Kernkonzepte¶
Arbeitsabläufe¶
Workflows sind die wichtigsten Bausteine in n8n. Sie bestehen aus Knoten, die miteinander verbunden sind, um einen Prozessfluss zu definieren.
Nodes¶
Nodes repräsentieren Aktionen, Trigger oder Operationen in einem Workflow. Jeder Knoten hat spezifische Funktionalitäten, wie das Senden einer E-Mail, das Abfragen einer Datenbank oder die Verarbeitung von Daten.
Verbindungen¶
Verbindungen verbinden Knoten miteinander und definieren den Datenfluss von einem Knoten zu einem anderen.
Auslöser¶
Trigger sind spezielle Knoten, die eine Workflow-Ausführung, wie Webhooks, Zeitplan oder Ereignisse von externen Systemen starten.
Durchführung¶
Ausführungsbeispiele eines Arbeitsablaufs werden manuell oder automatisch ausgelöst.
Grundlagen der Workflow-Erstellung¶
Einen neuen Workflow erstellen¶
- Navigieren Sie zur n8n Schnittstelle (Standard:
n8n.example.com
_) - Klicken Sie auf "Workflows" in der Seitenleiste
- Klicken Sie auf "Neuer Workflow erstellen"
- Geben Sie einen Namen für Ihren Workflow ein
- Klicken Sie auf "Save"
Hinzufügen und Verbinden von Nodes¶
- Klicken Sie auf die Schaltfläche "+" um einen Knoten hinzuzufügen
- Suche nach dem gewünschten Knotentyp
- Konfigurieren der Einstellungen des Knotens
- Verbindungsknoten durch Ziehen von dem Ausgangspunkt eines Knotens zum Eingangspunkt eines anderen Knotens
- Klicken Sie auf "Execute Workflow" um zu testen
Basic Workflow Beispiel¶
```javascript // HTTP Request Node Configuration \\{ "url": "https://api.example.com/data", "method": "GET", "authentication": "Basic Auth", "username": "user", "password": "pass" \\}
// Function Node to Transform Data function transform(items) \\{ return items.map(item => \\{ return \\{ id: item.json.id, name: item.json.name.toUpperCase(), created: new Date(item.json.created_at).toISOString() \\}; \\}); \\}
// Send Email Node Configuration \\{ "to": "recipient@example.com", "subject": "Data Report", "text": "=== Please find the data report attached ===", "attachments": "=\\{\\{ $json.report \\}\\}" \\} ```_
Trigger und Scheduling¶
Webhook Trigger¶
```javascript // Webhook Node Configuration \\{ "path": "incoming-data", "responseMode": "onReceived", "responseData": "firstEntryJson" \\}
// Access in browser or via curl // https://n8n.example.com/webhook/incoming-data // curl -X POST -H "Content-Type: application/json" -d '\\{"data":"test"\\}' https://n8n.example.com/webhook/incoming-data ```_
Auslöser für den Auslöser¶
```javascript // Cron Node Configuration \\{ "triggerTimes": \\{ "item": [ \\{ "mode": "everyWeek", "hour": 9, "minute": 0, "dayOfWeek": 1 // Monday \\} ] \\} \\}
// Every 5 minutes \\{ "triggerTimes": \\{ "item": [ \\{ "mode": "everyX", "unit": "minutes", "value": 5 \\} ] \\} \\} ```_
Trigger auf Dateiänderungen¶
javascript
// Watch Files Node Configuration
\\\\{
"folder": "/data/incoming",
"includeSubfolders": true,
"fileExtensions": [
"csv",
"xlsx"
]
\\\\}
_
Datenverarbeitung¶
Funktion Node¶
``javascript
// Basic transformation
function transform(items) \\\\{
return items.map(item => \\\\{
return \\\\{
...item.json,
fullName:
$\{item.json.firstName\} $\{item.json.lastName\}`,
age: calculateAge(item.json.birthDate)
\\};
\\});
\\}
function calculateAge(birthDate) \\{ const today = new Date(); const birth = new Date(birthDate); let age = today.getFullYear() - birth.getFullYear(); const monthDiff = today.getMonth() - birth.getMonth();
if (monthDiff < 0||(monthDiff === 0 && today.getDate() < birth.getDate())) \\{ age--; \\}
return age; \\}
// Filtering data function filter(items) \\{ return items.filter(item => \\{ return item.json.status === 'active' && item.json.age > 18; \\}); \\}
// Aggregating data function aggregate(items) \\{ const result = \\{ count: items.length, sum: 0, average: 0, min: Infinity, max: -Infinity \\};
items.forEach(item => \\{ const value = item.json.amount; result.sum += value; result.min = Math.min(result.min, value); result.max = Math.max(result.max, value); \\});
result.average = result.sum / result.count;
return [\\{ json: result \\}]; \\} ```_
Split in Batches Node¶
javascript
// Split In Batches Node Configuration
\\\\{
"batchSize": 10,
"options": \\\\{
"includeBatchIndex": true
\\\\}
\\\\}
_
Merge Node¶
```javascript // Merge Node Configuration \\{ "mode": "merge", "mergeByFields": \\{ "values": [ \\{ "field1": "id", "field2": "userId" \\} ] \\} \\}
// Concatenate mode \\{ "mode": "concatenate" \\}
// Multiplex mode (combine all items from all inputs) \\{ "mode": "multiplex" \\} ```_
Fehlerbehandlung und Durchflusskontrolle¶
Fehlerbehebung¶
```javascript // Error Trigger Node // This node triggers when another workflow fails
// Error Workflow Example // 1. Error Trigger Node // 2. Send Email Node with error details \\{ "to": "admin@example.com", "subject": "Workflow Error: \\{\\{ $workflow.name \\}\\}", "text": "Error in workflow: \\{\\{ $workflow.name \\}\\}\n\nError: \\{\\{ $json.error \\}\\}\n\nExecution ID: \\{\\{ $execution.id \\}\\}" \\} ```_
IF Node¶
```javascript // IF Node Configuration \\{ "conditions": \\{ "string": [ \\{ "value1": "=\\{\\{ $json.status \\}\\}", "operation": "equal", "value2": "success" \\} ] \\} \\}
// Multiple conditions with AND/OR \\{ "conditions": \\{ "string": [ \\{ "value1": "=\\{\\{ $json.status \\}\\}", "operation": "equal", "value2": "pending" \\} ], "number": [ \\{ "value1": "=\\{\\{ $json.amount \\}\\}", "operation": "larger", "value2": 1000 \\} ], "boolean": [ \\{ "value1": "=\\{\\{ $json.isVIP \\}\\}", "operation": "equal", "value2": true \\} ], "combinationMode": "any" // "all" for AND, "any" for OR \\} \\} ```_
Schalter-Node¶
javascript
// Switch Node Configuration
\\\\{
"rules": \\\\{
"values": [
\\\\{
"conditions": \\\\{
"string": [
\\\\{
"value1": "=\\\\{\\\\{ $json.status \\\\}\\\\}",
"operation": "equal",
"value2": "new"
\\\\}
]
\\\\},
"outputIndex": 0
\\\\},
\\\\{
"conditions": \\\\{
"string": [
\\\\{
"value1": "=\\\\{\\\\{ $json.status \\\\}\\\\}",
"operation": "equal",
"value2": "processing"
\\\\}
]
\\\\},
"outputIndex": 1
\\\\},
\\\\{
"conditions": \\\\{
"string": [
\\\\{
"value1": "=\\\\{\\\\{ $json.status \\\\}\\\\}",
"operation": "equal",
"value2": "completed"
\\\\}
]
\\\\},
"outputIndex": 2
\\\\}
]
\\\\},
"fallbackOutput": 3
\\\\}
_
Warten Sie.¶
```javascript // Wait Node Configuration \\{ "amount": 5, "unit": "minutes" \\}
// Wait until specific date \\{ "dateTime": "=\\{\\{ new Date($json.scheduledTime).toISOString() \\}\\}" \\} ```_
Arbeiten mit APIs¶
HTTP Request Node¶
```javascript // Basic GET request \\{ "url": "https://api.example.com/users", "method": "GET", "authentication": "None", "options": \\{\\} \\}
// POST request with JSON body \\{ "url": "https://api.example.com/users", "method": "POST", "authentication": "Bearer Token", "token": "\\{\\{ $node['Get Token'].json.access_token \\}\\}", "bodyContentType": "json", "body": \\{ "name": "\\{\\{ $json.name \\}\\}", "email": "\\{\\{ $json.email \\}\\}", "role": "user" \\}, "options": \\{ "redirect": \\{ "follow": true, "maxRedirects": 5 \\}, "timeout": 10000 \\} \\}
// Handling pagination \\{ "url": "https://api.example.com/users", "method": "GET", "authentication": "None", "options": \\{ "qs": \\{ "page": "=\\{\\{ $parameter.page||1 \\}\\}", "limit": 100 \\} \\} \\} ```_
OAuthentication¶
javascript
// OAuth2 Configuration
\\\\{
"authentication": "OAuth2",
"oAuth2Api": "custom",
"authUrl": "https://auth.example.com/oauth/authorize",
"accessTokenUrl": "https://auth.example.com/oauth/token",
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"scope": "read write",
"authQueryParameters": "",
"authentication": "body"
\\\\}
_
Webhook Antwort Node¶
javascript
// Webhook Response Node Configuration
\\\\{
"respondWith": "json",
"responseBody": "=\\\\{\\\\{ \\\\{ success: true, data: $json.processedData \\\\} \\\\}\\\\}",
"options": \\\\{
"responseCode": 200,
"responseHeaders": \\\\{
"X-Powered-By": "n8n"
\\\\}
\\\\}
\\\\}
_
Datenbanken¶
Postgres Node¶
```javascript // Query execution \\{ "operation": "executeQuery", "query": "SELECT * FROM users WHERE status = $1 AND created_at > $2", "values": [ "=\\{\\{ $json.status \\}\\}", "=\\{\\{ $json.date \\}\\}" ] \\}
// Insert operation \\{ "operation": "insert", "table": "users", "columns": "firstName,lastName,email,createdAt", "values": [ "=\\{\\{ $json.first_name \\}\\}", "=\\{\\{ $json.last_name \\}\\}", "=\\{\\{ $json.email \\}\\}", "=\\{\\{ new Date().toISOString() \\}\\}" ] \\}
// Update operation \\{ "operation": "update", "table": "users", "updateKey": "id", "columns": "status,updatedAt", "values": [ "active", "=\\{\\{ new Date().toISOString() \\}\\}" ] \\} ```_
MongoDB Node¶
```javascript // Find documents \\{ "operation": "find", "collection": "users", "options": \\{ "limit": 100, "sort": \\{ "createdAt": -1 \\} \\}, "query": "=\\{\\{ \\{ status: $json.status \\} \\}\\}" \\}
// Insert document \\{ "operation": "insertOne", "collection": "logs", "document": "=\\{\\{ \\{ action: $json.action, userId: $json.userId, timestamp: new Date(), details: $json.details \\} \\}\\}" \\}
// Update document \\{ "operation": "updateOne", "collection": "users", "filter": "=\\{\\{ \\{ id: $json.userId \\} \\}\\}", "update": "=\\{\\{ \\{ $set: \\{ status: $json.newStatus, updatedAt: new Date() \\} \\} \\}\\}", "options": \\{ "upsert": false \\} \\} ```
Dateioperationen¶
Binary Files Node lesen¶
```javascript // Read Binary Files Node Configuration \\{ "filePath": "/data/reports/latest.pdf" \\}
// Read multiple files with pattern \\{ "filePath": "/data/reports/*.csv" \\} ```_
Binary File Node schreiben¶
javascript
// Write Binary File Node Configuration
\\\\{
"filePath": "=\\\\{\\\\{ '/data/processed/' + $json.filename \\\\}\\\\}",
"fileName": "=\\\\{\\\\{ $json.filename \\\\}\\\\}",
"binaryPropertyName": "data",
"options": \\\\{
"encoding": "utf8",
"createParentPath": true
\\\\}
\\\\}
_
CSV Node¶
```javascript // Parse CSV \\{ "operation": "parse", "options": \\{ "headerRow": true, "delimiter": ",", "includeEmptyLines": false, "skipLines": 0 \\} \\}
// Create CSV \\{ "operation": "create", "options": \\{ "headerRow": true, "delimiter": ",", "includeEmptyLines": false \\} \\} ```_
Integration in die Praxis¶
OpenAI Node¶
```javascript // Text completion \\{ "authentication": "apiKey", "apiKey": "\\{\\{ $node['Credentials'].json.openai_api_key \\}\\}", "operation": "completion", "model": "gpt-4", "options": \\{ "prompt": "=\\{\\{ 'Summarize the following text in 3 bullet points:\n\n' + $json.text \\}\\}", "maxTokens": 500, "temperature": 0.7, "topP": 1, "presencePenalty": 0, "frequencyPenalty": 0, "stop": [] \\} \\}
// Chat completion \\{ "authentication": "apiKey", "apiKey": "\\{\\{ $node['Credentials'].json.openai_api_key \\}\\}", "operation": "chatCompletion", "messages": "=\\{\\{ [ \\{ role: 'system', content: 'You are a helpful assistant.' \\}, \\{ role: 'user', content: $json.userMessage \\} ] \\}\\}", "model": "gpt-4", "options": \\{ "temperature": 0.7, "maxTokens": 1000 \\} \\} ```_
Anthropische Node¶
javascript
// Claude message
\\\\{
"authentication": "apiKey",
"apiKey": "\\\\{\\\\{ $node['Credentials'].json.anthropic_api_key \\\\}\\\\}",
"operation": "message",
"model": "claude-3-opus-20240229",
"messages": "=\\\\{\\\\{ [
\\\\{ role: 'user', content: $json.userMessage \\\\}
] \\\\}\\\\}",
"options": \\\\{
"temperature": 0.7,
"maxTokens": 1000
\\\\}
\\\\}
_
KI Dokumentenverarbeitung¶
javascript
// Document processing workflow
// 1. Read Binary Files Node (PDF)
// 2. PDF Extract Node
\\\\{
"operation": "extractText"
\\\\}
// 3. Text Splitter Node
\\\\{
"operation": "splitByCharacter",
"options": \\\\{
"chunkSize": 1000,
"chunkOverlap": 200
\\\\}
\\\\}
// 4. OpenAI Node (for each chunk)
\\\\{
"operation": "chatCompletion",
"messages": "=\\\\{\\\\{ [
\\\\{ role: 'system', content: 'Extract key information from this document chunk.' \\\\},
\\\\{ role: 'user', content: $json.text \\\\}
] \\\\}\\\\}",
"model": "gpt-4",
"options": \\\\{
"temperature": 0.3
\\\\}
\\\\}
// 5. Merge Node (combine all extracted information)
// 6. OpenAI Node (final summary)
\\\\{
"operation": "chatCompletion",
"messages": "=\\\\{\\\\{ [
\\\\{ role: 'system', content: 'Create a comprehensive summary of this document based on the extracted information.' \\\\},
\\\\{ role: 'user', content: $json.extractedInfo \\\\}
] \\\\}\\\\}",
"model": "gpt-4",
"options": \\\\{
"temperature": 0.5
\\\\}
\\\\}
_
Erweiterte Funktionen¶
Unterarbeiten¶
```javascript // Execute Workflow Node Configuration \\{ "workflowId": 123, "options": \\{ "waitForResponse": true \\} \\}
// Passing data to subworkflow \\{ "workflowId": 123, "options": \\{ "waitForResponse": true \\}, "parameters": "=\\{\\{ \\{ userId: $json.id, action: 'process', data: $json.payload \\} \\}\\}" \\} ```_
Erstellungsmanagement¶
javascript
// Access credentials in HTTP Request Node
\\\\{
"url": "https://api.example.com/data",
"method": "GET",
"authentication": "Basic Auth",
"username": "=\\\\{\\\\{ $credentials.username \\\\}\\\\}",
"password": "=\\\\{\\\\{ $credentials.password \\\\}\\\\}"
\\\\}
_
Webhook Authentication¶
```javascript // Webhook Node with Basic Auth \\{ "path": "secure-endpoint", "authentication": \\{ "basicAuth": \\{ "user": "admin", "password": "secret" \\} \\}, "responseMode": "onReceived", "responseData": "firstEntryJson" \\}
// Webhook Node with Custom Auth (Header) \\{ "path": "api-endpoint", "httpMethod": "POST", "authentication": \\{ "customAuth": \\{ "checkOn": "header", "name": "X-API-KEY", "value": "your-secret-api-key" \\} \\}, "responseMode": "lastNode", "responseData": "firstEntryJson" \\} ```_
Grenzwerte¶
javascript
// Limit Node Configuration
\\\\{
"maxConcurrency": 5,
"options": \\\\{
"batchSize": 10,
"batchInterval": 1000
\\\\}
\\\\}
_
Workflow Variablen¶
```javascript // Set Variable Node \\{ "variableName": "totalAmount", "value": "=\\{\\{ $json.amount \\}\\}" \\}
// Get Variable Node \\{ "variableName": "totalAmount" \\}
// Using variables in expressions "=\\{\\{ $vars.totalAmount * 1.1 \\}\\}" // Add 10% tax ```_
Bereitstellung und Produktion¶
Umweltvariablen¶
```bash
Set environment variables for production¶
export N8N_ENCRYPTION_KEY=your-production-key export N8N_PROTOCOL=https export N8N_HOST=n8n.yourdomain.com export N8N_PORT=5678 export N8N_BASIC_AUTH_ACTIVE=true export N8N_BASIC_AUTH_USER=admin export N8N_BASIC_AUTH_PASSWORD=secure-password
Database configuration¶
export DB_TYPE=postgresdb export DB_POSTGRESDB_HOST=production-db.yourdomain.com export DB_POSTGRESDB_PORT=5432 export DB_POSTGRESDB_DATABASE=n8n_prod export DB_POSTGRESDB_USER=n8n_user export DB_POSTGRESDB_PASSWORD=db-password
Queue configuration¶
export QUEUE_BULL_REDIS_HOST=redis.yourdomain.com export QUEUE_BULL_REDIS_PORT=6379 ```_
Docker komponiert für Produktion¶
```yaml version: '3.8'
services: n8n: image: n8nio/n8n:latest restart: always ports: - "5678:5678" environment: - N8N_ENCRYPTION_KEY=\(\\\\{N8N_ENCRYPTION_KEY\\\\} - N8N_PROTOCOL=https - N8N_HOST=\)\\{N8N_HOST\\} - N8N_PORT=5678 - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=\(\\\\{N8N_BASIC_AUTH_USER\\\\} - N8N_BASIC_AUTH_PASSWORD=\)\\{N8N_BASIC_AUTH_PASSWORD\\} - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_DATABASE=n8n - DB_POSTGRESDB_USER=\(\\\\{DB_USER\\\\} - DB_POSTGRESDB_PASSWORD=\)\\{DB_PASSWORD\\} - QUEUE_BULL_REDIS_HOST=redis - QUEUE_BULL_REDIS_PORT=6379 - EXECUTIONS_PROCESS=main - EXECUTIONS_MODE=queue - GENERIC_TIMEZONE=UTC volumes: - n8n_data:/home/node/.n8n depends_on: - postgres - redis
postgres: image: postgres:14 restart: always environment: - POSTGRES_DB=n8n - POSTGRES_USER=\(\\\\{DB_USER\\\\} - POSTGRES_PASSWORD=\)\\{DB_PASSWORD\\} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $\\{DB_USER\\} -d n8n"] interval: 10s timeout: 5s retries: 5
redis: image: redis:7-alpine restart: always volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5
volumes: n8n_data: postgres_data: redis_data: ```_
Skalierung mit mehreren Arbeitern¶
```bash
Main process (API, UI, Webhook)¶
export EXECUTIONS_PROCESS=main export EXECUTIONS_MODE=queue
Worker processes (execute workflows)¶
export EXECUTIONS_PROCESS=worker export EXECUTIONS_MODE=queue ```_
Backup und Wiederherstellung¶
```bash
Export workflows¶
n8n export:workflow --all --output=workflows-backup.json
Import workflows¶
n8n import:workflow --input=workflows-backup.json
Backup credentials (encrypted)¶
n8n export:credentials --all --output=credentials-backup.json
Import credentials¶
n8n import:credentials --input=credentials-backup.json --separate ```_
Best Practices¶
Workflow Organisation¶
- Vereinbarung: Verwenden Sie klare, beschreibende Namen für Workflows und Nodes
- ** Aussprache**: Beschreibungen zu Workflows und komplexen Knoten hinzufügen
- ** Modularisierung**: Komplexe Prozesse in Subworkflows brechen
- **Tags*: Verwenden Sie Tags, um Workflows zu kategorisieren und zu organisieren
- Version Control: Wichtige Workflows regelmäßig exportieren
Leistungsoptimierung¶
- **Batch Processing*: Verwenden Sie Split In Batches für große Datensätze
- Pagination: Implementieren Sie richtige Pagination für API-Anrufe
- Caching: Verwenden Sie Set/Get Variable Nodes, um wiederholte Daten zu speichern
- **Limit Concurrency*: Verwenden Sie Limit-Knoten, um überwältigende externe Dienste zu verhindern
- Datenbankeffizienz: Schreibe effiziente Abfragen und nutze Indizes
Fehlerbehebung¶
- **Error Workflows*: Dedizierte Fehlerbehandlungs-Workflows erstellen
- **Retry Mechanisms*: Implementierung von Retry-Logik für transiente Fehler
- Validation: Validierung der Daten vor der Verarbeitung
- Logging: Wichtige Ereignisse und Fehler melden
- **Anmerkungen*: Alarme für kritische Fehler einrichten
Sicherheit¶
- ** Angaben*: Verwenden Sie das eingebaute Anmeldesystem anstelle der Hardcoding
- ** Umgebungsvariablen*: Speichern Sie sensible Informationen in Umgebungsvariablen
- **Authentication*: Secure Webhook Endpunkte mit Authentifizierung
- Access Control: Implementieren von richtigen Benutzerberechtigungen
- **Audit Logs*: Workflow-Ausführungen und Änderungen überwachen
Fehlerbehebung¶
Gemeinsame Themen¶
Workflow nicht auslösen¶
- Cause: Falsche Trigger-Konfiguration, Webhook-URL nicht zugänglich oder Terminierungsprobleme
- Solution: Triggereinstellungen überprüfen, Webhook-Zugangsmöglichkeit überprüfen und Zeitzoneneinstellungen bestätigen
Keine Ausführunfälle¶
- ** Ursache**: Invalides Datenformat, fehlende benötigte Felder oder API-Ratengrenzen
- Solution: Verwenden Sie Funktionsknoten, um Daten zu validieren und zu transformieren, die Fehlerbehandlung durchzuführen und die Geschwindigkeitsbegrenzung hinzuzufügen
Leistungsfragen¶
- ** Ursache**: Verarbeitung großer Datensätze, ineffiziente Abfragen oder Ressourcenzwänge
- Lösung: Implementieren Sie die Batch-Verarbeitung, optimieren Sie die Datenbankabfragen und skalieren Sie n8n-Bereitstellung
Authentifizierungsfehler¶
- Cause: Befristete Anmeldeinformationen, falsche API-Schlüssel oder OAuth-Token-Probleme
- Lösung: Aktualisieren Sie Anmeldeinformationen, überprüfen Sie API-Schlüsselrechte und aktualisieren Sie OAuth-Tokens
--
*Diese umfassende n8n-Cheatsheet bietet alles, was nötig ist, um anspruchsvolle Workflow-Automatisierungen aufzubauen. Von grundlegender Einrichtung bis hin zu fortschrittlichen Produktions-Bereitstellungsmustern, verwenden Sie diese Beispiele und Best Practices, um leistungsstarke, flexible Automatisierungs-Workflows mit n8n vielseitiger Plattform zu erstellen. *