Webhook
グループ内でイベントが発生するたびに、外部システムにデータをプッシュするようにリアルタイム イベント通知を設定します。
前提条件
Webhook を設定する前に、以下が必要です。
- Balla Stats アカウント
- TEAMプラン以上
- グループ内の管理者または所有者の役割
- HTTP エンドポイントの基本的な理解
プランの制限: チーム = 5 Webhook (10,000 イベント/日)、ENTERPRISE = 50 Webhook (無制限のイベント/日)。 FREE プランと PRO プランには Webhook は含まれません。
グループ内でイベントが発生すると、即座に通知を受け取ります。 Webhook は、データを外部システムにリアルタイムでプッシュします。
21のイベントタイプ
試合、ゴール、カード、シーズン、登録、選手、チームイベント
HMAC 署名
ペイロードの信頼性を検証する
自動再試行
指数関数的バックオフによる信頼性の高い配信
- Webhook に移動します
- Webhook を作成する
- イベントの種類を理解する
- Webhook 署名を検証する
- Webhook をテストする
- 配信ログを監視する
- 再試行動作と自動無効化
- シークレットを再生成する
グループの Settings ページを開き、Webhooks タブをクリックします。ここで、グループのすべての Webhook 設定を管理します。

「Webhook の作成」 をクリックし、わかりやすい名前とターゲット URL を入力し、21 の使用可能なイベント タイプからサブスクライブするイベントを選択します。

Webhook は、7 つのカテゴリにわたる 21 のイベント タイプをサポートします。統合に必要なイベントのみをサブスクライブします。
試合イベント (5)
match.created, match.started, match.ended, match.completed, match.cancelled
目標イベント (2)
goal.scored, goal.deleted
カードイベント(2)
card.yellow, card.red
交代イベント (1)
substitution.made
季節のイベント (3)
season.created, season.started, season.ended
登録イベント (3)
registration.created, registration.updated, registration.cancelled
プレイヤーイベント (3)
player.created, player.updated, player.deleted
チームイベント (3)
team.created, team.updated, team.deleted
すべての Webhook 配信には HMAC-SHA256 署名が含まれているため、ペイロードが Balla Stats からのものであることを確認できます。各配信には次のヘッダーが含まれます。
X-Webhook-Signature— ペイロードの HMAC-SHA256 署名X-Webhook-Id— Webhook 構成 IDX-Webhook-Event-Id— べき等性のための一意のイベント IDX-Webhook-Timestamp— イベントの ISO 8601 タイムスタンプ
署名を検証するための Node.js の例を次に示します。
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature.replace('sha256=', '')),
Buffer.from(expected)
);
}ペイロードのスプーフィングを防ぐために、本番環境の Webhook 署名を常に検証します。
「テスト」 ボタンをクリックして、テスト イベントをエンドポイントに送信します。配信結果を表示して、エンドポイントが正しく受信および処理していることを確認します。

各 Webhook の完全な配信履歴を表示します。各ログ エントリには、配信ステータス (DELIVERED、FAILED、RETRYING)、HTTP ステータス コード、応答時間、およびエラー メッセージが表示されます。

失敗した配信は、指数バックオフを使用して自動的に再試行されます。デフォルトの設定は 3 回の再試行で、遅延は増加します。
- 試み 1: 初期故障から60秒後
- 試み 2: 最初の再試行から 120 秒後
- 試み 3: 2 回目の再試行から 240 秒後
10 回連続失敗 が発生すると、リソースの無駄を防ぐために Webhook が自動的に無効になります。エンドポイントの問題を解決した後、手動で再度有効にすることができます。
Webhook シークレットが侵害された場合は、すぐに再生成してください。署名検証が引き続き機能するように、次回の配信前に受信エンドポイントを新しいシークレットで更新します。
シークレットを再生成すると、古いシークレットはすぐに無効になります。署名チェックの失敗を避けるために、最初にエンドポイントを更新してください。
Webhook 配信ごとに、次の構造の JSON ペイロードが送信されます。
{
"id": "unique-event-id",
"timestamp": "2025-01-16T10:30:00.000Z",
"type": "goal.scored",
"data": {
"matchId": "match-id",
"playerId": "player-id",
"teamId": "team-id",
"minute": 42,
"type": "GOAL"
}
}最初にテストツールを使用する
運用エンドポイントを使用する前に、テストのために webhook.site または requestbin.com から始めます。
選択して購読する
ノイズを減らし、1 日のイベント制限内に収まるように、必要なイベントのみをサブスクライブしてください。
冪等性の実装
イベント ID を使用して冪等性を実装し、潜在的な重複配信を処理します。
受信したペイロードをログに記録する
配信の問題をデバッグするために、受信したペイロードを側でログに記録します。
Webhook が起動しない
- Webhook がアクティブであり、自動無効化されていないことを確認します。
- Webhook が正しいイベント タイプにサブスクライブされていることを確認します
- グループ プランが Webhook (TEAM 以上) をサポートしていることを確認してください。
署名検証の失敗
- HMAC 計算には、解析されたオブジェクトではなく、生のリクエスト本文を使用します
- サーバーとペイロード間の文字エンコーディングの違いを確認します。
- 前回の構成以降、シークレットが再生成されていないことを確認してください
Webhook の自動無効化
- 10 回連続して失敗すると、リソースの無駄を防ぐために自動無効化がトリガーされます
- エンドポイントの問題を修正してから、Webhook を手動で再度有効にします
- 失敗の原因に関するエラーの詳細については、配信ログを確認してください。