Recompense pentru voturi
Recompensele pentru voturi folosesc evenimentul Webhook server.vote: handlerul primește evenimentul, obține datele votului prin API, găsește jucătorul în sistemul dvs. și acordă recompensa o singură dată.
Pentru a integra această metodă, configurați mai întâi Webhook-ul proiectului și verificați signature. Datele votului se cer prin GET /votes/:vote_id.
Cum funcționează fluxul
- Primiți evenimentul Webhook și verificați signature. Dacă is_test este
true, returnați204fără să încărcați votul și fără să acordați recompensa. - Asigurați-vă că
event_typeesteserver.vote. - Luați
event_id: pentruserver.vote, acesta este ID-ul votului. - Obțineți datele votului prin GET /votes/:vote_id și găsiți jucătorul în sistemul dvs.
- Aplicați protecția împotriva procesării repetate după
event_type+event_idși acordați recompensa în aceeași tranzacție. - Dacă recompensa nu poate fi acordată în siguranță, returnați un răspuns de eroare, remediați cauza și retrimiteți livrarea din interfață.
Exemplu de recompensă
Să presupunem că jucătorul PlayerName a votat pentru serverul cu ID 1, iar sistemul trebuie să 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și primește nickname, server și utilizator. - În baza dvs., handlerul găsește contul local după nickname sau după legătura de cont.
- Într-o tranzacție, handlerul aplică protecția împotriva procesării repetate după
server.vote+event_idși adaugă100monede. - Gestionați livrarea repetată a aceluiași eveniment după aceleași reguli de protecție împotriva procesării repetate.
Același flux se potrivește și pentru obiecte, roluri, timp VIP, coduri promo sau cozi interne.
Evenimentul de vot
Când apare un vot pentru server, GAMEMONITORING trimite evenimentul server.vote. Body-ul conține doar date de livrare: event_type, event_id, is_test și signature. Datele complete ale votului se cer separat.
event_id din acest eveniment 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 aveți nevoie de obicei de response.nickname, response.server și datele publice response.user. Dacă recompensa depinde de un anumit server, verificați întotdeauna response.server.id.
Exemplu de mapare: response.nickname găsește contul jucătorului în baza dvs., response.server.id alege regula de recompensă, iar response.user.id poate fi salvat în jurnalul recompenselor.
Dacă API 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 retrimiteți livrarea.
Exemplu complet
Exemplul verifică semnătura, obține datele votului, previne recompensele duplicate și aplică recompensa. Î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 cu modelul dvs. de conturi.