Webhookien muoto

Tässä ovat webhookien muodot, jotka saat, jos olet tilannut päivitykset webhookilla:

Kun häiriö lisätään tai päivitetään:

{
"meta": {
"unsubscribe": "",
"documentation": ""
},
"page": {
"id": "",
"status_indicator": "",
"status_description": "",
"url": ""
},
"incident": {
"backfilled": false,
"created_at": "",
"impact": "",
"name": "",
"resolved_at": "",
"status": "",
"updated_at": "",
"id": "",
"url": "",
"incident_updates": [
{
"id": "",
"incident_id": "",
"body": "",
"status": "",
"created_at": "",
"updated_at": ""
}
]
}
}

Kun huolto lisätään tai päivitetään:

{
"meta": {
"unsubscribe": "",
"documentation": ""
},
"page": {
"id": "",
"status_indicator": "",
"status_description": "",
"url": ""
},
"maintenance": {
"backfilled": false,
"created_at": "",
"impact": "",
"name": "",
"resolved_at": "",
"status": "",
"updated_at": "",
"id": "",
"url": "",
"duration": "",
"maintenance_updates": [
{
"id": "",
"maintenance_id": "",
"body": "",
"status": "",
"created_at": "",
"updated_at": ""
}
]
}
}

Kun komponentti päivitetään:

{
"meta": {
"unsubscribe": "https://<status-page-domain>/unsubscribe?id=${subscriber.id}&token=${subscriber.unsubscribeToken}",
"documentation": ""
},
"page": {
"id": "",
"status_indicator": "",
"status_description": "",
"url": ""
},
"component_update": {
"created_at": "",
"new_status": "",
"component_id": ""
},
"component": {
"created_at": "",
"id": "",
"name": "",
"status": ""
}
}

Mahdolliset statussivun tilat:

  • UP
  • HASISSUES
  • UNDERMAINTENANCE

Mahdolliset komponentin tilat:

  • OPERATIONAL
  • UNDERMAINTENANCE
  • DEGRADEDPERFORMANCE
  • PARTIALOUTAGE
  • MAJOROUTAGE

Mahdolliset häiriön tilat:

  • INVESTIGATING
  • IDENTIFIED
  • MONITORING
  • RESOLVED

Mahdolliset huollon tilat:

  • NOTSTARTEDYET
  • INPROGRESS
  • COMPLETED

Webhookin hyötykuorman vahvistaminen

On erittäin suositeltavaa validoida webhookin hyötykuorma webhook-päätepisteessä.

Allekirjoitamme webhookien hyötykuormat salaisuudella ja lisäämme allekirjoituksen otsakkeeseen nimeltä x-instatus-webhook-signature. Tämän allekirjoituksen avulla voit varmistaa, että webhook tuli Instatuksesta.

Webhookin vahvistamisen vaiheet

  1. Tallenna webhook-salaisuus, jonka loit tilatessasi webhookin (löydät sen tilatessasi sivun webhookilla, ja voit myös mukauttaa sitä siellä).
Webhook-salaisuus
  1. Luo palvelimellesi uusi päätepiste, joka vastaanottaa webhookin.

  2. Vertaa allekirjoitusta palvelimesi luomaan allekirjoitukseen validoidaksesi sen.

  3. Jos allekirjoitukset täsmäävät, käsittele webhook.

Koodiesimerkki

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

Miksi vahvistaminen on tärkeää

  • Varmistaa aitouden: Takaa, että webhook on peräisin alustaltamme.
  • Estää peukaloinnin: Havaitsee hyötykuorman muutokset.
  • Parantaa turvallisuutta: Suojaa toistohyökkäyksiltä ja luvattomalta pääsyltä.