Voqealar va mukofotlarni avtomatlashtirish: qoidalar va vebxuklar
Geymifikatsiya ikki «motorchik» ga tayanadi: hodisalar (foydalanuvchi nima qilgan) va qoidalar (buning uchun nima kerak). Bu keng miqyosda va xatosiz ishlashi uchun ishonchli voqea shinasi, qoidalar dvigateli, mukofotlarni yetkazib berish/berish mexanizmi va froddan qattiq himoya kerak. Quyida - amaliy arxitektura, shablon va chek varaqalari.
1) Oqim arxitekturasi «hodisa → qoida → mukofot»
1. Ingest (voqealar): SDK/web, to’lov/o’yin provayderidan server vebxuklari → API Gateway → navbat/shina (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizer: validatsiya, boyitish (geo, device, payer_flag), sxema versiyasi.
3. Rules Engine: ball/XR skoring, missiyalar/kvestlarni tekshirish, mukofotlar/bildirishnomalar triggeri.
4. Reward Orchestrator: mukofotni hisoblash, byudjet-chek, RG/KYC-geytlar, «berish vazifasi» ni yaratish, jurnalga yozish.
5. Payout/Bonus Service: kesh/bonus-kesh/frispins/kuponlar, tashqi vebxuklar (hamyon, provayderlar).
6. Notifier: push/in-app/email/tezlik limitli messenjerlar.
7. Storage/Analytics: xom voqealar, vitrinalar, A/B, alertlar.
8. Anti-Fraud/RG: kapa, evristika/ML, hold-and-review yirik sovrinlari.
2) Voqealar modeli (minimal to’plam)
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) Qoidalar dvigateli: mantiqni qanday tasvirlash kerak
Konsepsiyalar: qoidalar (if/then), segmentlar, vaqt oynalari, kaplar, ustuvorliklar, versiyalash.
Deklarativ qoidaning namunasi (YAML uslubi):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) Vebxuki: integratsiya server-serveri
4. 1. Vebxuklar (sizdan provayderlarga/hamyonga)
Usul: ’POST https ://partner. example/payouts`
Подпись: `X-Signature: HMAC-SHA256(secret, body)` + `X-Request-Id` (idempotency).
Retralar: eksponensial backoff,’max _ retries = 8’, jitter, DLQ.
Idempotency: takrorlash bir xil’X-Request-Id’→ sherik xuddi shu’payout _ id/status’ga javob berishi shart.
Payload namunasi: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. Kirish vebxuklari
Faqat IP/MTLS roʻyxatiga ruxsat bering, HMAC va imzoning yashash vaqtini tekshiring (’X-Timestamp’, ± 5 daqiqa).
«Xom» body + sarlavhalarini audit saqlovchida (WORM) saqlang.
Har qanday dubl/takrorlash → idempotency key ni jurnalga qarshi tekshiring.
5) Ishonchlilik: ikki baravar to’lovsiz «tekis» oqim
At-least-once ga ingest + idempotent ishlov beruvchilar → oltin standart.
Idempotency key:’hash (event_id + user_id + rule_id)’ball hisoblash uchun; ’reward _ task _ id’ mukofotini berish uchun alohida kalit.
Exactly-once semantikasi transport orqali emas, balki mantiqan (idempotentlik orqali) realdir.
Hodisa tartibi:’event _ ts’va’ingest _ ts’; reordering window (masalan, 60 sek) va replay’user _ id’kalitidan foydalaning.
Dead Letter Queue (DLQ):- U yerga doimiy xato bilan xabar yozyapmiz (vaqtinchalik sxema o’tmadi, imzo yo’q, byudjet yopildi).
- reprocess/drop/fix shema tugmalari bilan «revyu DLQ» xizmati.
6) Budjetlar va marjani himoya qilish
Budjet pullari:’nov _ season’,’daily _ sprint’,’vip _ weekend’.
Kvotalar: soft/hard cap, «circuit breaker» - byudjetning 90 foiziga yetganda yirik sovrinlarni hold-state-ga oʻtkazish.
Yagona qiymat:’Prize & Bonus Cost per Active/Payor’, Net Uplift.
Ustuvorliklar: RG va komplayens promodan muhimroqdir - mojaroda mukofot kechiktiriladi.
Budjetni tekshirish namunasi (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 (o’yinchining xavfsizligi va komplayens)
KYC: kesh/yirik sovrinlar uchun minimal L2; frispinlar L1 bilan ruxsat etiladi.
RG: depozit limitlarini tekshirish, o’zini istisno qilish, «cool-off» → mukofotlar cheklovlar olib tashlangunga qadar «muzlatib qo’yiladi».
Geo: har bir mukofot qoidasi/puli uchun ruxsat etilgan mamlakatlar roʻyxati.
Chegaraviy alertlar: alohida akkauntlarda keskin o’sish «deyarli yetdi» = hold & review uchun sabab.
8) Antifrod-qoidalar va telemetriya
Sutkalik stavka bo’yicha ochkolar, stavkalarning minimal dispersiyasi, «ideal» patternlarni taqiqlash.
Texnik signallar: headless, takrorlanuvchi device_fp, proksi-subsetlar.
Anomaliyalar: «ko’zoynak/stavka» va «ko’zoynak/min» - 99-pertsentildagi uzun «dumlar».
Top-sovrindorlar uchun Hold-and-review: avtomatik KYC + qoʻlda koʻrish.
9) Monitoring, metrika va alertlar
SLO/SLA:- Ingest p95 ≤ 250 ms; p95 ≤ 150 ms qoidalarga ishlov berish; peshqadamni yangilash ≤ 2 s; mukofot berish ≤ 60 so’m
- Error budget < 0. Kuniga 1% hodisa.
- Tajribalarda SRM (trafikning noto’g’ri bo’lishi), DLQ o’sishi, HMAC-validatsiya imzosining pasayishi, byudjetning oshishi, idempotent-dubllarning ko’payishi.
- Hodisalar/s, lag, nosozlikka chidamlilik;
- Huni: voqea → qoida → reward_task → reward_issued;
- Qiymati: Prize/Bonus per Active, Net Uplift;
- Sifati: frod-bayroqlar, KYC-bloklar, RG-ishga tushirishlar.
10) Versiyalash va migratsiya
Har bir qoida versioned (’rules. version`).
Yangi versiyasiz aktiv qoidani tahrirlash mumkin emas; ficheflag va «silliq isitish» dan foydalaning (10% → 50% → 100%).
Hodisa sxemasi schema registry orqali; mos kelmaydigan o’zgartirishlar - faqat major versiyasi.
11) Avtomatlashtirish A/B-testlari (qisqacha)
Birlik - foydalanuvchi; sticky-assignment; stratifikatsiya (payer/geo/platform).
Interferensiyani istisno qilish uchun alohida peshqadamlar yoki ballarni normallashtirish.
Primary: participation_net, completion, Net ARPPU; Guardrails: shikoyatlar/1k, frod bayroqlar, RG-ishga tushirishlar.
dispersiyani kamaytirish uchun CUPED va kovariatlar.
12) Misollar: qoidadan berishgacha
12. 1. «Taraqqiyot uchun mikro mukofot» triggeri
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. Hamyonga chiqadigan vebxuk
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" }
Muvaffaqiyatlar →’reward _ task’=’succeeded’va’reward _ ledger’ga yoziladi.
Muvaffaqiyatsizlik (5xx/taymaut) → xuddi shu’X-Request-Id’bilan retraj.
Muvaffaqiyatsizlik (4xx) → DLQ + qo’lda tahlil.
13) Omborlar va jadvallar (sketch)
sql
-- mukofotlar jurnali
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);
-- budjet
CREATE TABLE reward_budget (
pool_id TEXT PRIMARY KEY, budget NUMERIC(18,2), spent NUMERIC(18,2), period DATE
);
14) Xavfsizlik va maxfiylik
HMAC imzolari, MTLS, allow-list IP.
Tranzit/xotirjamlikda shifrlash, kalitlarni aylantirish, vault sirlari.
Payload’da ma’lumotlarni minimallashtirish (PII alohida, token-havola bo’yicha, TTL).
O’zgarmas audit-loglar (WORM).
Saqlash va olib tashlash siyosati (unutish huquqi, deduplication-safe).
15) Ishga tushirish chek-varag’i
- Voqealar sxemalari va registrlari, vebxuk shartnomalari (signatura, TTL).
- Navbatlar, retralar, DLQ, idempotent ishlov beruvchilar.
- Qoidalardagi kaplar/gvardrail-lar, KYC/RG-geytlar.
- Byudjet-pullar, circuit-breakers, haddan tashqari to’lib ketish xavfi.
- SLO dashbordlari + reward hunisi.
- A/B-ficheflaglar va SRM-monitoring.
- Hodisalar Runbook (qayta o’ynash, muzlatish, qo’lda berish).
16) Mini-keys (sintetik)
Oʻyin provayderlari va hamyon voqealari ulangan; «win/bet» qoʻshilgan.
Vebxuklar HMAC tomonidan imzolangan, 8 ta urinishgacha retralar, DLQ har 2 soatda qichqiriq bilan.
4 hafta davomida: p95 180 ms ishlov berish muddati; DLQ < 0,06%; to’lovlar dubli 0; frod-bayroqlar − 0,4 p.p.; ΔParticipation_net +6,3 п.п.; ΔARPPU (net) +€2,1 при Prize&Bonus/Active +€0,7.
Xulosa: qoidalarni mahalliy byudjet pullari bilan yangi geolarga ko’paytirish.
Mukofotlarni avtomatlashtirish «frispinlar bilan push yuborish» emas. Bu muhandislik tizimi: voqealarni ishonchli yetkazib berish, qoidalarni qat’iy versiyalash, idempotency va imzolar, byudjet kaperlari, KYC/RG geytlar, antifrod va monitoring. Ushbu ramkani bir kun quring - va har qanday missiyalar, turnirlar va «lut-lahzalar» oldindan aytib bo’ladigan, o’z vaqtida va ijobiy netto-effekt bilan ishlaydi.