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.

Principe de portabilité Le même dialecte Markdown est partagé par les interfaces web et l’email. Les différences portent surtout sur les URLs : un email exige des liens et images absolus sûrs, alors que les surfaces web peuvent également utiliser des chemins relatifs commençant par /.

Prise en main

L’exemple suivant associe titres, mise en forme, variables, fonction de formatage, surlignage et bouton d’action.

Markdown
# 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émentSyntaxeUsage
Titre# TitreTitres de niveaux 1 à 4.
Gras**important**Met un passage en évidence.
Italique*précision*Ajoute une emphase légère.
Liste- ÉlémentListe à puces ou numérotée.
Citation> InformationBloc 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![Libellé](https://example.com/image.png)Image sur les supports web compatibles.
Tableau| Colonne | Valeur |Tableau au format GitHub Flavored Markdown.

Tableau statique

Markdown
| 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.

RacineContenuExemple
inputEntrées reçues au démarrage du processus.{{ input.invoice.due_date }}
nodesSorties des nodes précédents, indexées par leur identifiant dans le processus.{{ nodes.calculate_total.total }}
varsVariables de processus déclarées ou mises à jour pendant l’exécution.{{ vars.approver_name }}
envVariables 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

Markdown
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

Markdown
É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.

Markdown
La facture est ==en retard== depuis 7 jours.

Alignement d’un bloc

Markdown
::: 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

Markdown
:::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
{{ $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: et mailto: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:ou ftp: 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.
Contenu dynamique Une valeur injectée est évaluée avant le rendu Markdown. Évitez d’insérer du texte externe non maîtrisé dans un document lorsqu’il ne doit pas pouvoir modifier sa mise en forme. Préférez des champs métier précis et validés.

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.

FonctionParcours utilisateurAperçu ConsoleEmail
Titres, paragraphes, gras, italique, listes et citationsOuiOuiOui
Blocs de code et code inlineOuiOuiOui
Tableaux GFMOuiOuiOui
Surlignage ==texte==OuiOuiOui
Alignement OrmuzOuiOuiOui
Bouton d’action OrmuzOuiOuiOui
ImagesOuiOuiOui, avec URL absolue sûre
Texte barré GFMOuiOuiOui
Liens relatifs /…OuiOuiNon
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.

Exemple de contenu affiché au participant dans une étape de parcours hébergé.
Exemple de contenu affiché au participant dans une étape de parcours hébergé. Agrandir

Recettes courantes

Alerte de facture en retard

Markdown
# 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

Markdown
## 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ômeVé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.