Déclencheurs et événements

Un launcher publie une manière durable de démarrer une définition de processus. Selon son type, il peut réagir à un événement, accompagner le lifecycle d’un objet métier, exposer un lien d’expérience hébergée ou fournir un endpoint API dédié à un partenaire. Chaque launcher est une ressource versionnée autonome qui référence son Process cible avec la syntaxe canonique process_key:selector. Chaque lancement transforme uniquement les données autorisées en entrées typées puis résout une Process Revision précise avant de créer l’instance.

Les launchers

Déclencheur externe ou métier
process_launcher actif
Mapping vers input_schema
Nouvelle instance révision résolue

Un launcher est une configuration durable de déclenchement. Il ne représente pas l’instance : il prépare son contexte puis une nouvelle instance est créée.

Un ProcessLauncher possède sa propre key, ses Working Revisions et ses Releases. Son contrat versionné porte le type, la référence process, les inputs exposés, le mapping et, selon le type, l’événement ou la présentation du parcours utilisateur. Le flag active, l’URL publique et les grants restent locaux à l’environnement.

Le launcher est indépendant du Process : modifier son contrat crée une ProcessLauncher Revision, jamais une Process Revision. Réciproquement, enregistrer un nouveau Working du Process ne modifie pas le contrat du launcher ; seule la résolution d’une référence :working peut faire évoluer la Process Revision utilisée par un prochain lancement.

Référence Process versionnée

La ProcessLauncher Revision référence directement le Process cible avec la syntaxe commune des artefacts : customer_onboarding:working, customer_onboarding:latest, une Release ou un digest exact. Il n’existe plus de champ parallèle revision_mode sur le launcher.

RéférenceRésolutionEffet d’un nouveau Working
process_key:workingLe working_revision_id courant du Process est résolu au début du prochain lancement.Les nouveaux lancements peuvent utiliser le nouveau Working sans créer une nouvelle ProcessLauncher Revision.
process_key:latestWorking en environnement de test ; dernière Release admissible en environnement live.La résolution suit les règles de l’environnement puis est figée pour le lancement ou le Deployment.
process_key@sha256:… ou Release exacteUne Process Revision immuable précise.Aucun effet : la dépendance reste pinnée sur ce snapshot.

resolved_process_definition_revision_id indique la Process Revision actuellement résolue. Une invocation ne reste jamais flottante après son démarrage : Ormuz enregistre la Process Revision et la ProcessLauncher Revision exactes sur la tentative avant tout effet.

Working est réservé à l’authoring et au test Un manifest live ne conserve pas de dépendance :working flottante. Lors d’un Deployment, le linker matérialise la dépendance vers la Process Revision exacte déployée ; :latest doit se résoudre vers une Release admissible en production. Voir Versions, Releases et déploiement.
Le launcher de démonstration référence explicitement une version du Process cible.
Le contrat du launcher et la version du Process cible évoluent indépendamment. Agrandir

Types de launcher

TypeDéclencheurContrat
eventÉvénement plateformeDémarre une instance lorsqu’un événement correspondant au `event_type` configuré est reçu pour le même marchand.
checkoutSession de checkoutAssocie un processus au lifecycle d’une `platform.checkout_session` et alimente l’entrée canonique correspondante. Entrée canonique : checkout_session.
onboardingDossier d’onboardingAssocie un processus au lifecycle d’un `platform.onboarding_case` et alimente l’entrée canonique correspondante. Entrée canonique : onboarding_case, company_draft, contact_draft.
disputeLitige commercialAssocie un processus à un `platform.dispute` afin de traiter son lifecycle avec un processus dédié. Entrée canonique : dispute.
returnRetour clientAssocie un processus à un `platform.return` afin que le dossier de retour puisse être piloté par une définition dédiée. Entrée canonique : return.
journeyLien d’expérience hébergéePublie une URL stable qui permet à une personne de confirmer le démarrage d’une nouvelle instance puis de poursuivre dans l’expérience hébergée comme participant principal.
apiAppel serveur partenairePublie un endpoint POST dédié à ce processus avec un contrat d’entrée réduit et des clés API autorisées explicitement sur ce launcher.

Pour checkout, onboarding, dispute et return, Ormuz connaît le contrat d’entrée système attendu. Si plusieurs définitions actives proposent le même type pour un marchand, le contexte qui crée la ressource doit sélectionner explicitement la définition ; Ormuz ne choisit pas arbitrairement entre plusieurs candidats.

Endpoint dédié et API générique répondent à deux besoins différents Un launcher api limite l’appelant à un processus précis et à un contrat d’entrée réduit. POST /v1/processes/:id/runs reste l’API générique pour un intégrateur disposant du droit plus large de lancer directement une définition.

Déclenchement par événement

Un launcher event écoute exactement le event_type configuré pour son marchand. À la réception d’un événement correspondant, Ormuz applique son input_mapping, crée une instance et conserve dans start_source l’identité de l’événement et du launcher à l’origine du démarrage.

Le contrat de chaque événement déclare les valeurs utilisables par le processus : contexte générique de l’événement, objets plateforme résolus, snapshots, projections ou objets d’extension selon le type. Le nom de l’événement ne suffit jamais à inventer une ressource qui n’est pas déclarée par ce contrat.

ExempleOccurrence
invoice.overdueUne facture reste due après son échéance.
receivable.zeroLa créance calculée d’un acheteur atteint zéro.
approval_request.resolvedUne demande d’approbation atteint une décision terminale.
extension.stripe.payment_intent.succeededUne extension publie un événement provider rendu disponible comme déclencheur.

