Nœuds d'action

Nœuds non-LLM programmatiques pour des opérations de flux de travail déterministes. Les nœuds d'action complètent les LLM agents en gérant la transformation de données, les API intégrations, le flux de contrôle et la logique d'automatisation.

Aperçu

Les nœuds d'action sont visuellement distincts des LLM nœuds d'agent — ils utilisent des couleurs et des icônes uniques pour faciliter la lecture des flux de travail. Chaque type de nœud gère une catégorie d'opération spécifique, des HTTP requêtes aux requêtes de base de données en passant par le branchement conditionnel.

Tous les nœuds d'action partagent un ensemble de propriétés standard pour la gestion des erreurs, le traçage, le contrôle d'exécution et le mappage d'E/S. Ils prennent en charge l'{{variable}} interpolation dans les champs de chaîne et reçoivent automatiquement les sorties des nœuds prédécesseurs.

Flux de travail des nœuds d'action

Nœuds disponibles

NœudIcôneCouleurDescription
Déclencheur🎯IndigoPoint d'entrée du workflow (manuel, webhook, planification, événement)
HTTP🌐BleuEffectue des requêtes HTTP vers des APIs externes
Définir📝VioletDéfinir et manipuler les variables d'état du workflow
Transformer⚙️RoseTransformer les données à l'aide d'expressions ou d'opérations intégrées
Commutateur🔀AmbreBranchement conditionnel basé sur des conditions
Boucle🔄ÉmeraudeItérer sur des tableaux ou répéter des opérations
Fusionner🔗CyanCombiner plusieurs branches en un seul flux
Attendre⏱️GrayMettre en pause le flux de travail pour une durée ou une condition
Code💻RedExécuter JavaScript personnalisé dans un environnement d'exécution sandboxé
Base de données🗄️TealOpérations de base de données (PostgreSQL, MySQL, SQLite, MongoDB, Redis)
E-mail📧RoseEnvoyer des e-mails via SMTP ou surveiller via IMAP
Notification🔔OrangeEnvoyer vers Slack, Discord, Teams, ou des webhooks
RSS📡LimeSurveiller les flux RSS/Atom pour de nouvelles entrées
Fichier📁SkyOpérations de fichier sur le stockage local ou cloud (S3, GCS, Azure)

Propriétés standard

Chaque nœud d'action hérite de ces propriétés partagées :

Identité

PropriétéTypeRôle
idstringIdentifiant unique
namestringNom d'affichage
descriptionstring?Description optionnelle de l'info-bulle

Gestion des erreurs

ModeComportement
stopArrêter le workflow en cas d'erreur (par défaut)
continueEnregistrer l'erreur et passer au nœud suivant
retryRéessayer avec un nombre configurable (1-10) et un délai (ms)
fallbackUtiliser une valeur de repli en cas d'erreur

Traçage

PropriétéTypeRôle
enabledbooleanActiver les traces d'exécution détaillées
logLevelnone | error | info | debugNiveau de verbosité des logs

Contrôle d'exécution

PropriétéTypeRôle
timeoutnumberDélai d'attente en ms (par défaut : 30000)
conditionstring?Ignorer le nœud si l'expression est évaluée à faux

Mappage Entrée/Sortie

PropriétéTypeRôle
inputMappingRecord<string, string>?Mappe les champs d'état aux entrées du nœud
outputKeystringClé où le résultat est stocké dans l'état du workflow

Référence des Nœuds

Nœud Déclencheur 🎯

Point d'entrée du workflow. Chaque workflow commence par un nœud déclencheur. Consultez le Guide des Déclencheurs dédié pour plus de détails.

Type de déclencheurDescription
ManuelInitiée par l'utilisateur via une entrée de chat
WebhookHTTP endpoint (POST/GET) avec authentification optionnelle
PlanificationSynchronisation basée sur Cron avec prise en charge des fuseaux horaires
ÉvénementÉvénements de système externe avec filtrage JSONPath

HTTP Node 🌐

Effectue HTTP des requêtes vers des APIs externes avec une gestion complète de l'authentification, des en-têtes, du corps et de la réponse.

