Version: Dolibarr ≥ 18, WooCommerce ≥ 8 (mise à jour à la date de rédaction : nov. 2025)
1. Pourquoi des webhooks ?
| Besoin | Problème sans webhook | Solution webhook |
|---|---|---|
| Automatisation | Déclencheurs manuels, latence élevée | Actions immédiates dès qu’un événement survient |
| Synchronisation | États clients, stocks désynchronisés | Mise à jour en temps réel d’un ERP, d’un CRM ou d’une plateforme de marketing |
| Expérience client | Checkout long, manque de personnalisation | Envoi automatique d’emails, de SMS ou de notifications push |
| Scalabilité | Scripts périodiques qui surchargent le serveur | Architecture asynchrone, callbacks légers |
Webhook : un appel HTTP (généralement
POST) déclenché par le serveur de la solution “receiver” lorsqu’un événement pré‑déterminé (ex. création de commande) se produit dans le serveur “émetteur”. Contrairement aux API classiques (polling), le serveur réponde seulement lorsqu’il y a une donnée à transmettre, ce qui le rend plus efficace et plus rapide.
2. Vue d’ensemble de Dolibarr & WooCommerce
| Plateforme | Plateforme | Objectifs principaux |
|---|---|---|
| Dolibarr | ERP/CRM Open‑Source | Gestion commerciale, comptabilité, stocks, contacts, etc. |
| WooCommerce | E‑commerce WordPress | Création de boutique en ligne, paiement, livraisons, produits variés |
Ces deux solutions sont très complémentaires : Dolibarr peut prendre en charge la comptabilité, la gestion des fournisseurs et la planification des commandes ; WooCommerce assure la partie catalogue, panier, paiement et point de contact client.
Les webhooks permettent de les connecter sans API lourde ni synchronisation périodiques.
3. Les webhooks natifs de Dolibarr et de WooCommerce
3.1 WooCommerce
| Événement | Description | URL recommandée | Format du payload |
|---|---|---|---|
order.created |
Une commande est créée | /wp-json/wc/v3/orders (via en‑queue) |
JSON contenant id, status, total, billing, shipping, etc. |
order.completed |
Commande passée à « completed » (livraison) | idem | idem |
product.created / product.updated |
Ajout/édition d’un produit | /wp-json/wc/v3/products |
JSON du produit |
webhook.created |
Création d’un webhook WordPress | /wp-json/wp/v2/webhooks |
JSON avec id, namespace, event, source_url |
checkout_order_processed (plugin) |
Après le paiement, avant le statut final | Hook interne | JSON similaire à order.created |
WooCommerce expose aussi un hook REST API (
/wp-json/wc/v3/webhooks) qui permet de enregistrer un webhook directement depuis l’admin ou via un script. Le payload d’un webhook comprend :
id(unique)namespace:wc/webhooks/v1event: nom de l’événement (ex.order.created)source_url: URL de l’émetteur (ex.https://dolibarr.example.com/...)destination_url: URL où le webhook sera POSTésecret(optionnel) pour HMAC‑SHA256
3.2 Dolibarr
Dolibarr ne propose pas de webhooks natifs dans le cœur, mais depuis la version 18 il possède un module “Event & Webhook Manager” (module webhook).
| Fonctionnalité | Description |
|---|---|
| Événements | order_create, invoice_create, product_add, discount_add… |
| Création manuelle | Via le menu Setup > Webhooks : renseigne l’URL de destination, le secret, le type d’événement. |
| Authentification | HMAC‑SHA256 du corps, passato via X-Dolibarr-Signature. |
| Payload | JSON contenant les champs de la table déclenchée (id, date, label, etc.). |
| Activations/désactivations | Possibilité de désactiver temporairement un webhook. |
| Logs | Historique des appels stocke dans la table llx_webhook_log. |
Note : Si vous êtes sur une version antérieure à 18, vous pouvez utiliser le module
triggerou créer votre propre module “webhook” via le fichier/php’s`. Mais la version 18+ est fortement recommandée pour profiter de la gestion native.
4. Architecture d’intégration moderne
Voici un schéma typique d’une architecture “hub‑and‑spoke” :
+-----------------+ +----------------------+ +-------------------+
| WooCommerce | ----> | Webhook Dispatcher | ----> | Zapier / Make |
+-----------------+ +----------------------+ +-------------------+
^ | |
| | |
| v v
(Webhook) +----------------------+ +-------------------+
vers | n8n / Self‑hosted | | Webhook Receiver|
(Dolibarr) | / Pipedream | +-------------------+
+----------------------+
4.1 Étapes clés
-
Création du webhook côté WooCommerce
// Dans le tableau de bord WP → WooCommerce → Settings → Advanced → Webhooks
// Événement : "order.created"
// Destination URL : https://erp.myshop.com/dolibarr/webhook/receive
// Secret : a1b2c3d4e5f6g7h8i9j0 -
Enregistrement du même webhook côté Dolibarr (le cas inverse)
- Menu :
Setup > Webhooks > Create new webhook - Événement :
order_created(ouinvoice_createdsi vous voulez déclencher la comptabilité) - Destination URL :
https://shop.myshop.com/wp-json/wc/v3/orders(réception en mode push) - HMAC secret : identique à celui de l’autre côté pour vérifier l’intégrité.
- Menu :
-
Canal de transport moderne
- Make (ex‑Integromat) : scénarios “Webhooks > HTTP > Update inventory in Dolibarr → Google Sheet”.
- Zapier : “WooCommerce Order Created → HTTP Request → Dolibarr Webhook”.
- n8n / Pipedream : scripts personnalisés (Node.js) pour ajouter des transformations, du cache, du retry, etc.
- AWS Lambda / Azure Functions : fonctions serverless qui consomment l’appel, effectuent du traitement et appellent le endpoint interne.
-
Gestion de la fiabilité
- Retries exponentiels (ex. 1 min → 2 min → 4 min) implémentés dans n8n ou les fonctions serverless.
- Back‑off si le destinataire répond avec
5xxoutimeout. - Idempotence : inclure un
Idempotency-Key(ex.order_id) pour éviter le double traitement.
- Monitoring
- UptimeRobot ou StatusCake pour vérifier que le endpoint des webhooks renvoie
2xx. - Journaux Dolibarr (
llx_webhook_log) → alertes sur Slack ou Teams via un webhook de notification.
- UptimeRobot ou StatusCake pour vérifier que le endpoint des webhooks renvoie
5. Exemple concret : synchroniser un stock WooCommerce avec Dolibarr
5.1 Scénario
- Lorsqu’une commande “completed” est créée dans WooCommerce, on veut :
- Décrémenter le stock des produits dans Dolibarr (
product.stock). - Créer une écriture comptable (compte “Ventes”, compte “Stock”) dans le module comptabilité de Dolibarr.
- Décrémenter le stock des produits dans Dolibarr (
5.2 Implémentation avec n8n
| Nœud n8n | Description |
|---|---|
| Webhook | Recevoir le POST de WooCommerce (order.created). |
| JSON Parse | Extraire line_items. |
| IF | Filtrer les produits avec status == "completed" |
| HTTP Request (Dolibarr API) | POST /api/v1/product/stock/dec (endpoint personnalisé) avec product_id et -quantity. |
| HTTP Request (Dolibarr Invoice API) | POST /api/v1/invoice/create avec order_id, customer_id, total_amount, etc. |
| Set | Ajouter un timestamp et un log_id pour idempotence. |
| Respond to Webhook | Retourner 200 OK uniquement après succès des 2 appels. |
Code simplifié (Node.js) dans un Function node
// n8n Function node
const fetch = require('node-fetch');
const order = $json; // payload complet
if (order.status !== 'completed') return;
const promises = order.line_items.map(async (item) => {
const decStockPayload = {
product_id: item.product_id,
delta: -item.quantity,
source: `order-${order.id}`
};
return fetch('https://erp.myshop.com/api/v1/product/stock', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Dolibarr-Signature': `sha256=${process.env.DOLIBARR_HMAC_KEY}`
},
body: JSON.stringify(decStockPayload)
}).then(r => r.json());
});
Promise.all(promises)
.then(responses => {
// Si toutes les réponses sont OK → entrega 200
return { statusCode: 200, body: JSON.stringify({ ok:true }) };
})
.catch(err => {
console.error(err);
// Retourner 500 pour déclencher le retry
return { statusCode: 500, body: JSON.stringify({ error:err.message }) };
});
5.3 Retour sur Dolibarr
- Journal : Vous verrez une entrée dans
llx_webhook_logavecevent_id,status=200,payload_raw. - Traitement côté Dolibarr : Si vous avez créé un webhook “order_created” qui pointe vers votre endpoint
https://shop.myshop.com/dolibarr/webhook/receive, le corps reçu sera analysé et utilisé pour créer un order (dans la tablellx_commande) et automatiquement générer le facture correspondant.
6. Bonnes pratiques à retenir
| Domaine | Règle | Pourquoi |
|---|---|---|
| Sécurité | Utilisez toujours un secret HMAC‑SHA256 et vérifiez-le côté récepteur. | Évite les appels falsifiés. |
| Temps de réponse | Répondez rapidement (< 500 ms) avec 2xx avant de faire un traitement lourd. |
Les fournisseurs de webhooks annulent après un timeout. |
| Idempotence | Inclure un Idempotency-Key (ex. order_id) et mémoriser le traitement dans la BD. |
Si le même événement est reçu deux fois, le traitement ne sera pas dupliqué. |
| Versionnement de l’API | Adoptez un préfixe versionnel (/api/v1/...). |
Permet d’évoluer sans casser les anciens clients. |
| Format du payload | Privilégiez les JSON bien commentés (application/json). |
Easy à parser côté serveur et client. |
| Gestion des erreurs | Retourner 4xx pour erreurs de validation, 5xx pour erreurs internes, avec un message explicite. |
Le gestionnaire du webhook peut réessayer intelligemment. |
| Monitoring | Centralisez les logs (llx_webhook_log) et configurez des alertes Slack/Email. |
Permet de détecter rapidement les ruptures. |
| Tests | Utilisez des outils comme Postman ou Webhook.site pour simuler des payloads avant le déploiement. | Évite de rupturer la production en premier appel. |
| Déploiement | Hébergez les endpoints dans un PaaS avec scaling automatique (ex. Vercel, AWS Fargate). | Gère les pics de trafic lors de campagnes promotionnelles. |
7. Cas d’usage avancés
| Cas d’usage | Webhook déclencheur | Destination cible | Exemple d’action |
|---|---|---|---|
| Envoi SMS de confirmation | order.created |
Twilio (webhook) | SMS “Your order #123 is confirmed”. |
| Mise à jour de la feuille de calcul de prévisions | order.completed |
Google Sheets (via Sheet‑DB ou Apps Script) | Ajout de la ligne “#123 – 3× T‑shirt – -15 €”. |
| Génération de bons de réduction | invoice.payment_successful |
Shopify Coupon API (via HTTP Request) | Crée un coupon de 10 % valable 30 jours. |
| Déclenchement d’un workflow ERP | invoice_created |
Microsoft Power Automate | Départ d’une chaîne d’approbation de la facture. |
| Notifications push | checkout_order_processed (plugin) |
Firebase Cloud Messaging | Envoie une notification mobile à l’administrateur. |
Astuce : lorsqu’un webhook doit appeler une API tierce (ex. Twilio), assurez‑vous d’utiliser un token d’API stocké dans le coffre-fort du serveur (ex. HashiCorp Vault) et non dans le code source afin de respecter le principe du secret-as-code.
8. Validation et debug
8.1 Simuler des webhooks localement
- ngrok ou expose pour rendre votre serveur local accessible en HTTPS.
- Webhook.site (
https://webhook.site) pour capturer les payloads et vérifier leX-Dolibarr-Signature.
8.2 Tester le HMAC en PHP
<?php
// Exemple de vérification côté Dolibarr
$receivedSignature = $_SERVER['HTTP_X_DOLIBARR_SIGNATURE'];
$payload = file_get_contents('php://input');
$secret = 'a1b2c3d4e5f6g7h8i9j0';
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $receivedSignature)) {
header('HTTP/1.1 401 Unauthorized');
exit;
}
// traitement...
?>
8.3 Vérifier les logs Dolibarr
SELECT *
FROM llx_webhook_log
WHERE event='order_created'
ORDER BY id DESC
LIMIT 20;
Si le statut
errorapparaît, consultez la colonneerror_messagepour le détail du problème (ex. code 500, timeout, payload malformé).
9. Retour d’expérience — Retours de la communauté
| Plateforme | Sentiment général | Points forts | Points faibles / améliorations |
|---|---|---|---|
| Forums Dolibarr | Positif (8.5/10) | Intégration native depuis 18, HMAC fiable, logs détaillés. | Besoin d’une UI plus riche pour la création de webhooks (drag‑&‑drop des champs). |
| Discussions WooCommerce | Mitigé (6/10) | Grande communauté, nombreux plugins de webhook. | Les webhooks "global" de WP ne différencient pas les événements spécifiques de WooCommerce sans passer par l’API REST. |
| Hackathon 2024 | Très positif | Utilisation de Make pour créer des flux “order → compte‑client → facturation → email”. | Latence parfois élevée quand plusieurs webhooks sont enchaînés ; besoin de caches Redis. |
10. Checklist de mise en production
| ✅ | Action |
|---|---|
| ☑ | Activer le module Webhook dans Dolibarr (v18+). |
| ☑ | Créer les webhooks côté WooCommerce (au moins order.created & order.completed). |
| ☑ | Créer les webhooks inverses côté Dolibarr (event‑>destination). |
| ☑ | Stocker les secrets dans un secret manager (ex. SOPS, AWS Secrets Manager). |
| ☑ | Tester localement avec ngrok et Webhook.site. |
| ☑ | Ajouter un idempotency key (order_id) côté récepteur. |
| ☑ | Configurer les alertes (ex. Slack webhook) sur les logs llx_webhook_log. |
| ☑ | Mettre en place le retry exponential backoff dans le moteur d’orchestration (Make/Zapier ou Lambda). |
| ☑ | Documenter tous les endpoints et les premiers pas pour les équipes Ops. |
| ☑ | Faire un run‑book de restauration (cómo re‑envoyer un webhook manuellement depuis la table llx_webhook_log). |
11. Conclusion
Les webhooks offrent un pont ultra‑léger entre Dolibarr (ERP/CRM) et WooCommerce (e‑commerce). En profitant des modules natifs de Dolibarr et de la puissance des plateformes d’automatisation modernes (Make, n8n, Serverless), on obtient :
- Synchronisation en temps réel du stock, des factures et des états de commande.
- Automatisation du processus de facturation sans scripts cron lourds.
- Scalabilité grâce à des retries intelligents et à l’orchestration cloud.
- Sécurité via HMAC‑SHA256 et l’utilisation de secret managers.
En suivant les bonnes pratiques présentées – sécurisation du payload, idempotence, monitoring – vous pouvez intégrer ces deux solutions de façon fiable, maintenable et prête à évoluer avec les besoins futurs de votre boutique en ligne.
Vous avez besoin d’un exemple de code complet (ex. module PHP de création de webhook) ou d’un guide pas‑à‑pas sur l’utilisation de ZAPIER ? N’hésitez pas à préciser votre demande dans les commentaires. 🚀