Nagrody za głosy
Nagrody za głosy używają zdarzenia Webhook server.vote: handler odbiera zdarzenie, pobiera dane głosu przez API, znajduje gracza w Twoim systemie i wydaje nagrodę jeden raz.
Aby zintegrować tę metodę, najpierw skonfiguruj Webhook projektu i sprawdzaj signature. Dane głosu pobierzesz przez GET /votes/:vote_id.
Jak działa scenariusz
- Przyjmij zdarzenie Webhook i sprawdź signature. Jeśli is_test ma wartość
true, zwróć204bez pobierania głosu i bez wydawania nagrody. - Upewnij się, że
event_typetoserver.vote. - Odczytaj
event_id: dlaserver.votejest to ID głosu. - Pobierz dane głosu przez GET /votes/:vote_id i znajdź gracza w swoim systemie.
- Zastosuj ochronę przed ponownym przetworzeniem po
event_type+event_idi wydaj nagrodę w tej samej transakcji. - Jeśli nagrody nie da się bezpiecznie wydać, zwróć odpowiedź z błędem, usuń przyczynę i ponów dostawę z interfejsu.
Przykład nagrody
Załóżmy, że gracz PlayerName zagłosował na serwer o ID 1, a system ma dodać mu 100 monet.
- GAMEMONITORING wysyła Webhook z
event_type: server.voteievent_id: 9824cabb-2203-437e-9b6c-aba43dde3e4b. - Handler sprawdza signature. Jeśli podpis jest błędny, zwraca
401i kończy. - Handler wywołuje
GET /votes/9824cabb-2203-437e-9b6c-aba43dde3e4bi dostaje nick, serwer oraz użytkownika. - W swojej bazie handler znajduje lokalne konto po nicku albo własnym powiązaniu kont.
- W transakcji handler stosuje ochronę przed ponownym przetworzeniem po
server.vote+event_idi dodaje100monet. - Ponowną dostawę tego samego zdarzenia obsłuż według tych samych reguł ochrony przed ponownym przetworzeniem.
Ten sam schemat sprawdza się przy przedmiotach, rolach, czasie VIP, kodach promocyjnych lub wewnętrznej kolejce.
Zdarzenie głosu
Gdy pojawi się głos na serwer, GAMEMONITORING wysyła zdarzenie server.vote. Body zawiera tylko dane dostawy: event_type, event_id, is_test i signature. Pełne dane głosu trzeba pobrać osobno.
event_id w tym zdarzeniu jest ID głosu. Nie używaj body Webhook jako źródła nicku, serwera lub użytkownika: te dane pochodzą z API.
Pobieranie danych głosu
Użyj event_id jako vote_id i pobierz dane głosu przez GET /votes/:vote_id:
Do wydania nagrody zwykle potrzebujesz response.nickname, response.server i publicznych danych response.user. Jeśli nagroda zależy od konkretnego serwera, zawsze sprawdzaj response.server.id.
Przykład mapowania: response.nickname znajduje konto gracza w bazie, response.server.id wybiera regułę nagrody dla serwera, a response.user.id można zapisać w logu wydań.
Jeśli API jest chwilowo niedostępne albo zwraca nieoczekiwaną odpowiedź, nie wydawaj nagrody w ciemno. Zwróć kod błędu, napraw przyczynę i ponów dostawę.
Pełny przykład
Przykład sprawdza podpis, pobiera dane głosu, chroni nagrodę przed ponownym wydaniem i ją nalicza. Nazwę tabeli użytkowników, pole salda i regułę wyszukiwania gracza zastąp strukturą swojego systemu.
Przed uruchomieniem przykładu skonfiguruj Webhook projektu, sprawdź GET /votes/:vote_id i zastąp SQL aktualizacji użytkownika swoim modelem kont.