Webhook 通知

Webhook の購読者を追加する

instatus.com/login から Instatus にログインし、対象のステータスページを選びます。

購読者から Webhook へ移動します。

Webhook の購読者を追加をクリックします。

新しいフォームが表示され、次の項目を入力できます。

  • Webhook の URL
  • メールアドレス
Webhook の購読者

指定した URL へ、この形式でリクエストを送信します。 URL に問題があった場合は、指定したメールアドレスにメールが送られます。

Webhook の購読者をクリックしてフォームに名前を入力すると、名前を付けられます。購読を解除をクリックすれば、この購読者を削除することもできます。

Webhook のペイロードの検証

Webhook のエンドポイントでペイロードを検証することを強くおすすめします。

Instatus は Webhook のペイロードをシークレットで署名し、その署名を x-instatus-webhook-signature というヘッダーに含めます。この署名によって、Webhook が Instatus から送られたものであることを検証できます。

Webhook を検証する手順

  1. ダッシュボードから 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 が Instatus のプラットフォームから送られたものであることを保証します。
  • 改ざんの検知: ペイロードが変更されていないかを検出します。
  • セキュリティの向上: リプレイ攻撃や不正なアクセスから保護します。