Webhook

Webhookは、保存済み検索の条件に新しく合致した企業と、その企業の該当求人を、指定したHTTPS URLへ自動でPOSTする機能です。CRMや社内通知、営業ワークフローの起点に利用できます。

保存済み検索にフィルターグループが含まれる場合は、そのAND・OR条件もWebhookの判定に使われます。

利用前に準備する

Webhookの一覧を開く

企業検索または求人検索の上部にある「Webhooks」を押します。一覧では、名前、送信先URL、保存済み検索、状態を確認できます。

検索画面から開いたWebhook一覧。状態、送信先、保存済み検索を確認できる

状態は次のいずれかです。

状態意味
有効日次配信の対象です
無効配信を一時停止しています
停止中参照していた保存済み検索が削除されています

Webhookを作成する

  1. 「Webhooks」を開き、「Webhookを作成」を押します
  2. 配信条件にする保存済み検索を選びます
  3. 配信対象を選びます
  4. 名前とWebhook URLを入力します
  5. 自動生成されたSigning Secretをコピーし、安全な場所へ保存します
  6. 「作成」を押します
Webhookの作成画面。保存済み検索、配信対象、URL、Signing Secretを設定する

配信対象の違い

違いは、Webhookを作成した時点ですでに保存済み検索へマッチしている企業を、今後の配信候補に残すかどうかです。

どちらを選んでも、作成直後に現在のマッチ企業がまとめて配信されることはありません。新しい求人が確認された日の定期配信で、企業ごとに初回の1回だけ配信されます。一度配信された企業は、その後に別の求人が出ても再配信されません。

選択肢作成時点ですでにマッチしている企業作成後に初めてマッチする企業この設定が向いている場合
すべてのマッチ企業を配信配信候補に残します。作成後にその企業の新しい求人が確認されると、初回の1回だけ配信します新しい求人によって条件へマッチした日に、初回の1回だけ配信します現在マッチしている企業も、今後動きがあれば受け取りたい場合
新規登録企業のみを配信作成時に配信済みとして除外リストへ登録し、今後も配信しません。作成時の配信もありません作成後に新しく条件へマッチした企業だけを、初回の1回だけ配信します現在マッチしている企業は除外し、これから新たにマッチする企業だけを受け取りたい場合

たとえば、作成時点でA社がすでにマッチしている場合、「すべてのマッチ企業を配信」では、作成後にA社の新しい求人が出るとA社を配信します。「新規登録企業のみを配信」では、A社を最初から除外するため、その後にA社の新しい求人が出ても配信しません。

「新規登録企業のみを配信」は、作成時点でマッチしている企業を除外リストへ登録するため、その企業数に応じてクレジットを消費します。この処理ではWebhookは送信されません。画面に企業数、単価、必要クレジット、残高が表示され、残高が不足している場合は作成できません。

Signing Secretは作成画面を開いたときに自動生成されます。必要に応じて再生成できます。この画面以外では再表示できないため、作成前にコピーして保存してください。

テスト送信する

Webhook一覧の履歴ボタンを押し、「テスト送信」を実行します。送信先からHTTP 2xxが返ると成功です。本番配信を始める前に、受信側で本文と署名を確認してください。

配信のタイミングと単位

受信するデータ

代表的なリクエスト本文は次の構造です。

{
  "id": "evt_example",
  "webhookId": "wh_example",
  "occurredAt": "2026-08-23T00:10:00Z",
  "data": {
    "corporate": {},
    "jobs": [],
    "totalJobCount": 3
  },
  "meta": {
    "matchedCorporateCount": 12,
    "deliveredCorporateCount": 8
  }
}

corporatejobs の項目は、セールスブレインREST APIの企業・求人レスポンスと同じ形式です。

署名を検証する

リクエストヘッダー X-SalesBrain-Signature には、次の形式で署名が入ります。

t=<UNIX時刻>,v1=<HMAC-SHA256の16進文字列>

受信側では、<UNIX時刻>.<加工していないリクエスト本文> をSigning SecretでHMAC-SHA256計算し、v1 と定数時間比較してください。リプレイ攻撃対策として、時刻差が5分以内であることも確認します。

import crypto from "node:crypto";

const signed = `${timestamp}.${rawBody}`;
const expected = crypto
  .createHmac("sha256", process.env.SALESBRAIN_WEBHOOK_SECRET)
  .update(signed)
  .digest("hex");

const valid = crypto.timingSafeEqual(
  Buffer.from(expected, "hex"),
  Buffer.from(signatureV1, "hex"),
);

署名計算には、JSONとして再変換する前の生の本文を使ってください。

配信履歴を確認・再送する

Webhook一覧の履歴ボタンから、日次実行と各企業への配信状況を確認できます。配信詳細では対象日、法人番号、イベントID、HTTPステータス、試行履歴、送信本文を確認できます。

送信先は公開HTTPS URLに限られます。プライベートIPや特殊用途IPを指すURLは登録・配信できません。

次に読む

このページ内