Hadisələr və mükafatların avtomatlaşdırılması: qaydalar və webhucks
Oyunlaşdırma iki «mühərrikə» əsaslanır: hadisələr (istifadəçi nə etdi) və qaydalar (bunun üçün nə nəzərdə tutulur). Bunun böyük miqyasda və səhvsiz işləməsi üçün etibarlı bir hadisə şinası, qaydalar mühərriki, mükafatların çatdırılması/verilməsi mexanizmi və ciddi froddan qorunma lazımdır. Aşağıda - praktiki memarlıq, şablonlar və yoxlama vərəqləri.
1) Axın arxitekturası «hadisə → qayda → mükafat»
1. Ingest (hadisələrin girişi): SDK/web, ödəniş/oyun provayderindən server vebhukları → API Gateway → növbə/şina (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizer: validasiya, zənginləşdirmə (geo, device, payer_flag), sxem versiyası.
3. Rules Engine: puanları/HR, missiyaları/kvestləri yoxlamaq, mükafat/bildiriş tetikleyiciləri.
4. Reward Orchestrator: mükafatın hesablanması, büdcə-çek, RG/KYC-geytalar, «ekstradisiya tapşırığının» yaradılması, jurnala qeyd.
5. Payout/Bonus Xidməti: Cache/Bonus Cache/Frispins/Kuponlar, Xarici Webhucks (cüzdan, provayderlər).
6. Notifier: tezlik limitləri ilə push/in-app/email/messencer.
7. Storage/Analytics: xam hadisələr, vitrinlər, A/B, risklər.
8. Anti-Fraud/RG: caps, evristics/ML, hold-and-review böyük mükafatlar.
2) Hadisə modeli (minimum dəst)
json
{
"event_id": "d9e8-...-5c2", "event_name": "bet", "version": "1. 2. 0", "ts": "2025-10-24T11:37:21Z", "user": {
"id": "u_123", "geo": "TR", "platform": "android", "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, "win": 1. 25, "currency": "EUR", "provider": "GameCo"
}
}
Базовые типы: `login`, `session_start/end`, `bet/spin`, `win`, `deposit`, `withdraw_request`, `kyc_status_changed`, `mission_view/join/progress/complete`, `tournament_join/score/update/reward`, `reward_issued`, `rg_event`.
3) Qaydaların mühərriki: məntiqi necə təsvir etmək olar
Konsepsiyalar: qaydalar (if/then), seqmentlər, vaxt pəncərələri, kaplar, prioritetlər, versiyalaşdırma.
Deklarativ qaydanın nümunəsi (YAML-stil):yaml rule_id: r_points_winmult_v2 when:
event_name: bet filters:
- payload. bet >= 0. 2
- user. geo in ["TR","BR","PE"]
- now between "2025-11-01" and "2025-11-30"
score:
formula: "floor((payload. win / payload. bet) 3)"
caps:
per_bet: 50 per_minute: 200 per_day: 1500 reward_trigger:
on_progress:
threshold: [100, 300, 800]
reward: [{type: "fs", value: 10}, {type: "bonus_cash", value: 2}, {type: "loot", rarity: "rare"}]
guardrails:
kyc_min_level: 2 rg_limits_ok: true budget_pool: "nov_season"
budget_soft_cap: 80000 meta:
version: "2. 0"
experiment: "scoring_ab_2025w45"
4) Vebhuki: server-server inteqrasiya
4. 1. Çıxış vebhukları (sizdən provayderlərə/cüzdana)
Metod: 'POST https ://partner. example/payouts`
Подпись: `X-Signature: HMAC-SHA256(secret, body)` + `X-Request-Id` (idempotency).
Retrailər: eksponensial backoff, 'max _ retries = 8', jitter, DLQ.
Idempotency: təkrar eyni 'X-Request-Id' → tərəfdaş eyni 'payout _ id/status' cavab verməlidir.
Nümunə payload:json
{
"request_id": "rid_7f5...", "user_id": "u_123", "reward": {"type":"cash","amount":10. 00,"currency":"EUR"}, "reason": "milestone_300_points", "kyc_level": 2, "constraints": {"wagering": 0, "expiry_at": "2025-12-01T00:00:00Z"}
}
4. 2. Daxil olan vebhuklar (sizə)
Yalnız IP/MTLS siyahılarına icazə verin, HMAC və imza ömrünü yoxlayın ('X-Timestamp', ± 5 dəqiqə).
Audit anbarında (WORM) «xam» body + başlıqları saxlayın.
Hər hansı bir dubl/təkrarlama → jurnala qarşı idempotency key yoxlayın.
5) Etibarlılıq: ikiqat ödənişsiz «düz» axın
At-least-once haqqında ingest + idempotent prosessorlar → qızıl standart.
Idempotency key: 'hash (event_id + user_id + rule_id)' xalların hesablanması üçün; mükafatın verilməsi üçün ayrıca açar 'reward _ task _ id'.
Exactly-once semantika yalnız nəqliyyatla deyil, məntiqlə (idempotentlik vasitəsilə) realdır.
Hadisə qaydası: 'event _ ts' və 'ingest _ ts' saxlayın; reordering window (məsələn, 60 san) və 'user _ id' açarı ilə növbədən replay tətbiq edin.
Dead Letter Queue (DLQ):- Oraya daimi səhvi olan mesajlar yazırıq (vaxt sxemi keçməyib, imza etibarsızdır, büdcə bağlanıb).
- reprocess/drop/fix sxema düymələri ilə «DLQ review» xidməti.
6) Büdcələr və marjanın qorunması
Büdcə hovuzları: 'nov _ season', 'daily _ sprint', 'vip _ weekend'.
Kvotalar: soft/hard cap, «circuit breaker» - büdcənin 90% -nə çatdıqda böyük mükafatları hold-state-ə köçürmək.
Vahid dəyəri: 'Prize & Bonus Cost per Active/Payor', Net Uplift.
Prioritetlər: RG və komplayens promodan daha vacibdir - münaqişə zamanı mükafat təxirə salınır.
Büdcə yoxlama nümunəsi (SQL-eskiz):sql
SELECT pool_id, SUM(amount) AS spent, budget AS limit, SUM(amount)/budget AS fill
FROM reward_ledger
WHERE pool_id =:pool AND date(ts) = current_date
GROUP BY pool_id, budget;
7) RG/KYC/Geo-geytlar (oyunçu təhlükəsizliyi və uyğunluğu)
KYC: cache/böyük mükafatlar üçün minimum L2; frispins L1 ilə icazə verilir.
RG: depozit limitlərinin yoxlanılması, özünü istisna etmə, «cool-off» → mükafatlar məhdudiyyətlər aradan qaldırılana qədər «dondurulur».
Geo: Hər bir mükafat qaydası/hovuzu üçün icazə verilən ölkələrin siyahısı.
Hədd riskləri: fərdi hesablarda kəskin artım «demək olar ki, çatdı» = hold & review-də səbəb.
8) Antifrod qaydaları və telemetriya
Qapaqlar/dəq/saat/gün dərəcəsi, minimum nisbət dispersiyası, «ideal» nümunələri qadağan.
Texniki siqnallar: headless, təkrarlanan device_fp, proxy alt şəbəkələri.
Anomaliyalar: «eynək/bahis» və «eynək/dəq» - 99-persentil uzun «quyruqlar».
Top mükafatçılar üçün Hold-and-review: avtomatik KYC çeki + əl baxışı.
9) Monitorinq, metrika və alertlər
SLO/SLA:- Ingest p95 ≤ 250 ms; r95 ≤ 150 ms qayda emalı; Liderbordun yenilənməsi ≤ 2 s; mükafatın verilməsi ≤ 60 s
- Error budget < 0. 1% hadisə/gün.
- Təcrübələrdə SRM (trafik çarpazlığı), DLQ artımı, HMAC-validasiya imzasının düşməsi, büdcə artımı, idempotent dublların artması.
- Hadisələr/s, gecikmə, uğursuzluq;
- Huni: hadisə → qayda → reward_task → reward_issued;
- Qiymət: Prize/Bonus per Active, Net Uplift;
- Keyfiyyət: Frod bayraqları, KYC blokları, RG istismarı.
10) Version və miqrasiya
Hər bir qayda versioned ('rules. version`).
Yeni versiya olmadan aktiv qaydanı redaktə edə bilməzsiniz; ficheflag və «hamar istiləşmə» istifadə edin (10% → 50% → 100%).
schema registry vasitəsilə hadisələr sxemi; uyğun olmayan dəyişikliklər - yalnız major versiyası.
11) A/B-avtomatlaşdırma testləri (qısa)
Vahid - istifadəçi; sticky-assignment; stratifikasiya (payer/geo/platform).
Ayrı lider bordları və ya müdaxiləni istisna etmək üçün xalların normallaşdırılması.
Primary: participation_net, completion, Net ARPPU; Guardrails: şikayətlər/1k, frod bayraqları, RG işıqlandırma.
Dispersiyanı azaltmaq üçün CUPED və kovariatlar.
12) Nümunələr: qaydadan ekstradisiyaya qədər
12. 1. Tərəqqi üçün mikro mükafat
json
{
"type": "reward_task. created", "reward_task_id": "rt_456", "user_id": "u_123", "origin": {"rule_id":"r_points_winmult_v2","threshold":300}, "reward": {"type": "bonus_cash", "amount": 2, "currency":"EUR", "wagering": 15}, "pool_id": "nov_season", "status": "pending", "created_at": "2025-10-24T11:38:30Z"
}
12. 2. Cüzdana gedən vebhuk
POST /wallet/credit
X-Request-Id: rid_7f5...
X-Timestamp: 1730061700
X-Signature: sha256=7b9a...
{ "user_id":"u_123", "amount":2. 00, "currency":"EUR", "reason":"rule:r_points_winmult_v2" }
Uğur → 'reward _ task' = 'succeeded' və 'reward _ ledger' yazılır.
Eyni 'X-Request-Id' ilə retraj → uğursuzluq (5xx/zaman).
Uğursuzluq (4xx) → DLQ + əl təhlili.
13) Anbarlar və cədvəllər (eskiz)
sql
-- mükafat jurnalı
CREATE TABLE reward_ledger (
id BIGSERIAL PRIMARY KEY, reward_task_id TEXT UNIQUE, user_id TEXT, pool_id TEXT, type TEXT, value NUMERIC(18,2), currency TEXT, cost NUMERIC(18,2) DEFAULT 0, -- реальная стоимость для P&L status TEXT, -- succeeded/failed/held created_at TIMESTAMPTZ, updated_at TIMESTAMPTZ
);
-- indempotentlik
CREATE UNIQUE INDEX uniq_reward_task ON reward_ledger (reward_task_id);
-- büdcə
CREATE TABLE reward_budget (
pool_id TEXT PRIMARY KEY, budget NUMERIC(18,2), spent NUMERIC(18,2), period DATE
);
14) Təhlükəsizlik və məxfilik
HMAC imzaları, MTLS, allow-list IP.
Tranzit/sülh şifrələmə, açarların rotasiyası, vault-da sirlər.
Payload məlumatların minimuma endirilməsi (PII ayrıca, link-token, TTL).
Audit-loqlar dəyişməz (WORM).
Saxlama və silmə siyasəti (unudulmaq hüququ, deduplication-safe).
15) Başlanğıc çek siyahısı
- Hadisə sxemləri və registry, vebhuk müqavilələri (siqnallar, TTL).
- Növbələr, retralar, DLQ, idempotent prosessorları.
- Cap/Guard qaydaları, KYC/RG-geyt.
- Büdcə hovuzları, circuit-breakers, həddindən artıq.
- Dashboard SLO + huni reward.
- A/B-fitness və SRM-monitorinq.
- Runbook insidentlər (yenidən oynamaq, dondurma, manual ekstradisiya).
16) Mini case (sintetik)
Oyun provayderləri və cüzdan hadisələri qoşuldu; caps ilə «win/bet» skoring daxildir.
Webhucks HMAC, 8 cəhd qədər retras, DLQ hər 2 saat review ilə imzalanır.
4 həftə ərzində: p95 180 ms emal gecikməsi; DLQ < 0,06%; ödənişlər 0; frod bayraqları − 0,4 p.p.; ΔParticipation_net +6,3 п.п.; ΔARPPU (net) +€2,1 при Prize&Bonus/Active +€0,7.
Nəticə: yerli büdcə hovuzları ilə yeni geolar üçün qaydaları ölçmək.
Mükafatların avtomatlaşdırılması «frispinlərlə push göndərmək» deyil. Bu mühəndislik sistemi: etibarlı hadisə çatdırılması, qaydaların ciddi versiyalaşdırılması, idempotency və imzalar, büdcə kaperaları, KYC/RG geytaları, antifrod və monitorinq. Bu çərçivəni bir dəfə qurun - və hər hansı bir missiya, turnir və «lut-anlar» proqnozlaşdırıla bilən, vaxtında və müsbət netto effekti ilə işləyəcək.