Alerte et réapprovisionnement sur stock faible
Ce workflow surveille périodiquement le niveau de stock d'une référence, alerte l'acheteur sous le seuil et déclenche la commande fournisseur.
Le besoin
Le niveau de stock d'une référence doit être surveillé périodiquement pour détecter les ruptures avant qu'elles ne surviennent. Sous le seuil, l'acheteur doit être alerté et une commande fournisseur doit être passée automatiquement. Comme le flux redéclenche à chaque cycle tant que le stock reste bas, la commande fournisseur ne doit pas être dupliquée.
Ce que fait le flux
- Surveillance du stock — le déclencheur Interrogation réveille le flux à intervalle régulier (
inventory.level). - Lire le stock — le nœud PostgreSQL lit la quantité en stock pour la référence
{{ data.sku }}. - Stock sous le seuil ? — la condition compare le stock lu au seuil.
- Alerter l'acheteur — si le stock est insuffisant, un e-mail prévient l'acheteur.
- Commander au fournisseur — le nœud Requête HTTP crée la commande fournisseur avec la quantité de réapprovisionnement.
- Gérer l'échec de lecture — en cas d'erreur du nœud PostgreSQL, le nœud On Error prend le relais puis Alerter l'équipe technique envoie un e-mail aux équipes internes.
Ce dont vous avez besoin
- Un déclencheur Interrogation qui réveille le flux à intervalle régulier.
- Les nœuds du flux : PostgreSQL, Condition, Envoi e-mail, Requête HTTP et On Error.
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": "db-107",
"name": "Lire le stock",
"config": {
"type": "DATABASE_POSTGRESQL",
"query": "SELECT sku, stock FROM inventaire WHERE sku = $1",
"binds": [
"$.data.sku"
],
"outputKey": "stockResult"
},
"parents": [
"trigger"
],
"position": {
"x": 0,
"y": 200
},
"next": "cond-107"
},
{
"id": "cond-107",
"name": "Stock sous le seuil ?",
"config": {
"type": "CONDITION",
"conditionCode": "return Number(context.postgresqlResult.rows[0].stock) <= Number(data.threshold);",
"conditions": [
{
"value": true,
"next": "email-107"
},
{
"value": false,
"next": null
}
]
},
"parents": [
"db-107"
],
"position": {
"x": 0,
"y": 400
}
},
{
"id": "email-107",
"name": "Alerter l'acheteur",
"config": {
"type": "SEND_EMAIL",
"to": [
"achat@retail-center.fr"
],
"subject": "Stock faible : {{ data.sku }}",
"content": "Il reste {{ context.postgresqlResult.rows[0].stock }} unités pour la référence {{ data.sku }}.",
"sendAsHtml": true
},
"parents": [
"cond-107"
],
"position": {
"x": 0,
"y": 600
},
"next": "http-107"
},
{
"id": "http-107",
"name": "Commander au fournisseur",
"config": {
"type": "HTTP_REQUEST",
"method": "POST",
"url": "https://api.fournisseurs.fr/purchase-orders",
"bodyMode": "RAW",
"body": "{\"sku\": \"{{ data.sku }}\", \"quantity\": \"{{ data.reorderQty }}\"}"
},
"parents": [
"email-107"
],
"position": {
"x": 0,
"y": 800
}
},
{
"id": "error-107",
"name": "Gérer l'échec de lecture",
"config": {
"type": "ON_ERROR",
"enabledEnvironments": []
},
"parents": [],
"position": {
"x": -800,
"y": 0
},
"next": "error-email-107"
},
{
"id": "error-email-107",
"name": "Alerter l'équipe technique",
"config": {
"type": "SEND_EMAIL",
"to": [
"ops@retail-center.fr"
],
"subject": "Échec de lecture du stock : {{ data.sku }}",
"content": "La lecture du stock de la référence {{ data.sku }} a échoué.",
"sendAsHtml": true
},
"parents": [
"error-107"
],
"position": {
"x": -800,
"y": 200
}
}
]
Vérifier que ça marche
Le nœud PostgreSQL doit renvoyer la ligne de stock lue : la condition lit {{ context.postgresqlResult.rows[0].stock }} ; adaptez l'index si la requête peut renvoyer plusieurs lignes. Déployez le flux, déclenchez une exécution et consultez les traces pour vérifier l'alerte à l'acheteur et la commande fournisseur.
Variantes
- Fréquence d'interrogation : choisissez un intervalle adapté à la vélocité du produit — une surveillance toutes les 5 minutes n'est utile que pour les références à forte rotation.
- Commande en double : tant que la commande fournisseur n'est pas passée, le stock reste bas et le flux redéclenche à chaque cycle — bornez le comportement (ex. statut « commande en cours ») pour éviter les doublons.
Voir la référence
Voir aussi : Exemples et intégrations