Dolibarr : réussir la mise en place de webhooks orientés conformité
Guide pratique pour les équipes IT, compliance et développeurs qui souhaitent exploiter les webhooks de Dolibarr afin de respecter les exigences légales (RGPD, SOX, etc.)
1. Introduction : pourquoi les webhooks dans une démarche de conformité ?
| Enjeu | Impacts conformité |
|---|---|
| Traçabilité des événements métier (création/modif/suppression d’un tiers, facture, paiement…) | Possibilité d’archiver chaque événement dans un registre immuable (audit trail). |
| Synchronisation en temps réel avec d’autres systèmes (CRM, DMS, solution de signature électronique) | Garantit que les données partagées sont toujours à jour, évitant les incohérences qui peuvent être sanctionnées. |
| Alertes de changement de statut juridique (ex. : passage d’un client en “prospect” à “fournisseur”) | Déclenche des contrôles supplémentaires (validation manuelle, archivage). |
| Gestion des consentements et des droits d’accès | Les webhooks peuvent être couplés à des workflows de vérification des consentements avant toute transmission. |
Les webhooks de Dolibarr permettent d’émettre des notifications HTTP(S) dès qu’un événement survient, offrant ainsi une base idéale pour automatiser les processus de conformité. Mais pour que ces notifications soient réellement efficaces, il faut les concevoir, les sécuriser et les monitorer de façon rigoureuse.
2. Architecture recommandée d’un webhook conforme
+-------------------+ +-------------------+ | Dolibarr ( serveur ) | POST /payload → | Endpoint de traitement |
| (module Webhooks) | | (API / Worker) |
+-------------------+ +-------------------+
| |
| (cryptage TLS, signature HMAC) |
| |
v v
+-------------------+ +-------------------+
| Namespace de | | Bus de logs (ELK) |
| stockage immuable| | + alertes |
+-------------------+ +-------------------+
- Endpoint de traitement : micro‑service dédié, entièrement isolé (ex. : conteneur Docker, Lambda, Cloud Run).
- Persist : toutes les requêtes reçues sont journalisées en dehors du système (fichiers d’audit, base de logs immuable, objet storage avec verrouillage de version).
- Signature : utilisation d’un secret partagé pour signer le payload (HMAC‑SHA256). Le récepteur vérifie la signature avant toute action.
- Temps de réponse : le service doit renvoyer 200 OK rapidement (≤ 2 s) pour éviter que Dolibarr ne réessaye et ne surcharge votre infrastructure.
3. Étapes concrètes pour configurer un webhook “compliant” dans Dolibarr
3.1. Activer le module Webhooks
- Installation : Le module
webhooksfait partie du core depuis Dolibarr ≥ 16.0.sudo apt-get install php-xml # dépendance pour le parsing JSON - Configuration générale :
- Menu
Configuration → Webhooks. - Cochez Activer les webhooks.
- Limite de réessai : définissez 3 tentatives avec un back‑off exponentiel (ex. : 1 s, 5 s, 30 s).
- Menu
3.2. Créer le webhook lié à un évènement métier
| Evénement Dolibarr | Description | Exemple de payload |
|---|---|---|
| OnCreateSellLine | Création d’une ligne de devis/facture | { "event":"order.create", "data":{ "orderid": 1234, "amount": 1250.00, "customer":"C001" } } |
| OnUpdateContact | Mise à jour d’un tiers (client/fournisseur) | { "event":"contact.update", "data":{ "entity":"kunde", "id":45, "email":"example@domain.com" } } |
| OnDeleteInvoice | Suppression d’une facture | { "event":"invoice.delete", "data":{ "invoiceid":678 } } |
Dans le formulaire du webhook :
- Nom :
GDPR_Contact_Update. - URL :
https://api.monsociete.com/webhooks/dolibarr/contact-update. - Méthode :
POST. 4. En‑tête :X-Dolibarr-Signature: <HMAC>(généré automatiquement). - Corps : laisser vide (Dolibarr envoie le JSON complet).
3.3. Préparer le secret partagé
Dans la même configuration, indiquez un secret que vous communiquerez uniquement à votre endpoint :
WEBHOOK_SECRET = "e3b0c442-98fc-1c14-9a6b-7aef2d1e5d6f"
Ce secret sera utilisé pour calculer l’en‑tête X-Dolibarr-Signature via HMAC‑SHA256 :
$hash = hash_hmac('sha256', $payload, $WEBHOOK_SECRET);
header('X-Dolibarr-Signature: '.$hash);
4. Bonnes pratiques de conformité
4.1. Sécurité du transport TLS 1.2+ obligatoire – configurez votre serveur web avec un certificat signé par une autorité de confiance. Cipher suite : TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ou équivalent.
- Redirect HTTP → HTTPS : indispensable pour éviter le déplacement de données non chiffrées.
4.2. Vérification de l’intégrité du payload
function isValidSignature($payload, $signature, $secret) {
$expected = hash_hmac('sha256', $payload, $secret);
return hash_equals($expected, $signature);
}
hash_equalsempêche les attaques par timing‑analysis.- Rejetez le payload dès que la signature ne correspond pas : aucune logique métier ne doit être exécutée sur des données non authentifiées.
4.3. Gestion des droits d’accès et du consentement
- Vérifier le consentement – Dans le payload, si le champ
emailPreferenceindiquefalse, bloquez l’envoi vers des canaux de marketing. - Contrôle de rôle – Autorisez uniquement les adresses IP ou les rôles API qui ont le droit d’émettre des webhooks.
- Journalisation des refus – Conservez les tentatives de webhook rejetées (code 403) afin d’alimenter les rapports de conformité.
4.4. Conservation et archivage immuable
| Type de donnée | Taille maximale conseillée | Durée de rétention |
|---|---|---|
| Payload brut | 5 KB | 5 ans (RGPD) |
| Signature + timestamp | – | 5 ans |
| Logs d’audit | – | 10 ans (exigences SOX) |
Utilisez un bucket S3 avec Object Lock (mode Governance ou Compliance) pour garantir l’immuabilité. Chaque entrée doit inclure :
{
"event": "order.create",
"timestamp": "2025-10-30T14:23:11Z",
"payload": { "orderid":1234, "amount":1250.00 },
"signature": "b1c2d3…",
"processed_by": "service-webhooks-prod-01"
}
4.5. Monitoring & alerting
| Métrique | Seuil d’alerte | Action recommandée |
|---|---|---|
| Taux d’erreur HTTP 4xx/5xx | > 1 % sur 5 min | Escalade immédiate, investigation du webhook source |
| Délai moyen de traitement | > 2 s | Ajuster le scaling du service |
| Nombre de webhooks non‑déposés (retry) | > 10 sur 24 h | Re‑examiner le secret ou la connectivité réseau |
| Spike de fréquence (ex. : 100 webhooks/min) | > 5 % du volume habituel | Vérifier potentielle boucle de ré‑émission ou problème de conformité |
Intégrez ces métriques dans votre pipeline de logs (ELK, Loki, Grafana) et configurez des alertes PagerDuty ou Opsgenie afin de garantir une réaction rapide.
5. Exemple de micro‑service Node.js (ou PHP) qui trait« `js
// webhook-receiver.jsconst express = require(‘express’);
const crypto = require(‘crypto’);
const bodyParser = require(‘body-parser’);
const fs = require(‘fs’);
const { S3Client, PutObjectCommand } = require(‘@aws-sdk/client-s3’);
const app = express();
app.use(bodyParser.json({ limit: ’10kb’ })); // taille raisonnable
const SECRET = process.env.WEBHOOK_SECRET;
const s3 = new S3Client({ region: ‘eu-west-1’ });
function verifySignature(req, res, buf) {
const signature = req.get(‘X-Dolibarr-Signature’);
if (!signature) return false;
const hmac = crypto.createHmac(‘sha256’, SECRET);
hmac.update(buf);
const expected = hmac.digest(‘hex’);
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}
app.post(‘/webhooks/dolibarr/contact-update’, async (req, res) => {
if (!verifySignature(req, res, Buffer.from(JSON.stringify(req.body)))) {
return res.status(401).send(‘Invalid signature’);
}
const payload = req.body;
const record = {
event: payload.event,
timestamp: new Date().toISOString(),
payload,
signature: req.get(‘X-Dolibarr-Signature’)
};
// Persist immutable log in S3
const bucket = ‘my-company-webhook-audit’;
const key = logs/${record.timestamp.replace(/[:.]/g,'')}-${record.event}.json;
await s3.send(new PutObjectCommand({
Bucket: bucket,
Key: key,
Body: JSON.stringify(record),
ServerSideEncryption: ‘aws:kms’,
StorageClass: ‘GLACIER’
}));
// TODO: validation consentement, déclenchements de workflows, etc.
console.log(‘Webhook traité :’, payload);
// Réponse rapide
res.status(200).send(‘OK’);
});
app.listen(8080, () => console.log(‘Webhook receiver listening on 8080’));
* **Points forts de l’exemple** :
* Vérification de la signature avant toute action.
* Conservation des logs dans un bucket S3 avec chiffrement KMS et stockage Glacier (immutabilité).
* Réponse `200 OK` ultra‑rapide pour éviter les ré‑essais de Dolibarr.
---
## 6. Checklist « Conformité webhooks Dolibarr »
| ✅ | Action |
|----|--------|
| **1** | Activer le module webhooks et définir un secret partagé. |
| **2** | Créer un webhook pour chaque événement critique (création/édition/suppression de tiers, factures, paiements). |
| **3** | Utiliser **HTTPS** avec un certificat valide sur l’URL de réception. |
| **4** | Configurer la vérification de signature HMAC‑SHA256 côté récepteur. |
| **5** | Refuser immédiatement tout payload non signé ou dont la signature est invalide. |
| **6** | Envoyer une réponse `200 OK` en < 2 s après validation. |
| **7** | Archivage immuable (object‑lock, S3 Glacier) de chaque payload et de son métadonnées. |
| **8** | Conserver les logs d’audit pendant la durée légale requise (5‑10 ans). |
| **9** | Mettre en place un monitoring (taux d’erreur, latence, fréquence) avec alertes. |
| **10** | Documenter les flux de conformité (procédure de revue, responsabilité, procédure d’incident). |
---
## 7. Pièges courants et comment les éviter
| Piège | Conséquence | Solution |
|-------|--------------|----------|
| **Pas de secret** (ou secret partagé en clair) | Vulnérabilité de type replay attack. | Générer un secret cryptographiquement fort (UUID‑v4 ou 256‑bits aléatoires) et le conserver dans un vault (HashiCorp, AWS Secrets Manager). |
| **Réponse non‑200** (ex. : 500) | Dolibarr ré‑essaye, créant une boucle et saturer les logs. | Toujours renvoyer 200 dès que la signature est validée, même si le traitement async débute plus tard. |
| **Payload trop gros** (> 10 KB) | Risque de déni de service ou de dépassement de limites de Dolibarr. | Limiter le champ d’événement à des actions de haut niveau; fragmenter les grosTransferts en plusieurs webhooks. |
| **Absence de journalisation immuable** | Difficulté à prouver la conformité lors d’un audit. | Utiliser des solutions de stockage avec verrouillage (S3 Object Lock, Azure Immutable Blob). |
| **Logique métier lourde dans le webhook** | Délai de traitement > 2 s, ré‑envois multiples. | Déléguer le traitement lourd à un **queue** (Kafka, SQS) et simplement pousser un ACK. |
| **Oublier les consentements** | Violation du RGPD (traitement de données personnelles). | Insérer, dans le webhook, une étape de *check consentement* avant toute action de diffusion. |
---
## 8. Conclusion
Les **webhooks de Dolibarr** offrent une passerelle puissante pour automatiser les processus de conformité : traçabilité, synchronisation de données, alertes de changement de statut et contrôle des consentements.
Pour les exploiter **de façon sûre et auditée**, il faut :
1. **Configurer correctement le secret partagé** et la vérification HMAC.
2. **Sécuriser le canal** (TLS, HTTP → HTTPS).
3. **Répondre rapidement** (200 OK) et **off‑load** le traitement métier vers un service dédié.
4. **Persister les événements** dans un magasin immuable et chiffré.
5. **Surveiller** en continu et mettre en place des alertes. 6. **Documenter** chaque étape afin de pouvoir la montrer lors d’un audit (RGPD, SOX, ISO 27001…).
En suivant la checklist et les bonnes pratiques présentées dans cet article, votre organisation pourra aprovecher les mots‑clefs Dolibarr (*webhooks, order.create, contact.update, signature, immutable log*) tout en respectant les exigences légales les plus strictes.
> **Astuce bonus** : ajoutez un **ticket automatisé** dans votre système de ticketing (ex. Jira, ServiceNow) à chaque réception d’un webhook conforme. Ainsi, chaque événement déclenche automatiquement une revue de conformité et garantit que l’audit trail sera complet.
Bonne intégration ! 🚀
---
**Sources complémentaires**
- Documentation officielle Dolibarr – *Webhooks* : https://github.com/Dolibarr/dolibarr/tree/master/make/webhooks
- RGPD – Guide d’audit des flux de données personnelles (CNIL)
- OWASP – *Secure Webhooks* (https://owasp.org/www-project-secure-webhooks/)
---
*Cet article a été rédigé par votre service d’architecture digitale, spécialisé en solutions ERP open‑source et conformité réglementaire.*