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.
É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,v1=signature.
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).
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.
- 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 :