قالب وب‌هوک‌ها

اگر از طریق وب‌هوک مشترک شده باشید، وب‌هوک‌ها را در این قالب‌ها دریافت می‌کنید:

وقتی حادثه‌ای اضافه یا به‌روزرسانی می‌شود:

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

راستی‌آزمایی محتوای وب‌هوک

اکیداً توصیه می‌شود محتوای وب‌هوک را در نقطه پایانی وب‌هوک اعتبارسنجی کنید.

ما محتوای وب‌هوک را با یک کلید مخفی امضا می‌کنیم و امضا را در هدری با نام x-instatus-webhook-signature قرار می‌دهیم. این امضا به شما امکان می‌دهد مطمئن شوید وب‌هوک از Instatus آمده است.

گام‌های راستی‌آزمایی وب‌هوک

۱. کلید مخفی وب‌هوک را که هنگام اشتراک در وب‌هوک ساختید، ذخیره کنید (آن را هنگام اشتراک در یک صفحه از طریق وب‌هوک می‌بینید و همان‌جا هم می‌توانید سفارشی‌اش کنید).

کلید مخفی وب‌هوک

۲. روی سرور خود یک نقطه پایانی جدید بسازید که وب‌هوک را دریافت کند.

۳. امضا را با امضایی که سرور شما تولید می‌کند مقایسه کنید تا اعتبارسنجی شود.

۴. اگر امضاها یکسان بودند، وب‌هوک را پردازش کنید.

نمونه کد

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

چرا راستی‌آزمایی مهم است

  • اصالت را تضمین می‌کند: مطمئن می‌شوید وب‌هوک از پلتفرم ما آمده است.
  • از دستکاری جلوگیری می‌کند: تغییرات در محتوا را تشخیص می‌دهد.
  • امنیت را بالا می‌برد: در برابر حملات بازپخش و دسترسی غیرمجاز محافظت می‌کند.