Cette liste est volontairement illustrative. Consultez le catalogue des événements plateforme et les pages d’événements propres aux extensions pour la référence exhaustive.

Endpoint API dédié

Le launcher api publie une URL POST propre à un processus et à un contrat d’entrée réduit. Utilisez-le lorsqu’un partenaire doit pouvoir déclencher une opération précise sans recevoir le droit généralprocess_instance:run ni la possibilité de choisir une autre définition de processus.

Chaque clé doit disposer de la permission process_launcher:invoke sur le marchand et d’un grant explicite sur ce launcher. Depuis le Process Builder, l’action Créer une clé dédiée fait ces deux opérations atomiquement avec le périmètre minimal : aucune autre permission métier n’est accordée et le grant cible uniquement cet endpoint. Le secret n’est affiché qu’une fois. L’utilisation d’une clé existante reste disponible comme option avancée.

Le corps JSON n’accepte que les champs déclarés par le contrat exposé ; les valeurs fixes du launcher ne peuvent pas être écrasées par l’appelant. La Process Revision est résolue depuis la référence versionnéeprocess du launcher : l’appelant ne choisit jamais la révision.

HTTP
POST /v1/process-launcher-invocations/pln_123
Authorization: Bearer ormuz_live_…
Idempotency-Key: partner-request-123
{2 items
"reference":"partner-order-8472"
"country":"FR"
}
{
  "reference": "partner-order-8472",
  "country": "FR"
}

Idempotency-Key est obligatoire. La première création durable répond avec l’identifiant de l’instance et son statut ; rejouer la même demande avec la même clé retrouve cette instance, tandis que réutiliser la clé avec un autre payload est refusé. Une nouvelle clé représente une nouvelle demande, même si les données métier sont identiques.

Cet endpoint ne crée pas d’accès à l’expérience hébergée et ne donne pas de droit de lecture général sur les instances. Si le processus comporte plus tard une interaction humaine, cet accès doit être produit par le mécanisme métier prévu par le processus, indépendamment du launcher API.

Attendre un événement dans une instance existante

Déclencher un nouveau processus et suspendre un processus existant sont deux primitives différentes. wait_for_platform_event attend un événement pour une ressource précise puis reprend la même instance avec les sorties déclarées par ce contrat d’événement.

wait_for_platform_events applique le même principe à une collection typée et ne termine que lorsque chaque cible attendue a produit son événement. Utilisez ces nodes lorsque l’événement appartient à la continuité d’une instance déjà commencée ; utilisez un launcher lorsque l’événement doit créer une exécution indépendante.

Lancer un processus par API

Un système externe peut démarrer explicitement une définition active avec POST /v1/processes/:id/runs. L’input est préparé et validé contre le schéma d’entrée du snapshot Working utilisé pour l’instance.

HTTP
POST /v1/processes/prd_123/runs
{1 item
"input":{2 items
"invoice":"inv_abc123"
"amount_threshold":5000
}
}
{
  "input": {
    "invoice": "inv_abc123",
    "amount_threshold": 5000
  }
}

Cet endpoint peut également demander une attente synchrone bornée via son paramètre wait. Ce mécanisme ne change pas l’identité de l’instance ni son modèle d’exécution : il change uniquement la façon dont l’appelant attend le résultat de la Run.

Mapping d’entrée d’un launcher

input_mapping transforme le contexte de démarrage en champs de l’input_schema. Pour un événement, chaque source doit être fournie par le contrat canonique de cet événement et être compatible avec le type attendu par le processus. Une source inconnue ou incompatible est refusée lors de la configuration.

Les launchers système ont un mapping canonique pour leur objet principal — checkout_session, onboarding_case, dispute ou return. Le processus peut déclarer d’autres champs uniquement s’ils sont optionnels ou disposent de valeurs par défaut compatibles avec ce déclencheur.

Pour les launchers journey et api, chaque input du processus peut être alimenté par un champ externe déclaré, une valeur fixe du launcher ou le défaut du processus. Un input obligatoire qui n’est satisfait par aucune de ces sources empêche l’activation. Le contrat est fermé : un champ JSON ou query non déclaré n’est pas fusionné implicitement avec les inputs du processus.

Pour journey et api, vous choisissez explicitement pour chaque input s’il est fourni par l’appelant, fixé par le launcher ou laissé au défaut du processus. Le contrat exposé peut donc être volontairement plus petit que l’input_schema complet ; un champ fixé par le launcher ne peut pas être écrasé par l’appelant.

Idempotence et déduplication

Lorsqu’un même événement est livré plus d’une fois, le lancement événementiel utilise une identité de déduplication qui combine l’événement et le launcher. Un même événement ne crée donc pas plusieurs instances pour le même launcher, tout en pouvant légitimement déclencher plusieurs launchers différents.

Un Endpoint API utilise une Idempotency-Key fournie par l’appelant. Le lien d’expérience hébergée utilise de son côté une tentative de démarrage temporaire afin qu’un double clic ou une réponse perdue ne crée pas deux instances. Dans les deux cas, cette garantie protège les répétitions techniques ; elle ne déduit jamais qu’un même email, une même référence métier ou des inputs identiques représentent la même demande métier.

Ne transposez pas ces garanties au lancement direct POST /v1/processes/:id/runs : cet endpoint représente par défaut une demande explicite de nouvelle exécution.