Automatizarea evenimentelor si recompenselor - Reguli si carti web
Gamificarea se bazează pe două „motoare”: evenimente (ceea ce a făcut utilizatorul) și reguli (ceea ce ar trebui să fie pentru ea). Pentru ca acest lucru să funcționeze pe scară largă și fără erori, aveți nevoie de un autobuz de eveniment fiabil, un motor de reguli, un mecanism de livrare/atribuire și o protecție strictă împotriva fraudei. Mai jos sunt arhitectura practică, șabloane și liste de verificare.
1) Regula → eveniment → arhitectura fluxului de recompense
1. Ingera (intrare eveniment): SDK/web, server webhooks de la furnizorul de plată/joc → API Gateway → coadă/autobuz (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizator: validare, îmbogățire (geo, dispozitiv, payer_flag), versiune schemă.
3. Reguli Motor: scoring/XP, misiuni de verificare/quest-uri, declanșatoare de recompense/notificări.
4. Recompensă Orchestrator: calcularea recompenselor, verificarea bugetului, porțile RG/KYC, crearea unei „sarcini de emitere”, exploatarea forestieră.
5. Payout/Bonus Service: cache/bonus cache/freespins/cupoane, carti externe (portofel, furnizori).
6. Notificator: push/in-app/email/instant messengers cu limite de frecvență.
7. Stocare/Analiză: evenimente brute, storefronturi, A/B, alerte.
8. Anti-fraudă/RG: guralivi, euristici/ML, premii mari hold-and-review.
2) Modelul evenimentului (set minim)
json
{
„event_id":” d9e8- „... -5c2”, „event_name":” pariu „,” versiune „:” 1. 2. 0 „,” ts': „2025-10-24T11:37:21Z,” „utilizator”: {
"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"
}, „sarcină utilă”: {
"game_id": "slot_wolf," "pariu": 0. 5, „victorie”: 1. 25, „monedă”: „EUR”, „furnizor”: „GameCo”
}
}
Базовые типы: 'login', 'session _ start/end',' bet/spin ',' win ',' depunere ',' retrage _ request ',' kyc _ status _ changed ',' mission _ view/join/progress/complete ',' tournament _ join/score/update/recompense ',' reward _ emissed ',' rg _ event '.
3) Motorul regulii: cum se descrie logica
Concepte: reguli (dacă/atunci), segmente, ferestre de timp, piese bucale, priorități, versioning.
Un exemplu de regulă declarativă (stil YAML):yaml rule_id: r_points_winmult_v2 când:
event_name: filtre pariu:
- sarcină utilă. bet> = 0. 2
- utilizator. geo în [„TR „, „BR”,” PE”]
- acum între „2025-11-01” și „2025-11-30”
scor:
formulă: "podea ((sarcină utilă. câștig/sarcină utilă. bet) 3) "
capace:
per_bet: 50 per_minute: 200 per_day: 1500 reward_trigger:
on_progress:
prag: [100, 300, 800]
recompensă: [{type: „fs', value: 10}, {type:” bonus_cash, „value: 2}, {type:” loot', raritate: „rare”}]
guardrails:
kyc_min_level: 2 rg_limits_ok: adevărat budget_pool: „nov_season”
budget_soft_cap: 80000 meta:
versiune: "2. 0"
experiment: „scoring_ab_2025w45”
4) Webhooks: integrare server-server
4. 1. Outbound webhooks (de la tine la furnizori/portofel)
Metodă: 'POST https ://partner. exemplu/payouts'
Подпись: 'X-Signature: HMAC-SHA256 (secret, corp)' + 'X-Request-Id' (idempotency).
Retrai: backoff exponențial, 'max _ retries = 8', jitter, DLQ.
Idempotență: repetați același "X-Request-Id' → partenerul trebuie să răspundă cu același" payout _ id/status ".
Exemplu de sarcină utilă:json
{
„request_id": „rid_7f5...,” „user_id": „u_123,” „recompensă”: {„tip „: „numerar”,” sumă”: 10. 00, „valută”:” EUR”}, „motiv”: „milestone_300_points,” „kyc_level": 2 „, constrângeri”: {„pariere”: 0 „, expiry_at": „2025-12-01T00: 00: 00Z”}
}
4. 2. Cârlige web primite (pentru tine)
Permiteți numai listele IP/MTLS, verificați HMAC și durata de viață a semnăturii („X-Timestamp”, ± 5 minute).
Depozitați corpul „brut” + anteturile în magazinul de audit (WORM).
Orice dublă/repetare → verificați cheia de idempotență împotriva jurnalului.
5) Fiabilitate: fluxul „chiar” fără plăți duble
Cel puțin o dată pe ingera + manipulanți idempotente → standardul de aur.
Tasta Idempotency: „hash (event_id + user_id + rule_id)” pentru notare; cheie separată pentru eliberarea recompensei "recompensă _ task _ id'.
Semantica exact o dată este doar logic realistă (prin idempotență), nu și de transport.
Ordinea evenimentelor: magazin 'event _ ts' şi' ingest _ ts'; utilizați fereastra de reordonare (de exemplu, 60 secunde) și reluarea din coadă de către tasta "user _ id'.
Coadă de scrisori moarte (DLQ):- Scriem mesaje acolo cu o eroare permanentă (schema temporară nu a trecut, semnătura este nevalidă, bugetul este închis).
- Serviciul de revizuire DLQ cu butoanele schemă reprocess/drop/fix.
6) Bugete și protecția marjei
Piscine bugetare: 'nov _ season', 'daily _ sprint', 'vip _ weekend'.
Cote: capac moale/greu, „întrerupător de circuit” - atunci când ajunge la 90% din buget, transfera premii mari pentru a deține-stat.
Cost unic: 'Premiu & Bonus Cost per Activ/Payor', Net Uplift.
Priorități: RG și conformitatea sunt mai importante decât promo - în caz de conflict, recompensa este amânată.
Exemplu de verificare a bugetului (schiță SQL):sql
SELECTAȚI pool_id, SUMA (suma) CA CHELTUIALĂ, BUGETUL CA LIMITĂ, SUMA (suma )/BUGETUL CA UMPLERE
DE LA reward_ledger
WHERE pool_id =: pool AND date (ts) = current_date
GRUP CU pool_id, buget;
7) Porțile RG/KYC/Geo (siguranța și conformitatea jucătorului)
KYC: L2 minim pentru cache/premii mari; freespins sunt valabile cu L1.
RG: verificarea limitelor de depozit, auto-excludere, cool-off → premii sunt înghețate până când restricțiile sunt ridicate.
Geo: lista țărilor permise pentru fiecare regulă de atribuire/pool.
Alerte de prag: creștere bruscă „aproape atinsă” în conturile individuale = un motiv pentru a deține & revizuire.
8) Reguli antifraudă și telemetrie
Capace de puncte la o rată/min/oră/zi, variația minimă a pariurilor, interzicerea modelelor „ideale”.
Semnale tehnice: fără cap, device_fp repetate, subrețele proxy.
Anomalii: „puncte/pariuri” și „puncte/min” - „cozi” lungi pe percentila 99.
Hold-and-review pentru câștigătorii de top: verificare automată KYC + revizuire manuală.
9) Monitorizare, măsurători și alerte
SLO/SLA:- Ingera p95 ≤ 250 ms; prelucrarea regulilor p95 ≤ 150 ms; actualizarea consiliului de conducere ≤ 2 s; numărul de atribuire ≤ 60 s.
- Bugetul de eroare <0. 1% evenimente/zi.
- SRM pe experimente (înclinarea traficului), creșterea DLQ, scăderea semnăturii de validare HMAC, depășirea bugetului, supratensiunea duplicatului idempotent.
- Evenimente/s, decalaj, toleranță la erori;
- Pâlnie: eveniment regulă ;
- Cost: Premiu/Bonus per Activ, Net Uplift;
- Calitate: steaguri de fraudă, blocuri KYC, declanșatoare RG.
10) Versioning și migrații
Fiecare regulă este versificată („reguli”. versiunea ").
Nu puteți edita regula activă fără o versiune nouă; utilizați ficheflag și „încălzire netedă” (10% → 50% → 100%).
Diagrama evenimentelor prin intermediul registrului schemei; modificări incompatibile - numai versiunea majoră.
11) A/B teste de automatizare (scurt)
Unitate - utilizator; lipicios-atribuire; stratificare (plătitor/geo/platformă).
Plumb separat sau normalizarea punctelor pentru a elimina interferențele.
Primar: participation_net, finalizare, ARPPU net; Guardrails: plângeri/1k, steaguri de fraudă, declanșatoare RG.
CUPED și covariații pentru reducerea varianței.
12) Exemple: de la regulă la problemă
12. 1. Declanșarea progresului micro-recompensei
json
{
"tip": "reward_task. created", "reward_task_id": "rt_456," "user_id": "u_123," "origine": {"rule _ id': "r _ points _ winmult _ v2 "," prag": 300}," recompensă ": {" type ":" bonus_cash, ":" sumă ": 2," valută ":" EUR"," pariere ": 15}," pool_id" ": "" "stare": "în așteptare", "nov_season,: "created_at"" 2025-10-24T11:38:30Z
}
12. 2. Outgoing webhook pentru portofel
POST/portofel/credit
X-Request-Id: rid_7f5...
X-Timestamp: 1730061700
Semnătura X: sha256 = 7b9a...
{„user_id":"u_123,” „sumă”: 2. 00, „valută”:” EUR”, „motiv „: „regulă: r _ points _ winmult _ v2”}
Succesul → 'reward _ task' = 'a reușit' și scrierea la 'reward _ ledger'.
Eșec (5xx/timeout) → retray cu același "X-Request-Id'.
Dip (4xx) → DLQ + parsare manuală.
13) Bolți și mese (schiță)
sql
-- revista de premii
CREAȚI TABELUL reward_ledger (
ID CHEIA PRIMARĂ BIGSERIAL, TEXT UNIC, TEXT , TEXT , TEXT TIP, VALOARE NUMERICĂ (18,2), TEXT valută, COST NUMERIC (18,2) DEFAULT 0, -- P&L STATUS TEXT, -- a reușit/eșuat/a avut loc TIMESTAMPTZ
);
-- indempotenta
CREAȚI INDEX UNIC uniq_reward_task PE reward_ledger (reward_task_id);
-- buget
CREAȚI TABELUL reward_budget (
pool_id TEXT CHEIE PRIMARĂ, BUGET NUMERIC (18,2), cheltuit NUMERIC (18,2), DATA PERIOADEI
);
14) Securitate și confidențialitate
Semnături HMAC, MTLS, IP cu lista permisă.
Criptare în tranzit/odihnă, rotație cheie, secrete în seif.
Minimizarea datelor în sarcină utilă (PII separat, prin legătură token, TTL).
Jurnalele de audit imuabile (WORM).
Politica de retenție și dispoziție (dreptul de a fi uitat, eliminarea duplicatelor în condiții de siguranță).
15) Lista de verificare lansare
- Scheme de evenimente și registru, contracte de carti web (semnături, TTL).
- Cozi, retribuții, DLQ, manipulatori idempotenți.
- Capace/parapete în reguli, porți KYC/RG.
- Piscine de buget, întrerupătoare de circuit, alerte de depășire.
- Tablouri de bord SLO + pâlnie de recompensă.
- Filtre A/B și monitorizare SRM.
- Runbook de incidente (reluare, congela, problema manuală).
16) Mini Case (sintetic)
Evenimente conectate de la furnizorii de jocuri și portofel; inclus „win/bet” marcarea cu gura gardieni.
Webhooks semnat HMAC, retraiește până la 8 încercări, DLQ cu revizuire la fiecare 2 ore.
Timp de 4 săptămâni: procesare lag p95 180 ms; DLQ <0,06%; plăți duplicate 0; steaguri de fraudă − 0. 4 pp; ΔParticipation_net + 6,3 п. п.; Δ ARPPU (net) + €2,1 при Premiu & Bonus/Activ + €0,7.
Concluzie: scalarea regulilor la noile geo cu fonduri de buget local.
Automatizarea recompenselor nu este "trimite push cu freespins. "Acesta este un sistem de inginerie: livrarea de încredere a evenimentelor, verificarea strictă a regulilor, idempotența și semnăturile, privatiștii bugetari, porțile KYC/RG, anti-fraudă și monitorizare. Construiți acest cadru într-o zi - și orice misiuni, turnee și „momente de pradă” vor funcționa previzibil, la timp și cu un efect net pozitiv.