Markdown Ormuz
Markdown Ormuz est le format de contenu utilisé pour composer des messages lisibles et dynamiques dans les processus : informations affichées à un utilisateur, messages d’attente, redirections, approbations et emails. Il combine le Markdown standard, des variables de processus et quelques extensions dédiées aux contenus métier.
Vue d’ensemble
Un document Markdown Ormuz est évalué en deux étapes. Les blocs de template entre {{ et }} sont d’abord remplacés par les valeurs du contexte d’exécution. Le résultat est ensuite interprété et rendu comme du Markdown.
Cette séparation permet de conserver un contenu facile à relire dans l’éditeur tout en injectant, à l’exécution, une référence de facture, un montant, une date, une sortie de node ou une variable de processus.
/.Prise en main
L’exemple suivant associe titres, mise en forme, variables, fonction de formatage, surlignage et bouton d’action.
# Facture {{ input.invoice.source_reference }}
Bonjour {{ input.company.legal_name }},
Le montant de **{{ $format(input.invoice.amount_including_tax, "amount", { "currency": input.invoice.currency }) }}**
est arrivé à échéance le =={{ input.invoice.due_date }}==.
:::cta
Consulter la facture
https://app.example/invoices/{{ input.invoice.id }}
:::Dans l’éditeur visuel, saisissez {{ pour ouvrir la liste des variables disponibles. Les suggestions dépendent des entrées du processus, des variables déclarées et des sorties des nodes dont l’exécution est garantie avant le node courant.
Syntaxe Markdown prise en charge
Le Markdown standard reste valide. Ormuz prend également en charge les tableaux GFM et plusieurs extensions décrites plus bas.
| Élément | Syntaxe | Usage |
|---|---|---|
| Titre | # Titre | Titres de niveaux 1 à 4. |
| Gras | **important** | Met un passage en évidence. |
| Italique | *précision* | Ajoute une emphase légère. |
| Liste | - Élément | Liste à puces ou numérotée. |
| Citation | > Information | Bloc de citation ou de contexte. |
| Code | `invoice.id` | Code inline ou bloc entouré de ```. |
| Lien | [Ouvrir](https://example.com) | Lien cliquable si son URL est autorisée. |
| Image |  | Image sur les supports web compatibles. |
| Tableau | | Colonne | Valeur | | Tableau au format GitHub Flavored Markdown. |
Tableau statique
| Référence | Montant | Statut | |---|---:|---| | INV-2026-001 | 1 250,00 € | En retard | | INV-2026-002 | 480,00 € | À échéance |
Les deux-points placés dans la ligne de séparation contrôlent l’alignement des colonnes : :--- à gauche, :---: au centre et---: à droite.
Variables et expressions
Un bloc de template contient un chemin simple ou une expression JSONata. Les quatre racines publiques sont les suivantes.
| Racine | Contenu | Exemple |
|---|---|---|
input | Entrées reçues au démarrage du processus. | {{ input.invoice.due_date }} |
nodes | Sorties des nodes précédents, indexées par leur identifiant dans le processus. | {{ nodes.calculate_total.total }} |
vars | Variables de processus déclarées ou mises à jour pendant l’exécution. | {{ vars.approver_name }} |
env | Variables d’environnement du marchand capturées pour l’instance. | {{ env.payment_portal_url }} |
Prévisualisation et formatage humain
Dans la Console, les templates peuvent prévisualiser les valeurs scalaires connues ou représentatives du contexte, y compris les sorties de nodes. Lorsque le support active le formatage humain, Ormuz applique ses formateurs canoniques aux montants, dates et autres scalaires typés afin que la prévisualisation ressemble au rendu destiné à l’utilisateur, sans modifier la valeur métier sous-jacente.
Chemins simples
Facture : {{ input.invoice.source_reference }}
Client : {{ input.company.legal_name }}
Paiement : {{ nodes.create_payment.payment.id }}
Réviseur : {{ vars.approver_name }}Les espaces autour de l’expression sont facultatifs. Préférez une propriété scalaire précise. Lorsqu’un objet ou un tableau complet est inséré, il est sérialisé en JSON, ce qui est rarement adapté à un texte destiné à un utilisateur.
Fonctions et transformations
Échéance de relance : {{ $add_days(input.invoice.due_date, 7) }}
Nom affiché : {{ $coalesce(input.company.trade_name, input.company.legal_name) }}
Montant : {{ $format(input.invoice.amount_including_tax, "amount", { "currency": input.invoice.currency }) }}Les conditions, calculs de dates, agrégations et fonctions disponibles sont détaillés dans Expressions. Les chemins publics à utiliser sont input, nodes, varset env.
Extensions Ormuz
Surlignage
Entourez un passage avec deux signes égal pour attirer l’attention sans transformer toute la phrase en titre ou en gras.
La facture est ==en retard== depuis 7 jours.
Alignement d’un bloc
::: align-center # Paiement reçu Merci, votre règlement a bien été enregistré. :::
Les valeurs acceptées sont left, center,right et justify. Le bloc doit être fermé par une ligne contenant uniquement :::.
Bouton d’action
:::cta Ouvrir le portail de paiement https://app.example/payments/123 :::
Le bloc contient un libellé utile suivi d’une URL. Une URL HTTPS absolue est recommandée afin que le bouton fonctionne sur tous les supports, y compris dans les emails.
Tableau dynamique
La fonction $markdown_table transforme un tableau d’objets du contexte en tableau Markdown. Elle convient notamment aux lignes de facture, échéances, paiements ou résultats de contrôle.
{{ $markdown_table(
input.line_items,
[
{ "label": "Article", "path": "description" },
{ "label": "Quantité", "path": "quantity", "align": "right" },
{
"label": "Total",
"path": "amount_including_tax",
"format": { "key": "amount", "currency": input.invoice.currency }
}
]
) }}Liens, images et sécurité
- Les liens
http:,https:etmailto:sont autorisés. Les chemins relatifs commençant par/sont également acceptés sur les supports web. - Les protocoles non sûrs tels que
javascript:,data:ouftp:ne sont pas rendus comme des liens cliquables. - Le HTML brut n’est pas interprété. Utilisez la syntaxe Markdown ou les extensions documentées plutôt que des balises HTML.
- Les images doivent utiliser une URL autorisée. En email, utilisez une URL HTTP(S) absolue ; le client du destinataire peut néanmoins choisir de bloquer le chargement distant des images.
Compatibilité des supports
Le contrat Markdown Ormuz est commun, mais chaque support applique ses propres contraintes de rendu. Le tableau suivant permet de choisir une syntaxe portable.
| Fonction | Parcours utilisateur | Aperçu Console | |
|---|---|---|---|
| Titres, paragraphes, gras, italique, listes et citations | Oui | Oui | Oui |
| Blocs de code et code inline | Oui | Oui | Oui |
| Tableaux GFM | Oui | Oui | Oui |
| Surlignage ==texte== | Oui | Oui | Oui |
| Alignement Ormuz | Oui | Oui | Oui |
| Bouton d’action Ormuz | Oui | Oui | Oui |
| Images | Oui | Oui | Oui, avec URL absolue sûre |
| Texte barré GFM | Oui | Oui | Oui |
| Liens relatifs /… | Oui | Oui | Non |
| Version texte brut automatique | — | — | Oui |
Pour un contenu réutilisé dans plusieurs contextes, privilégiez les titres de niveaux 1 à 4, paragraphes, gras, italique, listes, citations, code, tableaux, surlignage, alignement et CTA avec URL HTTPS absolue.

Recettes courantes
Alerte de facture en retard
# Facture en retard
La facture **{{ input.invoice.source_reference }}** a dépassé sa date d’échéance du
{{ $diff_days(input.invoice.due_date, $today()) }} jour(s).
Montant de la facture : **{{ $format(input.invoice.amount_including_tax, "amount", { "currency": input.invoice.currency }) }}**.
:::cta
Consulter la facture
https://app.example/invoices/{{ input.invoice.id }}
:::Message d’attente d’une approbation
## Votre demande est en cours d’examen
Nous avons bien reçu votre dossier **{{ input.onboarding_case.id }}**.
> Aucune action n’est requise pour le moment. Vous serez informé dès que la décision sera disponible.Le node Afficher du markdownpeut présenter ce type de contenu dans un parcours utilisateur. Les champs Markdown des nodes de communication, d’approbation et de redirection utilisent la même syntaxe, sous réserve des différences de support indiquées ci-dessus.
Résolution des problèmes
| Symptôme | Vérifications |
|---|---|
L’autocomplétion ne propose aucune variable après {{. | Vérifiez que le node possède des entrées accessibles et que les nodes sources sont des ancêtres garantis. Une sortie située uniquement sur une autre branche n’est pas proposée. |
| Une valeur est vide dans le rendu. | Contrôlez le chemin et le contexte réel de l’instance. Une valeur absente ou nulle est rendue comme une chaîne vide. |
| Le CTA reste affiché comme du texte. | Utilisez exactement :::cta, puis le libellé, l’URL et la fermeture ::: sur des lignes séparées. |
| Un lien n’est pas cliquable. | Vérifiez son protocole. Utilisez de préférence une URL HTTPS absolue. |
| Le rendu email diffère de l’aperçu. | Vérifiez surtout les URLs : remplacez les liens et images relatifs par des URLs HTTP(S) absolues sûres et contrôlez le rendu propre au client email ciblé. |
| Un tableau est mal formé. | Ajoutez une ligne de séparation contenant au moins trois tirets par colonne et gardez le même nombre de cellules sur chaque ligne. |