Webhook
テストと管理
Webhook の行メニューのすべての操作、配信履歴シート、一時停止と再開、再配信、検証メッセージとサーバーメッセージ、ロール、公開 Webhook 管理 API を説明します。
すべての操作は開発者 → Webhookにあります。Webhook は 1 件につき 1 行で、ステータス、フィルター、最後に配信した時刻が表示されます。
できることは、ロールによって異なります。
- 組織の管理者とマネージャーは、追加、編集、一時停止、削除、再発行、再配信ができます。それ以外のメンバーには「Webhook を管理できるのは組織の管理者とマネージャーのみです。」と表示されます。
- 1 組織につき Webhook は 5 件までです。上限に達すると、ページに「Webhook は 5 件まで登録できます。追加するには 1 件削除してください。」と表示されます。
- 行には有効、一時停止中、無効のいずれかが表示されます。
行メニュー
行の Webhook の操作をクリックします。
| 操作 | 内容 |
|---|---|
| テストイベントを送信 | reviews.new が total: 1 のテスト用の実行 Webhook をキューに入れます。そのトークンはサンプルの G2 レビューを 1 件返します。Signals-Test: true が付き、署名付きで通常の経路を通るため、1 分以内に届きます。有効な Webhook のみ。同時に待機できるテストは 1 件です。 |
| 配信履歴を見る | 配信履歴シート(下記)を開きます。 |
| 編集 | URL とフィルターを変更します。署名シークレットは変わりません。 |
| シークレットを再発行 | 新しいシークレットを作成し、一度だけ表示します。古いシークレットは 24 時間署名を続けるため、リクエストには v1= の値が 2 つ入ります。署名を検証するをご覧ください。 |
| 一時停止 | 送信を停止します。待機中の配信は待機したままです。すでに送信中のリクエストは完了します。 |
| 再開 | 止まった位置から送信を再開します。一時停止中に終わった実行も、古い順に送られます。 |
| 削除 | Webhook とその配信履歴を完全に削除します。待機中の配信を含め、以降は何も送られません。ページのトークンも使えなくなります(404)。確認画面には「(URL)へのイベント送信を停止し、配信履歴も削除します。元に戻せません。」と表示されます。 |
無効の Webhook には、バナーに再度有効にするが表示されます。再開と同様に止まった位置から続け、さらに停止した配信をもう一度キューに入れます。再試行と失敗をご覧ください。
最終配信は自動では更新されません
最終配信の時刻は、ページを再読み込みすると更新されます。
フィルターを編集する
変更は、変更後に送られる実行に適用されます。送信済みの実行の POST の件数は変わりませんが、そのページには現在のフィルターが適用されます。編集後は、ページの total やイベントが POST の件数と異なることがあります。フィルターからプロジェクトを外すと、そのプロジェクトの実行は送られなくなります。フィルター内のプロジェクトが削除されている場合、行に削除されたプロジェクトのピルが表示され、そのエントリは何にも一致しません。
配信履歴シート
配信履歴を見るは、配信履歴を新しい順に一覧表示します。1 行が 1 回の POST、つまり 1 つの Webhook への 1 つの実行です。保持期間は 30 日間です。
各行には次の内容が表示されます。
| 項目 | 表示内容 |
|---|---|
| ステータス | 待機中、送信中、配信済み、失敗、停止(再配信可能)、再配信済み。ステータスのラベルをご覧ください |
| 実行 | 実行 と短い実行 ID、イベント名ごとの件数。例:「3 件のイベント」。テスト配信にはテストタグとサンプルのレビューが表示されます。再配信済みの行には、代わりに送られた新しい配信の実行が表示されます。実行 Webhook より前の配信には、実行も件数も表示されません |
| 試行 | N / 9 回目 |
| 所要時間 | 直近の試行の時間、N ms |
| HTTP ステータス | サーバーが返したステータスコード |
| エラー | 失敗したときの失敗のラベル |
ボタン: 失敗した行の再送(同じ配信を同じ webhookId でもう一度送ります)、停止した行の再配信(新しい webhookId の新しい配信として送ります)、上部の停止した配信を再配信(停止した配信すべて。失敗した配信は対象外)、さらに読み込む。フッターには「M 件中 N 件を表示中」と表示されます。M は Webhook のすべての配信の数です。合計がわからないときは「N 件を表示中」と表示されます。履歴が空のときは「配信はまだありません。テストイベントを送信するとここに表示されます。」と表示されます。
再送と再配信には有効な Webhook が必要です。有効でない場合は「この Webhook は有効ではありません。先に再開してください。」と表示されます。再配信をご覧ください。
メッセージ
URL の検証
ダイアログは、入力中に URL をチェックします。
| メッセージ | 原因 |
|---|---|
| イベントの送信先 URL を入力してください。 | 入力欄が空です。 |
| URL が長すぎます。 | 2048 文字を超えています。 |
| https://your-app.com/signals-hook のような完全な URL を入力してください。 | 有効な URL ではありません。 |
| URL は https:// で始めてください。 | http:// やその他のスキームです。 |
| https の標準ポート(443)を使用してください。 | カスタムポートです。 |
| URL からユーザー名とパスワードを削除してください。 | URL に認証情報が含まれています。 |
| IP アドレスではなくホスト名を使用してください。 | IPv4 または IPv6 のアドレスです。 |
| 公開ホスト名を使用してください。localhost や社内向けの名前では Webhook を受信できません。 | localhost、ドットを含まない名前、.local、.internal、.lan などです。 |
| nip.io や sslip.io などのワイルドカード DNS サービスでは Webhook を受信できません。独自のホスト名を使用してください。 | nip.io、sslip.io、xip.io、localtest.me、lvh.me です。 |
サーバーメッセージ
| メッセージ | 原因 |
|---|---|
| この URL の Webhook はすでに登録されています。 | 組織内の別の Webhook が同じ URL を使っています。 |
| Webhook は 5 件まで登録できます。追加するには 1 件削除してください。 | 上限に達しました。 |
| この Webhook は有効ではありません。先に再開してください。 | 一時停止中または無効の Webhook でテスト、再送、再配信をしました。 |
| テストイベントを送信中です。完了してから次のテストを送信してください。 | テストがまだ待機中です。 |
| 選択したプロジェクトの一部が存在しません。プロジェクトのフィルターから外してください。 | フィルター内のプロジェクトが削除されました。 |
| これ以上の配信を読み込めませんでした。履歴を開き直してください。 | さらに読み込むに失敗しました。 |
公開 Webhook 管理 API
アプリを使わずに Webhook を管理できます。認証には同じ API キーを使い、x-api-key ヘッダーで送ります。テストイベントを送信、シークレットを再発行、配信履歴はアプリ専用です。
| メソッドとパス | 内容 |
|---|---|
GET /api/public/v1/webhooks | Webhook を古い順に最大 5 件一覧表示します。シークレットは返されません。レスポンスは { "items": [...] }。 |
POST /api/public/v1/webhooks | 作成します。ボディは { "url": "...", "filters": {...} }。Webhook と secret を付けて 201 を返します。シークレットは一度だけです。 |
PATCH /api/public/v1/webhooks/{id} | url、filters、status(active または paused)を変更します。少なくとも 1 つのフィールドが必要です。status: "active" のとき、resume で送信を再開する位置を選べます(下記)。 |
POST /api/public/v1/webhooks/{id}/replay | 配信をもう一度キューに入れます。ボディは下記。 |
DELETE /api/public/v1/webhooks/{id} | Webhook とその配信履歴を削除します。{ "deleted": true } を返します。 |
filters には 5 つのリストがあります。eventTypes、subEventTypes、actions(new、updated、removed)、domains(小文字の競合ドメイン)、projectIds です。空のリスト、またはリストがない場合は、すべてに一致します。
PATCH の resume は、次の 2 つの値のどちらかです。
| 値 | 送られるもの |
|---|---|
where_it_stopped(デフォルト) | 最後に送った実行の後に終わったすべての実行を、古い順に送ります。停止した配信もキューに戻します。 |
now | これから終わる実行だけを送ります。一時停止中や無効だった間に終わった実行はスキップします。 |
再配信のボディで、もう一度キューに入れる配信を選びます。キーはすべて省略可能で、送ったキーは AND で組み合わされます。
| キー | 絞り込む内容 |
|---|---|
status | dead(デフォルト)または failed。このステータスの配信だけを再配信します。 |
deliveryIds | 指定した配信(string[]、最大 100 件)。上の status にも一致する必要があるため、失敗した配信を再配信するには "status": "failed" も送ってください。 |
runId | 1 つの実行の配信。 |
since | この ISO 8601 時刻以降に作られた配信。 |
空のボディ {} は、停止したすべての配信を再配信します。テスト配信は再配信されません。1 回の呼び出しで再配信するのは古い順に最大 500 件です。replayed が 0 になるまで呼び出してください。レスポンスは { "replayed": n } です。
再配信は、新しい webhookId と新しいページトークンを持つ新しい配信です。元の行は再配信済みになります。
SIGNALS_HOST には、サインインするアプリのアドレスを設定します。開発者ページの試してみるのコマンドに表示されます。
1curl -X POST $SIGNALS_HOST/api/public/v1/webhooks \2 -H "x-api-key: $SIGNALS_API_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "url": "https://your-app.com/signals-hook",6 "filters": { "eventTypes": ["jobs"], "subEventTypes": [], "actions": ["removed"], "domains": ["hubspot.com"] }7 }'
1curl -X POST $SIGNALS_HOST/api/public/v1/webhooks/$WEBHOOK_ID/replay \2 -H "x-api-key: $SIGNALS_API_KEY" \3 -H "Content-Type: application/json" \4 -d '{ "status": "dead" }'
| ステータス | 意味 |
|---|---|
201 / 200 | 作成済み / OK。 |
400 | ボディが無効です。URL のルール、フィルター、存在しない projectIds の指定、または不明なキーや不正な値を含む再配信のボディです。 |
401 | API キーがない、または無効です。 |
403 | キーが Signals の組織に属していません。 |
404 | 組織内にその Webhook がない(PATCH、DELETE、再配信)、または Signals がオフになっています。 |
409 | 別の Webhook がすでにこの URL を使っている、または有効でない Webhook で再配信をしました。 |
422 | すでに Webhook が 5 件あります(POST)。 |
429 | 同じ IP から 1 分間に 30 件を超えるリクエストがありました。60 秒後に再試行してください。 |
API のエラーは { "error": "..." } の形式です。機械可読な完全な仕様は /api/public/docsにあります。