Nagrody za głosy
Nagrody za głosy używają zdarzeń Webhook server.vote i project.vote: handler odbiera zdarzenie, pobiera dane głosu przez API i wydaje nagrodę tylko jeden raz.
Najpierw skonfiguruj Webhook projektu i weryfikację signature. Dane głosu są pobierane 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.votelubproject.vote. - Użyj
event_idjako ID głosu. - Pobierz dane głosu przez GET /votes/:vote_id i znajdź gracza w swoim systemie.
- W jednej transakcji zastosuj ochronę przed ponownym przetworzeniem po
event_type+event_idi wydaj nagrodę tylko dla nowego zdarzenia. - Jeśli nagrody nie da się bezpiecznie wydać, zwróć odpowiedź z błędem. Po usunięciu przyczyny ponów dostawę z interfejsu.
Przykład nagrody
Załóżmy, że gracz PlayerName zagłosował na serwer o ID 1, a Twój 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-aba43dde3e4b, otrzymuje nick, serwer oraz użytkownika i znajduje lokalne konto. - W transakcji handler zapisuje
event_type+event_iddla ochrony przed ponownym przetworzeniem. - Dla nowego zdarzenia handler dodaje
100monet w tej samej transakcji. - Przy ponownej dostawie handler znajduje już zapisane zdarzenie, nie wydaje nagrody drugi raz i zwraca
204.
Ten sam scenariusz pasuje też do przedmiotów, ról, czasu VIP, kodów promocyjnych lub zadań w wewnętrznej kolejce.
Zdarzenie głosu
Dla głosu na serwer GAMEMONITORING wysyła server.vote, a dla głosu na projekt — project.vote. Body zdarzenia 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.
Jak używać pól: response.nickname pomaga znaleźć konto gracza w Twojej bazie, response.server.id wybiera regułę nagrody dla serwera, a response.user.id można zapisać w logu nagród jako ID użytkownika GAMEMONITORING, który oddał głos.
Jeśli API jest chwilowo niedostępne albo zwraca nieoczekiwaną odpowiedź, nie wydawaj nagrody bez weryfikacji. Zwróć kod błędu, napraw przyczynę i ponów dostawę z interfejsu.
Krok 3. Handler nagrody za głos
Przykład kontynuuje podstawowy handler: sprawdza podpis, pobiera dane głosu, chroni zdarzenie przed ponownym przetworzeniem i dodaje nagrodę w jednej transakcji. 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.