Thông báo qua Webhook

Thêm người đăng ký webhook

Đăng nhập vào Instatus tại instatus.com/login rồi chọn trang trạng thái của bạn.

Vào Người đăng ký, rồi Webhook.

Nhấp Thêm người đăng ký webhook,

Một biểu mẫu mới sẽ hiện ra, tại đó bạn có thể nhập:

  • URL webhook
  • Địa chỉ email
Người đăng ký webhook

Chúng tôi sẽ gửi các yêu cầu tới URL của bạn theo định dạng này và một email sẽ được gửi tới địa chỉ email đã chỉ định khi URL gặp vấn đề.

Bạn có thể đặt tên cho người đăng ký webhook bằng cách nhấp vào nó và nhập tên trong biểu mẫu; bạn cũng có thể xóa người đăng ký này bằng cách nhấp Hủy đăng ký.

Xác minh payload của Webhook

Rất khuyến khích xác thực payload của webhook tại endpoint webhook.

Chúng tôi ký payload webhook bằng một secret và đính kèm chữ ký trong một header tên là x-instatus-webhook-signature. Chữ ký này cho phép bạn xác minh rằng webhook đến từ Instatus.

Các bước xác minh Webhook

  1. Lấy Webhook Secret của bạn từ dashboard (Bạn có thể tìm thấy nó khi sửa hoặc tạo một webhook, và cũng có thể tùy chỉnh nó tại đó).
Webhook Secret
  1. Tạo một endpoint mới trên máy chủ của bạn để nhận webhook.

  2. So sánh chữ ký với chữ ký do máy chủ của bạn tạo ra để xác thực.

  3. Nếu hai chữ ký khớp nhau, hãy xử lý webhook.

Ví dụ mã

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

Vì sao việc xác minh quan trọng

  • Đảm bảo tính xác thực: Bảo đảm webhook thực sự đến từ nền tảng của chúng tôi.
  • Ngăn chặn giả mạo: Phát hiện các thay đổi trong payload.
  • Tăng cường bảo mật: Bảo vệ trước các cuộc tấn công phát lại và truy cập trái phép.