Notifiche via webhook

Aggiungere un iscritto webhook

Accedi a Instatus da instatus.com/login e scegli la tua status page.

Vai su Iscritti, poi su Webhook.

Clicca su Aggiungi iscritto webhook,

Comparirà un nuovo modulo dove puoi inserire:

  • L'URL del webhook
  • Un indirizzo email
Iscritto webhook

Invieremo richieste al tuo URL usando questo formato e, in caso di problemi con l'URL, verrà inviata un'email all'indirizzo indicato.

Puoi dare un nome al tuo iscritto webhook cliccandoci sopra e digitando un nome nel modulo; puoi anche eliminarlo cliccando su Annulla iscrizione.

Verifica del payload del webhook

È fortemente consigliato validare il payload del webhook nel tuo endpoint.

Firmiamo i payload dei webhook con un secret e includiamo la firma in un header chiamato x-instatus-webhook-signature. Questa firma ti permette di verificare che il webhook provenga davvero da Instatus.

Passaggi per verificare un webhook

  1. Recupera il tuo secret del webhook dalla dashboard (lo trovi mentre crei o modifichi un webhook e puoi anche personalizzarlo lì).
Secret del webhook
  1. Crea sul tuo server un nuovo endpoint che riceverà il webhook.

  2. Confronta la firma ricevuta con quella generata dal tuo server per convalidarla.

  3. Se le firme corrispondono, elabora il webhook.

Esempio di codice

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'))

Perché la verifica è importante

  • Garantisce l'autenticità: conferma che il webhook proviene dalla nostra piattaforma.
  • Impedisce le manomissioni: rileva le modifiche al payload.
  • Aumenta la sicurezza: protegge da attacchi replay e accessi non autorizzati.