Guide pratique
Configurer un webhook
Créez un endpoint de webhook, choisissez ses événements, ajoutez des filtres de contenu, envoyez un événement de test, activez ou désactivez le webhook, ou effectuez une rotation du secret.
Dans ce guide, vous créez un webhook, le limitez aux événements dont vous avez besoin et vérifiez que votre endpoint reçoit des requêtes signées. Vous pouvez tout faire dans le tableau de bord ou avec l’API des webhooks.
Avant de commencer
- Une URL publique qui accepte les requêtes
POST. HTTPS est vivement recommandé. Les URL surlocalhostou sur des plages d’IP privées sont refusées ; pour le développement local, utilisez un tunnel comme ngrok ou Cloudflare Tunnel. - Un endpoint qui conserve le corps brut de la requête pour pouvoir vérifier la signature.
- Pour l’API, une clé Full Access.
- Un emplacement de webhook libre. Pay as you go inclut 3 endpoints, Pro 10, Business et Custom 100.
Créer le webhook
-
Ouvrez la page Webhooks. Accédez à Email APIWebhooks et sélectionnez Add webhook.
-
Saisissez un nom et une URL. Le nom doit être unique dans l’espace de travail, par exemple
Production events. L’URL est celle de votre endpoint, par exemplehttps://acme.com/webhooks/emailit. Sélectionnez Create. -
Copiez le secret. La boîte de dialogue affiche le secret du webhook, qui commence par
whsec_, avec l’avertissement « You can see the webhook secret only once. Store it safely. » Copiez-le dans l’environnement de votre application, par exemple sous le nomEMAILIT_WEBHOOK_SECRET, puis sélectionnez Done.
Un webhook créé dans le tableau de bord est abonné à tous les types d’événements. L’onglet Settings du webhook s’ouvre pour que vous puissiez le restreindre.
Appelez Créer un webhook. Listez les types d’événements dans events, ou définissez all_events sur true. La réponse 201 contient le secret.
curl https://api.emailit.com/v2/webhooks \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Production events",
"url": "https://acme.com/webhooks/emailit",
"events": ["email.delivered", "email.bounced", "email.complained"]
}'Contrairement au tableau de bord, l’API utilise par défaut all_events: false et une liste events vide : un webhook créé sans l’un ni l’autre ne reçoit rien. Un nom en double renvoie 409 ; atteindre la limite d’endpoints de votre forfait renvoie 422 avec usage.used et usage.limit.
Choisir les événements
Un webhook reçoit soit tous les types d’événements, soit uniquement ceux que vous sélectionnez.
Dans l’onglet Settings du webhook, désactivez All events, puis sélectionnez les types dans la carte Events. Les événements sont regroupés par ressource (Emails, Domains, Audiences, Subscribers, Contacts, Templates, Suppressions, Email Verifications, Email Verification Lists), et chaque groupe a une case Select all. Sélectionnez Save.
Le sélecteur ne liste pas tous les types qu’Emailit envoie. email.canceled, email.held, email.unsubscribed, email.resubscribed, subscriber.resubscribed et les événements campaign.* parviennent aux webhooks dont l’option All events est activée, ou vous pouvez les ajouter à la liste via l’API. Le groupe Deprecated contient d’anciens noms d’événements qui ne sont plus envoyés. Consultez Types d’événements.
Appelez Mettre à jour un webhook. events remplace toute la liste. Définir all_events sur true vide la liste.
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"all_events": false, "events": ["email.received", "email.held", "email.canceled"]}'Filtrer les événements par contenu
Pay as you goProBusinessCustomUn filtre de contenu ne livre un événement que si ses données correspondent à vos règles. Les filtres s’appliquent en plus de la sélection d’événements : un événement doit être sélectionné et correspondre au filtre.
Utilisez-le pour répartir le trafic entre plusieurs endpoints, par exemple un webhook par gamme de produits, ou pour écarter des événements que vous ignoreriez de toute façon dans votre code.
- Mode de correspondance : All rules match (
all) ou Any rule matches (any). - Règles : 25 au maximum. Chaque règle comporte un champ, un opérateur et une valeur.
- Champ : un chemin à points dans le
data.objectde l’événement, par exempleto,status,meta.planou, pour les événements de clic,link.url. Le préfixepayload.est facultatif :payload.frometfromsont équivalents. - Les comparaisons sont sensibles à la casse et comparent les valeurs sous forme de texte, sauf
greater_thanetless_than, qui comparent des nombres.
| Opérateur | Correspond lorsque le champ |
|---|---|
equals / not_equals |
Est / n’est pas exactement égal à la valeur. |
contains / not_contains |
Contient / ne contient pas la valeur. |
starts_with / ends_with |
Commence / se termine par la valeur. |
greater_than / less_than |
Est un nombre supérieur / inférieur à la valeur. |
is_set / is_not_set |
A une valeur non vide / est absent ou vide. Aucune valeur nécessaire. |
in / not_in |
Est égal / n’est égal à aucune des valeurs d’un tableau. Envoyez le tableau via l’API, comme dans l’exemple ci-dessous. |
Dans l’onglet Settings du webhook, repérez la carte Filter. Choisissez le mode de correspondance, ajoutez des règles avec un champ, un opérateur et une valeur, puis sélectionnez Save. Laissez les règles vides pour livrer tous les événements sélectionnés. Sur Pay as you go, la carte est verrouillée et affiche Upgrade.
Envoyez filter avec Créer un webhook ou Mettre à jour un webhook. Définissez-le sur null pour le supprimer. Sur Pay as you go, un filtre renvoie 403 avec "error": "plan_required".
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"match": "all",
"rules": [
{ "field": "to", "operator": "ends_with", "value": "@acme.com" },
{ "field": "meta.plan", "operator": "in", "value": ["pro", "business"] }
]
}
}'Autres exemples :
| Objectif | Règle |
|---|---|
| Uniquement les e-mails reçus sur une adresse précise | to equals support@inbound.acme.com |
| Un seul domaine d’expéditeur | from ends_with @billing.acme.com |
| Uniquement les e-mails que vous avez étiquetés avec des métadonnées | meta.source equals checkout |
| Uniquement les clics sur votre page de tarifs | link.url starts_with https://acme.com/pricing |
| Uniquement les e-mails qui contiennent un ID client | meta.customer_id is_set |
Si un espace de travail passe à Pay as you go, les filtres existants restent enregistrés mais sont ignorés, et tous les événements sélectionnés sont livrés.
Envoyer un événement de test
Un test envoie immédiatement un exemple d’événement à votre URL, signé avec le secret actuel du webhook. Les événements sélectionnés et les filtres sont ignorés, la requête ne fait l’objet d’aucune nouvelle tentative et elle n’apparaît pas dans l’onglet Requests. Chaque webhook autorise 5 tests par minute.
Sur la page du webhook, ouvrez le menu d’actions (…) et sélectionnez Send test. Choisissez un type d’événement et sélectionnez Send test. La boîte de dialogue affiche « Your endpoint returned 200 » (ou le statut renvoyé par votre endpoint) et le corps de la réponse. « Could not reach the endpoint » signifie que la requête n’a pas obtenu de réponse HTTP, par exemple à cause d’une erreur DNS, d’un timeout ou d’une redirection.
Appelez Envoyer un événement de test avec n’importe quel type d’événement.
curl https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e/test \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type": "email.delivered"}'La réponse contient ok, status_code, body (la réponse de votre endpoint, 2 000 caractères au maximum), type et le payload envoyé.
Les événements de test utilisent des données d’exemple, avec un event_id qui commence par evt_test_, et leur structure peut légèrement différer de celle des événements réels. Construisez votre gestionnaire à partir de la référence des événements et confirmez avec un envoi réel.
Activer ou désactiver un webhook
Désactivez un webhook pour arrêter les livraisons sans perdre ses paramètres, par exemple pendant une maintenance.
- Tableau de bord : ouvrez le menu d’actions et sélectionnez Disable webhook ou Enable webhook. La page du webhook affiche le statut Enabled ou Disabled.
- API : appelez Mettre à jour un webhook avec
{"enabled": false}ou{"enabled": true}.
Tant qu’un webhook est désactivé, les nouveaux événements ne sont pas mis en file d’attente pour lui, et les requêtes qui attendent déjà une nouvelle tentative sont suspendues. Les événements survenus pendant la désactivation ne sont pas livrés plus tard ; si vous en avez besoin, lisez-les avec l’API des événements. Emailit désactive aussi automatiquement les webhooks après 3 jours d’échecs ; consultez Nouvelles tentatives et échecs.
La suppression d’un webhook entraîne la perte de tous ses événements en attente.
Effectuer une rotation du secret
Effectuez une rotation du secret s’il a pu fuiter, ou régulièrement, par précaution.
- Tableau de bord : ouvrez le menu d’actions, sélectionnez Webhook secret, puis Reset. Le nouveau secret n’est affiché qu’une seule fois.
- API : appelez Effectuer une rotation du secret de signature. La réponse contient le nouveau
secret. Récupérer un webhook renvoie aussi le secret actuel.
L’ancien secret cesse immédiatement de fonctionner, et toutes les requêtes suivantes, y compris les nouvelles tentatives d’événements plus anciens, sont signées avec le nouveau. Pour effectuer la rotation sans rejeter de requêtes, faites accepter les deux secrets à votre endpoint pendant quelques minutes, réinitialisez le secret, déployez la nouvelle valeur, puis retirez l’ancienne.
Vérifier le résultat
- Envoyez un événement de test et vérifiez que votre endpoint renvoie
2xx. - Envoyez un vrai e-mail, ou déclenchez l’événement auquel vous êtes abonné.
- Dans l’onglet Requests du webhook, la requête affiche Delivered. L’heure Last used du webhook est mise à jour.