イベントと報酬の自動化-ルールとWebhook
ゲーミフィケーションは2つの「モーター」に基づいています:イベント(ユーザーがしたこと)とルール(それのためにあるはずのもの)。これが大規模でエラーなく動作するためには、信頼性の高いイベントバス、ルールエンジン、配達/賞のメカニズム、および詐欺に対する厳格な保護が必要です。以下は、実用的なアーキテクチャ、テンプレート、チェックリストです。
1)イベント→ルール→報酬フローアーキテクチャ
1.インジェスト(イベント入力):SDK/web、決済/ゲームプロバイダからのサーバWebフック→APIゲートウェイ→キュー/バス(Kafka/Rabbit/Cloud Pub/Sub)。
2.ノーマライザー:検証、濃縮(地理、デバイス、payer_flag)、スキームバージョン。
3.ルールエンジン:スコアリング/XP、ミッション/クエストのチェック、報酬/通知トリガー。
4.報酬オーケストレータ:報酬の計算、予算チェック、RG/KYCゲート、「発行タスク」の作成、ロギング。
5.ペイアウト/ボーナスサービス:キャッシュ/ボーナスキャッシュ/フリースピン/クーポン、外部Webhook(ウォレット、プロバイダー)。
6.Notifier:周波数制限のあるプッシュ/アプリ内/メール/インスタントメッセンジャー。
7.ストレージ/アナリティクス:生イベント、ストアフロント、A/B、アラート。
8.不正防止/RG:マウスガード、ヒューリスティクス/ML、ホールド&レビューの大きな賞品。
2)イベントモデル(最小セット)
json
{
"event_id": "d9e8-…… -5c2"、 "event_name": "bet"、 "version": "1。2.0、 「ts':」 2025-10-24T11:37:21Z, 「user」:{
「id」: 「u_123,」 「geo」: 「TR」「、プラットフォーム」:「アンドロイド」「、payer_flag": true「、risk_flags": [「vp_nightly」]
}、「context」:{
"session_id": "s_789," "device_fp": "fp_...," "ip": "203。0.113.24"
}、「payload」:{
"game_id": "slot_wolf," "bet": 0。5「、勝つ」:1。25、 「currency」: 「EUR」、 「provider」: 「GameCo」
}
}
'login'、 'session_start/end'、 'bet/spin'、 'win'、 'deposit'、 'withaw_request'、 'kyc_status_changed'、 'mission_view/join/progress/complete'、 'tournament_join/score/update/reward'、'、'rewississed_rewed_rewed_rg_rg_event_event_
3)規則エンジン: 論理を記述する方法
コンセプト:ルール(if/then)、セグメント、タイムウィンドウ、マウスピース、優先順位、バージョン管理。
宣言規則(YAMLスタイル)の例:yaml : 時の :
event_name:ベットフィルタ:
-ペイロードだ。bet>=0。2
-ユーザー。geo in [「TR「、「BR」、」 PE」]
-現在「2025-11-01」と「2025-11-30」の間"
スコア:
式:"floor((ペイロード。勝利/ペイロード。ベット)3)"
キャップ:
per_bet: 50 per_minute: 200 per_day: 1500 reward_trigger:
on_progress:
しきい値:[100、300、800]
reward: [{type: "fs'、 value: 10}、 {type:" bonus_cash, "value: 2}、 {type:" loot"、rarity:" rare"}]
ガードレール:
kyc_min_level: 2 rg_limits_ok: true budget_pool: 「nov_season」
budget_soft_cap: 80000メタ:
バージョン:"2。0"
実験:「scoring_ab_2025w45」
4) Webhook: サーバーとサーバーの統合
4.1.アウトバウンドWebhook(あなたからプロバイダ/ウォレットへ)
メソッド: 'POST https ://partner。example/payouts'
Подпись: 'X-Signature: HMAC-SHA256 (secret、 body)'+'X-Request-Id' (idempotency)。
Retrai:指数関数バックオフ、'max_retries=8'、ジッタ、DLQ。
Idempotency:同じ'X-Request-Id'→パートナーは同じ'payout_id/status'で応答しなければなりません。
ペイロードの例:json
{
「request_id": 「rid_7f5...,」 「user_id": 「u_123,」「報酬」:{「タイプ「:「現金」、」金額」:10。00、 「currency」:」 EUR」}「、reason」: 「milestone_300_points,」 「kyc_level": 2「、constraints」: {「wagering」: 0「、expiry_at": 「2025-12-01T00: 00: 00Z」}
}
4.2.着信Webhook(あなたに)
IP/MTLSリストのみを許可し、HMACと署名寿命('X-Timestamp'、 ± 5分)をチェックします。
「raw」 body+headersを監査ストア(WORM)に保存します。
任意のdouble/repeat→ログに対してidempotencyキーをチェックします。
5)信頼性: 二重支払なしで「偶数」流れ
ingest+idempotentハンドラの最低1回→ゴールドスタンダード。
Idempotencyキー:'hash (event_id+user_id+rule_id)'スコアのための;報酬'reward_task_id'を発行するための別のキー。
正確に一度のセマンティクスは論理的に現実的(偶像性を通じて)であり、トランスポートではない。
イベントの順序:store 'event_ts'および'ingest_ts';並べ替えウィンドウ(例えば60秒)を使用し、'user_id'キーでキューからリプレイします。
デッドレターキュー(DLQ):- 私たちはそこに永久的なエラーでメッセージを書きます(一時的なスキームは渡されませんでした、署名は無効です、予算は閉じられます)。
- 再処理/ドロップ/修正スキーマボタンを使用したDLQレビューサービス。
6)予算および証拠金の保護
予算プール:'nov_season'、 'daily_sprint'、 'vip_weekend'。
クォータ:ソフト/ハードキャップ、「サーキットブレーカー」-予算の90%に達すると、大きな賞品をホールドステートに転送します。
シングルコスト:「Active/Payorあたりの賞金とボーナスコスト」、Net Uplift。
優先順位:RGとコンプライアンスはプロモーションよりも重要です-競合が発生した場合、報酬は延期されます。
予算チェック(SQLスケッチ)の例:SQL
SELECT pool_id、 SUM (amount) AS USED、 budget AS limit、 SUM (amount )/budget AS fill
FROM reward_ledger
WHERE pool_id=:pool AND date (ts)=current_date
pool_id、予算でグループ化する。
7) RG/KYC/ジオゲート(プレーヤーの安全および承諾)
KYC:キャッシュ/ビッグプライズのL2最小。フリースピンはL1で有効です。
RG:入金限度額のチェック、自己除外、クールオフ→アワードは制限が解除されるまで凍結されます。
Geo:各アワードルール/プールで許可されている国のリスト。
しきい値アラート:個々のアカウントで急成長が「ほぼ到達」した=保持する理由&レビュー。
8)不正防止規則とテレメトリー
レート/分/時間/日のポイントのキャップ、ベットの最小分散、「理想」パターンの禁止。
技術的な信号:ヘッドレス、繰り返しdevice_fp、プロキシサブネット。
異常:「ポイント/ベット」と「ポイント/分」-99パーセンタイル上の長い「尾」。
上位入賞者のためのホールド&レビュー:自動KYCチェック+手動レビュー。
9)モニタリング、メトリック、アラート
SLO/SLA:- p95 ≤ 250ミリ秒を入力します。ルール処理p95 ≤ 150ミリ秒;リーダーシップボードの更新≤ 2秒;賞の問題≤ 60秒。
- エラーの予算<0。1%イベント/日。
- 実験上のSRM(トラフィックスキュー)、DLQの成長、HMAC検証シグネチャードロップ、予算オーバーラン、idempotent重複サージ。
- イベント/s、遅延、フォールトトレランス;
- 漏斗:イベント→ルール→reward_task→reward_issued;
- コスト:アクティブあたりの賞金/ボーナス、Net Uplift;
- 品質:不正フラグ、KYCブロック、RGトリガー。
10)バージョン管理と移行
各ルールはバージョン管理されます('rules。バージョン')。
新しいバージョンがなければ、アクティブなルールを編集することはできません。ficheflagおよび「滑らかな暖房」を使用して下さい(10%→50%→100%)。
スキーマレジストリを介したイベントの図;互換性のない変更-メジャーバージョンのみ。
11) A/Bオートメーションテスト(短い)
ユニット-ユーザー;sticky-assignment;層別化(payer/geo/platform)。
干渉を排除するためにポイントの別々のリードボードまたは正規化。
プライマリ:participation_net、完了、Net ARPPU;ガードレール:苦情/1k、詐欺フラグ、RGトリガー。
分散減少のためのCUPEDと共変。
12)例: ルールから問題まで
12.1.マイクロリワードの進捗トリガー
json
{
"type": "reward_task。created、「」 : 「 」 「 」 origin「:{」rule_id「:」r_points_winmult_v2「、」threshold「:300}、 reward」: {「type」: 「 」 amount「:2、 currency」: 「EUR」、 「wagering」: 15}、 「 :」 「 」 status「:」保留中「、」 : 「 」
}
12.2.ウォレットの発信Webhook
POST/ウォレット/クレジット
X-Request-Id: rid_7f5..。
Xタイムスタンプ: 1730061700
X署名:sha256=7b9a……
{「user_id":"u_123,」「量」:2。00、 「currency」:」 EUR」、 「reason「:「rule: r_points_winmult_v2」}
成功→'reward_task'='succeeded'と'reward_ledger'に書き込む。
失敗(5xx/timeout)→同じ'X-Request-Id'でリトレイ。
ディップ(4xx)→DLQ+手動解析。
13)ボルトとテーブル(スケッチ)
SQL
--賞の雑誌
テーブルの作成reward_ledger(
id BIGSERIAL PRIMARY KEY、 TEXT UNIQUE、 TEXT、 TEXT、 TYPE TEXT、 value NUMERIC (18,2), currency TEXT、 cost NUMERIC (18,2) DEFAULT T 0、-- 、成功/失敗/保持 タイムスタンプZ、 TIMESTAMPTZ
);
--indempotency
ユニークなインデックスを作成uniq_reward_task reward_ledger (reward_task_id);
--予算
テーブルの作成reward_budget(
pool_idテキスト主キー、予算数値(18,2),使用済み数値(18,2),期間日付
);
14)セキュリティとプライバシー
HMAC署名、MTLS、 allow-list IP。
トランジット/レスト、キー回転、ヴォールトの秘密の暗号化。
ペイロード内のデータを最小限に抑える(PII、トークンリンク、TTL)。
監査ログ不変(WORM)。
保持と廃棄の方針(忘れられる権利、重複排除安全)。
15)チェックリストを起動する
- イベントスキーマとレジストリ、webhook契約(署名、TTL)。
- キュー、レトレイ、DLQ、 idempotentハンドラ。
- 規則、KYC/RGのゲートの帽子/ガードレール。
- 予算プール、サーキットブレーカ、オーバーフローアラート。
- SLOダッシュボード+リワードファネル。
- A/BフィルタとSRMモニタリング。
- インシデントのランブック(リプレイ、フリーズ、手動問題)。
16)ミニケース(合成)
ゲームプロバイダとウォレットからの接続イベント。マウスガードとの「win/bet」スコアリングが含まれています。
WebhooksはHMACに署名し、最大8回の試行、2時間ごとのレビューでDLQを再試行します。
4週間:遅延P95 180ミリ秒の処理。DLQ <0,06%;重複した支払い0;詐欺フラグ− 0です。4 pp;ΔParticipation_net+6,3秒。п.;Δ ARPPU (net)+€2,1ポンド賞金&ボーナス/アクティブ+€0,7。
結論:ローカルバジェットプールでルールを新しい地理にスケーリングします。
報酬の自動化は「フリースピンでプッシュ送信」ではありません。"これはエンジニアリングシステムです:イベントの信頼性の高い配信、ルールの厳格なバージョニング、idempotencyと署名、予算のプライベーター、KYC/RGゲート、不正防止と監視。このフレームワークを1日で構築しましょう。ミッション、トーナメント、「戦利品の瞬間」は、時間通りに、そしてプラスの効果で予測可能に機能します。