Format webhook

Berikut format webhook yang akan Anda terima jika Anda berlangganan lewat webhook:

Saat sebuah insiden ditambahkan atau diperbarui:

{
"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": ""
}
]
}
}

Saat sebuah pemeliharaan ditambahkan atau diperbarui:

{
"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": ""
}
]
}
}

Saat sebuah komponen diperbarui:

{
"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": ""
}
}

Status halaman status yang mungkin:

  • UP
  • HASISSUES
  • UNDERMAINTENANCE

Status komponen yang mungkin:

  • OPERATIONAL
  • UNDERMAINTENANCE
  • DEGRADEDPERFORMANCE
  • PARTIALOUTAGE
  • MAJOROUTAGE

Status insiden yang mungkin:

  • INVESTIGATING
  • IDENTIFIED
  • MONITORING
  • RESOLVED

Status pemeliharaan yang mungkin:

  • NOTSTARTEDYET
  • INPROGRESS
  • COMPLETED

Verifikasi Payload Webhook

Sangat disarankan untuk memvalidasi payload webhook di endpoint webhook Anda.

Kami menandatangani payload webhook dengan sebuah secret dan menyertakan tanda tangannya sebagai header bernama x-instatus-webhook-signature. Tanda tangan ini memungkinkan Anda memverifikasi bahwa webhook memang berasal dari Instatus.

Langkah Memverifikasi Webhook

  1. Simpan Webhook Secret yang Anda buat saat berlangganan webhook (Anda bisa menemukannya saat berlangganan ke sebuah halaman lewat webhook, dan bisa menyesuaikannya di sana juga).
Webhook Secret
  1. Buat endpoint baru di server Anda yang akan menerima webhook.

  2. Bandingkan tanda tangan itu dengan tanda tangan yang dihasilkan server Anda untuk memvalidasinya.

  3. Jika tanda tangannya cocok, proses webhook-nya.

Contoh Kode

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

Mengapa Verifikasi Itu Penting

  • Memastikan Keaslian: Menjamin bahwa webhook berasal dari platform kami.
  • Mencegah Perubahan: Mendeteksi perubahan pada payload.
  • Meningkatkan Keamanan: Melindungi dari serangan replay dan akses tidak sah.