Notifikasi webhook

Menambahkan pelanggan langganan webhook

Masuk ke Instatus dari instatus.com/login lalu pilih halaman status Anda.

Buka Pelanggan langganan, lalu Webhook.

Klik Add webhook subscriber,

Sebuah formulir baru akan muncul di mana Anda bisa memasukkan:

  • URL webhook
  • Alamat email
Pelanggan langganan webhook

Kami akan mengirim permintaan ke URL Anda memakai format ini dan sebuah email akan dikirim ke alamat email yang ditentukan saat terjadi masalah dengan URL tersebut.

Anda bisa memberi nama pada pelanggan langganan webhook Anda dengan mengekliknya lalu mengetikkan nama di formulir; Anda juga bisa menghapus pelanggan ini dengan mengeklik Berhenti berlangganan.

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. Ambil Webhook Secret Anda dari dashboard (Anda bisa menemukannya saat mengubah atau membuat 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.