Webhookを設定する

回答の送信やアンケートのステータス変更に合わせて、リアルタイムでイベント通知を受け取れます。

Webhookは、QuestionPunkで何かが起きたときにイベントをサーバーへ送信します。回答の開始や完了、アンケートの公開や非公開、回答数上限への到達などのイベントを受け取れます。ポーリングをせずに、後続のワークフローを起動できます。

最終確認日
開発者向けWebhook連携機能自動化設定時間:10〜15分中級開発者プロダクトチーム

始める前に

POSTリクエストを受信できる公開HTTPSエンドポイントを用意します。エンドポイント作成時に返されるWebhookシークレットを安全に保存し、受信側で配信を検証できるようにしてください。

手順

  1. Webhookエンドポイントを追加する

    設定 > Developer > Webhooksに移動し、+ Add Endpointをクリックします。POSTリクエストを受け取れる、外部からアクセス可能なHTTPS URLを入力します。
  2. イベントを選択する

    ワークフローに必要な回答、予約、アンケート、募集、パネル提出のイベントを選択します:response.completed, response.started, response.abandoned, response.updated, response.analyzed, booking.scheduled, booking.canceled, payment.succeeded, payment.refunded, survey.published, survey.unpublished, survey.response_limit_reached, recruitment.started, recruitment.fulfilled, recruitment.partial, recruitment.failed, panel.submission.approved, panel.submission.rejected, panel.submission.payout_released, panel.submission.paid。Select all は現在表示されているイベントを選択します。今後追加される種類も受信するには、API で * を指定します。
  3. リクエスト署名を検証する

    各配信には、値がsha256=<hex>のX-QP-Signatureヘッダーが含まれます。これは生のリクエスト本文のHMACです。Webhookシークレットで検証し、リクエストがQuestionPunkから送られたことを確認します。

    英語 UI のデモ画面です。この手順で説明した操作を確認できます。

  4. 配信ログを確認する

    設定 > Developer > Logsを開くと、配信履歴を確認できます。HTTPステータスコードと応答時間が表示されるため、配信失敗の診断に使えます。

詳細と制限事項

Webhookを使うと、QuestionPunkのイベントにリアルタイムで対応できます。たとえば、回答完了時にSlackへ通知を送る、CRMへデータを同期する、分析パイプラインを起動するといった使い方があります。

回答イベントは開始、完了、離脱、更新、分析完了を扱います。予約イベントは予約確定とキャンセルを扱います。アンケートイベントは公開、非公開、回答上限への到達を扱います。募集イベントは募集の開始、充足、一部充足、失敗を、パネル提出イベントは承認、却下、支払い処理、支払い完了を扱います。必要な処理に対応するイベントを選択してください。予約イベントとアンケート回答の完了は別のイベントです。 アンケート決済イベントはStripe決済の成功・返金を通知します。パネル参加者への支払いイベントとは別です。

Webhookシークレットは、保存時にAES-256-GCMで暗号化されます。各配信にはSHA-256 HMACの署名が付き、サーバー側で真正性を検証できます。

配信に失敗した場合は、設定 > Developer > Logsの配信ログを確認してください。HTTPステータスコードと応答時間を見ると、原因の診断に役立ちます。

すぐに受領を返し、再配信に備える。イベントを受け付けたら10秒以内に2xxステータスを返し、時間のかかる処理は独自のキューで実行します。配信失敗時は最大6回試行されます。重複処理を防ぐキーにはX-QP-Event-Id(ペイロードのidと同じ)を使います。X-QP-Delivery-Attempt-Idは試行ごとに変わるため、重複判定には使いません。再配信で報酬の二重送付やレコードの重複作成が起きないようにしてください。

署名が一致しない場合。JSONを解析する前のリクエストの生バイト列からHMACを計算します。JSONを再生成するとバイト列が変わることがあります。sha256=署名とはタイミング攻撃に耐性のある方法で比較してください。署名シークレットはサーバー側で保持し、ブラウザのコードには含めません。リクエスト自体が届かない場合は、署名検証を変える前にHTTPSでの到達性と配信ログを確認します。

結果を確認

Webhookエンドポイントが保存され、必要なイベントが選択され、QuestionPunkから送られた配信をログで確認できる状態になります。

うまくいかない場合

配信が失敗する場合は、設定 > Developer > Logsで対象エンドポイントのHTTPステータスコードと応答時間を確認してください。