Aller au contenu principal

Premier workflow — client fictif et réponse selon fidélité

Chargement du diagramme…

Le besoin​

Vous débutez sur Ecosystem et vous voulez prendre en main l'éditeur sans enjeu métier : ce workflow génère un client fictif, évalue son score de fidélité, puis répond différemment selon le résultat. Il illustre les premiers réflexes de l'éditeur — manipuler context, écrire une condition et produire une réponse HTTP — sur un flux complet, reproductible tel quel.

Ce que fait le flux​

  1. Demande client — le déclencheur API reçoit une requête et lance l'exécution. Les données de la requête arrivent dans data.
  2. Générer un client fictif — le nœud Code construit un objet client (firstName, lastName, birthDate, address, loyaltyScore) dans context.customer, avec l'aide de libs.uuid(), libs.dayjs() et libs.lodash.random().
  3. Client fidèle ? — la condition évalue context.customer.loyaltyScore >= 50, écrite en JavaScript pur avec return (pas de syntaxe Handlebars).
  4. Réponse client VIP — si le score atteint 50, un nœud Réponse HTTP renvoie SUCCESS_VIP.
  5. Réponse succès standard — sinon, un second nœud Réponse HTTP renvoie SUCCESS_STANDARD.
Une seule réponse HTTP

Dans ce flux, une seule des deux réponses peut s'exécuter grâce à la condition ; sans branche exclusive, le flux tenterait d'émettre deux réponses.

Ce dont vous avez besoin​

  • Un compte avec les droits de création (rôles Concepteur, Concepteur avancé ou Propriétaire de l'entreprise) — voir Premiers pas

Le nœud Déclencheur est recréé automatiquement par l'import du snippet : vous n'avez rien à créer à la main.

Construction​

  1. Copiez la définition du workflow ci-dessous.
  2. Ouvrez l'éditeur d'un flux et collez la définition : le flux est reconstruit avec le nœud Code, la condition et les deux réponses HTTP.
  3. Nommez le nœud Déclencheur et vérifiez que chaque nœud est configuré comme décrit dans Ce que fait le flux.
[
{
"id": "code-101",
"name": "Générer un client fictif",
"config": {
"type": "CODE",
"code": "const firstNames = ['Marie', 'Jean', 'Sophie', 'Paul', 'Léa', 'Hugo'];\nconst lastNames = ['Martin', 'Bernard', 'Dubois', 'Moreau', 'Laurent', 'Girard'];\nconst streetNames = ['rue de la Paix', 'avenue Victor-Hugo', 'boulevard Voltaire', 'rue Nationale'];\nconst cities = ['Paris', 'Lyon', 'Marseille', 'Nantes'];\n\ncontext.customer = {\n id: libs.uuid(),\n firstName: firstNames[Math.floor(Math.random() * firstNames.length)],\n lastName: lastNames[Math.floor(Math.random() * lastNames.length)],\n birthDate: libs.dayjs().subtract(Math.floor(18 + Math.random() * 50), 'years').format('YYYY-MM-DD'),\n address: {\n street: `${Math.floor(1 + Math.random() * 120)} ${streetNames[Math.floor(Math.random() * streetNames.length)]}`,\n city: cities[Math.floor(Math.random() * cities.length)],\n },\n loyaltyScore: libs.lodash.random(0, 100),\n};"
},
"parents": [
"trigger"
],
"position": {
"x": 400,
"y": 200
},
"next": "cond-101"
},
{
"id": "cond-101",
"name": "Client fidèle ?",
"config": {
"type": "CONDITION",
"conditionCode": "return context.customer.loyaltyScore >= 50;",
"conditions": [
{
"value": true,
"next": "vip-101"
},
{
"value": false,
"next": "std-101"
}
]
},
"parents": [
"code-101"
],
"position": {
"x": 400,
"y": 400
}
},
{
"id": "vip-101",
"name": "Réponse client VIP",
"config": {
"type": "HTTP_RESPONSE",
"statusCode": "200",
"headers": {
"Content-Type": "application/json"
},
"responseTemplate": "{\n \"status\": \"SUCCESS_VIP\",\n \"message\": \"Bienvenue au club VIP, {{ context.customer.firstName }} !\",\n \"loyaltyScore\": {{ context.customer.loyaltyScore }}\n}"
},
"parents": [
"cond-101"
],
"position": {
"x": 0,
"y": 600
}
},
{
"id": "std-101",
"name": "Réponse succès standard",
"config": {
"type": "HTTP_RESPONSE",
"statusCode": "200",
"headers": {
"Content-Type": "application/json"
},
"responseTemplate": "{\n \"status\": \"SUCCESS_STANDARD\",\n \"message\": \"Merci pour vos achats, continuez à gagner des points !\",\n \"loyaltyScore\": {{ context.customer.loyaltyScore }}\n}"
},
"parents": [
"cond-101"
],
"position": {
"x": 800,
"y": 600
}
}
]

Vérifier que ça marche​

  1. Sélectionnez le nœud Code (Générer un client fictif) puis cliquez sur Tester le nœud.
  2. Lancez l'exécution avec des données de test (ex. { "orderId": "CMD-4821" }).
  3. Dans la trace, le nœud Code affiche le client généré dans context.customer, et l'exécution se termine par l'une des deux réponses HTTP — SUCCESS_VIP si loyaltyScore atteint 50, SUCCESS_STANDARD sinon. Relancez plusieurs fois : le score étant aléatoire, les deux branches s'exécutent au fil des tests.

La procédure de test est décrite dans Tester un flux.

Variantes​

  • Modifier le seuil de fidélité dans le nœud Condition pour explorer d'autres branches.
  • Personnaliser le corps des réponses avec des données du client (context.customer) — nœud Réponse HTTP.
  • Enchaîner un traitement selon le résultat plutôt que de répondre — nœud Condition.

Voir aussi : Premiers pas · Exemples et intégrations