פורמט ה‑Webhooks

הנה הפורמט של ה‑webhooks שתקבלו אם נרשמתם באמצעות webhooks:

כשתקרית נוספת או מתעדכנת:

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

כשתחזוקה נוספת או מתעדכנת:

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

כשרכיב מתעדכן:

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

סטטוסים אפשריים של דף סטטוס:

  • UP
  • HASISSUES
  • UNDERMAINTENANCE

סטטוסים אפשריים של רכיב:

  • OPERATIONAL
  • UNDERMAINTENANCE
  • DEGRADEDPERFORMANCE
  • PARTIALOUTAGE
  • MAJOROUTAGE

סטטוסים אפשריים של תקרית:

  • INVESTIGATING
  • IDENTIFIED
  • MONITORING
  • RESOLVED

סטטוסים אפשריים של תחזוקה:

  • NOTSTARTEDYET
  • INPROGRESS
  • COMPLETED

אימות מטען ה‑Webhook

מומלץ מאוד לאמת את מטען ה‑webhook בנקודת הקצה שלכם.

אנחנו חותמים על מטעני webhook בעזרת סוד ומצרפים את החתימה בכותרת בשם x-instatus-webhook-signature. החתימה הזו מאפשרת לכם לוודא שה‑webhook הגיע מ‑Instatus.

שלבים לאימות ה‑Webhook

  1. שמרו את סוד ה‑Webhook שיצרתם בעת ההרשמה ל‑webhook (אפשר למצוא אותו בעת הרשמה לדף באמצעות webhook, ואפשר גם להתאים אותו שם).
סוד ה‑Webhook
  1. צרו נקודת קצה חדשה בשרת שלכם שתקבל את ה‑webhook.

  2. השוו את החתימה לחתימה שהשרת שלכם מייצר כדי לאמת.

  3. אם החתימות תואמות, עבדו את ה‑webhook.

דוגמת קוד

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

למה האימות חשוב

  • מבטיח מקוריות: מוודא שה‑webhook אכן הגיע מהפלטפורמה שלנו.
  • מונע שינוי: מזהה שינויים במטען.
  • משפר אבטחה: מגן מפני התקפות שחזור וגישה לא מורשית.