Notifications par webhook

Ajouter un abonné webhook

Connectez-vous à Instatus sur instatus.com/login puis choisissez votre page de statut.

Allez dans Abonnés, puis Webhook.

Cliquez sur Ajouter un abonné webhook.

Un nouveau formulaire apparaît, dans lequel vous pouvez saisir :

  • L’URL du webhook
  • Une adresse e-mail
Abonné webhook

Nous enverrons des requêtes à votre URL selon ce format et un e-mail sera envoyé à l’adresse indiquée en cas de problème avec l’URL.

Vous pouvez nommer votre abonné webhook en cliquant dessus et en saisissant un nom dans le formulaire ; vous pouvez aussi le supprimer en cliquant sur Se désabonner.

Vérification de la charge utile du webhook

Il est fortement recommandé de valider la charge utile du webhook dans votre point de terminaison.

Nous signons les charges utiles des webhooks avec un secret et incluons la signature dans un en-tête nommé x-instatus-webhook-signature. Cette signature vous permet de vérifier que le webhook provient bien d’Instatus.

Étapes pour vérifier un webhook

  1. Récupérez votre secret de webhook dans le tableau de bord (vous le trouvez lors de la modification ou de la création d’un webhook, où vous pouvez aussi le personnaliser).
Secret du webhook
  1. Créez sur votre serveur un point de terminaison qui recevra le webhook.

  2. Comparez la signature avec celle générée par votre serveur pour la valider.

  3. Si les signatures correspondent, traitez le webhook.

Exemple de code

import crypto from 'crypto'
import express from 'express'
const app = express()
app.use(express.json())
const WEBHOOK_SECRET = 'your-webhook-secret'
function isVerifiedPayload(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret)
const digest = hmac.update(JSON.stringify(payload)).digest('hex')
return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature))
}
app.post('/endpoint/to/webhook', (req, res) => {
const payload = req.body
const signature = req.header('x-instatus-webhook-signature')
if (!signature) {
return res.status(400).send('Signature missing')
}
if (!isVerifiedPayload(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature')
}
// Process the valid webhook
res.status(200).send('Webhook received')
})
app.listen(3000, () => console.log('Server running on port 3000'))

Pourquoi la vérification est importante

  • Garantit l’authenticité : assure que le webhook provient bien de notre plateforme.
  • Empêche l’altération : détecte toute modification de la charge utile.
  • Renforce la sécurité : protège contre les attaques par rejeu et les accès non autorisés.