Иш-чараларды жана сыйлыктарды автоматташтыруу: эрежелер жана вебхактар
Gamification эки "мотор" таянат: окуялар (колдонуучу эмне кылган) жана эрежелер (бул үчүн эмне керек). Бул масштабдуу жана катасыз иштеши үчүн, бизге окуялардын ишенимдүү шинасы, эрежелердин кыймылдаткычы, сыйлыктарды жеткирүү/берүү механизми жана фроддон катуу коргоо керек. Төмөндө - практикалык архитектура, шаблондор жана чек баракчалары.
1) Архитектура агым "окуя → эреже → сыйлык"
1. Ingest (Иш-чаралардын кириши): SDK/Web, төлөм/оюн провайдери → API Gateway → кезек/шина (Kafka/Rabbit/Cloud Pub/Sub).
2. Normalizer: validation, байытуу (geo, device, payer_flag), схема версия.
3. Руль Engine: упай/HR, миссияларды/тапшырмаларды текшерүү, сыйлыктар/билдирүүлөр үчүн триггерлер.
4. Reward Orchestrator: сыйлык эсептөө, бюджет-чек, RG/KYC-Гейтс, түзүү "тапшырма берүү", журналга жазуу.
5. Payout/Bonus Service: кэш/бонустук кэш/фриспиндер/купондор, тышкы вебхактар (капчык, провайдерлер).
6. Notifier: жыштык чеги менен push/in-app/email/кабарчылар.
7. Storage/Analytics: чийки окуялар, витриналар, 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) Webhucks: сервер-сервер интеграциясы
4. 1. Чыгуучу Webhook (сизден провайдерлерге/капчыкка)
Ыкмасы: 'POST https ://partner. example/payouts`
Подпись: `X-Signature: HMAC-SHA256(secret, body)` + `X-Request-Id` (idempotency).
Retry: экспоненциалдык backoff, 'max _ retries = 8', jitter, DLQ.
Idempotency: кайталоо ошол эле '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. Кирген Webhook (сага)
IP/MTLS тизмелерин гана уруксат, HMAC жана кол жашоо убактысын текшерүү ('X-Timestamp', ± 5 мүнөт).
Аудит сактоо "чийки" body + баш сактоо (WORM).
Каалаган дубль/кайталоо → журналына каршы idempotency key текшерүү.
5) Ишенимдүүлүк: кош төлөмдөр жок "тегиз" агым
At-least-once боюнча ingest + idempotent иштеп → алтын стандарт.
Idempotency key: 'hash (event_id + user_id + rule_id)' упай үчүн; сыйлык берүү үчүн өзүнчө ачкыч 'reward _ task _ id'.
Exactly-once семантика транспорт менен эмес, логикалык гана реалдуу (демпотенттик аркылуу).
Окуялардын тартиби: 'event _ ts' жана 'ingest _ ts' сактаңыз; reordering window (мисалы, 60 сек) жана 'user _ id' баскычы боюнча кезектен кайра колдонуңуз.
Dead Letter Queue (DLQ):- Биз ал жакка түбөлүк ката менен билдирүүлөрдү жазабыз (убактылуу схема өткөн жок, кол коюлган эмес, бюджет жабылган).
- reprocess/drop/fix схемасы менен "DLQ ревю" кызматы.
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-Гейтс (оюнчу жана комплаенс коопсуздук)
KYC: кэш/ири сыйлыктар үчүн минималдуу L2; фриспиндер L1 менен кабыл алынат.
RG: депозиттик лимиттерди текшерүү, өзүн-өзү жоюу, "cool-off" → сыйлыктар чектөөлөр алынганга чейин "тоңдурулган".
Geo: ар бир эреже/сыйлык пулу үчүн уруксат берилген өлкөлөрдүн тизмеси.
Босого Алерт: кескин өсүшү "дээрлик жеткен" жеке эсептери = hold & review боюнча себеп.
8) Антифрод эрежелери жана телеметрия
/ мин/саат/сутка, минималдуу коюмдардын дисперсиясы, "идеалдуу" үлгүлөргө тыюу салуу.
Техникалык сигналдар: headless, кайталануучу device_fp, прокси-субсети.
Аномалиялар: "көз айнек/коюмдар" жана "көз айнек/мин" - 99-кагазга узун "куйруктар".
жогорку байге үчүн Hold-and-review: автоматтык чек KYC + кол менен көрүү.
9) Мониторинг, метрика жана Алерт
SLO/SLA:- Ingest p95 ≤ 250 мс; иштетүү эрежелери p95 ≤ 150 мс; Лидер тактасын жаңыртуу ≤ 2 с; сыйлык берүү ≤ 60 б.
- Error budget < 0. 1% окуялар/күн.
- эксперименттер боюнча SRM (трафиктин кыйшаюусу), DLQ өсүшү, HMAC-валидация кол тамгасынын төмөндөшү, бюджеттин ашуусу, idempotent-дублдардын өсүшү.
- Events/с, артта калуу, бузулууга туруктуулук;
- Huni: окуя → эреже → reward_task → reward_issued;
- Баасы: Prize/Bonus per Active, Net Uplift;
- Сапаты: Frod желектери, KYC блоктору, RG-ишке киргизүү.
10) Версиялоо жана миграция
Ар бир эреже - versioned ('rules. version`).
Жаңы версиясыз активдүү эрежени түзөтүүгө болбойт; ficheflag жана "жылмакай жылытуу" (10% → 50% → 100%) колдонуу.
schema registry аркылуу окуялар схемасы; туура келбеген өзгөрүүлөр - бир гана негизги версия.
11) A/B-автоматташтыруу тесттер (кыска)
Бирдиги - колдонуучу; sticky-assignment; стратификация (payer/geo/platform).
Өзүнчө алдыңкы такталар же интерференцияны жокко чыгаруу үчүн баллдарды нормалдаштыруу.
Primary: participation_net, completion, Net ARPPU; Guardrails: даттануулар/1k, Frod желектери, 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' жазуусу.
Ошол эле 'X-Request-Id' менен ката (5хх/тайм) → retray.
Ийгиликсиз (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).
Сактоо жана алып салуу саясаты (унутуу укугу, deduplication-safe).
15) Чек тизмеси ишке киргизүү
- Иш-чаралардын схемалары жана каттоо, вебхук келишимдери (белгилер, TTL).
- кезек, retrailer, DLQ, idempotent иштеп чыгуучулар.
- Cap/Guard эрежелери, KYC/RG-гейт.
- Бюджет-бассейн, circuit-breakers, Алерт толуп.
- Dashbord SLO + Huni reward.
- A/B-phicheflagy жана SRM-мониторинг.
- Runbook окуялар (кайталап, тоңдуруп, кол менен берүү).
16) Mini Case (синтетикалык)
Оюн жана капчык провайдерлеринин окуялары кошулду; камтылган "win/bet" капкактары менен эсеби.
Webhuke HMAC кол коюлган, 8 аракет чейин Retray, DLQ ар бир 2 саат.
4 жума үчүн: p95 180 ms дарылоо артта; DLQ < 0,06%; төлөмдөр 0; фрод-желектер − 0,4 п.п.; ΔParticipation_net +6,3 п.п.; ΔARPPU (net) +€2,1 при Prize&Bonus/Active +€0,7.
Жыйынтык: жергиликтүү бюджет пулдары менен жаңы гео боюнча эрежелерди масштабдоо.
Сыйлыктарды автоматташтыруу "фриспиндерди жөнөтүү" эмес. Бул инженердик система: иш-чараларды ишенимдүү жеткирүү, эрежелерди катуу чыгаруу, idempotency жана кол коюу, бюджет-каперлер, KYC/RG-гейт, антифрод жана мониторинг. Бул алкакты бир күнү куруңуз - жана ар кандай миссиялар, турнирлер жана "лут-моменттер" алдын ала, өз убагында жана оң таза эффект менен иштейт.