Aller au contenu principal

Aiguillage d'une expédition selon son statut

Ce workflow route chaque mise à jour de statut d'expédition : il confirme chaque colis à la livraison, publie l'événement de fin et alerte la logistique en cas de retard.

Chargement du diagramme…

Le besoin​

Chaque mise à jour de statut d'une expédition doit être routée vers la notification client ou l'alerte logistique selon le statut de livraison. Le flux confirme chaque colis à la livraison, publie l'événement de fin et alerte la logistique en cas de retard.

Ce que fait le flux​

  1. Statut d'expédition — le déclencheur capture l'événement delivery.status. Le numéro de suivi, le statut et la liste des colis arrivent dans data.
  2. Normaliser la payload — le nœud Code prépare context.variables.status et context.variables.packages pour les nœuds suivants.
  3. Statut de la livraison — le nœud Aiguillage route {{ context.variables.status }} vers la branche correspondante.
  4. Alerter sur le retard — si le statut est delayed, un e-mail prévient l'équipe logistique.
  5. Confirmer chaque colis — si le statut est delivered, le nœud Pour chaque itère sur {{ data.packages }} (élément courant {{ colis }}).
  6. Mettre à jour le suivi du colis — à chaque itération, le nœud PostgreSQL confirme le colis (arête animée « boucle »).
  7. Événement expédition terminée — après la boucle, le nœud Envoi événement publie delivery_completed sur le topic Pub/Sub du CRM.

Ce dont vous avez besoin​

Construction​

Copiez la définition du workflow et collez-la dans l'éditeur (le nœud Déclencheur est recréé automatiquement, il n'est pas dans le snippet) :

[
{
"id": "code-108",
"name": "Normaliser la payload",
"config": {
"type": "CODE",
"code": "context.variables.status = data.status; context.variables.packages = data.packages;"
},
"parents": [
"trigger"
],
"position": {
"x": 0,
"y": 200
},
"next": "switch-108"
},
{
"id": "switch-108",
"name": "Statut de la livraison",
"config": {
"type": "SWITCH",
"variable": "{{ context.variables.status }}",
"cases": [
{
"value": "delivered",
"next": "foreach-108"
},
{
"value": "delayed",
"next": "email-108"
}
],
"noMatchBehaviour": "error"
},
"parents": [
"code-108"
],
"position": {
"x": 0,
"y": 400
}
},
{
"id": "foreach-108",
"name": "Confirmer chaque colis",
"config": {
"type": "FOREACH",
"foreachCode": "data.packages",
"itemKey": "colis"
},
"parents": [
"switch-108"
],
"position": {
"x": 800,
"y": 600
},
"next": "event-108",
"loopStartNodeId": "db-108"
},
{
"id": "db-108",
"name": "Mettre à jour le suivi du colis",
"config": {
"type": "DATABASE_POSTGRESQL",
"query": "UPDATE expeditions SET statut = 'confirme' WHERE tracking = $1",
"binds": [
"$.colis.tracking"
],
"outputKey": "trackingUpdate"
},
"parents": [
"foreach-108"
],
"position": {
"x": 1600,
"y": 800
}
},
{
"id": "event-108",
"name": "Événement expédition terminée",
"config": {
"type": "SEND_EVENT",
"provider": {
"type": "GCP_PUBSUB",
"projectId": "mon-projet-logistique",
"topicId": "livraisons"
},
"body": "{\"event\": \"delivery_completed\", \"trackingNumber\": \"{{ data.trackingNumber }}\"}"
},
"parents": [
"foreach-108"
],
"position": {
"x": 800,
"y": 1000
}
},
{
"id": "email-108",
"name": "Alerter sur le retard",
"config": {
"type": "SEND_EMAIL",
"to": [
"logistique@transporteur.fr"
],
"subject": "Livraison en retard : {{ data.trackingNumber }}",
"content": "La livraison {{ data.trackingNumber }} est en retard.",
"sendAsHtml": true
},
"parents": [
"switch-108"
],
"position": {
"x": 800,
"y": 800
}
}
]

Vérifier que ça marche​

  • Valeurs attendues : les cas delivered et delayed doivent correspondre exactement aux statuts publiés par le transporteur (casse, orthographe).
  • Déployez le flux (Déployer un flux), puis déclenchez le scénario réel : chaque exécution génère une trace consultable (Visualiser les traces).

Variantes​

  • Cas non gérés : noMatchBehaviour: "error" fait échouer le flux si le statut est inconnu ; ajoutez une branche « autre » pour tracer les statuts inconnus au lieu de planter.
  • Boucle : l'arête animée « boucle » illustre l'itération du nœud Pour chaque ; le corps de la boucle (Mettre à jour le suivi du colis) s'exécute une fois par colis.

Pour aller plus loin


Voir aussi : Exemples et intégrations