Webhook

グループ内でイベントが発生するたびに、外部システムにデータをプッシュするようにリアルタイム イベント通知を設定します。

高度な
15分

前提条件

Webhook を設定する前に、以下が必要です。

  • Balla Stats アカウント
  • TEAMプラン以上
  • グループ内の管理者または所有者の役割
  • HTTP エンドポイントの基本的な理解

プランの制限: チーム = 5 Webhook (10,000 イベント/日)、ENTERPRISE = 50 Webhook (無制限のイベント/日)。 FREE プランと PRO プランには Webhook は含まれません。

リアルタイムのイベント通知

グループ内でイベントが発生すると、即座に通知を受け取ります。 Webhook は、データを外部システムにリアルタイムでプッシュします。

21のイベントタイプ

試合、ゴール、カード、シーズン、登録、選手、チームイベント

HMAC 署名

ペイロードの信頼性を検証する

自動再試行

指数関数的バックオフによる信頼性の高い配信

学べること
  • Webhook に移動します
  • Webhook を作成する
  • イベントの種類を理解する
  • Webhook 署名を検証する
  • Webhook をテストする
  • 配信ログを監視する
  • 再試行動作と自動無効化
  • シークレットを再生成する
1
Webhook に移動します

グループの Settings ページを開き、Webhooks タブをクリックします。ここで、グループのすべての Webhook 設定を管理します。

グループ設定の Webhook タブ
2
Webhook を作成する

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

イベント タイプを選択した Webhook ダイアログの作成
3
イベントの種類を理解する

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

4
Webhook 署名の検証

すべての Webhook 配信には HMAC-SHA256 署名が含まれているため、ペイロードが Balla Stats からのものであることを確認できます。各配信には次のヘッダーが含まれます。

  • X-Webhook-Signatureペイロードの HMAC-SHA256 署名
  • X-Webhook-IdWebhook 構成 ID
  • X-Webhook-Event-Idべき等性のための一意のイベント ID
  • X-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 署名を常に検証します

5
Webhook をテストする

「テスト」 ボタンをクリックして、テスト イベントをエンドポイントに送信します。配信結果を表示して、エンドポイントが正しく受信および処理していることを確認します。

Webhook テスト配信結果が成功を示す
6
配信ログの監視

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

Webhook配信ログ履歴とステータスおよびタイミング
7
再試行動作と自動無効化

失敗した配信は、指数バックオフを使用して自動的に再試行されます。デフォルトの設定は 3 回の再試行で、遅延は増加します。

  • 試み 1: 初期故障から60秒後
  • 試み 2: 最初の再試行から 120 秒後
  • 試み 3: 2 回目の再試行から 240 秒後

10 回連続失敗 が発生すると、リソースの無駄を防ぐために Webhook が自動的に無効になります。エンドポイントの問題を解決した後、手動で再度有効にすることができます。

8
シークレットの再生成

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 を手動で再度有効にします
  • 失敗の原因に関するエラーの詳細については、配信ログを確認してください。