Français
Données et expressions
La plupart des réglages texte d'un nœud peuvent contenir des expressions écrites entre doubles accolades : {{ email.from.email }}, {{ data.categoriser.category }}. Juste avant l'exécution du nœud, Mankomail remplace chaque expression par une valeur lue dans l'exécution, puis transmet le texte final au nœud.
Le langage est volontairement réduit. Une expression est un chemin vers une valeur, éventuellement suivi de filtres. Il n'y a ni appel de fonction, ni arithmétique, ni condition, ni boucle. Le même moteur calcule l'aperçu dans l'éditeur et la valeur réelle pendant une exécution : ce que vous voyez en éditant est ce que le nœud reçoit.
La syntaxe en bref
{{ chemin }}
{{ chemin | filtre }}
{{ chemin | filtre | filtre:"argument" }}| Élément | Règle | Exemple |
|---|---|---|
| Délimiteurs | {{ ouvre, }} ferme. Les espaces à l'intérieur sont facultatifs. | {{email.subject}} et {{ email.subject }} sont identiques. |
| Chemin | Des segments séparés par des points. Chaque segment est un nom ([A-Za-z_$][A-Za-z0-9_$]*) ou un index de tableau composé de chiffres. | email.to.0.email |
| Filtre | Introduit par |. Les filtres s'appliquent de gauche à droite. | {{ email.subject | trim | upper }} |
| Argument de filtre | Après deux-points : "guillemets doubles", 'guillemets simples' ou un mot nu. | {{ data.extraire.ref | default:"n/a" }} |
| Accolades littérales | Écrivez \{{ pour obtenir {{ sans rien évaluer. | \{{ non évalué }} → {{ non évalué }} |
Le texte hors accolades est recopié tel quel : vous pouvez mêler texte libre et plusieurs expressions dans un même champ.
Bonjour {{ email.from.name | default:"Madame, Monsieur" }}, nous avons bien reçu votre demande « {{ email.subject | trim }} ».Ce qu'une expression peut lire
Une expression lit depuis exactement deux racines :
| Racine | Contenu |
|---|---|
email | Le mail déclencheur de l'exécution, au format de message canonique décrit plus bas. |
data | Les données de travail : les sorties des étapes déjà terminées, plus l'entrée apportée par un déclencheur qui n'est pas un mail (webhook, planification, appel, intégration). |
Rien d'autre n'est accessible : ni horloge, ni environnement, ni secret, ni autre mail de la boîte. Un chemin qui ne commence pas par email. ou data. ne mène à rien.
Quand l'exécution n'a pas de mail déclencheur (webhook, planification, appel depuis un workflow lui-même sans mail, événement d'intégration), email est vide : toute expression {{ email.… }} rend une chaîne vide. Les exécutions parties d'un mail (déclencheur mail, lancement manuel sur un mail) et les sous-exécutions qu'elles lancent (itérations de boucle, workflows appelés) voient toutes ce mail.
Le mail déclencheur (email)
Chaque mail, quel que soit son fournisseur (Gmail, Microsoft 365, IMAP), est présenté sous la même forme. Tous les encodages sont déjà décodés ; les dates sont des chaînes ISO 8601 en UTC.
| Chemin | Type | Description |
|---|---|---|
email.subject | chaîne | Objet décodé. Chaîne vide si le mail n'en a pas — jamais absent. |
email.from | objet adresse | L'expéditeur. Absent si le mail n'a pas de From exploitable. |
email.from.email | chaîne | Adresse de l'expéditeur, normalisée (domaine en minuscules). |
email.from.name | chaîne | Nom affiché de l'expéditeur. Absent si l'en-tête ne porte pas de nom. |
email.to | liste d'adresses | Destinataires. |
email.cc | liste d'adresses | Destinataires en copie. |
email.bcc | liste d'adresses | Destinataires en copie cachée. Presque toujours vide sur un mail reçu. |
email.replyTo | liste d'adresses | Adresses de l'en-tête Reply-To. |
email.receivedAt | chaîne (ISO 8601 UTC) | Date de réception constatée par le fournisseur. La date fiable. |
email.sentAt | chaîne (ISO 8601 UTC) | Date déclarée par l'expéditeur (en-tête Date). Peut être absente ou fausse. |
email.bodyText | chaîne | Corps en texte brut, dérivé du HTML quand le mail n'a que du HTML. Quand le mail d'origine complet n'est pas conservé, il s'agit seulement du début du corps. |
email.bodyHtml | chaîne | Corps HTML, non assaini. Absent pour un mail texte seul. |
email.attachments | liste de pièces jointes | Métadonnées des pièces jointes seulement, jamais leur contenu. |
email.folderLabels | liste de chaînes | Dossiers IMAP ou libellés Gmail portés par le mail. |
email.flags | objet | État chez le fournisseur : seen, flagged, draft, sent. |
email.signals | objet | Détections calculées à la réception : isAutoReply, isNoReply, isMailingList, isFromSelf. |
email.headers | objet | En-têtes, noms en minuscules, chaque valeur étant une liste de chaînes. |
email.messageIdHeader | chaîne | En-tête Message-ID, chevrons compris. |
email.inReplyTo | chaîne | En-tête In-Reply-To, chevrons compris. |
email.references | liste de chaînes | En-tête References, éclaté en identifiants, du plus ancien au plus récent. |
email.providerId | chaîne | Identifiant du mail chez son fournisseur. |
email.bodyRef | chaîne | Référence interne au mail d'origine stocké. Non destinée aux expressions. |
Un champ signalé comme pouvant être absent rend une chaîne vide quand il manque. Ajoutez | default:"…" lorsqu'une valeur vide se lirait mal.
Adresses, pièces jointes, drapeaux et signaux
Objet adresse (email.from, chaque élément de email.to, email.cc, email.bcc, email.replyTo) :
| Champ | Type | Description |
|---|---|---|
email | chaîne | Adresse normalisée : local@domaine-en-minuscules. |
name | chaîne | Nom affiché, décodé. Peut être absent. |
Les listes se lisent par index, à partir de 0 : {{ email.to.0.email }} est le premier destinataire, {{ email.cc.1.name }} le nom du deuxième destinataire en copie. Écrire la liste elle-même ({{ email.to }}) la rend en JSON.
Pièce jointe (chaque élément de email.attachments) :
| Champ | Type | Description |
|---|---|---|
filename | chaîne | Nom de fichier décodé (un nom généré quand le mail n'en donne pas). |
mime | chaîne | Type MIME en minuscules, sans paramètres (application/pdf). |
size | nombre | Taille décodée, en octets. |
disposition | chaîne | attachment pour une vraie pièce jointe, inline pour une image intégrée au HTML (logo, signature). |
contentId | chaîne | Content-ID sans chevrons, pour les images intégrées. Peut être absent. |
blobRef | chaîne | Référence interne au contenu stocké. Non destinée aux expressions. |
Drapeaux (email.flags.*, booléens) : seen (lu), flagged (suivi), draft (brouillon), sent (le mail est dans le dossier d'envoi).
Signaux (email.signals.*, booléens) : isAutoReply (absence du bureau ou répondeur automatique), isNoReply (expéditeur non surveillé comme no-reply@), isMailingList (newsletter, liste de diffusion, envoi de masse), isFromSelf (envoyé par Mankomail lui-même).
Les booléens sont rendus true ou false.
Les en-têtes du mail
email.headers associe à chaque nom d'en-tête, en minuscules, la liste de ses valeurs. Lisez la première valeur avec l'index 0 :
{{ email.headers.subject.0 }}
{{ email.headers.received.0 }}Noms d'en-têtes avec un tiret
Un segment de chemin ne peut pas contenir de -. Les en-têtes comme x-priority, list-id ou content-type ne sont donc pas accessibles par une expression : {{ email.headers.x-priority.0 }} n'est pas une expression valide. Utilisez les champs dédiés (email.signals.isMailingList, email.inReplyTo, email.messageIdHeader…) ou une condition de déclencheur.
Les en-têtes sont lus dans le mail d'origine stocké. Quand l'original n'est pas conservé, email.headers est un objet vide.
Les données de travail (data)
Chaque nœud qui se termine avec succès publie sa sortie dans les données de travail, sous une clé dérivée du nom du nœud affiché sur le canvas. Si un nœud nommé Catégoriser produit { "category": "Facture" }, les nœuds suivants la lisent ainsi :
{{ data.categoriser.category }}Les champs de sortie de chaque nœud sont listés sur sa page dans la référence des nœuds.
Comment la clé est dérivée du nom :
- Les accents sont retirés (
Trié→Trie). - Les espaces en début et en fin sont retirés.
- Chaque suite de caractères autres que lettres, chiffres,
_et$devient un seul_. - Les
_en début et en fin sont retirés. - Le résultat est mis en minuscules.
- Si le résultat est vide ou commence par un chiffre, la clé est l'identifiant du nœud (voir plus bas).
| Nom du nœud | Clé |
|---|---|
Catégoriser | data.categoriser |
Categorize | data.categorize |
Trier les factures | data.trier_les_factures |
Extraire (IA) | data.extraire_ia |
Résumé — client | data.resume_client |
2e contrôle | l'identifiant du nœud (le nom commence par un chiffre) |
Un nouveau nœud porte le nom de son type dans la langue de votre interface : un nœud Catégoriser fraîchement posé est data.categoriser en français et data.categorize en anglais. Renommer un nœud change sa clé : les expressions qui utilisaient l'ancien nom rendent alors une chaîne vide.
Alias par identifiant. Chaque sortie est aussi publiée sous l'identifiant du nœud, qui ne change jamais quand vous le renommez. Les nœuds ajoutés dans l'éditeur reçoivent des identifiants comme categorize_1, if_2, request_1 (la dernière partie du type du nœud et un numéro). C'est cette forme que l'éditeur insère quand vous glissez une valeur depuis le panneau Ce qui entre d'un nœud : {{ data.categorize_1.category }}. Les deux formes désignent la même valeur.
Deux nœuds avec la même clé. Quand deux nœuds produisent la même clé (Trier les factures et Trier, les factures), le premier à se terminer garde la clé issue du nom ; lisez l'autre par son identifiant.
Ce que contient data à une étape donnée :
- les sorties des étapes de cette exécution qui ont réussi et publié quelque chose. Un nœud en échec, ignoré, ou désactivé et traversé ne publie rien ;
- l'entrée du déclencheur (section suivante), posée en premier : un nœud nommé
webhookne peut pas masquerdata.webhook.
Ne lisez que des nœuds situés en amont du nœud courant. La sortie d'une branche parallèle n'est présente que si cette branche s'est terminée avant, ce qui n'est pas garanti.
Les données apportées par le déclencheur
Un déclencheur qui n'apporte pas de mail pose son entrée à la racine de data :
| Déclencheur | Clé | Contenu |
|---|---|---|
| Webhook reçu | data.webhook | Le corps JSON de la requête : {{ data.webhook.client.email }}. |
| Appelé par un workflow | data.input | Ce que le workflow appelant a transmis : {{ data.input.reference }}. |
| Planification | data.schedule | plannedFor (l'heure prévue, ISO 8601 UTC), firedAt (l'heure réelle), timezone (UTC si aucun fuseau n'est réglé). |
| Événement d'intégration (webhook) | data.<intégration> | Le corps de l'événement sous l'identifiant de l'intégration, par exemple data.mynotary, data.yousign, data.notion. |
| Changement chez une intégration (sondage) | data.<intégration> | L'élément modifié, par exemple data.airtable ou data.notion. |
{{ data.schedule.plannedFor }} est l'heure prévue, ronde (…T08:00:00.000Z), c'est généralement celle à écrire dans un objet de mail ; firedAt est l'heure à laquelle l'exécution a réellement démarré.
Pendant un essai, le corps d'essai que vous écrivez est placé sous la même clé : le workflow lit data.webhook ou data.input exactement comme en production.
Dans une boucle
Les nœuds branchés sur la sortie pour chaque d'une Boucle s'exécutent une fois par élément, chaque fois dans une exécution à part. Dans cette exécution, data contient en plus :
| Chemin | Type | Description |
|---|---|---|
data.item | quelconque | L'élément courant. Un tableau de N éléments quand la taille de lot est supérieure à 1. |
data.index | nombre | Position de l'élément courant, à partir de 0. |
data.count | nombre | Nombre total d'éléments. |
data.first | booléen | true pour le premier élément. |
data.last | booléen | true pour le dernier élément. |
Les cinq mêmes valeurs sont aussi disponibles sous la clé du nœud de boucle : {{ data.boucle.item }} pour une boucle nommée Boucle. Dans des boucles imbriquées, data.item désigne l'élément de la boucle la plus intérieure ; atteignez l'élément extérieur par le nom de la boucle extérieure, par exemple {{ data.lignes.item.email }}.
Tout ce qui a été produit avant la boucle reste lisible dans le corps. Si un nœud du corps a la même clé qu'un nœud d'avant la boucle, c'est le nœud du corps qui l'emporte.
Exemple : une boucle sur {{ data.lire.lignes }} dont le corps envoie un mail par ligne :
À : {{ data.item.email }}
Objet : Relance {{ data.index }}/{{ data.count }} — {{ data.item.reference }}data.index commence à 0. Il n'y a pas d'arithmétique : {{ data.index }} ne peut pas être transformé en numéro commençant à 1.
Les chemins : règles et limites
- Des points uniquement.
data.extraire.commande.numero. Crochets et guillemets ne sont pas pris en charge :data["extraire"]n'est pas une expression. - Les index de tableau sont des chiffres.
email.attachments.0.filename. Les index négatifs n'existent pas. Un index au-delà de la fin de la liste ne mène à rien. - Les caractères d'un segment. Un segment commence par une lettre,
_ou$, suivi de lettres, chiffres,_ou$, ou bien il n'est fait que de chiffres. Une clé qui contient un tiret, un espace ou une lettre accentuée (par exemple un champ de webhookfirst-name, ou une colonne nomméeNom client) n'est pas accessible directement. Référencez l'objet parent pour l'obtenir en JSON, ou renommez le champ à la source. - Les données elles-mêmes seulement. Un chemin ne lit que les données :
{{ email.subject.length }}ne mène à rien, pas plus que les segments réservés__proto__,prototypeetconstructor. - Sensible à la casse.
email.from.Emailne mène à rien.
Les filtres
Les filtres transforment le texte produit par le chemin. Ils s'appliquent de gauche à droite, chacun recevant le résultat du précédent. La liste est fermée : ces quatre filtres sont les seuls.
| Filtre | Argument | Effet | Exemple |
|---|---|---|---|
default | obligatoire | Remplace la valeur par l'argument quand la valeur est vide (chemin manquant, null ou chaîne vide). Fait aussi taire l'avertissement de chemin manquant. | {{ email.from.name | default:"Madame, Monsieur" }} |
upper | aucun | Passe en majuscules. | {{ email.from.email | upper }} → ADA@EXAMPLE.COM |
lower | aucun | Passe en minuscules. | {{ email.from.name | lower }} → ada lovelace |
trim | aucun | Retire les espaces en début et en fin. | {{ email.subject | trim }} |
Enchaînement :
{{ email.subject | trim | upper }} → DEVIS 1042 (objet « Devis 1042 » entouré d'espaces)
{{ data.extraire.ref | default:"aucune" | upper }} → AUCUNE (quand ref est absente)Écrire l'argument de default :
| Forme | Exemple | Résultat si vide |
|---|---|---|
| Guillemets doubles | default:"n/a" | n/a |
| Guillemets simples | default:'?' | ? |
| Mot nu (espaces retirés) | default:0 | 0 |
| Guillemet dans des guillemets | default:"dit \"non\"" | dit "non" |
| Barre verticale entre guillemets | default:"a|b" | a|b |
Entre guillemets, une barre oblique inverse échappe ", ' et \. Un argument ne peut pas contenir }}, qui ferme toujours l'expression.
default ne réagit qu'à une valeur vide. Une liste vide est rendue [] : elle n'est donc pas vide pour default.
Erreurs de saisie :
| Vous écrivez | Ce qui se passe |
|---|---|
{{ email.from.name | capitalize }} | Filtre inconnu : il est ignoré, la valeur est conservée et un avertissement est émis. |
{{ email.from.name | upper:1 }} | Argument donné à un filtre qui n'en prend pas : le filtre est ignoré, la valeur est conservée et un avertissement est émis. |
{{ data.x | default }} | default sans argument : le filtre est ignoré et un avertissement est émis. |
{{ email.from.name | 42 }} | Nom de filtre invalide : ignoré, avertissement émis. |
Ces quatre cas sont des erreurs de saisie : l'éditeur signale le champ, et le workflow ne peut être ni essayé ni publié tant qu'elles ne sont pas corrigées (voir La validation à la saisie).
Le rendu des valeurs
Une expression produit toujours du texte :
| Valeur trouvée | Rendu |
|---|---|
| Chaîne | Telle quelle. |
| Nombre | Notation décimale avec un point : 1290.5, 0. Un nombre non fini est rendu vide. |
| Booléen | true ou false. |
null | Chaîne vide, sans avertissement. |
| Objet ou liste | JSON compact : {{ email.to }} → [{"name":"Ada","email":"ada@example.com"}], {{ email.folderLabels }} → ["INBOX","IMPORTANT"]. |
| Date | Les dates du mail et des sorties de nœuds sont déjà des chaînes ISO 8601 (2026-08-27T10:00:00.000Z) et sont rendues telles quelles. |
Il n'existe pas de filtre de mise en forme des dates ou des nombres. Pour obtenir une date ou un nombre mis en forme, produisez-le dans un nœud en amont et référencez la sortie de ce nœud.
Rendre un objet ou une liste en JSON est utile dans un corps HTTP, ou pour passer une liste entière à une Boucle : la boucle relit le JSON comme une liste.
Valeurs manquantes et expressions mal formées
Une expression ne fait jamais échouer une exécution. Chaque anomalie a un comportement fixe :
| Situation | Exemple | Résultat | Code d'avertissement |
|---|---|---|---|
| Le chemin n'existe pas | {{ email.cc.0.email }} sur un mail sans copie | chaîne vide | missing_path |
Le chemin existe, la valeur est null | une sortie de nœud "category": null | chaîne vide | aucun |
| Chemin vide ou invalide | {{ }}, {{ email..subject }}, {{ data.mon-noeud.x }} | l'expression est laissée telle quelle, accolades comprises | malformed_expression |
| Appel de fonction ou code | {{ process.exit(1) }} | laissée telle quelle | malformed_expression |
| Accolades non refermées | Bonjour {{ email.from.name | le reste du texte est laissé tel quel | unterminated_expression |
| Filtre inconnu | {{ email.subject | capitalize }} | valeur sans le filtre | unknown_filter |
| Mauvais argument de filtre | {{ email.subject | upper:1 }} | valeur sans le filtre | invalid_filter_argument |
Pendant une exécution réelle, un chemin manquant est rendu par une chaîne vide et l'étape continue avec cette valeur. C'est le cas normal des champs facultatifs : un mail sans copie doit quand même être traité. Protégez les champs qui comptent avec default, ou vérifiez-les en amont avec une Condition (Si).
Échapper {{
Pour écrire des doubles accolades littérales (dans un gabarit HTML, un exemple JSON, un message qui explique la syntaxe), placez une barre oblique inverse devant :
Utilisez \{{ email.subject }} dans votre modèle.rend Utilisez {{ email.subject }} dans votre modèle. La barre oblique inverse est retirée et rien n'est évalué. Une accolade simple ({ … }) n'a jamais besoin d'être échappée.
Aucune évaluation de code
Les expressions ne sont pas du JavaScript et ne sont jamais exécutées comme du code. Seuls existent les chemins simples et les quatre filtres. Conséquences :
- pas d'arithmétique (
{{ data.index + 1 }}est mal formée et laissée telle quelle) ; - pas de comparaison ni de condition dans une expression : utilisez un nœud Condition (Si) ou Aiguillage ;
- pas d'appel de fonction ni de méthode ;
- aucun accès à ce qui se trouve hors de
emailetdata.
C'est une garantie de sécurité : le contenu d'un mail, que n'importe qui peut vous envoyer, ne peut jamais exécuter de code au travers d'une expression.
Les réglages qui acceptent les expressions
Les expressions ne sont évaluées que dans les réglages des nœuds qui s'exécutent comme des étapes, juste avant leur exécution. Les déclencheurs et les nœuds fournisseurs d'IA ne sont jamais des étapes : leurs réglages sont lus tels qu'écrits.
Dans un nœud, par défaut :
| Type de réglage | Accepte {{ }} |
|---|---|
| Texte sur une ligne et texte multiligne | Oui, sauf si le nœud le refuse pour ce champ (liste ci-dessous). |
| Listes clé/valeur (par exemple les en-têtes HTTP) | Oui pour les valeurs ; jamais pour les clés. |
| Valeur comparée d'une condition (Condition (Si), Aiguillage) | Oui. |
| Sélecteur de ressource (Choisir / Identifiant / URL) | Seulement en mode Identifiant. |
| Nombre, oui/non, choix unique, choix multiple | Non, sauf si le nœud ouvre explicitement le champ aux expressions. |
| Connexion (identifiants) | Jamais. |
| Collections (groupes de champs répétés) | Chaque sous-champ suit son propre type. |
Quand un champ non textuel est ouvert aux expressions, l'éditeur y affiche une bascule Fixe / Expression.
Les réglages qui refusent les expressions
Certains réglages texte refusent {{ }} volontairement. Une expression saisie à cet endroit est signalée comme une erreur (« Ce champ n’accepte pas les expressions « {{ }} ». »). Le champ reste entièrement modifiable : seules les expressions sont refusées.
Deux familles sont concernées. Sécurité : un contenu venu d'un mail ne doit atteindre ni les instructions d'un modèle, ni une URL secrète. Structure : les noms qui créent les sorties d'un nœud, ou les clés de ses données, doivent être connus à la publication, sans quoi une branche pourrait ne mener nulle part sans que personne ne le voie.
| Nœud | Réglages |
|---|---|
| Catégoriser | Nom de catégorie, Prompt système |
| Extraire | Identifiant de champ |
| Instruction libre (IA) | Schéma JSON |
| Aiguillage | Nom de la branche de chaque règle |
| Transformer | Nom du champ (la valeur accepte les expressions) |
| Requête HTTP | Nom du champ des champs du formulaire et des fichiers envoyés |
| Notifier | URL du webhook |
| Appeler un workflow | Workflow à appeler |
| Sheets — ajouter une ligne | En-tête de colonne, Colonne de dédoublonnage |
| Nœuds de table (chercher, lister, ajouter, mettre à jour, ajouter ou mettre à jour, supprimer) | Colonne clé de la clé de ligne, Colonne des valeurs et des filtres, Trier par (lister des lignes) |
| Table — ajouter un commentaire | Colonne à compléter |
Les déclencheurs (Planification : Expression cron, Fuseau horaire ; Airtable : Filtre supplémentaire ; et les autres réglages de déclencheur) et le Modèle des nœuds fournisseurs d'IA ne sont jamais rendus non plus : une expression y serait utilisée littéralement.
Les expressions dans les champs nombre et choix
Le rendu produit toujours du texte. Quand un nœud ouvre un champ nombre ou choix aux expressions, {{ data.extraire.quantite }} arrive sous la forme du texte "3", que le nœud convertit au moment de s'exécuter. À la publication, seule la syntaxe de l'expression est vérifiée : la valeur elle-même n'est connue que pendant l'exécution.
La validation à la saisie
Chaque expression est vérifiée pendant l'édition, avec le moteur même qui l'exécute :
- Bloquant (le champ est signalé, et le workflow ne peut être ni essayé ni publié) :
{{non refermé, chemin invalide, filtre inconnu, argument de filtre manquant ou en trop (« L’expression « {{ }} » est mal formée. »), ou expression dans un champ qui les refuse. - Non bloquant : un chemin qui n'existe pas encore. À l'édition, rien n'a tourné : le validateur ne peut pas savoir si
data.categoriser.categoryexistera. Seul l'aperçu peut le dire, sur un exemple réel.
L'aperçu dans l'éditeur
Chaque champ texte qui accepte les expressions propose :
- la coloration des parties
{{ }}; - l'autocomplétion des champs du mail, des sorties des nœuds en amont et des quatre filtres ;
- une ligne Aperçu qui affiche le texte rendu, ou
(vide); - les avertissements de l'expression, par exemple « Le chemin « … » n’existe pas dans les données d’entrée. ».
L'aperçu est calculé sur le mail d'essai actif et sur les données du dernier essai des nœuds en amont. Sans mail d'essai actif, il est calculé sur un mail d'exemple intégré et le dit (« Aperçu calculé sur un mail d’exemple. »), avec un bouton Choisir un mail d’essai.
Le panneau Ce qui entre d'un nœud liste le mail déclencheur et chaque nœud en amont, avec les données produites au dernier essai. Glissez une valeur dans un champ, ou cliquez-la pour l'insérer dans le dernier champ où vous écriviez. Les chemins insérés utilisent l'identifiant du nœud (« Les chemins désignent le nœud par son identifiant : le renommer ne casse rien. »).
Exemples
| Objectif | Expression |
|---|---|
| Saluer l'expéditeur, avec une valeur de repli | Bonjour {{ email.from.name | default:"Madame, Monsieur" }}, |
| Objet de réponse | Re : {{ email.subject | trim }} |
| Nom de la première pièce jointe | {{ email.attachments.0.filename | default:"(aucune pièce jointe)" }} |
| Date de réception | {{ email.receivedAt }} → 2026-08-27T10:00:00.000Z |
| Catégorie choisie par Catégoriser | {{ data.categoriser.category }} |
| La même, résistante au renommage | {{ data.categorize_1.category }} |
| Valeur obtenue par Extraire | {{ data.extraire.numero_commande | default:"inconnu" }} |
| Champ d'un corps de webhook | {{ data.webhook.client.email }} |
| Heure prévue d'une planification | {{ data.schedule.plannedFor }} |
| Élément courant d'une boucle | {{ data.item.reference }} |
| Une liste entière, en JSON, pour une boucle | {{ data.lire.lignes }} |
| Corps JSON d'une requête HTTP | {"ref": "{{ data.extraire.ref }}", "de": "{{ email.from.email }}"} |
| Accolades littérales | \{{ email.subject }} |
Construire un corps JSON
Une expression insère du texte brut : si la valeur contient un guillemet ou un retour à la ligne, le JSON devient invalide. Insérez des valeurs que vous savez simples (identifiants, adresses), ou passez un objet entier, qui est rendu en JSON valide : {"client": {{ data.webhook.client }}}.
Pages liées
- Exécutions : d'où viennent les données de travail et comment elles sont conservées.
- Essais : exécuter un brouillon sur un vrai mail pour alimenter l'aperçu avec des données réelles.
- Déclencheurs : ce qu'apporte chaque déclencheur.
- Référence des nœuds : les champs de sortie de chaque nœud.