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
- 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 dansdata. - Normaliser la payload — le nœud Code prépare
context.variables.statusetcontext.variables.packagespour les nœuds suivants. - Statut de la livraison — le nœud Aiguillage route
{{ context.variables.status }}vers la branche correspondante. - Alerter sur le retard — si le statut est
delayed, un e-mail prévient l'équipe logistique. - Confirmer chaque colis — si le statut est
delivered, le nœud Pour chaque itère sur{{ data.packages }}(élément courant{{ colis }}). - Mettre à jour le suivi du colis — à chaque itération, le nœud PostgreSQL confirme le colis (arête animée « boucle »).
- Événement expédition terminée — après la boucle, le nœud Envoi événement publie
delivery_completedsur le topic Pub/Sub du CRM.
Ce dont vous avez besoin
- Un déclencheur qui capture l'événement
delivery.status. - Le nœud Code, le nœud Aiguillage, le nœud Envoi e-mail, le nœud Pour chaque, le nœud PostgreSQL et le nœud Envoi événement.
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
deliveredetdelayeddoivent 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