Étapes, décisions et attentes
Le catalogue des nœuds d'un workflow — conditions, écritures dans l'enregistrement, notifications, e-mails, scripts, attentes, boucles, parallélisme et jonctions.
Cette page parcourt tous les types d'étape que l'on fait glisser de la palette Nœuds vers la toile. Pour chacun : ce qu'il fait, ce qu'on y remplit et ce qui se passe à l'exécution.
Avant cela, une pièce qui revient dans presque tous : l'origine d'une valeur.
D'où vient une valeur
Chaque fois qu'une étape demande une valeur — le côté droit d'une condition, ce qu'on écrit dans un champ — l'interface propose les mêmes quatre origines :
| Origine | Ce qu'elle apporte |
|---|---|
| Valeur fixe | Un texte saisi à la main (« Ganha », « 25000 »). |
| Champ de l'enregistrement | Un champ de l'enregistrement dont l'exécution traite. |
| Variable | Une des variables du processus. |
| Qui a lancé l'exécution | Celui qui a fait démarrer le processus — Nom d'utilisateur (le username) ou Id de l'utilisateur. |
C'est pour cela qu'un processus n'a pas besoin de code pour la plupart de ce qu'il fait : les décisions et les écritures se composent avec ces quatre pièces.
Condition
Ouvre deux chemins à partir d'une question. Elle a toujours deux sorties fixes : Vrai et Faux.

- Sélectionnez l'étape et ouvrez Conditions avec le bouton ….
- Cliquez sur Ajouter une condition.
- Choisissez l'origine du côté gauche (normalement Champ de l'enregistrement), le champ, l'opérateur et le côté droit.
Les opérateurs sont les mêmes que ceux des filtres et des règles de mise en forme du reste de la plateforme :
| Opérateur | Signifie |
|---|---|
eq / neq |
Égal à / différent de |
gt / gte |
Supérieur à / supérieur ou égal à |
lt / lte |
Inférieur à / inférieur ou égal à |
contains |
Contient le texte |
startsWith / endsWith |
Commence par / se termine par |
isEmpty / isNotEmpty |
Est vide / n'est pas vide |
« Toutes doivent être vérifiées. » — plusieurs conditions dans la même étape se combinent avec ET, jamais avec OU. Pour un OU, utilisez deux étapes de condition à la suite.
Sans aucune condition, « il passe toujours par « Vrai » » — utile pendant qu'on dessine, dangereux si cela reste ainsi.
Écrire dans l'enregistrement
Enregistre des champs dans l'enregistrement dont l'exécution traite. C'est l'étape qui referme le circuit : le processus a décidé, maintenant la fiche du CRM doit le refléter.

- Ouvrez Champs à écrire avec le bouton ….
- Cliquez sur Ajouter un champ.
- Choisissez le Champ et l'origine de la valeur.
Dans l'exemple, l'étape Marcar como Ganha écrit fase = "Ganha" (valeur
fixe) et responsavel = Qui a lancé l'exécution (le username de qui a lancé le
processus).
Nota
L'écriture est faite « par le même GraphQL que l'app, avec l'autorisation de la personne qui a lancé l'exécution ». Autrement dit : les permissions comptent. Si celui qui a lancé le processus ne peut pas modifier cette entité, l'étape échoue — et elle échoue à raison, parce qu'un processus n'est pas une porte dérobée aux permissions.
Une étape sans aucun champ « ne fait rien » — l'interface le dit au lieu de le cacher.
Notifier
Envoie une notification dans l'app — la cloche de la navigation, en temps réel pour qui a une session ouverte, et dans la boîte de réception pour qui ne l'a pas.
| Champ | Notes |
|---|---|
| Utilisateurs | Des comptes de l'app, choisis à la main. |
| Rôles | Tous les utilisateurs qui ont ce rôle. Survit aux arrivées et aux départs des personnes. |
| Titre | La ligne qui apparaît dans la notification. |
| Texte | Le corps. |
Dans le titre et dans le texte, vous pouvez insérer des valeurs de
l'enregistrement ou de variables entre accolades :
A oportunidade {titulo} foi rejeitada.
Comme Notifier, mais la destination est l'e-mail, par le canal configuré dans les paramètres de l'app. Elle a deux champs de plus : le corps est en HTML, écrit dans un éditeur dédié, et elle peut emporter un rapport en pièce jointe.

