Webhookは、アプリ内でレコード操作が発生したときに外部のHTTPエンドポイントへ自動通知する機能です。 Slack、Microsoft Teams、独自システムなどと連携できます。
| イベント | 発生タイミング |
|---|---|
| record.create | 新規レコードが登録されたとき |
| record.update | レコードが編集されたとき |
| record.delete | レコードがゴミ箱へ移動されたとき(通知ルールの「レコード削除時」トリガーと同じタイミング。完全削除では発火しません) |
| record.status | ワークフローのステータスが変更されたとき |
| record.comment | レコードにコメントが投稿されたとき |
複数のイベントを同じWebhookで購読できます。
CSVインポートで作成・更新した行は Webhook を発火しません。取り込みは数万件規模になり得るため、都度の外部送信には対応していません (詳細はレコードの CSV インポートを参照)。
| 項目 | 説明 |
|---|---|
| 名前 | Webhookの識別用名称 |
| URL | 通知先のエンドポイント(HTTPS推奨) |
| イベント | 購読するイベント種別(複数選択可) |
| シークレット | HMAC署名用のシークレット文字列(任意、空なら署名なし) |
イベントが発生すると、配信は即座に送信されるのではなく一旦待ち行列に積まれ、 順に送信されます(同時送信数は内部で制限されており、大量のレコード操作が 重なっても送信先への負荷が急増しません)。通常は数秒以内に配信されますが、 待ち行列が混み合っている場合は多少の遅延が生じることがあります。
送信に失敗した場合、指数バックオフ方式で自動的に再送されます。初回送信 + 再送最大5回(合計最大6回。再送間隔は指数的に延び、全試行の完了まで最短でも約30分、送信先の状態により最大1時間程度)まで試行します。
Webhookは「少なくとも1回」の配信を保証する設計のため、まれに同じ通知が 2回以上受信側に届くことがあります(再送は同一の配信IDで行われるため、本文・ 署名は再送でも変化しません)。受信側では 次項の X-Webhook-Delivery ヘッダーを使って重複を排除することを 強く推奨します。
| ヘッダー | 説明 |
|---|---|
X-Webhook-Delivery | 配信ID。1つの配信(イベント×購読)に対して発行され、再送しても同じ値のまま変わりません。重複排除のキーとして使用してください |
X-Webhook-Attempt | 試行回数(1始まり)。再送のたびに増加します |
X-Webhook-Event | イベント種別(本文のeventと同じ値) |
X-Webhook-Signature | シークレット設定時のHMAC-SHA256署名(詳細は次項) |
X-Webhook-DeliveryX-Webhook-AttemptX-Webhook-Eventeventと同じ値)X-Webhook-Signature1つのWebhookで配信の最終的な失敗(再送を使い切った、または再送対象外の 失敗が確定した場合)が連続10回発生すると、そのWebhookは 自動的に無効化され、アプリの管理者とシステム管理者に通知が送られます。送信先の状態を確認し、 Webhook設定画面から有効に戻すと再開されます(有効化時に失敗回数のカウントは リセットされます)。
配信ログの「失敗」または「スキップ」行には「再送」ボタンが表示されます。 自動再送の窓(30分〜1時間程度)を過ぎてしまった配信や、送信先が長時間ダウンしていた 間の配信を、手動で取り戻したい場合に使用してください。
イベント発生時、POSTリクエストのボディに以下の構造のJSONが送信されます。
event — イベント種別(record.create / record.update など)appId — アプリIDtimestamp — 発生時刻(ISO 8601)payload.recordId — 対象レコードIDpayload.userId — 操作したユーザーのID(文字列)payload.data — レコードの現在値。record.create /record.update / record.status では送信されますが、record.delete には含まれません(レコードが既に削除済みのため)。record.comment では commentId と body のみが入りますアプリ名やユーザーの氏名・メールアドレス等は Webhook ペイロードには含まれません。 必要な場合は appId / userId を元に REST API で追加取得してください。
シークレットを設定すると、リクエストヘッダー X-Webhook-Signature にHMAC-SHA256署名が付与されます。 受信側で署名を検証することで、正規のRaxelからのリクエストかを判定できます。
各Webhookの配信履歴を確認できます。
localhost / ループバック / プライベートIPアドレス (RFC1918)/ クラウドメタデータエンドポイント (169.254.169.254 等)への送信は拒否されますWebhook設定画面の「テスト」ボタンで、サンプルペイロードを手動送信できます。 URLやシークレット設定の動作確認に使用してください。