Notificări prin webhook

Adaugă un abonat prin webhook

Autentifică-te în Instatus de la instatus.com/login și alege pagina ta de stare.

Mergi la Abonați, apoi la Webhook.

Dă clic pe Add webhook subscriber;

apare un formular nou, unde poți introduce:

  • URL webhook
  • Adresă de e-mail
Abonat prin webhook

Vom trimite cereri către URL-ul tău folosind acest format, iar când apare o problemă cu URL-ul, se va trimite un e-mail la adresa indicată.

Poți da un nume abonatului tău prin webhook dând clic pe el și scriind un nume în formular; poți șterge și acest abonat dând clic pe Dezabonează-te.

Verificarea payloadului webhook

Este foarte recomandat să validezi payloadul webhook în endpointul tău.

Semnăm payloadurile webhook cu un secret și includem semnătura într-un header numit x-instatus-webhook-signature. Această semnătură îți permite să verifici că webhookul a venit de la Instatus.

Pași pentru verificarea webhookului

  1. Ia-ți secretul webhook din panou (îl găsești când editezi sau creezi un webhook; tot acolo îl poți și personaliza).
Secretul webhookului
  1. Creează pe serverul tău un endpoint nou, care va primi webhookul.

  2. Compară semnătura cu cea generată de serverul tău, ca să o validezi.

  3. Dacă semnăturile corespund, procesează webhookul.

Exemplu de cod

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

De ce contează verificarea

  • Asigură autenticitatea: Garantează că webhookul provine de la platforma noastră.
  • Previne modificările: Detectează schimbările aduse payloadului.
  • Crește securitatea: Protejează împotriva atacurilor de tip replay și a accesului neautorizat.