Მოვლენების ავტომატიზაცია და ჯილდოები: წესები და ვებჰუკი
Gamification ემყარება ორ „ძრავას“: მოვლენებს (რაც მომხმარებელმა გააკეთა) და წესებს (რა უნდა იყოს ამის იმედი). იმისათვის, რომ ეს ფართომასშტაბიანი და ზუსტად იმუშაოს, თქვენ გჭირდებათ მოვლენების საიმედო საბურავი, წესების ძრავა, ჯილდოების მიწოდების/გაცემის მექანიზმი და მკაცრი დაცვა ფროდისგან. ქვემოთ მოცემულია პრაქტიკული არქიტექტურა, შაბლონები და ჩეკების ფურცლები.
1) ნაკადის არქიტექტურა „მოვლენა - წესი - ჯილდო“
1. Ingest (მოვლენების შეყვანა): SDK/web, სერვერის ვებჰუკები გადახდის/თამაშების პროვაიდერის API Gateway რიგის/ავტობუსისგან (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizer: შესაბამისობა, გამდიდრება (geo, device, payer _ flag), სქემის ვერსია.
3. Rules Engine: ქულა/HR, მისიების/სტუმრების შემოწმება, ჯილდოს/შეტყობინებების გამომწვევი.
4. Reward Orchestrator: ჯილდოს გაანგარიშება, ბიუჯეტის შემოწმება, RG/KYC კარიბჭეები, „გაცემის ამოცანის“ შექმნა, ჟურნალის ჩაწერა.
5. Payout/Bonus Service: ქეში/ბონუს ქეში/ფრისპინები/კუპონები, გარე ვებჰუკი (საფულე, პროვაიდერები).
6. Notifier: push/in-app/email/მყისიერი სიხშირის ლიმიტები.
7. სცენა/ანალიზები: ნედლეული მოვლენები, ფანჯრები, A/B, ალერტები.
8. Anti-Fraud/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", "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) მოძრაობის წესები: როგორ აღწეროთ ლოგიკა
კონცეფციები: წესები (if/then), სეგმენტები, დროის ფანჯრები, ქუდები, პრიორიტეტები, ვერსიები.
დეკლარაციული წესის მაგალითი (YAML სტილი):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) ვებჰუკი: ინტეგრაციის სერვერი
4. 1. ვებჰუკები (თქვენგან პროვაიდერებამდე/საფულეზე)
მეთოდი: 'POST https ://partner. example/payouts`
Подпись: `X-Signature: HMAC-SHA256(secret, body)` + `X-Request-Id` (idempotency).
Retrai: ექსპონენციალური backoff, 'max _ retries = 8', jitter, DLQ.
Idempotence: იგივე 'X-Request-Id' განმეორება - პარტნიორი ვალდებულია უპასუხოს იგივე 'payout _ id/status'.
მაგალითი 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. შემომავალი ვებჰუკი (შენთან)
გადაწყვიტეთ მხოლოდ IP/MTLS სიები, შეამოწმეთ HMAC და ხელმოწერის დრო ('X-Timestamp', ± 5 წუთი).
შეინარჩუნეთ „ნედლეული“ ბოდი + სათაურები აუდიტის საცავში (WORM).
ნებისმიერი დუბლი/გამეორება - შეამოწმეთ key idempotence ჟურნალის წინააღმდეგ.
5) საიმედოობა: „თანაბარი“ ნაკადი ორმაგი გადახდების გარეშე
At-least-once ingest + idempotent დამუშავებისთვის არის ოქროს სტანდარტი.
Idempotence key: 'hash (event _ id + user _ id + rule _ id)' ქულების გაანგარიშებისთვის; ცალკე გასაღები ჯილდოს გაცემისთვის 'reward _ task _ id'.
Exactly-once სემანტიკა რეალისტურია მხოლოდ ლოგიკურად (იდემპოტენტურობით) და არა ტრანსპორტით.
ღონისძიების რიგი: შეინახეთ 'ღონისძიება _ ts' და 'ingest _ ts'; გამოიყენეთ reordering window (მაგალითად, 60 წამი) და replay ხაზიდან 'user _ id' გასაღები.
Dead Letter Queue (DLQ):- ჩვენ იქ ვწერთ შეტყობინებებს მუდმივი შეცდომით (დროებითი სქემა არ დასრულებულა, ხელმოწერა შეინიშნება, ბიუჯეტი დახურულია).
- Revium DLQ სერვისი reprocess/drop/fix schema ღილაკებით.
6) ბიუჯეტები და ზღვრების დაცვა
ბიუჯეტის აუზები: 'nov _ season', 'daily _ sprint', 'vip _ weekend'.
კვოტები: soft/hard cap, „circuit breaker“ - როდესაც ბიუჯეტის 90% -ს მიაღწევს, გადაიტანეთ დიდი პრიზები hold-state- ში.
ერთი ღირებულება: 'Prize & Bonus Cost per Active/Payor', Net Uplift.
პრიორიტეტები: RG და შესაბამისობა უფრო მნიშვნელოვანია, ვიდრე პრომო - კონფლიქტის დროს, ჯილდო გადაიდო.
ბიუჯეტის გადამოწმების მაგალითი (SQL ესკიზი):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 Gates (მოთამაშის უსაფრთხოება და შესაბამისობა)
KYC: მინიმუმ L2 ქეში/ძირითადი პრიზებისთვის; ფრისპინები დასაშვებია L1- ით.
RG: ანაბრის ლიმიტების შემოწმება, თვითშეფასება, „cool-off“ - ჯილდოები „გაყინულია“, სანამ შეზღუდვები არ მოიხსნება.
Geo: ნებადართული ქვეყნების სია თითოეული წესისა/ჯილდოს აუზისთვის.
ბარიერი ალერტები: მკვეთრი ზრდა „თითქმის მიაღწია“ ცალკეულ ანგარიშებში = მიზეზი hold & მიმოხილვისთვის.
8) ანტიფროდიული წესები და ტელემეტრია
ქულების ქუდი/წთ/სთ/დღეში, განაკვეთების მინიმალური დაშლა, „იდეალური“ ნიმუშების აკრძალვა.
Techsignals: headless, განმეორებითი მოწყობილობები _ fp, მარიონეტული სუბსიდიები.
ანომალიები: „ქულა/ფსონები“ და „ქულა/წთ“ - გრძელი „კუდები“ 99-პერცენტილზე.
Hold and მიმოხილვა საუკეთესო გამარჯვებულებისთვის: ავტომატური KYC + სახელმძღვანელო მიმოხილვა.
9) მონიტორინგი, მეტრიკა და ალერტა
SLO/SLA:- Ingest p95-250 ms; p95-150 ms წესის დამუშავება; ლიდერობის განახლება - 2 წმ; ჯილდოს გაცემა 60.
- Error budget < 0. მოვლენების 1% დღეში.
- SRM ექსპერიმენტებში (ტრეფიკი), DLQ- ის ზრდა, HMAC სავალდებულო ხელმოწერის ვარდნა, ბიუჯეტის გადაჭარბება, იდემპოტენტური დუბლების ზრდა.
- მოვლენები/ს, ლაგი, უარყოფითი წინააღმდეგობა;
- ძაბრი: მოვლენა, როგორც წესი, არის reward _ task reward _ issued;
- ღირებულება: Prize/Bonus per Active, Net Uplift;
- ხარისხი: frode დროშები, KYC ბლოკები, RG მოქმედება.
10) ვერსია და მიგრაცია
თითოეული წესი არის versioned ('rules. version`).
აქტიური წესის რედაქტირება შეუძლებელია ახალი ვერსიის გარეშე; გამოიყენეთ ficheflag და „გლუვი დათბობა“ (10% - 50% - 100%).
ღონისძიების სქემა სქემით; შეუთავსებელი ცვლილებები მხოლოდ მაიორი ვერსიაა.
11) A/B ავტომატიზაციის ტესტები (მოკლედ)
ერთეული - მომხმარებელი; sticky-assignment; სტრატიფიკაცია (payer/geo/platform).
ცალკეული ლიდერები ან ქულების ნორმალიზაცია ჩარევის აღმოსაფხვრელად.
Primary: participation_net, completion, Net ARPPU; Guardrails: საჩივრები/1k, ფროიდის დროშები, RG მოქმედება.
CUPED და კოვარიატები დისპერსიის შესამცირებლად.
12) მაგალითები: წესიდან ექსტრადიციამდე
12. 1. ტრიგერი „მიკრო ჯილდო პროგრესისთვის“
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. გამავალი ვებჰუკი საფულეზე
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" }
წარმატება 'reward _ task' = 'succeeded' და ჩანაწერი 'reward _ ledger'.
წარუმატებლობა (5xx/Taimaut) - retray იგივე 'X-Request-Id'.
წარუმატებლობა (4xx) - DLQ + სახელმძღვანელო ანალიზი.
13) საცავი და ცხრილი (ესკიზი)
sql
- ჯილდოს ჟურნალი
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
);
- ინდემპოტენტურობა
CREATE UNIQUE INDEX uniq_reward_task ON reward_ledger (reward_task_id);
- ბიუჯეტი
CREATE TABLE reward_budget (
pool_id TEXT PRIMARY KEY, budget NUMERIC(18,2), spent NUMERIC(18,2), period DATE
);
14) უსაფრთხოება და კონფიდენციალურობა
HMAC ხელმოწერები, MTLS, allow-list IP.
ტრანზიტის/დასვენების დაშიფვრა, გასაღების როტაცია, საიდუმლოებები vault.
მონაცემების მინიმიზაცია payload- ში (PII ცალკე, ბმული ნიშნით, TTL).
აუდიტის ლოგოები უცვლელია (WORM).
შენახვისა და მოცილების პოლიტიკა (დავიწყების უფლება, დედობის უფლება).
15) გაშვების სია
- მოვლენების სქემები და რეგისტრი, ვებჰუკების კონტრაქტები (ხელმოწერები, TTL).
- რიგები, რეტრაები, DLQ, idempotent დამუშავება.
- კაპები/გვარდიის სარკინიგზო მაგისტრალები წესებში, KYC/RG კარიბჭეები.
- ბიუჯეტის აუზები, circuit-breakers, ხალხმრავალი ალერტები.
- Dashbords SLO + reward ძაბრი.
- A/B ფიჩეფლაგები და SRM მონიტორინგი.
- Runbook ინციდენტები (რეპლიკა, გაყინვა, ხელით გაცემა).
16) მინი შემთხვევა (სინთეზური)
მოვლენები უკავშირდება თამაშების პროვაიდერებს და საფულეს; ჩართულია „win/bet“ მორიელი ქუდებით.
ვებჰუკს ხელს აწერს HMAC, 8-მდე მცდელობა, DLQ რეპროდუქციით ყოველ 2 საათში.
4 კვირის განმავლობაში: დამუშავების lag p95 180 ms; DLQ < 0,06%; ორმაგი გადახდა 0; ფროიდის დროშები − 0.4 პროცენტული პუნქტით; ΔParticipation_net +6,3 п.п.; ΔARPPU (net) +€2,1 при Prize&Bonus/Active +€0,7.
დასკვნა: ახალი გეოს წესების შემუშავება ადგილობრივი ბიუჯეტის ტყვიებით.
ჯილდოს ავტომატიზაცია არ არის „ფრისპინებით გაგზავნა“. ეს არის საინჟინრო სისტემა: მოვლენების საიმედო მიწოდება, წესების მკაცრი ვერსია, პირადობის მოწმობა და ხელმოწერები, ბიუჯეტის კერძო სახლები, KYC/RG კარიბჭეები, ანტიფროდიული და მონიტორინგი. ერთხელ ააშენეთ ეს ჩარჩო - და ნებისმიერი მისიები, ტურნირები და „lut მომენტები“ იმუშავებს პროგნოზირებულად, დროულად და პოზიტიური წმინდა ეფექტით.