Webhookを設定する
回答の送信やアンケートのステータス変更に合わせて、リアルタイムでイベント通知を受け取れます。
Webhookは、QuestionPunkで何かが起きたときにイベントをサーバーへ送信します。回答の開始や完了、アンケートの公開や非公開、回答数上限への到達などのイベントを受け取れます。ポーリングをせずに、後続のワークフローを起動できます。
始める前に
POSTリクエストを受信できる公開HTTPSエンドポイントを用意します。エンドポイント作成時に返されるWebhookシークレットを安全に保存し、受信側で配信を検証できるようにしてください。
手順
Webhookエンドポイントを追加する
設定 > Developer > Webhooksに移動し、+ Add Endpointをクリックします。POSTリクエストを受け取れる、外部からアクセス可能なHTTPS URLを入力します。イベントを選択する
ワークフローに必要な回答、予約、アンケート、募集、パネル提出のイベントを選択します: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 で*を指定します。リクエスト署名を検証する
各配信には、値がsha256=<hex>のX-QP-Signatureヘッダーが含まれます。これは生のリクエスト本文のHMACです。Webhookシークレットで検証し、リクエストがQuestionPunkから送られたことを確認します。英語 UI のデモ画面です。この手順で説明した操作を確認できます。
配信ログを確認する
設定 > 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ステータスコードと応答時間を確認してください。
