Webhook
アウトバウンドWebhookを使用すると、プロジェクトでイベントが発生した際に リアルタイムのHTTP POST通知を受信できます。Pro
概要
Webhookは、プロジェクトで特定のイベントが発生するたびに、設定した任意の HTTPSエンドポイントにJSONペイロードを配信します。各Webhookは、以下の イベントの1つ以上にサブスクライブできます:
| イベント | 説明 |
|---|---|
post.created | 新しいフィードバック投稿が送信される |
post.updated | フィードバック投稿が編集される |
post.deleted | フィードバック投稿が削除される |
comment.created | 投稿に新しいコメントが追加される |
comment.updated | コメントが編集される |
comment.deleted | コメントが削除される |
post.status_changed | 投稿のステータスが変更される(バックログ、オープン、計画中、進行中、完了) |
message.created | 新しいプライベートメッセージが送信される |
message.updated | プライベートメッセージが編集される |
message.deleted | プライベートメッセージが削除される |
beta_feedback.created | ベータテスターがベータプログラムにフィードバックを送信する |
beta_feedback.deleted | ベータフィードバックが削除される |
waitlist_signup.created | 訪問者がウェイトリストに参加する |
waitlist_signup.invited | ウェイトリストのエントリーがリストから招待される |
waitlist_signup.joined | 招待されたエントリーが承諾して参加する |
csat_survey.completed | CSAT満足度アンケートが評価付きで完了する |
Webhookは個々のプロジェクトにスコープされます。各プロジェクトは、独立した 設定と署名シークレットを持つWebhookエンドポイントのセットを持ちます。
Webhookの設定
- プロジェクトの連携ページに移動する
- アウトバウンドWebhookセクションまでスクロールする
- Webhookを追加をクリックする
- エンドポイントURLを入力する(本番環境ではHTTPSである必要がある)
- サブスクライブするイベントを選択する
- 保存をクリックする
保存後、署名シークレットが1回だけ表示されます。すぐにコピーしてください — 後で取得することはできません。Webhookのアクションメニューからいつでも 再生成できます。
Webhook署名の検証
各Webhookの配信には、リクエストボディのHMAC-SHA256署名を含む
X-SupDesk-Signatureヘッダーが含まれています。Webhookを検証するには:
HMAC-SHA256(署名シークレット, リクエストボディの生データ)を計算する- 結果を
X-SupDesk-Signatureヘッダーの16進値と比較する (sha256=プレフィックスの後) - タイミング攻撃を防ぐために定数時間比較を使用する
Node.js
import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(secret, body, signature) {
const expected = createHmac("sha256", secret)
.update(body)
.digest("hex");
const sig = signature.replace("sha256=", "");
return timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}Python
import hmac
import hashlib
def verify_webhook(secret: str, body: bytes, signature: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
sig = signature.removeprefix("sha256=")
return hmac.compare_digest(expected, sig)Ruby
require "openssl"
def verify_webhook(secret, body, signature)
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, body)
sig = signature.sub("sha256=", "")
Rack::Utils.secure_compare(expected, sig)
endWebhookのテスト
Webhook横のテストボタンをクリックすると、サンプルペイロードを
エンドポイントに送信できます。テストペイロードは"event": "test"と
data.messageフィールドを持ちます。webhook.site
のようなツールを使用して配信されたリクエストを確認してください。
配信ログ
配信ログには、各Webhookの最新50件の配信試行が表示されます:
- イベント — どのイベントが配信されたか
- ステータス —
successまたはfailed - レスポンスコード — エンドポイントからのHTTPステータスコード
- 試行回数 — 配信試行回数(リトライを含む)
- 時刻 — 配信が試行された時刻
リトライ動作
Webhookの配信が失敗した場合(5xxレスポンスまたはネットワークタイムアウト)、 SupDeskは指数バックオフで最大3回リトライします:
| 詳行 | 遅延 |
|---|---|
| 1 | 即時 |
| 2 | 1秒 |
| 3 | 2秒 |
クライアントエラー(4xx)はリトライされません — エンドポイント設定の 永続的な問題を示しています。
プラン要件
アウトバウンドWebhookはProおよびTeamプランで利用可能です。
Pro