Configuration :

PropriétéTypeRôle
methodGET, POST, PUT, PATCH, DELETEMéthode HTTP
urlstringURL avec interpolation {{variable}}
authobjetAuthentification (aucune, bearer, basic, api_key)
headersRecord<string, string>En-têtes de requête
bodyobjetCorps (aucun, json, formulaire, brut)
responseobjetGestion de la réponse (json, texte, binaire) avec extraction JSONPath optionnelle
rateLimitobjet ?Limitation de débit (requêtes par fenêtre)

Exemple :

{
  "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" }
}

Nœud Set 📝

Définit et manipule les variables d'état du workflow. Prend en charge les valeurs littérales, les expressions et les secrets.

Configuration :

PropriétéTypeRôle
modeset, merge, deleteOpération sur les variables
variablesVariable[]Liste des variables à définir
envVarsobject?Charger depuis le fichier .env avec un filtre de préfixe optionnel

Types de variables : string, number, boolean, json, expression

Les variables marquées isSecret: true sont masquées dans les journaux et l'interface utilisateur.

Nœud de transformation ⚙️

Transforme les données à l'aide d'expressions ou d'opérations intégrées.

Types de transformations :

Type de valeurRôle
jsonpathExpression JSONPath
jmespathExpression JMESPath
templateModèle de chaîne avec interpolation
javascriptJavaScript expression

Opérations intégrées : pick, omit, rename, flatten, sort, unique

Cibles de conversion de type : string, number, boolean, array, object

Nœud Switch 🔀

Branchement conditionnel avec plusieurs ports de sortie. Chaque condition correspond à un port de sortie distinct sur le nœud.

Panneau des propriétés du Switch

Configuration :

PropriétéTypeRôle
evaluationModefirst_match | all_matchArrêter à la première correspondance ou tout évaluer
conditionsSwitchCondition[]Liste de conditions avec des ports de sortie
defaultBranchstring?Port de sortie lorsqu'aucune condition ne correspond

Opérateurs de condition : eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists

Exemple :

{
  "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"
}

Nœud de boucle 🔄

Itère sur des tableaux, se répète un nombre fixe de fois, ou boucle tant qu'une condition est remplie.

Types de boucles :

Type de valeurRôle
forEachItérer sur un tableau à partir de l'état
whileBoucler tant que la condition est vraie
timesRépéter N fois

Exécution parallèle : Activer parallel.enabled avec les options batchSize et delayBetween pour une itération concurrente.

Agrégation des résultats : Lorsque results.collect est vrai, les résultats de l'itération sont collectés dans un tableau sous results.aggregationKey.

Nœud de fusion 🔗

Combine plusieurs branches parallèles en un seul flux. Possède plusieurs ports d'entrée.

Modes de fusion :

ModeComportement
wait_allAttend toutes les branches entrantes
wait_anyContinue lorsque la première branche est terminée
wait_nContinuer après N embranchements terminés

Combiner les stratégies : array, object, first, last

Délai d'attente optionnel avec continue ou error comportement.

Nœud d'attente ⏱️

Met en pause l'exécution du workflow.

Types d'attente :

Type de valeurRôle
fixedAttendre une durée fixe (ms, s, m, h)
untilAttendre jusqu'à un horodatage spécifique
webhookAttendre un webhook entrant
conditionVérifier une condition à intervalles réguliers

Code Node 💻

Exécute du code personnalisé JavaScript dans un environnement d'exécution isolé boa_engine. L'état du graphe est injecté en tant qu'objet global input.

Configuration :

PropriétéTypeRôle
languagejavascript, typescriptLangage du code
codestringCode à exécuter
sandboxobjetLimites de sécurité (réseau, système de fichiers, mémoire, temps)

Paramètres par défaut du bac à sable :

LimiteDéfaut
Accès réseaufaux
Accès au système de fichiersfaux
Limite de mémoire128 MB
Limite de temps5000 ms

Nœud de base de données 🗄️

Effectue des opérations de base de données avec un pool de connexions et des requêtes paramétrées.

