Statt alle Ereignisse in deiner Erfahrung und Anfragen von Benutzern manuell zu überwachen, kannst du Webhooks einrichten, um Echtzeit-Benachrichtigungen auf einem Dritt-Messaging-Tool oder deinem benutzerdefinierten Endpoint zu erhalten, der HTTP-Anfragen empfangen kann. Dies hilft dir, deinen Benachrichtigungs-Workflow automatisieren, um manuelle Bemerkenswürdigkeiten zu reduzieren.
Webhook-Workflow
WebHooks senden Echtzeit-Benachrichtigungen oder Daten zwischen zwei verschiedenen Anwendungen oder Diensten, wie Roblox und einem Dritt-Messaging-Tool. Im Gegensatz zu traditionellen APIs, die Sie ein Client-Anwendung aufstellen müssen, um Anfragen an einen Server zu senden, um Daten zu erhalten, senden WebHooks Daten an Ihr Client-Ende, sobald ein Ereignis auftritt. Sie sind nützlich
Sobald Sie einen Webhook eingerichtet haben, sendet Roblox eine Anfrage an die Webhook-URL, die Sie angeben. Die Webhook-URL leitet dann die Anfrage an Ihre empfangende Anwendung oder Benutzer端 weiter, die dann basierend auf den Daten im Webhook-Payload handeln kann. Dies könnte beinhalten, Daten zu löschen, Benutzer zu senden oder ein anderes Ereignis zu triggern.
Unterstützte Trigger
Roblox unterstützt derzeit die folgenden Ereignis-Triggers für Benachrichtigungen:
- Subscription Cancelled - Wenn ein Benutzer eine Mitgliedschaft abbucht, wird eine Nachricht mit dem Abonnement und dem Abonnenten sowie der Gründe für die Abbuchung gesendet.
- Subscription Purchased - Wenn ein Benutzer eine Abonnement kauft, wird eine Nachricht mit dem Abonnement und dem Abonnenten gesendet.
- Subscription Refunded - Wenn ein Benutzer eine Rückerstattung für seinen Abonnement erhält, wird eine Nachricht mit dem Abonnement und dem Abonnenten gesendet.
- Abonnement erneuert - Wenn ein Benutzer ein Abonnement erneuert, wird eine Nachricht mit dem Abonnement und dem Abonnenten gesendet.
- Subscription Resubscribed - Wenn ein Benutzer zu einem Abonnement wieder abonniert, wird eine Nachricht mit dem Abonnement und dem Abonnenten gesendet.
- "Recht, vergessen zu werden" Datenlöschungsanfragen unter der Allgemeinen Datenschutzregel ( GDPR ).
For more information on subscription events and their fields, see the Cloud-API-Abonnement-Referenz.
Konfigurieren von Webhooks auf dem Creator-Dashboard
Um Benachrichtigungen über Webhooks zu erhalten, musst du einen Webhook konfigurieren, der auf bestimmte Ereignisse abonniert ist, um Benachrichtigungen auszulösen. Für Erlebnisse in deinem Besitz, können nur Gruppenbesitzer Webhook-Benachrichtigungen konfigurieren und erhalten.
Um einen Webhook einzurichten:
- Navigate to the Webhook-Sektion of the Creator-Dashboard .
- Klicken Sie auf die Schaltfläche Webhook hinzufügen .
- Schließe die Konfigurationsfelder ab:
- Webhook-URL — Gib die URL an, von der du Benachrichtigungen erhalten und eingehende Webhook-URLs von Drittunternehmen annehmen möchtest. Für weitere Informationen zu den Anforderungen, siehe Einrichtung von Webhook-URLs.
- Name — Verwende einen benutzerdefinierten Namen, um deine Konfiguration von anderen zu unterscheiden. Standardmäßig ist der Wert die gleiche wie die Webhook-URL.
- Geheimnis (optional) — Liefern Sie ein Geheimnis, wenn Sie sicher sein möchten, dass Benachrichtigungen, die Sie erhalten, von Roblox kommen. Weitere Informationen finden Sie unter Verifizieren von Webhook-Sicherheit.
- Trigger-Funktionen — Wählen Sie eine oder mehrere Optionen aus der Liste der unterstützten Trigger-Funktionen für Ereignisse, für die Sie Benachrichtigungen erhalten möchten.
- Klicken Sie auf die Schaltfläche "Änderungen speichern" .
Webhook-URLs einrichten
Du kannst ein benutzerdefiniertes HTTP-Service-Ende als deine Webhook-URL einrichten, wenn sie die folgenden Anforderungen erfüllt:
- Es muss für die Bearbeitung von Anfragen öffentlich zugänglich sein.
- Es kann POST-Anfragen behandeln.
- Es kann mit einer 2XX-Antwort innerhalb von 5 Sekunden auf die Anfrage reagieren.
- Es kann HTTPS-Anfragen behandeln.
Wenn Ihr Endpunkt eine POST-Anfrage erhält, muss er in der Lage sein:
- Extrahiere die Details, die für die Benachrichtigung aus dem Körper der POST-Nachricht erforderlich sind.
- Lesen Sie den Körper der POST-Nachricht mit den allgemeinen Details über die Benachrichtigung und spezifischen Details, die mit dem Ereignistyp auf der Benachrichtigungenverwandt sind.
For more information of the schema of POST requests to Ziehpunkt, see the Payload Schema .
Lieferung fehlgeschlagen Wiederholen Policy
Wenn eine Webhook-Benachrichtigung aufgrund von Fehlern wie Endgeräte-Unverfügbarkeit nicht an deine angegebene URL gelangen kann, versucht Roblox, die Nachricht 5 Mal mit einer festgelegten Window-Größe an die angegebene URL zu senden. Wenn die Benachrichtigung nach 5 Versuchen immer noch nicht geliefert wird, stoppt Roblox
Dritt-Party-Anforderungen
Drittsoftware-Tools haben in der Regel eigene Anforderungen an WebHooks, die Sie bei der Einrichtung Ihrer WebHook-URL beachten müssen. Sie können diese Anforderungen finden, indem Sie das Schlüsselwort "Webhook" auf der Support- oder Dokumentationssite des Ziels-Tools suchen. Für die drei unterstützten Drittsoftware-Tools sehen Sie gefolgte Profile:
WebHooks testen
Sie können testen, ob der Web-Hook, den Sie konfiguriert haben, Benachrichtigungen auf dem Creator-Dashboard erhalten kann:
Navigate to the Webhook-Konfigurationsseite.
Wählen Sie den Webhook aus, den Sie testen möchten, aus der Liste der konfigurierten Webhook.
Klicken Sie auf das Bleistift-Symbol neben dem Ziel-Webhook.
Klicken Sie auf die Schaltfläche Test-Antwort .
Dann sendet das System eine Benachrichtigung im SampleNotificationeingeben, die den Benutzer-ID des Benutzers enthält, der die Benachrichtigungenausgelöst hat, wie das folgende Beispiel-Skript zeigt:
Beispiel-Benachrichtigungsschema
Body: {
"NotificationId": "string",
"EventType": "SampleNotification",
"EventTime": "2023-12-30T16:24:24.2118874Z", // Typ: ISO 8601 Zeitmarke
"EventPayload": {
"UserId": 1 // Typ: Lang
}
}
Wenn Sie Ihren Webhook mit einem Drittdienst integrieren, können Sie ihn testen, indem Sie die Dritt URL verwenden, um zu bestätigen, dass der Dienst Benachrichtigungen von Ihrem Webhook erhalten kann. Wenn Sie beim Konfigurieren des WebHooks ein Geheimnis angeben, erzeugt es auch ein roblox-signature, das Sie verwenden können, um die Logik des WebHooks zu testen.
Webhook-Sicherheit überprüfen
Sobald Sie Ihren Server so konfiguriert haben, dass er Boots aufnehmen, beginnt er, auf jede Boots sendete an den Endpunkt zu hören. Wenn Sie ein Geheimnis bei der Konfiguration Ihres Webhook festlegen, sendet Roblox eine roblox-signature zusammen mit jeder Boots-Benachrichtigung, um Ihre Daten-Sicherheit zu helfen. Dieser W
Signature Format with Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>,v1=<signature>"
Wenn Sie kein Geheimnis für Ihren Webhook haben, enthält die von Ihnen erhaltene Signatur nur den Zeitpunkt der Anmeldung, wenn die Benachrichtigung gesendet wird:
Signature Format without Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>"
Um eine Signatur zu überprüfen:
Extrahiere die Zeitmarke und die Signaturwerte. Alle Signaturen für WebHooks mit Sekreten teilen das gleiche Format wie eine CSV-Schnur mit diesen beiden Werten, die durch die Präfixe folgen:
- t : Die Zeitmarke des Versands der Satz
- v1 : Die Signaturwert, der mit der von dem Creator-Dashboard-Konfiguration bereitgestellten geheimen Werte generiert wird. Sie können diese beiden Werte mit der split() -Funktion extrahieren, die die Zeichen basierend auf einem Delimitator, in diesem Fall der , -Zeichen, trennt.
Erstellen Sie erneut die Basisstring von roblox-signature indem Sie sie kombinieren:
- Der Zeitmarke als Strings.
- Der Zeichenzeichen . .
- Die JSON-Struktur des Körper.
Berechnen Sie einen Hash-basierten Nachrichten-Authentisierungscode (HMAC) mit der SHA256-Haschfunktion, die Sie während der Konfiguration als Schlüssel und die Basisstrung verwenden, die Sie während des Schritts 2 als Nachricht erzeugt haben. Konvertieren Sie das Ergebnis in Base64, um die erwartete Signatur zu erhalten.
Vergleichen Sie den extrahierten Signaturwert mit dem erwarteten Signaturwert. Wenn Sie die Signatur korrekt generiert haben, sollte der Wert dieselbe sein.
(Optional) Um Replay-Angriffe zu verhindern, ein Arten von Cyberangriff, bei dem Angreifer Daten interceptieren und erneut senden, um unautorisierten Zugriff zu erhalten oder bösartige Aktionen auszuführen, ist es hilfreich, den extrahierten Zeitmarkewert mit dem aktuellen Zeitmarke- und sicherzustellen, dass er innerhalb eines angemessenen Zeitlimits fällt. Zum Beispiel ist ein 10-Minuten-Fenster normalerweise ein gutes Zeitlimit.
Payload- Schema
Wenn das Zielereignis deines WebHooks ausgelöst wird, sendet es eine Anfrage an deine WebHook-URL, einschließlich Informationen über das Ereignis imPayload. AllePayloads der Anfragen teilen sich das gleiche Schema, das aus festen und variablen Feldern besteht. Dies stellt sicher, dass die in der Anfrage übermittelten Daten strukturiert und konsistent sind, so dass die empfangende Anwendung die Daten leichter verarbeiten und verwenden kann.
Die 固定付加载场景felder können dazu beitragen, die Konsistenz über alle Webhook-Anfragen zu gewährleisten, mit folgenden Feldern verfügbar:
- NotificationId , string : Ein eindeutiger Identifikator für jede Benachrichtigung, die gesendet wird. Wenn dieselbe NotificationId zweimal erhalten wird, wird sie als Duplikat betrachtet.
- EventType , string : Eine Zeichenfolge repräsentiert die Art des Ereignisses, für das die Benachrichtigung ausgelöst wurde.
- EventTime , timestamp : Ein ungefährer Zeitmarke zeigt an, wann das Ereignis ausgelöst wurde.
Die Variable Payload-Schienenfelder bieten Flexibilität für WebHooks, um verschiedene Arten von Ereignissen zu unterstützen, die enthalten:
- EventPayload , object : Enthält Informationen spezifisch für den EventType , der den Webhook ausgelöst hat. Die Struktur des 0> EventPayload0>-Schemas basiert auf der Art des Ereignisses.
Das folgende Beispiel zeigt das Loadout- Schema des Rechten auf Verbesserung Request -Ereignisses:
Beispiel- Schema für Recht auf Löschungsanfrage
Body:{
"NotificationId": "string",
"EventType": "RightToErasureRequest",
"EventTime": "2023-12-30T16:24:24.2118874Z",
"EventPayload": {
"UserId": 1, // Typ: Lang
"GameIds": [ // Typ: Ein Array von Longs
1234, 2345
]
}
}
Benachrichtigungen verwalten
Wenn Sie irgendwelche persönlich identifizierbare Informationen (personenbezogene Daten ) Ihrer Benutzer speichern, z. B. ihre Benutzer-IDs
Wenn Sie einen benutzerdefinierten Endpunkt als Ihren Webhook-Server verwenden, anstatt eines Tool, können Sie die Daten des Subjekts zum Löschen aus dem Webhook-Payload extrahieren und Ihre eigene Automatisierungs-Lösung aufbauen. Das folgende Codebeispiel bietet ein Beispiellösung und fügt Verhinderung hinzu, um Wiederholungsangriffe zu verhindern, indem die Anfrage von Roblox kommt:
Extracting PII from Payload
const crypto = require('crypto')
const express = require('express');
let app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// This is a sample only code
app.all('/*', function (req, res) {
console.log('-------- New Request Seen -------');
// 1. Extract the timestamp and signature
const shared_secret = '<Your secret>' // This can be set as an environment variable
const hmac = crypto.createHmac('sha256', shared_secret)
const roblox_signature_header = req.headers['roblox-signature'].split(',')
// 'roblox-signature' is present in all requests:
// Timestamp(t) is present in all requests, however signature value(v1) is not set unless a secret is shared during the webhook configuration.
// Fetch header component at Index 0 -> 't=' and Index 1 -> 'v1='
const timestamp = roblox_signature_header.find(e => e.startsWith('t=')).substring(2);
const extracted_signature = roblox_signature_header.find(e => e.startsWith('v1='));
// 2. Prevent Replay attack: 300 seconds window
const request_timestamp_ms = timestamp * 1000;
const window_time_ms = 300 * 1000
const oldest_timestamp_allowed = Date.now() - window_time_ms;
if (request_timestamp_ms < oldest_timestamp_allowed) {
res.status(403).send('Expired Request')
}
// 3. Validate Signature
if (extracted_signature !== undefined) {
const signature_v1 = extracted_signature.substring(3);
const message = `${timestamp}.${JSON.stringify(req.body)}`
const base64_signature = hmac.update(message).digest('base64')
if (signature_v1 !== base64_signature) {
res.status(401).send('Unauthorized Request')
}
}
// 4. Your logic to handle payload
const payloadBody = req.body
const eventType = payloadBody['EventType']
if (eventType === 'RightToErasureRequest'){
const userId = payloadBody['EventPayload']['UserId']
const gameIds = payloadBody['EventPayload']['GameIds']
const gameIdString = gameIds.toString()
console.log(`The payload: UserId=${userId} and GameIds=${gameIdString}`)
// If you store PII in data stores, use the UserId and GameIds to make a data store call to delete the information.
}
// 5. Return Response
res.json({ message: 'Processed the message Successfully' });
})
app.listen(8080, function () {
console.log('This is a Sample application')
})