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.

Workflow der Aktionsknoten

Verfügbare Knoten

KnotenSymbolFarbeBeschreibung
Trigger🎯IndigoWorkflow-Einstiegspunkt (manuell, Webhook, Zeitplan, Ereignis)
HTTP🌐BlauHTTP-Anfragen an externe APIs stellen
Setzen📝LilaWorkflow-Zustandsvariablen definieren und manipulieren
Transformation⚙️RosaDaten mithilfe von Ausdrücken oder integrierten Operationen transformieren
Switch🔀AmberBedingte Verzweigung basierend auf Bedingungen
Loop🔄EmeraldÜber Arrays iterieren oder Operationen wiederholen
Merge🔗CyanMehrere Zweige wieder zu einem einzigen Fluss zusammenführen
Warten⏱️GrauWorkflow für eine Dauer oder Bedingung pausieren
Code💻RotFührt benutzerdefiniertes JavaScript in einer Sandbox-Laufzeitumgebung aus
Datenbank🗄️PetrolDatenbankoperationen (PostgreSQL, MySQL, SQLite, MongoDB, Redis)
E-Mail📧RoseE-Mails via SMTP senden oder via IMAP überwachen
Benachrichtigung🔔OrangeSenden an Slack, Discord, Teams oder webhooks
RSS📡LimeÜberwacht RSS/Atom-Feeds auf neue Einträge
Datei📁SkyDateioperationen auf lokalem oder Cloud-Speicher (S3, GCS, Azure)

Standardeigenschaften

Jeder Aktionsknoten erbt diese gemeinsamen Eigenschaften:

Identität

EigenschaftTypBeschreibung
idstringEindeutiger Bezeichner
nameStringAnzeigename
descriptionstring?Optionale Tooltip-Beschreibung

Fehlerbehandlung

ModusVerhalten
stopWorkflow bei Fehler anhalten (Standard)
continueFehler protokollieren und zum nächsten Knoten fortfahren
retryWiederholung mit konfigurierbarer Anzahl (1-10) und Verzögerung (ms)
fallbackEinen Fallback-Wert bei Fehler verwenden

Tracing

EigenschaftTypBeschreibung
enabledbooleanDetaillierte Ausführungsspuren aktivieren
logLevelnone | error | info | debugLog-Ausführlichkeit

Ausführungssteuerung

EigenschaftTypBeschreibung
timeoutnumberTimeout in ms (Standard: 30000)
conditionstring?Überspringe den Knoten, wenn der Ausdruck als falsch ausgewertet wird

Eingabe-/Ausgabe-Zuordnung

EigenschaftTypBeschreibung
inputMappingRecord<string, string>?Zustandsfelder den Knoteneingaben zuordnen
outputKeystringSchlü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-TypBeschreibung
ManuellVom Benutzer über Chateingabe initiiert
WebhookHTTP endpoint (POST/GET) mit optionaler Authentifizierung
ZeitplanCron-basierte Zeitplanung mit Zeitzonenunterstützung
EreignisExterne Systemereignisse mit JSONPath-Filterung

HTTP-Knoten 🌐

Führt HTTP-Anfragen an externe APIs mit vollständiger Authentifizierung, Header-, Body- und Antwortverarbeitung durch.

Konfiguration:

EigenschaftTypBeschreibung
methodGET, POST, PUT, PATCH, DELETEHTTP-Methode
urlZeichenketteURL mit {{variable}} Interpolation
authobjectAuthentication (none, bearer, basic, api_key)
headersRecord<string, string>Request headers
bodyobjectBody (none, json, form, raw)
responseobjectAntwortverarbeitung (json, text, binary) mit optionaler JSONPath-Extraktion
rateLimitObjekt?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:

EigenschaftTypBeschreibung
modeset, merge, deleteVariablenoperation
variablesVariable[]Liste der zu setzenden Variablen
envVarsobject?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:

TypBeschreibung
jsonpathJSONPath expression
jmespathJMESPath expression
templateString-Vorlage mit Interpolation
javascriptJavaScript-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.

Switch-Eigenschaften-Panel

Konfiguration:

EigenschaftTypBeschreibung
evaluationModefirst_match | all_matchBeim ersten Treffer anhalten oder alle auswerten
conditionsSwitchCondition[]Liste von Bedingungen mit Ausgangsports
defaultBranchstring?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:

TypBeschreibung
forEachÜber ein Array aus dem Zustand iterieren
whileSchleife, solange die Bedingung wahr ist
timesN-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:

ModusVerhalten
wait_allWarten auf alle eingehenden Zweige
wait_anyFortfahren, wenn der erste Zweig abgeschlossen ist
wait_nFortfahren, 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:

TypBeschreibung
fixedWarten für eine feste Dauer (ms, s, m, h)
untilWarten bis zu einem bestimmten Zeitstempel
webhookAuf einen eingehenden Webhook warten
conditionEine 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:

EigenschaftTypBeschreibung
languagejavascript, typescriptCode-Sprache
codeZeichenketteAuszuführender Code
sandboxObjektSicherheitsbeschränkungen (Netzwerk, Dateisystem, Speicher, Zeit)

Sandbox-Standardeinstellungen:

LimitStandard
Netzwerkzugrifffalse
Dateisystemzugrifffalsch
Speicherlimit128 MB
Zeitlimit5000 ms

Datenbank-Knoten 🗄️

Führt Datenbankoperationen mit Verbindungspooling und parametrisierten Abfragen aus.

Unterstützte Datenbanken:

DatenbankTreiberFunktionen
PostgreSQLsqlx (postgres)Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON
MySQLsqlx (mysql)Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON
SQLitesqlx (sqlite)Asynchroner Pool, parametrisierte Abfragen, Zeile-zu-JSON
MongoDBmongodbNative BSON, find/insert/update/delete
RedisredisGET, 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.

NodeCrateWas es generiert
HTTPreqwestAsync HTTP-Anfragen mit Authentifizierung, Headern, Body und JSONPath-Extraktion
Datenbanksqlx / mongodb / redisVerbindungspools, parametrisierte Abfragen, Redis-Befehle
E-Maillettre / imapSMTP-Versand mit TLS; IMAP-Überwachung mit Suchfiltern
Codeboa_engineEingebettete JavaScript-Ausführung mit Graph-Zustand als input Objekt
SetzennativVariablenzuweisung (Literal, Ausdruck, Geheimnis)
TransformationnativMap, filter, sort, reduce, flatten, group, pick, merge, template
ZusammenführennativZweigkombination (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 →

Aktionsknoten - ADK-Rust Dokumentation | ADK-Rust