ライブゲームをプラットフォームに接続するためのAPIの仕組み
1)共通のアーキテクチャとコンポーネントの役割
オペレータプラットフォーム(カジノプラットフォーム):アカウント、ウォレット、ボーナスエンジン、制限、KYC/AML、トランザクションログ。
ライブゲームプロバイダー(Studio/Provider):スタジオ、ディーラー、ビデオストリーム(WebRTC/Low-Latency HLS)、ゲームサーバーのラウンド。
アグリゲーター(時には):数十のプロバイダーのための単一のAPI、通貨/限度/イベントの統一。
クライアントフロントエンド:UI、ビデオプレーヤー、チャット、ローカルプロンプトを賭けたウェブ/モバイルクライアント。
補助サービス:リスク/不正防止、ログ記録、分析、メッセージキュー(Kafka/RabbitMQ)、監視。
典型的なトポロジー:→client (JWT)→→platform (server-to-server)→provider、並行して、クライアントはCDN/メディアサーバプールからビデオストリームを受信します。
2)プレーヤーのライフサイクルおよびセッション
2.1.ログインと「ゲームトークン」
1.プレイヤーはプラットフォームにログインします。
2.プラットフォームは、プロバイダ(S2S)からCreateGameSessionを呼び出し、'player_id'、 'currency'、 'country'、 'bet_limits'、責任ゲームのフラグを送信します。
3.プロバイダは1回限りのgame_tokenとlaunch_urlを返します。
4.クライアントはiframe/newタブで"launch_url'を開き"、game_token"を追加します(または、ゲームの最終URLに302を取得します)。
S2Sリクエストの例:http: http
POST/api/v1/セッション
Content-Type: application/json
認可:ベアラー<platform_api_key>
{
"player_id": "u-918273"、 "session_id": "sess-5f3b2"、 "currency": "EUR"、 "country": "DE"、 "lang": "de"、 "bet_limits": {"min": 0。5、 "max": 2000}、 "responsible_gaming": {"self_excluded": false"、deposit_limit_left": 150}"、callback_urls":{
"balance": "https ://platform。例を示します。com/wallet/balance」、 「debit」: 「https ://platform。例を示します。com/wallet/debit」、 「credit」: 「https ://platform。例を示します。com/wallet/credit」、 「rollback「:「https ://platform。例を示します。com/wallet/rollback」、 「events」: 「https ://platform。例を示します。com/game/events"
}
}
プロバイダの応答:
json
{
"game_token": "gtkn_7f0...e2a," "launch_url": "https ://live。提供者。com/launch/roulette」、 「expires_in": 900
}
2.2.フロントでの認証
ゲームがロードされ、バックエンドを介して'game_token'を検証します。
WebSocketは、賭け/イベント用にゲームサーバーにインストールされます。
ビデオストリームはWebRTC(低遅延0。5-2 s)またはLL-HLS (2-5 s)。
3)お金と賭け: ウォレットAPIとidempotence
3.1.バランスとデビット/クレジット
プロバイダはプレイヤーの「お金」を保存しません-Platform Wallet APIを呼び出します:- 'GET/wallet/balance?player_id'→現在利用可能です。
- 'POST/wallet/debit'→ベットをオフにします。
- 'POST/wallet/credit'→クレジット賞金/リターン。
- 「POST/wallet/rollback」→ラウンドがキャンセルされたときにトランザクションをロールバックします。
重要:すべての通貨取引は'transaction_id'/'round_id'です。同じクエリを繰り返しても結果は変わりません。
デビット(レート)の例:http: http
POST/ウォレット/デビット
Idempotency-Key: trx-7a2df-001
Content-Type: application/json
{
"player_id": "u-918273""、round_id": "r-2025-10-18-12:30:15Z-001," "transaction_id": "trx-7a2df-001""、量":25。00、 "currency": "EUR"、 "bet_type": "roulette_straight," "meta": {"table_id":" ru-11"、 "selection":" 17"、 "odds": 35}
}
3.2.タイミングとベットステータス
WINDOW_OPEN→WINDOW_CLOSING→WINDOW_CLOSED。'WINDOW_CLOSED'の後、プロバイダは新しいデビットを禁止します。
遅い入札はコード'LATE_BET'で拒否されます。
接続が切断された場合、クライアントはベットを再送することができます。サーバーはIdempotency-Keyによって重複を区別できる必要があります。
トランザクションのステータス:'PENDING'、 'STREADED'、 'ROLLED_BACK'、 'REJECTED'。
4)円形のでき事: モデルおよび順序
4.1.WebSocketイベントスキーマ
「ラウンド」started'→comes' round_id'、ベットタイマー。
'ベット。accepted/rejected'→各入札の確認。
「ラウンド」closed'→ベットは受け入れられなくなりました。
「ラウンド」結果'→結果(ルーレット/カード/ボーンセクタ)。
「払い戻し」created'→プレイヤーが獲得した金額。
「ラウンド」settled'→最終ステータス、チェックサム。
結果イベントの例:JSON
{
"type": "round。result"、 " : " " " : "ru-11"、 "payload":{
「roulette」: {「number」: 17、 「color「:」black」}、 「hash」: 「sha256: 8a7b…… d1c」、 「video_ts": 「2025-10-18T12:30:23。450Z"
}
}
4.2.一貫性とチェックサム
各イベントには'seq'と'signature'(リクエストボディのmTLS+署名)が提供されます。
和解の場合、'payout_checksum'が指定されます。すべての'round_id'クレジットの合計が収束する必要があります。
5)ビデオストリームとレイテンシ
ライブハンドベット(ブラックジャック/バカラ/ルーレット)のためのWebRTC-顧客への厳格な遅延予算<2秒。
視聴者/スケールのためのLL-HLS/DASHは、2-5 cを可能にします。
時間同期:NTP/chrony、ペイロード-リプレイと紛争のための'video_ts'。
フォールバック:WebRTCが劣化した場合、LL-HLS→に自動切り替え、レイトベットをブロックします。
6)エラー、レトラ、タイムアウト
一般的なルール:- すべてのS2Sの呼び出しは、800-1500ミリ秒のタイムアウト、指数の一時停止とジッタとリトレイ、しかし、お金を再デビットせずに(idempotency)。
- 'UNSUFFICIENT_FUNDS'、 'LIMIT_EXCEEDED'、 'ACCOUNT_LOCKED'、 'DUPLICATE_TRANSACTION'、 'LATE_BET'、 'CURRURNURRURRENMENMAL MAL MAL MAL M'.
json
{
"エラー":"INSUFFICIENT_FUNDS,""メッセージ":"バランス18。00<必須25。00」、 「transaction_id": 「trx-7a2df-001」
}
7)ボーナス、フリースピン、保険
8)責任あるプレーと制限
セッションフラグ:'self_excluded'、 'cooldown_until'、 'loss_limit_left'、' time_limit_left'。
プロバイダは、各デビットの前に'validate_limits'を要求できます。
プラットフォームはforce_close_sessionを開始することができます:プレイヤーはリミットを除外/超過しました→プロバイダーはベッティングウィンドウを閉じ、未再生ベットでリターンを行います。
9)安全性とコンプライアンス
S2S、 HSTS、厳格なIP-allowlistのためのmTLS。
フロントエンドトークン、オーディエンス/発行者検証用の短いTTLを備えたJWT/JWS。
プロバイダのWebhookの署名(本体をHMAC-SHA256)。
ディーラー活動ログ、ラウンド再生、不変監査(WORMストレージ)。
個人データの保存-PII最小化、'player_id'トークン化、管轄権の保持期間(GDPRおよびアナログ)。
CreateGameSessionレベルの管轄区域によるジオブロックと禁止。
10)和解と財政
10.1.毎時/日報
プロバイダは'round_id→total_bets、 total_wins、手数料'に関するレポートを提供します。プラットホームは結合します:- デビット=Σベット、クレジット=Σ勝+リターン、デルタ=GGR(ボーナス/ジャックポット/コミッションを含む)。
json
{
「date」: 「2025-10-18」、 「currency」: 「EUR」、 「tables」:[{
"table_id": "ru-11"、 "rounds": 1260、 "total_bets": "45230。00"、 "total_payouts": "43012。50"、 "jackpot_contrib": "302。00"、 "provider_fee": "2。5%"
}]
}
10.2.ロールバックシナリオ
ビデオ/ストーリーボード→ラウンドが失敗しました。キャンセル:プロバイダーはラウンド内のすべてのベットに'ロールバック'を送信します。
プラットフォーム→「DUPLICATE_TRANSACTION」でキャッチされたダブルデビット処理と同じ結果で200 OK。
11)チャット、モデレーション、UIイベント
チャットイベントは、ストップワードフィルタを備えた別のチャンネル(WebSocket#2)を通過します。
システムのお知らせ(クローズベット、勝者リスト)-信頼できるプロバイダのソースからのみ、署名/タイムスタンプ。
12)テストおよび証明
サンドボックスプロバイダー:固定結果、強制的にラウンドする能力。結果'。
QA輪郭:切り捨てられた賭けの窓(5-8 c)および加速された流れが付いているテストテーブル。
負荷: 5-1万同時プレーヤーのシミュレーション、ピークデビット/秒(TPS) ≥スケジュール× 1。5.
統合認証:idempotency、通貨、丸め、処理停止、制限の遵守、自己除外のチェックリスト。
13)メトリクスとSLO
それら:'debit/credit'、 WebSocket往復、時刻同期エラー、drop-rate WebRTCの平均/95pレイテンシ。
ベット受諾率、遅延ベット率、紛争率、チャージバック率、セッション期間、保持、ARPU/LTV。
SLOの例:99.5% 'debit' ≤ 1。2 s、 99。9% delivery 'round。result '≤固定後300ミリ秒、ビデオ遅延≤ 2。95p WebRTCのための5 s。
14)多通貨、税金、ローカライゼーション
変換-プロバイダ外:ゲームはセッション通貨で厳密に動作します。
税金/控除-プラットフォーム側で「クレジット」(フィールド「源泉徴収」)。
ローカライズ:'lang'、数値/通貨フォーマット、タイマーとレポートのタイムゾーン。
15)統合オプション
1.Direct-to-Provider:最大限の制御と機能が、個別の契約/認定。
2.アグリゲーターを通じて:プロバイダによる迅速なカバレッジ、統一されたスキーム、時には柔軟性が低下します。
3.ハイブリッド:トップテーブル、残りはアグリゲーターを介して直接。
16)小型指定(合計)
16.1.WebSocketインバウンド(クライアントからプロバイダへ)
json
{"type":"bet。place、" "bet":
「量」:25「、選択」:」17」、 「table_id":"ru-11」
}「、idempotency_key":"c3a2-...-001」}
16.2.WebSocketアウトバウンド(クライアントへのプロバイダ)
json
{"type":"bet。accepted、" "bet_id":"b-8821," "seq":12031}
{"type":"round。closed"、 "round_id":"r-...001," "seq":12050}
{"type":"round。result「、」result': {「number」: 17、 「color」: 「black」}、 「seq」: 12070}
{"type":"payout。作成、「金額」:875、「通貨」:「EUR」、 「seq」: 12075}
16.3.Wallet S2S(プラットフォーム↔プロバイダ)
'POST/wallet/debit' (idempotent)- 'POST/wallet/credit' (idempotent)
- 'POST/wallet/rollback' (idempotent)
HMAC署名、'Timestamp'、 'Nonce'、繰り返し保護(TTL ≤ 60 c)。
17)エッジケースとそれらを閉じる方法
プレーヤーの切断:ベット送信、確認なし→同じ'Idempotency-Key'で繰り返す;サーバーは同じステータスで応答します。
ラウンドのディーラー/デッキの変更:自動キャンセルと完全な'ロールバック'。
通貨の不一致:'CURRENCY_MISMATCH'+イベントログ;セッションが再開されるまでゲームはブロックされます。
ゲームの時点で自己排除:即時'force_close_session'、未再生を返します。
ビデオ品質の変更:クライアントのみ、タイマー/ベットへの影響はありません。
WebSocketの再ハンドシェイク:注文の損失なし-'seq'でイベントのキュー、「追いつく」ミス。
18)生産開始チェックリスト
安全性について
- mTLS+pinning証明書、IP-allowlist。
- すべてのWebhookにサインインし、'Timestamp'/'Nonce'をチェックします。
- Mini-PII: 'player_id'のみ(トークン化)。
信頼性について
- すべての金融取引のアイデンティティ。
- 円形の再生および変更不可能な監査。
- WebRTC→LL-HLSオートフォールバック。
プロダクト
- リアルタイムで適用される制限/責任あるプレイ。
- ベット時のネイティブプロンプト。
- ダッシュボードSLO+アラート24/7。
ライブゲーム統合APIは、低遅延ストリーム、イベントバス、idempotentウォレットのバンドルで、メッセージの注文、タイミング、セキュリティに関する厳しい要件を備えています。成功した実装は、ベットとラウンド、検証可能な一貫性(和解)、データ保護、責任あるプレイ制限の厳しいライフサイクルに依存し、「美しい放送」を信頼性の高い認定金融製品に変えます。