Aktionsknoten
Nicht-LLM-programmatische Knoten für deterministische Workflow-Operationen. Aktionsknoten ergänzen LLM-Agenten, indem sie Datenumwandlung, API-Integrationen, Kontrollfluss und Automatisierungslogik handhaben.
Übersicht
Aktionsknoten unterscheiden sich visuell von LLM-Agentenknoten — sie verwenden einzigartige Farben und Symbole, um Workflows leicht scannbar zu machen. Jeder Knotentyp handhabt eine spezifische Kategorie von Operationen, von HTTP-Anfragen über Datenbankabfragen bis hin zu bedingten Verzweigungen.
Alle Aktionsknoten teilen eine Reihe von Standardeigenschaften für Fehlerbehandlung, Tracing, Ausführungssteuerung und I/O-Mapping. Sie unterstützen {{variable}} Interpolation in String-Feldern und empfangen automatisch die Ausgaben von Vorgängerknoten.

Verfügbare Knoten
| Knoten | Symbol | Farbe | Beschreibung |
|---|---|---|---|
| Trigger | 🎯 | Indigo | Workflow-Einstiegspunkt (manuell, Webhook, Zeitplan, Ereignis) |
| HTTP | 🌐 | Blau | HTTP-Anfragen an externe APIs stellen |
| Setzen | 📝 | Lila | Workflow-Zustandsvariablen definieren und manipulieren |
| Transformation | ⚙️ | Rosa | Daten mithilfe von Ausdrücken oder integrierten Operationen transformieren |
| Switch | 🔀 | Amber | Bedingte Verzweigung basierend auf Bedingungen |
| Loop | 🔄 | Emerald | Über Arrays iterieren oder Operationen wiederholen |
| Merge | 🔗 | Cyan | Mehrere Zweige wieder zu einem einzigen Fluss zusammenführen |
| Warten | ⏱️ | Grau | Workflow für eine Dauer oder Bedingung pausieren |
| Code | 💻 | Rot | Führt benutzerdefiniertes JavaScript in einer Sandbox-Laufzeitumgebung aus |
| Datenbank | 🗄️ | Petrol | Datenbankoperationen (PostgreSQL, MySQL, SQLite, MongoDB, Redis) |
| 📧 | Rose | E-Mails via SMTP senden oder via IMAP überwachen | |
| Benachrichtigung | 🔔 | Orange | Senden an Slack, Discord, Teams oder webhooks |
| RSS | 📡 | Lime | Überwacht RSS/Atom-Feeds auf neue Einträge |
| Datei | 📁 | Sky | Dateioperationen auf lokalem oder Cloud-Speicher (S3, GCS, Azure) |
Standardeigenschaften
Jeder Aktionsknoten erbt diese gemeinsamen Eigenschaften:
Identität
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutiger Bezeichner |
name | String | Anzeigename |
description | string? | Optionale Tooltip-Beschreibung |
Fehlerbehandlung
| Modus | Verhalten |
|---|---|
stop | Workflow bei Fehler anhalten (Standard) |
continue | Fehler protokollieren und zum nächsten Knoten fortfahren |
retry | Wiederholung mit konfigurierbarer Anzahl (1-10) und Verzögerung (ms) |
fallback | Einen Fallback-Wert bei Fehler verwenden |
Tracing
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
enabled | boolean | Detaillierte Ausführungsspuren aktivieren |
logLevel | none | error | info | debug | Log-Ausführlichkeit |
Ausführungssteuerung
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
timeout | number | Timeout in ms (Standard: 30000) |
condition | string? | Überspringe den Knoten, wenn der Ausdruck als falsch ausgewertet wird |
Eingabe-/Ausgabe-Zuordnung
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
inputMapping | Record<string, string>? | Zustandsfelder den Knoteneingaben zuordnen |
outputKey | string | Schlüssel, wo das Ergebnis im workflow state gespeichert wird |
Knotenreferenz
Trigger-Knoten 🎯
Einstiegspunkt des Workflows. Jeder Workflow beginnt mit einem Trigger-Knoten. Siehe den dedizierten Trigger-Leitfaden für weitere Details.
| Trigger-Typ | Beschreibung |
|---|---|
| Manuell | Vom Benutzer über Chateingabe initiiert |
| Webhook | HTTP endpoint (POST/GET) mit optionaler Authentifizierung |
| Zeitplan | Cron-basierte Zeitplanung mit Zeitzonenunterstützung |
| Ereignis | Externe Systemereignisse mit JSONPath-Filterung |
HTTP-Knoten 🌐
Führt HTTP-Anfragen an externe APIs mit vollständiger Authentifizierung, Header-, Body- und Antwortverarbeitung durch.
Konfiguration:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
method | GET, POST, PUT, PATCH, DELETE | HTTP-Methode |
url | Zeichenkette | URL mit {{variable}} Interpolation |
auth | object | Authentication (none, bearer, basic, api_key) |
headers | Record<string, string> | Request headers |
body | object | Body (none, json, form, raw) |
response | object | Antwortverarbeitung (json, text, binary) mit optionaler JSONPath-Extraktion |
rateLimit | Objekt? | Ratenbegrenzung (Anfragen pro Fenster) |
Beispiel:
{
"type": "http",
"name": "Fetch User Data",
"method": "GET",
"url": "https://api.example.com/users/{{userId}}",
"auth": {
"type": "bearer",
"bearer": { "token": "{{API_TOKEN}}" }
},
"headers": { "Accept": "application/json" },
"body": { "type": "none" },
"response": { "type": "json", "jsonPath": "$.data" },
"errorHandling": { "mode": "retry", "retryCount": 3, "retryDelay": 1000 },
"mapping": { "outputKey": "userData" }
}
Setzen-Knoten 📝
Definiert und manipuliert Workflow-Zustandsvariablen. Unterstützt literale Werte, Ausdrücke und Geheimnisse.
Konfiguration:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
mode | set, merge, delete | Variablenoperation |
variables | Variable[] | Liste der zu setzenden Variablen |
envVars | object? | Laden aus .env-Datei mit optionalem Präfixfilter |
Variablentypen: string, number, boolean, json, expression
Variablen, die mit isSecret: true gekennzeichnet sind, werden in Protokollen und der Benutzeroberfläche maskiert.
Transformationsknoten ⚙️
Transformiert Daten mithilfe von Ausdrücken oder integrierten Operationen.
Transformationstypen:
| Typ | Beschreibung |
|---|---|
jsonpath | JSONPath expression |
jmespath | JMESPath expression |
template | String-Vorlage mit Interpolation |
javascript | JavaScript-Ausdruck |
Eingebaute Operationen: pick, omit, rename, flatten, sort, unique
Typumwandlungsziele: string, number, boolean, array, object
Switch-Knoten 🔀
Bedingte Verzweigung mit mehreren Ausgabeports. Jede Bedingung wird einem separaten Ausgabeport am Knoten zugeordnet.

