Recompense pentru voturi
Recompensele pentru voturi folosesc evenimentele Webhook server.vote și project.vote: handlerul primește evenimentul, obține datele votului prin API și acordă recompensa o singură dată.
Configurați mai întâi Webhook-ul proiectului și verificarea signature. Datele votului sunt cerute prin GET /votes/:vote_id.
Cum funcționează scenariul
- Primiți evenimentul Webhook și verificați signature. Dacă is_test este
true, returnați204fără să cereți votul și fără să acordați recompensa. - Asigurați-vă că
event_typeesteserver.votesauproject.vote. - Folosiți
event_idca ID al votului. - Obțineți datele votului prin GET /votes/:vote_id și găsiți jucătorul în sistemul dvs.
- Într-o singură tranzacție, aplicați protecția împotriva procesării repetate după
event_type+event_idși acordați recompensa doar pentru un eveniment nou. - Dacă recompensa nu poate fi acordată în siguranță, returnați un răspuns cu eroare. După remedierea cauzei, trimiteți din nou livrarea din interfață.
Exemplu de recompensă
Să presupunem că jucătorul PlayerName a votat pentru serverul cu ID 1, iar sistemul dvs. trebuie să îi adauge 100 monede.
- GAMEMONITORING trimite un Webhook cu
event_type: server.voteșievent_id: 9824cabb-2203-437e-9b6c-aba43dde3e4b. - Handlerul verifică signature. Dacă semnătura este invalidă, returnează
401și se oprește. - Handlerul cere
GET /votes/9824cabb-2203-437e-9b6c-aba43dde3e4b, primește nickname, server și utilizator, apoi găsește contul local. - Într-o tranzacție, handlerul salvează
event_type+event_idpentru protecția împotriva procesării repetate. - Pentru un eveniment nou, handlerul adaugă
100monede în aceeași tranzacție. - La o livrare repetată, handlerul găsește evenimentul deja salvat, nu acordă recompensa din nou și returnează
204.
Același scenariu este potrivit și pentru obiecte, roluri, timp VIP, coduri promoționale sau sarcini într-o coadă internă.
Evenimentul de vot
Pentru un vot de server, GAMEMONITORING trimite server.vote, iar pentru un vot de proiect — project.vote. Body-ul evenimentului conține doar date de livrare: event_type, event_id, is_test și signature. Datele complete ale votului trebuie cerute separat.
În acest eveniment, event_id este ID-ul votului. Nu folosiți body-ul Webhook ca sursă pentru nickname, server sau utilizator: aceste date vin din API.
Obținerea datelor votului
Folosiți event_id ca vote_id și cereți datele votului prin GET /votes/:vote_id:
Pentru acordarea recompensei, de obicei aveți nevoie de response.nickname, response.server și datele publice response.user. Dacă recompensa depinde de un anumit server, verificați întotdeauna response.server.id.
Cum se folosesc câmpurile: response.nickname ajută la găsirea contului jucătorului în baza dvs., response.server.id alege regula de recompensă pentru server, iar response.user.id poate fi salvat în logul recompenselor ca ID al utilizatorului GAMEMONITORING care a votat.
Dacă API-ul este temporar indisponibil sau returnează un răspuns neașteptat, nu acordați recompensa fără verificare. Returnați un cod de eroare, remediați cauza și trimiteți din nou livrarea din interfață.
Pasul 3. Handler pentru recompensa după vot
Exemplul continuă handlerul de bază: verifică semnătura, obține datele votului, protejează evenimentul de procesare repetată și acordă recompensa într-o singură tranzacție. Înlocuiți numele tabelului de utilizatori, câmpul de balanță și regula de căutare a jucătorului cu structura sistemului dvs.
Înainte de rularea exemplului, configurați Webhook-ul proiectului, verificați GET /votes/:vote_id și înlocuiți actualizările SQL pentru utilizator cu modelul dvs. de conturi.