自社のエンドポイントを指定すれば、すべてのレポートが署名付き・バージョン管理された JSON payload として届きます。独自サービス、キュー、社内ツールに最適です。
以下の構造はバージョン 1 で保証されます。フィールドは追加されることはあっても、黙って改名されることはありません。
| フィールド | 型 | 説明 |
|---|---|---|
| event | string | イベント名 — レポートは share.created、テストボタンは test |
| schema_version | number | スキーマのバージョン(現在 1)— パース前に確認してください |
| share.report_url | string | レポート全体への公開リンク |
| report.console_errors | array | コンソールのエラーメッセージと発生元。最大 30 件 |
| report.network_errors | array | 失敗したリクエストのメソッド・URL・ステータス。最大 30 件 |
| report.*_errors_count | number | エラー件数 — 上の 2 つの配列と同じ長さ |
| reporter | object | サイトから渡された識別情報(name / email / uid)。匿名の場合は空文字列 |
すべてのリクエストはお客様が管理するシークレットで署名されるため、偽造されたものはエンドポイント側で拒否できます。
| 署名ヘッダー | x-bugcapturer-signature |
|---|---|
| アルゴリズム | リクエスト本文(raw body)に対する HMAC-SHA256 |
| シークレット | 連携の作成時に一度だけ表示されます |
| 比較 | 定数時間比較を使用してください |
const crypto = require('crypto');
const expected = crypto
.createHmac('sha256', process.env.BC_WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
const received = req.headers['x-bugcapturer-signature'];
crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(received)
);
Webhook は退屈な理由で失敗します — デプロイ、再起動、回線の不調。BugCapturer はそれを前提にしています。
失敗した配信はバックオフ付きで再試行され、その後で失敗として記録されます。
失敗が続くエンドポイントは自動で一時停止し、メールで通知します。
すべての試行と応答が記録され、推測せずにデバッグできます。
エンドポイントが復旧したら、失敗した配信を手動で送り直せます。