Webhook
Ein Webhook liefert ein GAMEMONITORING-Ereignis direkt nach einer Aktion auf der Plattform an Ihr System. Es ist ein normaler POST-Request mit JSON-Body, damit Ihre Website, Ihr Panel oder Ihr Spielservice automatisch reagieren kann.
Für Stimm-Belohnungen richten Sie zuerst den Webhook ein und nutzen danach den eigenen Ablauf: Belohnungen für Stimmen.
Verbindung
Diese Einrichtung verknüpft ein GAMEMONITORING-Projekt mit Ihrem Handler und stellt den Signatur-Token zur Prüfung eingehender Anfragen bereit.
- Öffnen Sie Meine Projekte, erstellen Sie ein Projekt oder wählen Sie ein bestehendes aus, und gehen Sie danach zu den Webhook-Einstellungen.
- Erstellen Sie einen öffentlichen HTTPS-Endpunkt, der
POSTmitContent-Type: application/jsonannimmt und nicht weiterleitet. - Tragen Sie in den Webhook-Einstellungen die vollständige Handler-URL ein, zum Beispiel
https://panel.example.com/gamemonitoring-webhook, und speichern Sie sie. - Kopieren Sie den Signatur-Token aus demselben Block und tragen Sie ihn in Ihr Handler-Skript ein.
- Prüfen Sie im Handler
signature, verarbeiten Sie das benötigteevent_typeund geben Sie eine erfolgreiche2xx-Antwort erst zurück, nachdem das Ereignis verarbeitet wurde.
Senden Sie nach der Einrichtung einen Test-Webhook aus der Oberfläche und prüfen Sie den Zustellstatus. Für die Beispiel-URL muss Ihr Server POST auf /gamemonitoring-webhook annehmen.
Wenn der Test fehlschlägt, beginnen Sie mit der Handler-Antwort: 401 bedeutet ein Signaturproblem, 403 oder eine HTML-Challenge deutet meist auf WAF oder Bot-Protection hin, ein Timeout bedeutet, dass die URL aus dem Internet nicht erreichbar ist oder zu langsam antwortet.
Anforderungen an den Handler
- Die URL muss aus dem Internet erreichbar sein. Lokale Adressen, private Netzwerke und URLs mit Login oder Passwort sind nicht geeignet.
- HTTPS wird für Produktion empfohlen. HTTP wird unterstützt, schützt Daten bei der Übertragung aber schwächer.
- Der Handler muss
POSTund einen JSON-Body ohne Weiterleitungen annehmen. - Geben Sie
2xxerst zurück, nachdem Ihr System das Ereignis verarbeitet hat. In der Regel reicht204. - Wenn das Ereignis nicht sicher verarbeitet werden kann, geben Sie einen Fehlerstatus zurück.
3xx,4xx,5xx, Timeout oder Verbindungsfehler gelten als fehlgeschlagene Zustellung. - Wenn Sie Firewall, Bot-Schutz oder Allowlist verwenden, fügen Sie die IP-Adressen von GAMEMONITORING als Ausnahme hinzu.
- Geben Sie im Antwortkörper keine Tokens, Stack Traces, SQL-Fehler oder andere internen Details zurück. Die Handler-Antwort wird in der Oberfläche angezeigt, daher muss der Fehlertext sicher und verständlich sein.
Ereignisdaten
Jeder Webhook wird als JSON-Body mit Kernfeldern zugestellt:
event_type— welches Ereignis verarbeitet werden muss.event_id— eindeutige Ereignis-ID. Verwenden Sie sie zusammen mitevent_typefür Idempotenz und Schutz vor wiederholter Zustellung.is_test— kennzeichnet eine Testzustellung aus der Oberfläche.signature— Signatur des Ereignis-Bodys.
So lesen Sie das Beispiel: event_type zeigt, welches Ereignis verarbeitet werden muss, event_id wird vor Zustandsänderungen gespeichert, is_test: true bedeutet nur eine Zustellprüfung, und signature ist nur für die Echtheitsprüfung gedacht.
Die Verarbeitung hängt von event_type ab. Für server.vote nutzen Sie den eigenen Ablauf: Belohnungen für Stimmen.
Wenn is_test true ist, prüfen Sie die Signatur und geben 2xx zurück, ändern aber keinen Kontostand und geben keine Gegenstände aus.
Beispiel für die Handler-Antwort
Wählen Sie für jedes eingehende Ereignis ein klares Ergebnis:
204 No Content— die Signatur ist korrekt und das Ereignis wurde verarbeitet. Nutzen Sie dieselbe Antwort für Testzustellungen und bereits verarbeitete Duplikate.400 Bad Request— Pflichtfelder fehlen. Das deutet auf einen Handler-Fehler oder unerwarteten Body hin; Business-Logik darf nicht laufen.401 Unauthorized— die Signatur ist falsch. Führen Sie keine API-Requests aus, ändern Sie keine Datenbankdaten und geben Sie keine Belohnungen aus.500 Internal Server Error— Ihre Datenbank, Queue oder interne Systeme sind vorübergehend nicht verfügbar. Die Zustellung bleibt fehlgeschlagen und kann nach der Korrektur erneut gesendet werden.
Beispiel: Wenn der Handler das Ereignis empfangen, die Signatur geprüft, event_type + event_id gespeichert und das Ereignis verarbeitet hat, kann er sofort 204 zurückgeben. Ist die Datenbank nicht verfügbar, geben Sie 500 zurück, damit die Zustellung nicht zu früh als erfolgreich gilt.
Signaturprüfung
Die Signatur befindet sich im Feld signature. Prüfen Sie sie vor jeder Geschäftslogik, vor API-Anfragen und vor Datenbankänderungen.
Nehmen Sie zur Prüfung alle Felder des Ereignisses außer signature, sortieren Sie die Schlüssel alphabetisch und bauen Sie eine Zeichenkette key=value, verbunden mit &. Boolesche Werte werden als true oder false geschrieben.
Für das Beispiel oben wird der Signatur-String nur aus event_id, event_type und is_test gebaut. Danach berechnen Sie HMAC-SHA256 mit dem Token aus den Webhook-Einstellungen und vergleichen ihn mit signature aus dem Request.
Vorberechnete Signaturen in den Beispielen nutzen den Demo-Token paste-webhook-token-here. In Ihrem Handler verwenden Sie den Token aus den Webhook-Einstellungen.
Im Handler:
- bauen Sie die Signatur-Zeichenkette aus sortierten Schlüsseln;
- berechnen Sie
HMAC-SHA256mit dem Signatur-Token; - vergleichen Sie das Ergebnis mit
signatureüber eine Funktion mit konstanter Vergleichszeit:hash_equalsin PHP,timingSafeEqualin Node.js odercompare_digestin Python; - geben Sie
401zurück, wenn die Signatur ungültig ist.
Minimaler Handler
Dieses Beispiel akzeptiert jeden Webhook: Es liest JSON, prüft signature, verarbeitet Testzustellungen, validiert Kernfelder und gibt 204 zurück. Ereignisspezifische Logik fügen Sie nach der Signaturprüfung hinzu.
Wiederholte Zustellung und Deduplikation
Webhook-Zustellung arbeitet nach dem At-least-once-Modell: dasselbe Ereignis kann mehr als einmal ankommen. Jede Aktion, die den Zustand Ihres Systems ändert, muss anhand von event_type + event_id idempotent sein.
Speichern Sie das Paar event_type und event_id in einer Tabelle mit eindeutigem Schlüssel. Wenn der Datensatz bereits existiert, wurde das Ereignis schon verarbeitet: geben Sie 204 zurück und ändern Sie den Zustand nicht erneut.
Wenn ein Webhook Ihre Datenbank ändert, speichern Sie das Ereignis und führen Sie die Aktion in einer Transaktion aus. Wenn der Handler eine Belohnung ausgibt, müssen das Einfügen von event_type + event_id und das Belohnungsupdate gemeinsam erfolgreich sein. Wenn das Einfügen keine neue Zeile erzeugt, wurde das Ereignis bereits verarbeitet.
Verwenden Sie Nickname, Benutzer-ID oder Server-ID nicht als Deduplikationsschlüssel: ein Benutzer kann verschiedene Ereignisse auslösen oder eine erlaubte Aktion später wiederholen. Der Schlüssel muss event_type + event_id sein.
Beispiel: Der Handler hat die Belohnung ausgegeben, aber die Verbindung brach ab, bevor GAMEMONITORING 204 erhielt. Später wird die Zustellung wiederholt. Ihr Handler muss die bereits gespeicherten event_type + event_id finden, keine zweite Belohnung ausgeben und 204 zurückgeben.
Wenn der Handler das Ereignis vorübergehend nicht verarbeiten kann, geben Sie eine fehlgeschlagene Antwort zurück. Nach Behebung der Ursache kann die Zustellung aus der Oberfläche wiederholt werden, wenn dies für das Ereignis verfügbar ist.
Tests und erneutes Senden
Eine Testzustellung (is_test: true) prüft Handler-URL, Signatur und HTTP-Antwort. Der Handler sollte denselben Verarbeitungspfad durchlaufen: JSON lesen, signature prüfen, is_test erkennen und eine erfolgreiche 2xx-Antwort zurückgeben.
Ein Testereignis darf keinen Kontostand, kein Inventar, keine Rollen, keine Abonnements und keine anderen produktiven Daten ändern. Ein technisches Log und die Antwort 204 reichen für den Test aus.
Wenn die Zustellung fehlschlägt, zeigt die Oberfläche Status, HTTP-Code und Handler-Antwort an. Nach Behebung der Ursache kann eine fehlgeschlagene Zustellung erneut gesendet werden, wenn dies für das Ereignis verfügbar ist.