Webhooks

Les webhooks sont un moyen d’être notifié lorsqu’un événement se produit sur votre blog.

  • Un blog peut avoir jusqu’à 5 webhooks
  • Chaque webhook peut s’abonner Ă  un ou plusieurs Ă©vĂ©nements
Événement
Déclenché
Données
blog.updated
Un paramètre du blog est mis à jour
{ blog: Blog }
Article
post.created
Un nouvel article est créé
{ post: Post }
post.updated
Un article est mis Ă  jour
{ post: Post }
post.deleted
Un article est supprimé
{ post: Post }
post.variant.published
Une variante d'article est publiée
{ post: Post, variant: PostVariant, }
post.variant.unpublished
Une variante d'article est dépubliée
{ post: Post, variant: PostVariant, }
Étiquettes
tag.created
Une nouvelle étiquette est créée
{ tag: Tag }
tag.updated
Une étiquette est mise à jour
{ tag: Tag }
tag.deleted
Une étiquette est supprimée
{ tag: Tag }
Utilisateurs
user.created
Un nouvel utilisateur est créé
{ user: User }
user.updated
Un utilisateur est mis Ă  jour
{ user: User }
user.deleted
Un utilisateur est supprimé
{ user: User }
Médias
media.created
Un élément média est ajouté
{ media: Media }
media.deleted
Un élément média est supprimé
{ media: Media }
Autre
navigation.changed
Les liens de navigation du blog ont changé
{ navigation: Navigation[] }
routes.changed
Les routes du blog ont changé
{ routes: Route[] }
languages.changed
Les langues du blog ont changé
{ languages: Language[] }
Vidage du cache
cache.single
Lorsque le cache d'un seul chemin doit être vidé (styles.css, ressources, médias, etc.)
{ path: string }
cache.templates
Lorsque le cache de tous les chemins générés par modèle doit être vidé (index, articles, flux, etc.)
Objet vide
cache.all
Lorsque tout le cache doit être vidé
Objet vide

RequĂŞte du webhook

Lorsqu’un événement se produit, une requête POST est envoyée à l’URL du webhook. Le corps de la requête est un objet JSON contenant les propriétés suivantes. La propriété data correspond aux données de l’événement. Consultez le tableau ci-dessus pour connaître la structure des données de chaque événement.

{
	"subdomain": "my-subdomain",
	"timestamp": 1645208678,
	"event": "cache.single",
	"data": {}
}

Sécurité

Chaque requête de webhook inclut un en-tête X-Signature contenant une signature HMAC-SHA256 du corps de la requête, signée avec la clé secrète de votre webhook. Vous trouverez ce secret dans la Console, dans les paramètres de votre webhook.

Pour vérifier la signature :

  • Hachez le corps de la requĂŞte avec HMAC-SHA256 en utilisant la clĂ© secrète de votre webhook.
  • Comparez le hachage obtenu avec la valeur de l’en-tĂŞte X-Signature.
const signature = request.headers['x-signature'];
const expected = crypto
	.createHmac('sha256', env.HB_WEBHOOK_SECRET)
	.update(JSON.stringify(request.body))
	.digest('hex');

if (signature !== expected) {
	return 'Unauthorized';
}

Réponse et nouvelles tentatives

Nous attendons un code de réponse HTTP 200 de votre serveur pour marquer le webhook comme réussi. Si nous recevons un autre code de réponse ou si nous ne parvenons pas à joindre vos serveurs, nous réessaierons d’envoyer le webhook 3 fois de plus après

  • 1 minute
  • 5 minutes
  • 30 minutes

Si toutes les tentatives échouent, nous marquerons ce webhook comme échoué et ne l’enverrons plus automatiquement.