Webhooks
Vitef appelle votre serveur à chaque étape de vos envois : plus besoin d’interroger l’API. Déclarez jusqu’à 5 adresses HTTPS dans l’onglet « Webhooks » de votre espace développeur, chacune pour l’environnement test ou live, avec les événements voulus (aucun coché : tous). Le secret de signature (whsec_…) s’affiche une seule fois, à la création ou au renouvellement.
Événements
mailing.created: envoi créé.mailing.printed: imprimé.mailing.posted: remis à la poste.mailing.in_transit: en cours d’acheminement.mailing.delivered: distribué.mailing.ar_signed: accusé de réception signé.mailing.returned: retourné à l’expéditeur.mailing.error: incident.mailing.canceled: annulé.mailing.proof_available: preuve disponible (data.proof.kind : filing, delivery ou return).ping: envoyé par le bouton « Envoyer un ping » de l’espace développeur, pour tester votre point de terminaison.
mailing.created part vers les webhooks déclarés au moment de la création de l’envoi.
Requête reçue
Un POST en JSON, avec ces en-têtes :
Vitef-Event: type de l’événement.Vitef-Delivery: identifiant de la livraison, le même à chaque nouvelle tentative (visible dans l’historique de l’espace développeur).Vitef-Signature:t=horodatage Unix de l’envoi, puis une signaturev1=, ou deux pendant un renouvellement du secret (le nouveau puis l’ancien).
data.mailing est l’envoi tel que renvoyé par GET /v1/mailings/{id}, sans le contenu de la lettre, dans son état au moment de l’événement. livemode vaut false en bac à sable.
Vérifier la signature
v1 est le HMAC-SHA256, en hexadécimal, de `${t}.${corps brut}` avec votre secret (chaîne whsec_… entière) comme clé. Calculez-le sur le corps exact reçu (octets bruts, avant tout décodage JSON), comparez en temps constant et refusez un t éloigné de plus de 5 minutes de votre horloge (protection contre le rejeu). L’en-tête peut porter plusieurs v1= : acceptez la requête si l’une d’elles correspond (ne gardez pas seulement la dernière).
Renouveler le secret
Bouton « Renouveler le secret » de l’espace développeur, à utiliser à intervalles réguliers ou si le secret a pu fuiter. Le nouveau secret s’affiche une seule fois ; pendant 24 heures, chaque événement est signé avec le nouveau et l’ancien secret (deux v1=). Déployez le nouveau secret pendant ce délai : votre serveur continue d’accepter les événements, sans coupure. Passé ce délai, seul le nouveau secret signe. Si le secret a fuité, renouvelez-le, déployez le nouveau aussitôt et n’acceptez plus l’ancien de votre côté.
Répondre, et nouvelles tentatives
- Répondez 2xx en moins de 10 secondes, puis traitez l’événement en tâche de fond. Les redirections ne sont pas suivies.
- Sinon (erreur, délai dépassé, autre statut), Vitef réessaie après 1 min, 5 min, 30 min, 2 h, 6 h, 12 h puis 24 h : 8 tentatives au total, puis la livraison est abandonnée. Chaque tentative est signée avec un nouvel horodatage.
- Un événement peut arriver deux fois ou dans le désordre : dédoublonnez sur
id(l’événement) et fiez-vous àstepetstatusdedata.mailingplutôt qu’à l’ordre d’arrivée. - L’historique des livraisons (statut, tentatives, dernier code HTTP) est dans l’espace développeur, 30 jours.
- Après 5 livraisons abandonnées de suite, le webhook est désactivé automatiquement et le contact de votre compte reçoit un e-mail ; l’espace développeur en affiche le motif. Une livraison réussie remet ce compteur à zéro. Une fois votre serveur réparé, réactivez le webhook : les événements survenus pendant la désactivation ne sont pas rejoués, relisez vos envois avec
GET /v1/mailings. - Seules les adresses HTTPS publiques sont appelées ; une adresse qui résout vers un réseau privé est refusée.
Tester en bac à sable
Déclarez un webhook « test », créez un envoi avec votre clé test puis faites-le avancer avec POST /v1/test/mailings/{id}/advance : vous recevez les mêmes événements qu’en production, par exemple la preuve de dépôt :