Belohnungen für Stimmen
Belohnungen für Stimmen nutzen das Webhook-Ereignis server.vote: Ihr Handler empfängt das Ereignis, ruft Stimmdaten über die API ab, findet den Spieler in Ihrem System und gibt die Belohnung genau einmal aus.
Um diese Methode zu integrieren, richten Sie zuerst den Projekt-Webhook ein und prüfen signature. Stimmdaten werden über GET /votes/:vote_id abgefragt.
Ablauf
- Nehmen Sie das Webhook-Ereignis an und prüfen Sie signature. Wenn is_test
trueist, geben Sie204zurück, ohne die Stimme abzurufen und ohne eine Belohnung auszugeben. - Stellen Sie sicher, dass
event_typeserver.voteist. - Lesen Sie
event_id: fürserver.voteist das die ID der Stimme. - Rufen Sie Stimmdaten über GET /votes/:vote_id ab und finden Sie den Spieler in Ihrem System.
- Wenden Sie den Schutz vor erneuter Verarbeitung über
event_type+event_idan und geben Sie die Belohnung in derselben Transaktion aus. - Wenn die Belohnung nicht sicher ausgegeben werden kann, geben Sie eine fehlgeschlagene Antwort zurück, beheben Sie die Ursache und wiederholen Sie die Zustellung aus der Oberfläche.
Belohnungsbeispiel
Angenommen, Spieler PlayerName hat für den Server mit ID 1 gestimmt und Ihr System soll 100 Münzen gutschreiben.
- GAMEMONITORING sendet einen Webhook mit
event_type: server.voteundevent_id: 9824cabb-2203-437e-9b6c-aba43dde3e4b. - Ihr Handler prüft signature. Bei falscher Signatur gibt er
401zurück und stoppt. - Der Handler ruft
GET /votes/9824cabb-2203-437e-9b6c-aba43dde3e4bauf und erhält Nickname, Server und Benutzer. - In Ihrer Datenbank sucht der Handler das lokale Konto per Nickname oder eigener Kontoverknüpfung.
- In einer Transaktion wendet der Handler den Schutz vor erneuter Verarbeitung über
server.vote+event_idan und schreibt100Münzen gut. - Verarbeiten Sie die erneute Zustellung desselben Ereignisses nach denselben Regeln zum Schutz vor erneuter Verarbeitung.
Derselbe Ablauf eignet sich auch für Gegenstände, Rollen, VIP-Zeit, Promocodes oder interne Queues.
Stimm-Ereignis
Wenn ein Server eine Stimme erhält, sendet GAMEMONITORING das Ereignis server.vote. Der Body enthält nur Zustelldaten: event_type, event_id, is_test und signature. Vollständige Stimmdaten werden separat abgerufen.
event_id ist in diesem Ereignis die ID der Stimme. Verwenden Sie den Webhook-Body nicht als Quelle für Nickname, Server oder Benutzer: diese Daten kommen aus der API.
Stimmdaten abrufen
Verwenden Sie event_id als vote_id und rufen Sie die Stimmdaten über GET /votes/:vote_id ab:
Für die Belohnung benötigen Sie normalerweise response.nickname, response.server und öffentliche Daten aus response.user. Wenn die Belohnung von einem bestimmten Server abhängt, prüfen Sie immer response.server.id.
Beispiel-Zuordnung: response.nickname findet das Spielerkonto in Ihrer Datenbank, response.server.id wählt die Belohnungsregel für den Server, und response.user.id kann im Belohnungslog gespeichert werden.
Wenn die API vorübergehend nicht verfügbar ist oder eine unerwartete Antwort liefert, geben Sie keine Belohnung ungeprüft aus. Geben Sie einen Fehlercode zurück, beheben Sie die Ursache und senden Sie die Zustellung erneut.
Vollständiges Beispiel
Das Beispiel prüft die Signatur, ruft Stimmdaten ab, verhindert doppelte Belohnungen und schreibt die Belohnung gut. Ersetzen Sie Benutzertabelle, Kontostand-Feld und Spieler-Suche durch die Struktur Ihres Systems.
Vor dem Start des Beispiels richten Sie den Projekt-Webhook ein, prüfen GET /votes/:vote_id und ersetzen die SQL-Updates durch Ihr Kontomodell.