Bases de données prises en charge :

Base de donnéesPiloteFonctionnalités
PostgreSQLsqlx (postgres)Pool asynchrone, requêtes paramétrées, ligne-à-JSON
MySQLsqlx (mysql)Pool asynchrone, requêtes paramétrées, ligne-à-JSON
SQLitesqlx (sqlite)Pool asynchrone, requêtes paramétrées, ligne vers JSON
MongoDBmongodbBSON natif, rechercher/insérer/mettre à jour/supprimer
RedisredisGET, SET, DEL, HGET, HSET, LPUSH, LRANGE

Les chaînes de connexion sont traitées comme des secrets et masquées dans les journaux.

Nœud Email 📧

Envoyez des e-mails via SMTP ou surveillez les e-mails entrants via IMAP.

Mode d'envoi (SMTP) :

  • Prise en charge TLS/SSL
  • Authentification
  • Destinataires À/CC/BCC
  • Corps HTML ou texte brut
  • Interpolation {{variable}} dans l'objet et le corps
  • Pièces jointes à partir de l'état

Mode de surveillance (IMAP) :

  • Sélection de dossier (par défaut : INBOX)
  • Filtres : expéditeur, objet, plage de dates, non lus uniquement
  • Marquer comme lu après traitement

Nœud de Notification 🔔

Envoie des notifications aux plateformes de messagerie.

Canaux : Slack, Discord, Microsoft Teams, webhook personnalisé

Formats de message : texte brut, markdown, blocs spécifiques à la plateforme (Block Kit, Embeds, Adaptive Cards)

Nœud RSS 📡

Surveille les flux RSS/Atom pour les nouvelles entrées.

  • Intervalle d'interrogation configurable
  • Filtres par mot-clé, auteur, catégorie et date
  • Suivi des éléments vus pour éviter les doublons
  • Contenu complet ou résumé uniquement (optionnel)

Nœud de Fichier 📁

Opérations de fichier sur le stockage local ou cloud.

Opérations : lire, écrire, supprimer, lister

Fournisseurs cloud : Amazon S3, Google Cloud Storage, Azure Blob Storage

Formats de fichier : JSON, CSV, XML, texte, binaire (avec options d'analyse CSV pour le délimiteur, les en-têtes, les guillemets)


Interpolation de Variables

Tous les champs de chaîne dans les nœuds d'action supportent la syntaxe {{variable}} pour les valeurs dynamiques :

https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.

Les variables sont résolues à partir de l'état du workflow au moment de l'exécution. La notation par points (user.name) accède aux valeurs imbriquées.

Nœuds Multi-Ports

Deux types de nœuds ont des nombres de ports dynamiques :

  • Switch — un port de sortie par condition, plus un port par défaut optionnel
  • Merge — plusieurs ports d'entrée, un par branche entrante

Ces ports sont représentés visuellement sur le nœud et se connectent à différents nœuds en aval/amont.


Génération de Code

Les nœuds d'action compilent en code Rust de production aux côtés des LLM agents. Les dépendances sont auto-détectées et ajoutées au Cargo.toml généré.

NœudCrateCe qu'il génère
HTTPreqwestRequêtes HTTP asynchrones avec authentification, en-têtes, corps, extraction JSONPath
Base de donnéessqlx / mongodb / redisPools de connexions, requêtes paramétrées, commandes Redis
Courriellettre / imapSMTP envoi avec TLS; surveillance IMAP avec filtres de recherche
Codeboa_engineExécution embarquée de JavaScript avec l'état du graphe comme objet input
DéfinirnatifAffectation de variable (littéral, expression, secret)
TransformernatifMapper, filtrer, trier, réduire, aplatir, grouper, sélectionner, fusionner, modèle
FusionnatifCombinaison de branches (waitAll, waitAny, append)

Tout le code généré utilise adk-graph FunctionNode closures avec GraphError::NodeExecutionFailed pour la gestion des erreurs.

Exemple de code généré (HTTP node) :

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))
});

Exemple de code généré (Code node) :

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))
});

Précédent : ← Studio | Suivant : Triggers →