| Champ | Notes |
|---|---|
| Utilisateurs / Rôles | Les destinataires. Qui n'a pas d'e-mail reste de côté. |
| Objet | Accepte {campo} comme le reste des messages. |
| Texte | Ouvre un éditeur HTML avec le bouton … (Corps de l'e-mail). |
| Joindre le rapport | L'un des rapports de l'app, ou Sans pièce jointe. |
Sur la pièce jointe : « le PDF est généré au moment de l'envoi, pour l'enregistrement de cette exécution » — ce n'est pas un fichier stocké, c'est le document de ce cas-là, fabriqué à cet instant-là. Voir le chapitre Rapports.
Atenção
Sans canal e-mail actif et sans SMTP complet dans les paramètres de l'app, l'étape n'arrive pas à envoyer. Configurez-le dans Paramètres de l'app → Notifications avant de mettre le processus en route.
Exécuter un script
Appelle un script Python de l'app, au milieu du processus. C'est la soupape de sécurité pour tout ce que le schéma ne fait pas : appeler un service externe, calculer une marge, valider contre un autre système.

| Champ | Notes |
|---|---|
| Script | L'un des scripts de l'app. |
| Enregistrer dans | La variable où est conservé ce que le script renvoie. Vide = « le résultat est ignoré ». |
Le script « reçoit l'enregistrement, la clé et les variables dans les arguments » — pas besoin de les passer à la main. Ce qu'il renvoie reste dans la variable indiquée et devient disponible pour les étapes suivantes.
Si le script échoue, l'exécution reste en Échouée à cette étape, avec l'erreur conservée dans l'historique.
Attendre
Diffère le processus d'une durée fixe : Jours et Heures. « Zéro dans les deux = aucune attente. »
C'est la pièce du « préviens-moi dans trois jours s'il n'y a toujours pas de réponse ». L'exécution dort et est reprise automatiquement à l'heure dite, même si le serveur a redémarré entre-temps.
Attendre un événement
Diffère le processus jusqu'à ce que quelqu'un envoie un signal portant un nom convenu.

Le seul champ est le Nom du signal (dans l'exemple, dados-completos).
« Celui qui envoie le signal écrit ce nom. Sans échéance : si personne ne
l'envoie, le processus reste en attente. »
Le signal s'envoie de deux façons :
- dans un événement d'écran (TypeScript) :
keplin.workflow.signal("dados-completos", id) - dans un script (Python) :
workflow.signal("dados-completos", key=id)
Sans indiquer l'enregistrement, le signal réveille tous les processus arrêtés sur ce nom ; avec l'enregistrement, seulement ceux de celui-ci. Zéro réveillé n'est pas une erreur — cela veut dire que personne n'attendait.
Dica
Il est courant de combiner Attendre un événement avec une flèche qui revient sur une tâche : la personne renvoie le dossier en demandant plus de données, le processus reste en attente du signal, et quand le commercial complète la fiche, le signal ramène le dossier à la même tâche. C'est exactement ce que fait l'exemple de cette documentation.
Boucle
Parcourt une liste, une valeur à la fois. Elle a deux sorties : Chaque (le corps de la boucle, qui s'exécute une fois par valeur) et À la fin (quand la liste est épuisée).
| Champ | Notes |
|---|---|
| Liste | La variable contenant les valeurs à parcourir. « C'est en général une étape de script qui la produit. » |
| Enregistrer chaque valeur dans | La variable qui reçoit la valeur du tour en cours. |
Sans liste choisie, le schéma prévient : « Cette boucle n'indique pas quelle liste parcourir : elle sort directement par « À la fin ». »
Parallèle
Démarre plusieurs chemins en même temps. Chaque branche est une sortie du nœud.

- Ouvrez Branches en parallèle avec le bouton ….
- Chaque ligne est une branche, avec un Libellé (ce qu'on lit dans le schéma) et un Identifiant.
- Reliez chaque sortie à la première étape de la branche correspondante.
Dans l'exemple, l'étape Fechar e comunicar ouvre deux branches : Registo (qui enregistre la phase) et Cliente (qui envoie l'e-mail). Aucune n'attend l'autre.
Jonction
Rassemble à nouveau les branches d'un Parallèle. C'est l'étape qui répond à « combien en attend-on ? ».

| Attendre | Ce qu'il fait |
|---|---|
| Toutes les branches | Le processus ne continue que lorsque la dernière branche arrive. |
| La première décide | Il continue avec la première arrivée — « les autres branches sont annulées dès qu'une arrive ». |
| Un certain nombre d'entre elles | Il continue au bout du nombre de branches indiqué dans Combien. |
Sous-workflow
Appelle un autre processus, sur le même enregistrement.
| Champ | Notes |
|---|---|
| Processus à exécuter | L'un des workflows de l'app. |
| Attendre qu'il se termine | Activé, ce processus s'arrête jusqu'à ce que l'autre se termine. « Désactivé, ce processus continue et l'autre s'exécute de son côté. » |
« Il s'exécute sur le MÊME enregistrement, il doit donc porter sur la même entité » — un processus sur les opportunités ne peut pas appeler un processus sur les comptes. Et un processus ne peut pas s'appeler lui-même : « ce serait une récursion sans fin », et le schéma le signale.
Fin
Termine l'exécution. Elle a un seul champ, Résultat, un texte court comme
aprovado, ganha ou perdida. « Il reste dans l'historique et c'est ce que
le widget d'état affiche. »
Un processus peut avoir plusieurs nœuds de Fin — un par dénouement — et c'est ce qu'il faut faire : au lieu d'une Fin générique, une par résultat, pour que l'historique dise quelque chose à qui le lit des mois plus tard.
Comment se lit une étape sur la toile
Chaque boîte sur la toile montre trois choses : le nom de l'étape (ce que vous avez saisi dans Nom de l'étape, et ce qui apparaît dans l'historique), le type en petits caractères en dessous, et les sorties à droite, avec le nom de chacune. Un triangle ambre dans le coin signale une étape qui pose problème.
Dica
Donnez aux étapes des noms métier — « Aprovação da direcção », « Marcar como Ganha » — et non des noms techniques. C'est ce texte que vous lirez dans l'historique de chaque exécution quand quelqu'un demandera « où est bloqué ce dossier ? ».