Aperçu
En configurant un webhook, une requête HTTP POST sera envoyée à l'URL spécifiée lorsqu'un événement se produit (envoi, ouverture, clic, etc.).
Les webhooks peuvent être configurés dans Tableau de bord > Webhooks.
Types d'événements
| Event | Description |
|---|---|
email.sent |
Lorsqu'un e-mail est envoyé |
email.delivered |
Lorsqu'un e-mail est livré au destinataire |
email.opened |
Lorsque le destinataire ouvre l'e-mail |
email.clicked |
Lorsque le destinataire clique sur un lien dans l'e-mail |
email.bounced |
Lorsqu'un e-mail est rejeté (rebond) |
email.complained |
Lorsque le destinataire signale un spam |
subscriber.created |
Lorsqu'un nouvel abonné est ajouté |
subscriber.unsubscribed |
Lorsqu'un abonné se désabonne |
campaign.sent |
Lorsque l'envoi d'une campagne commence |
campaign.completed |
Lorsque l'envoi d'une campagne est terminé |
Format du payload
Toutes les requêtes webhook contiennent un payload JSON au format suivant :
{
"event": "email.opened",
"timestamp": "2026-01-10T12:00:00+00:00",
"data": {
"campaign_id": 123,
"campaign_uuid": "abc-123...",
"campaign_name": "January Newsletter",
"subscriber_id": 456,
"subscriber_uuid": "def-456...",
"subscriber_email": "user@example.com",
"ip_address": "1.2.3.4",
"user_agent": "Mozilla/5.0...",
"occurred_at": "2026-01-10T12:00:00+00:00"
}
}
En-têtes de requête
| Header | Description |
|---|---|
Content-Type |
application/json |
X-Webhook-ID |
UUID du webhook |
X-Webhook-Event |
Type d'événement (ex : email.opened) |
X-Webhook-Signature |
Signature HMAC-SHA256 |
Vérification de la signature
Pour vérifier l'authenticité d'une requête webhook, validez l'en-tête X-Webhook-Signature. La signature est un hash HMAC-SHA256 utilisant le secret du webhook et le corps de la requête.
Exemple PHP
<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'];
$secret = 'your_webhook_secret';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
die('Invalid signature');
}
$data = json_decode($payload, true);
// Process the event...
Exemple Node.js
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
// Express.js example
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = JSON.stringify(req.body);
if (!verifySignature(payload, signature, 'your_secret')) {
return res.status(401).send('Invalid signature');
}
// Process the event...
res.status(200).send('OK');
});
Politique de relance
- • En cas d'échec d'envoi du webhook (réponse non-2xx), aucune relance automatique n'est effectuée.
- • Après 5 échecs consécutifs, le webhook est automatiquement désactivé.
- • Les webhooks désactivés peuvent être réactivés depuis le tableau de bord.
- • Le temps de réponse doit être inférieur à 10 secondes.
Bonnes pratiques
- • Vérifiez toujours la signature pour confirmer l'authenticité de la requête.
- • Traitez les webhooks le plus rapidement possible (moins de 5 secondes).
- • Mettez les tâches longues en file d'attente et retournez immédiatement 200 OK.
- • Utilisez des endpoints HTTPS pour transmettre les données en toute sécurité.