Konfiguration:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
evaluationMode | first_match | all_match | Beim ersten Treffer anhalten oder alle auswerten |
conditions | SwitchCondition[] | Liste von Bedingungen mit Ausgangsports |
defaultBranch | string? | Output port, wenn keine Bedingungen zutreffen |
Bedingungsoperatoren: eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists
Beispiel:
{
"type": "switch",
"evaluationMode": "first_match",
"conditions": [
{ "id": "ok", "name": "Success", "field": "status", "operator": "eq", "value": "success", "outputPort": "success" },
{ "id": "err", "name": "Error", "field": "status", "operator": "eq", "value": "error", "outputPort": "error" }
],
"defaultBranch": "unknown"
}
Schleifen-Knoten 🔄
Iteriert über Arrays, wiederholt eine feste Anzahl von Malen oder läuft in einer Schleife, solange eine Bedingung erfüllt ist.
Schleifentypen:
| Typ | Beschreibung |
|---|---|
forEach | Über ein Array aus dem Zustand iterieren |
while | Schleife, solange die Bedingung wahr ist |
times | N-mal wiederholen |
Parallele Ausführung: Aktivieren Sie parallel.enabled mit optionalem batchSize und delayBetween für gleichzeitige Iteration.
Ergebnisaggregation: Wenn results.collect wahr ist, werden die Iterationsergebnisse in einem Array unter results.aggregationKey gesammelt.
Merge-Knoten 🔗
Führt mehrere parallele Zweige wieder zu einem einzigen Fluss zusammen. Hat mehrere Eingangsports.
Merge-Modi:
| Modus | Verhalten |
|---|---|
wait_all | Warten auf alle eingehenden Zweige |
wait_any | Fortfahren, wenn der erste Zweig abgeschlossen ist |
wait_n | Fortfahren, nachdem N Zweige abgeschlossen sind |
Strategien kombinieren: array, object, first, last
Optionales Timeout mit continue oder error Verhalten.
Warteknoten ⏱️
Pausiert die Workflow-Ausführung.
Wartetypen:
| Typ | Beschreibung |
|---|---|
fixed | Warten für eine feste Dauer (ms, s, m, h) |
until | Warten bis zu einem bestimmten Zeitstempel |
webhook | Auf einen eingehenden Webhook warten |
condition | Eine Bedingung in Intervallen abfragen |
Code-Knoten 💻
Führt benutzerdefiniertes JavaScript in einer Sandboxed boa_engine runtime aus. Der Graph-Zustand wird als globales input Objekt injiziert.
Konfiguration:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
language | javascript, typescript | Code-Sprache |
code | Zeichenkette | Auszuführender Code |
sandbox | Objekt | Sicherheitsbeschränkungen (Netzwerk, Dateisystem, Speicher, Zeit) |
Sandbox-Standardeinstellungen:
| Limit | Standard |
|---|---|
| Netzwerkzugriff | false |
| Dateisystemzugriff | falsch |
| Speicherlimit | 128 MB |
| Zeitlimit | 5000 ms |
Datenbank-Knoten 🗄️
Führt Datenbankoperationen mit Verbindungspooling und parametrisierten Abfragen aus.
Unterstützte Datenbanken:
| Datenbank | Treiber | Funktionen |
|---|---|---|
| PostgreSQL | sqlx (postgres) | Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON |
| MySQL | sqlx (mysql) | Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON |
| SQLite | sqlx (sqlite) | Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON |
| MongoDB | mongodb | Native BSON, find/insert/update/delete |
| Redis | redis | GET, SET, DEL, HGET, HSET, LPUSH, LRANGE |
Verbindungszeichenfolgen werden als Geheimnisse behandelt und in Protokollen maskiert.
E-Mail-Knoten 📧
Senden Sie E-Mails über SMTP oder überwachen Sie eingehende E-Mails über IMAP.
Sendemodus (SMTP):
- TLS/SSL-Unterstützung
- Authentifizierung
- An/CC/BCC-Empfänger
- HTML- oder Nur-Text-Nachrichtentext
{{variable}}-Interpolation in Betreff und Nachrichtentext- Dateianhänge aus dem Zustand
Überwachungsmodus (IMAP):
- Ordnerauswahl (Standard: INBOX)
- Filter: Absender, Betreff, Datumsbereich, nur ungelesen
- Nach der Verarbeitung als gelesen markieren
Benachrichtigungsknoten 🔔
Sendet Benachrichtigungen an Messaging-Plattformen.
Kanäle: Slack, Discord, Microsoft Teams, benutzerdefinierter Webhook
Nachrichtenformate: Nur-Text, Markdown, plattformspezifische Blöcke (Block Kit, Embeds, Adaptive Cards)
RSS-Knoten 📡
Überwacht RSS/Atom-Feeds auf neue Einträge.
- Konfigurierbares Abfrageintervall
- Filter nach Stichwort, Autor, Kategorie und Datum
- Verfolgung bereits gesehener Elemente zur Vermeidung von Duplikaten
- Optional vollständiger Inhalt oder nur Zusammenfassung
Dateiknoten 📁
Dateioperationen auf lokalem oder Cloud-Speicher.
Operationen: lesen, schreiben, löschen, auflisten
Cloud-Anbieter: Amazon S3, Google Cloud Storage, Azure Blob Storage
Dateiformate: JSON, CSV, XML, Text, Binär (mit CSV-Parsing-Optionen für Trennzeichen, Header, Anführungszeichen)
Variableninterpolation
Alle String-Felder in Aktionsknoten unterstützen die {{variable}}-Syntax für dynamische Werte:
https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.
Variablen werden zur Ausführungszeit aus dem Workflow-Zustand aufgelöst. Die Punktnotation (user.name) greift auf verschachtelte Werte zu.
Multi-Port-Knoten
Zwei Knotentypen haben dynamische Port-Anzahlen:
- Switch — ein Ausgangsport pro Bedingung, plus ein optionaler Standardport
- Merge — mehrere Eingangsports, einer pro eingehendem Zweig
Diese Ports werden visuell auf dem Knoten dargestellt und verbinden sich mit verschiedenen nachgeschalteten/vorgeschalteten Knoten.
Codegenerierung
Aktionsknoten kompilieren zu Produktions-Rust-Code neben LLM-Agents. Abhängigkeiten werden automatisch erkannt und dem generierten Cargo.toml hinzugefügt.
| Node | Crate | Was es generiert |
|---|---|---|
| HTTP | reqwest | Async HTTP-Anfragen mit Authentifizierung, Headern, Body und JSONPath-Extraktion |
| Datenbank | sqlx / mongodb / redis | Verbindungspools, parametrisierte Abfragen, Redis-Befehle |
lettre / imap | SMTP-Versand mit TLS; IMAP-Überwachung mit Suchfiltern | |
| Code | boa_engine | Eingebettete JavaScript-Ausführung mit Graph-Zustand als input Objekt |
| Setzen | nativ | Variablenzuweisung (Literal, Ausdruck, Geheimnis) |
| Transformation | nativ | Map, filter, sort, reduce, flatten, group, pick, merge, template |
| Zusammenführen | nativ | Zweigkombination (waitAll, waitAny, append) |
Alle generierten Codes verwenden adk-graph FunctionNode closures mit GraphError::NodeExecutionFailed zur Fehlerbehandlung.
Beispiel für generierten Code (HTTP-Knoten):
let http_node = FunctionNode::new("fetch_data", |ctx| async move {
let client = reqwest::Client::new();
let resp = client.get("https://api.example.com/data")
.bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
.send().await
.map_err(|e| GraphError::NodeExecutionFailed {
node: "fetch_data".into(),
message: e.to_string(),
})?;
let body: serde_json::Value = resp.json().await?;
Ok(NodeOutput::new().with_update("apiData", body))
});
Beispiel für generierten Code (Code-Knoten):
let code_node = FunctionNode::new("process", |ctx| async move {
let mut js_ctx = boa_engine::Context::default();
// Graph state injected as global `input` object
// User code executed in thread-isolated sandbox
Ok(NodeOutput::new().with_update("result", output))
});
Zurück: ← Studio | Weiter: Triggers →