Dispatch d'un webhook caisse vers des sous-flux
Ce workflow reçoit les événements envoyés par un logiciel de caisse via une Route d'une API, identifie la ressource visée par la requête puis délègue le traitement à un sous-flux dédié (commande, paiement ou remboursement).
Chargement du diagramme…
Le besoin
Un logiciel de caisse envoie ses événements (commandes, paiements, remboursements) via une Route d'une API. Chaque événement doit être réparti vers le sous-flux dédié selon la méthode et la route de la requête, afin que chaque type d'événement soit traité par son propre processus.
Ce que fait le flux
- Webhook caisse — le déclencheur Route d'une API reçoit les notifications du logiciel de caisse. Le path
/v1/pos/*pathcapture la ressource (orders,payments,refunds) dansincomingRequest.params.path; la méthode HTTP arrive dansincomingRequest.methodet le corps de la requête dansdata. - Identifier la ressource — le nœud Code combine la méthode et le chemin en
context.variables.route(ex.POST orders). - Ressource de la requête — le nœud Aiguillage route
{{ context.variables.route }}vers la branche correspondante. - Sous-flux : enregistrer la commande — pour
POST orders, le nœud Appeler un flux exécute le sous-flux Caisse — Enregistrer une commande en héritant du contexte et des données du trigger. - Sous-flux : encaisser le paiement — pour
POST payments, le sous-flux Caisse — Encaisser un paiement prend le relais. - Sous-flux : traiter le remboursement — pour
POST refunds, le sous-flux Caisse — Traiter un remboursement est exécuté. - Répondre 204 (non traité) — toute autre méthode ou ressource reçoit une réponse HTTP
204 No Contentvia la branche par défaut de l'aiguillage.
Ce dont vous avez besoin
- Un déclencheur Route d'une API qui reçoit les notifications du logiciel de caisse (path
/v1/pos/*path). - Le nœud Code, le nœud Aiguillage, le nœud Appeler un flux et le nœud Réponse HTTP.
- Des sous-flux dédiés aux commandes, aux paiements et aux remboursements.
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-109",
"name": "Identifier la ressource",
"config": {
"type": "CODE",
"code": "const method = context.incomingRequest.method;\nconst resource = context.incomingRequest.params.path;\ncontext.variables.route = `${method} ${resource}`;\nreturn context.variables.route;"
},
"parents": [
"trigger"
],
"position": {
"x": 0,
"y": 200
},
"next": "switch-109"
},
{
"id": "switch-109",
"name": "Ressource de la requête",
"config": {
"type": "SWITCH",
"variable": "{{ context.variables.route }}",
"cases": [
{
"value": "POST orders",
"next": "wf-order-109"
},
{
"value": "POST payments",
"next": "wf-payment-109"
},
{
"value": "POST refunds",
"next": "wf-refund-109"
}
],
"noMatchBehaviour": "reply-109"
},
"parents": [
"code-109"
],
"position": {
"x": 0,
"y": 400
}
},
{
"id": "wf-order-109",
"name": "Sous-flux : enregistrer la commande",
"config": {
"type": "CALL_WORKFLOW",
"workflow": "uuid-v4-caisse-commande",
"inherits": {
"context": true,
"data": true
}
},
"parents": [
"switch-109"
],
"position": {
"x": 800,
"y": 600
}
},
{
"id": "wf-payment-109",
"name": "Sous-flux : encaisser le paiement",
"config": {
"type": "CALL_WORKFLOW",
"workflow": "uuid-v4-caisse-paiement",
"inherits": {
"context": true,
"data": true
}
},
"parents": [
"switch-109"
],
"position": {
"x": 800,
"y": 800
}
},
{
"id": "wf-refund-109",
"name": "Sous-flux : traiter le remboursement",
"config": {
"type": "CALL_WORKFLOW",
"workflow": "uuid-v4-caisse-remboursement",
"inherits": {
"context": true,
"data": true
}
},
"parents": [
"switch-109"
],
"position": {
"x": 800,
"y": 1000
}
},
{
"id": "reply-109",
"name": "Répondre 204 (non traité)",
"config": {
"type": "HTTP_RESPONSE",
"statusCode": "204"
},
"parents": [
"switch-109"
],
"position": {
"x": 800,
"y": 1200
}
}
]
Vérifier que ça marche
- Convention des routes : l'aiguillage compare la chaîne
méthode espace cheminproduite par le nœud Code — la casse et l'orthographe des valeurs (POST orders, …) doivent correspondre exactement à celles des événements du logiciel de caisse. - 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
- Version des sous-flux : le nœud Appeler un flux cible une version précise ; après chaque évolution d'un sous-flux, mettez à jour la version sélectionnée puis re-déployez le flux appelant (voir gestion des versions).
- Requêtes inconnues : la branche par défaut répond
204sans traitement ; logguez les routes inconnues pour repérer les changements d'API côté logiciel de caisse. - Réponse au webhook : chaque sous-flux renvoie son résultat au flux appelant ; ajoutez un nœud Réponse HTTP en fin de branche si le logiciel de caisse attend un accusé de réception.
Pour aller plus loin
Voir aussi : Exemples et intégrations