Contrôle de flux
Les actions de contrôle de flux modifient la forme d'un flux de travail plutôt que ses données : elles branchent, itèrent et arrêtent. Composer une autre automatisation comme sous-workflow est traité à part dans Sous-workflows.
Groupes de conditions
Les branchements path et la barrière filter/continue évaluent tous deux des groupes de conditions — une ou plusieurs comparaisons combinées par and/or.
| Élément | Description |
|---|---|
logic |
and (toutes doivent correspondre, par défaut) ou or (au moins une). |
conditions |
Tableau de { field, operator, value? }, au moins une entrée. |
condition:
logic: and
conditions:
- { field: '{{trigger.data.record.status}}', operator: equals, value: paid }
- { field: '{{trigger.data.record.amount}}', operator: greaterThan, value: 100 }Opérateurs de comparaison : equals, notEquals, contains, notContains, startsWith, endsWith, greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual, isEmpty, isNotEmpty, isNull, isNotNull, matches.
Deux limites méritent d'être connues avant de concevoir autour :
- Les groupes ne s'imbriquent pas.
conditionsne contient que des comparaisons, jamais un groupe imbriqué :(A et B) ou Cn'est donc pas exprimable dans un seul groupe. Exprimez-le avec deux branchespath. valueest un scalaire —string,number,booleanounull. Les tableaux et objets sont rejetés : il n'y a donc pas de test d'appartenance à une liste ici.
Path — Branchement
L'opérateur path/branch achemine l'exécution vers des branches nommées. Chaque branche a sa propre condition et ses actions imbriquées.
| Propriété | Description |
|---|---|
paths |
Branches, au moins deux : { name, condition?, actions[] }. name non vide ; actions au moins une entrée. |
mode |
first-match (exécute la première branche correspondante, par défaut) ou all-matching (toutes). |
Un path à une seule branche échoue au décodage — une étape conditionnelle unique est un filter/continue, pas un branchement. Une branche sans condition correspond toujours : c'est ainsi qu'on écrit le cas par défaut, en la plaçant en dernier sous first-match.
- name: route
type: path
operator: branch
props:
mode: first-match
paths:
- name: vip
condition:
conditions: [{ field: '{{trigger.data.record.tier}}', operator: equals, value: vip }]
actions:
- name: vipEmail
type: email
operator: send
props: { to: '{{trigger.data.record.email}}', subject: 'VIP welcome', body: 'Thanks!' }
- name: standard
actions:
- name: stdEmail
type: email
operator: send
props: { to: '{{trigger.data.record.email}}', subject: 'Welcome', body: 'Hi!' }Loop — Itération
L'opérateur loop/each itère sur un tableau, exécutant ses actions imbriquées une fois par élément.
| Propriété | Description |
|---|---|
items |
Obligatoire. Modèle se résolvant en le tableau à parcourir. |
actions |
Obligatoire. Actions imbriquées exécutées par élément, au moins une. |
maxIterations |
Plafond d'itérations, 1–10000. Par défaut 1000. |
continueOnItemError |
Lorsque true, un élément en échec n'interrompt pas la boucle. Par défaut false. |
Dans la boucle, l'élément courant est à {{loop.item}} (ses champs à {{loop.item.<champ>}}) et la position, à base zéro, à {{loop.index}}. Un {{item.*}} nu ne se résout pas.
maxIterations tronque en silence. La valeur par défaut est 1000 : une boucle sur 1 800 lignes traite donc les 1 000 premières et signale un succès. Relevez-la explicitement (jusqu'à 10000) dès que la collection peut dépasser le plafond, ou paginez la source et bouclez par page.
- name: notifyEach
type: loop
operator: each
props:
items: '{{fetchSubscribers.result}}'
maxIterations: 5000
continueOnItemError: true
actions:
- name: send
type: email
operator: send
props: { to: '{{loop.item.email}}', subject: 'Update', body: 'Hi {{loop.item.name}}' }Flow — Arrêt
L'opérateur flow/stop interrompt immédiatement l'exécution, avec un statut et une sortie optionnels. Les trois propriétés sont optionnelles.
| Propriété | Description |
|---|---|
message |
Raison de l'arrêt (peut contenir des modèles). |
status |
success ou error. Par défaut error. |
output |
Sortie clé-valeur renvoyée à l'appelant. |
Le défaut error compte : un flow/stop atteint sur un chemin parfaitement normal de type « rien à faire » marquera l'exécution comme échouée — et activera tout déclencheur automation-failure qui la surveille. Passez status: success pour les sorties anticipées attendues.
- name: bail
type: flow
operator: stop
props: { status: success, message: 'Nothing to do', output: { processed: 0 } }Automation — Call et Return (sous-workflows)
Déplacé vers Sous-workflows.
Pages connexes
- Sous-workflows —
automation/calletautomation/return. - Présentation des actions — propriétés de base et carte des familles.
- Données et état — la barrière
filter/continue. - Approbation et délai — suspendre une exécution pour un humain ou le temps.
- Déclencheurs d'enregistrement et de commentaire — le
conditionde déclencheur qui réutilise ce modèle.
Dernière mise à jour 11 août 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.