Aller au contenu principal

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​

  1. Webhook caisse — le déclencheur Route d'une API reçoit les notifications du logiciel de caisse. Le path /v1/pos/*path capture la ressource (orders, payments, refunds) dans incomingRequest.params.path ; la méthode HTTP arrive dans incomingRequest.method et le corps de la requête dans data.
  2. Identifier la ressource — le nœud Code combine la méthode et le chemin en context.variables.route (ex. POST orders).
  3. Ressource de la requête — le nœud Aiguillage route {{ context.variables.route }} vers la branche correspondante.
  4. 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.
  5. Sous-flux : encaisser le paiement — pour POST payments, le sous-flux Caisse — Encaisser un paiement prend le relais.
  6. Sous-flux : traiter le remboursement — pour POST refunds, le sous-flux Caisse — Traiter un remboursement est exécuté.
  7. Répondre 204 (non traité) — toute autre méthode ou ressource reçoit une réponse HTTP 204 No Content via la branche par défaut de l'aiguillage.

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-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 chemin produite 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 204 sans 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