Wakalary we baýraklary awtomatlaşdyrmak: düzgünler we webhuklar
Oýnamak iki "hereketlendirijä" esaslanýar: wakalar (ulanyjynyň eden işleri) we düzgünler (munuň üçin näme gerek). Munuň giň gerimde we ýalňyşsyz işlemegi üçin wakalaryň ygtybarly tekeri, düzgünleriň hereketlendirijisi, baýraklary eltmegiň/bermegiň mehanizmi we froddan berk gorag gerek. Aşakda - amaly binagärlik, şablonlar we çek sahypalary.
1) Akym arhitekturasy "waka → düzgün → baýrak"
1. Ingest (wakalaryň girişi): SDK/web, töleg/oýun üpjün edijisinden serwer webhuklary → API Gateway → nobat/teker (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizer: walidasiýa, baýlaşdyrmak (geo, device, payer_flag), shema görnüşi.
3. Rules Engine: äýnek skoring/HR, missiýalary/gözlegleri barlamak, baýraklary/habarnamalary tetiklemek.
4. Reward Orchestrator: baýragy hasaplamak, býudjet-çek, RG/KYC-geýtlar, "bermek wezipesini" döretmek, magazineurnala ýazmak.
5. Payout/Bonus Service: keş/bonus-keş/frispinler/kuponlar, daşarky webhuklar (gapjyk, üpjün edijiler).
6. Notifier: push/in-app/email/ýygylyk çäkli habarçylar.
7. Storage/Analytics: çig wakalar, vitrinler, A/B, töwekgelçilikler.
8. Anti-Fraud/RG: kaplar, ewristika/ML, hold-and-review iri baýraklar.
2) Wakalaryň modeli (iň az toplum)
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) Düzgünleriň hereketlendirijisi: logikany nädip beýan etmeli
Düşünjeler: düzgünler (if/then), segmentler, wagt penjireleri, kaplar, ileri tutulýan ugurlar, wersiýalaşdyrmak.
Deklaratiw düzgüniň mysaly (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) Webhuklar: Integrasiýa serweri
4. 1. Giden webhuklar (sizden üpjün edijilere/gapjyga)
Usul: 'POST https ://partner. example/payouts`
Подпись: `X-Signature: HMAC-SHA256(secret, body)` + `X-Request-Id` (idempotency).
Retrailer: eksponensial backoff, 'max _ retries = 8', jitter, DLQ.
Idempotency: şol bir 'X-Request-Id' → partnýor şol 'payout _ id/status' -a jogap bermäge borçludyr.
Payload mysaly: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. Gelýän webhuklar (size)
Diňe IP/MTLS sanawlaryna rugsat beriň, HMAC we gol ömrüni barlaň ('X-Timestamp', ± 5 minut).
"Çig" body + sözbaşylaryňyzy audit-ammarda (WORM) saklaň.
Islendik dubl/gaýtalamak → idempotency key vs.
5) Ygtybarlylyk: goşa tölegsiz "tekiz" akym
At-least-once -da ingest + idempotent prosessorlary → altyn standart.
Idempotency key: 'hash (event_id + user_id + rule_id)' bal hasaplamak üçin; baýragy bermek üçin aýratyn açar 'reward _ task _ id'.
"Exactly-once" semantikasy ulag bilen däl-de, diňe logiki taýdan (idempotentlik arkaly) realistdir.
Wakalaryň tertibi: 'event _ ts' we 'ingest _ ts' saklaň; reordering window (mysal üçin 60 sek) we 'user _ id' açary boýunça nobatdan replay.
Dead Letter Queue (DLQ):- Şol ýerde hemişelik ýalňyşlyk bilen habarlar ýazýarys (wagtlaýyn shema geçmedi, gol galmady, býudjet ýapyldy).
- reprocess/drop/fix shema düwmeleri bilen "revew DLQ" hyzmaty.
6) Býujetler we marjany goramak
Býudjet pullary: 'nov _ season', 'daily _ sprint', 'vip _ weekend'.
Kwotalar: soft/hard cap, "circuit breaker" - býudjetiň 90% -ine ýetende iri baýraklary hold-state geçirmek.
Bahasy: 'Prize & Bonus Cost per Active/Payor', Net Uplift.
Ileri tutulýan ugurlar: RG we komplayens mahabatdan has möhümdir - gapma-garşylykda sylag yza süýşürilýär.
Býudjet barlagynyň mysaly (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-geýtlar (oýunçynyň howpsuzlygy we laýyklygy)
KYC: nagt pul/uly baýraklar üçin iň az L2; frispinler L1 bilen kabul edilip bilner.
RG: goýumyň çäklerini barlamak, öz-özüni aýyrmak, "cool-off" → baýraklar çäklendirmeler ýatyrylýança "doňdurylýar".
Geo: Her bir sylag düzgüni/puly üçin rugsat berlen ýurtlaryň sanawy.
Çäkli töwekgelçilikler: aýry-aýry hasaplarda "diýen ýaly" ýiti ösüş = hold & review-de sebäp.
8) Antifrod düzgünleri we telemetriýa
/ min/sagat/gije-gündiziň nyrhy boýunça äýnek gaplary, nyrhlaryň iň az dispersiýasy, "ideal" patternleriň gadagan edilmegi.
Tehniki signallar: headless, gaýtalanýan device_fp, proksi-subset.
Anomaliýalar: "äýnek/jedeller" we "äýnek/minut" - 99-percentilde uzyn "guýruklar".
Top ýeňijiler üçin Hold-and-review: KYC awtomatiki çek + el bilen görmek.
9) Gözegçilik, metrika we alertler
SLO/SLA:- Ingest p95 ≤ 250 ms; düzgüni gaýtadan işlemek p95 ≤ 150 ms; Liderbordyň täzelenmegi ≤ 2 s; sylagyň berilmegi ≤ 60 s.
- Error budget < 0. 1% waka/gün.
- Synaglarda SRM (traffigiň üýtgemegi), DLQ-iň ösüşi, HMAC-tassyklama golunyň düşmegi, býudjetiň artykmaçlygy, idempotent-dubllaryň köpelmegi.
- Wakalar/s, lag, şowsuzlyga çydamlylyk;
- Huni: waka → düzgün → reward_task → reward_issued;
- Bahasy: Prize/Bonus per Active, Net Uplift;
- Hil: frod-baýdaklar, KYC-bloklar, RG-hereketler.
10) Wersiýalaşdyrmak we migrasiýa
Her düzgün - versioned ('rules. version`).
Täze wersiýasy bolmazdan işjeň düzgüni redaktirläp bolmaz; ficheflag we "tekiz gyzdyrmak" ulanyň (10% → 50% → 100%).
schema registry arkaly wakalaryň shemasy; gabat gelmeýän üýtgeşmeler - diňe major wersiýasy.
11) A/B-awtomatlaşdyryş synaglary (gysgaça)
Birlik - ulanyjy; sticky-assignment; stratifikasiýa (payer/geo/platform).
Arakesmäni aradan aýyrmak üçin aýratyn liderbordlar ýa-da ballaryň kadalaşmagy.
Primary: participation_net, completion, Net ARPPU; Guardrails: şikaýatlar/1k, frod-baýdaklar, RG-işleýiş.
Dispersiýany azaltmak üçin CUPED we kowariatlar.
12) Mysallar: kadadan berilmegine çenli
12. 1. "Ösüş üçin mikro-sylag" 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. Gapjyga gidýän webhuk
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" }
Üstünlik → 'reward _ task' = 'succeeded' we 'reward _ ledger' -e ýazmak.
Şowsuzlyk (5xx/wagt) → şol bir 'X-Request-Id' bilen retray.
Şowsuzlyk (4xx) → DLQ + el derňewi.
13) Ammar we tablisalar (eskiz)
sql
-- baýrak sanawy
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ýudjet
CREATE TABLE reward_budget (
pool_id TEXT PRIMARY KEY, budget NUMERIC(18,2), spent NUMERIC(18,2), period DATE
);
14) Howpsuzlyk we gizlinlik
HMAC-gollar, MTLS, allow-list IP.
Tranzit/dynç alyşda şifrlemek, açarlary aýlamak, vault-da syrlar.
Tölegde iň az maglumat (PII aýratyn, belgi baglanyşygy, TTL).
Üýtgemeýän audit-loglar (WORM).
Saklamak we aýyrmak syýasaty (ýatdan çykarmak hukugy, deduplication-safe).
15) Işe girizmegiň çek-sanawy
- Wakalaryň we registrleriň shemalary, webhuk şertnamalary (signatura, TTL).
- Nobatlar, retralar, DLQ, dempotent prosessorlary.
- Kap/gvardrail-ler düzgünlerde, KYC/RG-geýtlar.
- Býudjet howuzlary, circuit-breakers, artykmaç töwekgelçilikler.
- Dashbord SLO + huni reward.
- A/B-fiziki we SRM-gözegçilik.
- Wakalary yzarlamak (täzeden oýnamak, doňdurmak, el bilen bermek).
16) Kiçi keýs (sintetik)
Oýun üpjün edijilerinden we gapjykdan wakalar birikdirildi; "win/bet" caps skoring.
Webhuklara HMAC gol çekdi, 8 synanyşyga çenli retralar, her 2 sagatda gykylyk bilen DLQ.
4 hepde üçin: gaýtadan işlemegiň gijä galmagy p95 180 ms; DLQ < 0,06%; tölegleri goşmak 0; azyk baýdaklary − 0,4 p.p.; ΔParticipation_net +6,3 п.п.; ΔARPPU (net) +€2,1 при Prize&Bonus/Active +€0,7.
Netije: Ýerli býudjet howuzlary bilen täze geolara düzgünleriň giňeldilmegi.
Baýraklary awtomatlaşdyrmak "frispinler bilen push ibermek" däl. Bu in engineeringenerçilik ulgamy: wakalaryň ygtybarly eltilmegi, düzgünleriň berk wersiýasy, idempotency we gollar, býudjet kaperleri, KYC/RG-geýtlar, antifrod we gözegçilik. Bu çarçuwany bir gün guruň - islendik missiýalar, ýaryşlar we "lut-pursatlar" öňünden aýdyp boljak, wagtynda we oňyn arassa täsir bilen işlär.