Skip to Content

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.completedCSAT満足度アンケートが評価付きで完了する

Webhookは個々のプロジェクトにスコープされます。各プロジェクトは、独立した 設定と署名シークレットを持つWebhookエンドポイントのセットを持ちます。

Webhookの設定

  1. プロジェクトの連携ページに移動する
  2. アウトバウンドWebhookセクションまでスクロールする
  3. Webhookを追加をクリックする
  4. エンドポイントURLを入力する(本番環境ではHTTPSである必要がある)
  5. サブスクライブするイベントを選択する
  6. 保存をクリックする

保存後、署名シークレットが1回だけ表示されます。すぐにコピーしてください — 後で取得することはできません。Webhookのアクションメニューからいつでも 再生成できます。

Webhook署名の検証

各Webhookの配信には、リクエストボディのHMAC-SHA256署名を含む X-SupDesk-Signatureヘッダーが含まれています。Webhookを検証するには:

  1. HMAC-SHA256(署名シークレット, リクエストボディの生データ) を計算する
  2. 結果をX-SupDesk-Signatureヘッダーの16進値と比較する (sha256=プレフィックスの後)
  3. タイミング攻撃を防ぐために定数時間比較を使用する

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

Webhookのテスト

Webhook横のテストボタンをクリックすると、サンプルペイロードを エンドポイントに送信できます。テストペイロードは"event": "test"data.messageフィールドを持ちます。webhook.site  のようなツールを使用して配信されたリクエストを確認してください。

配信ログ

配信ログには、各Webhookの最新50件の配信試行が表示されます:

  • イベント — どのイベントが配信されたか
  • ステータスsuccessまたはfailed
  • レスポンスコード — エンドポイントからのHTTPステータスコード
  • 試行回数 — 配信試行回数(リトライを含む)
  • 時刻 — 配信が試行された時刻

リトライ動作

Webhookの配信が失敗した場合(5xxレスポンスまたはネットワークタイムアウト)、 SupDeskは指数バックオフで最大3回リトライします:

詳行遅延
1即時
21秒
32秒

クライアントエラー(4xx)はリトライされません — エンドポイント設定の 永続的な問題を示しています。

プラン要件

アウトバウンドWebhookはProおよびTeamプランで利用可能です。

Pro
Last updated on