Invece di monitorare manualmente tutti gli eventi nella tua esperienza e richieste dagli utenti, puoi configurare webhook per ricevere notifiche in tempo reale su un'applicazione di messaggi in terze parti o il tuo punto di interfaccia personalizzato che può ricevere richieste HTTP. Ciò ti aiuta a automatizzare il tuo flusso di lavoro di notifica per ridurre il lavoro di gestione manuale delle notifiche.
Workflow Webhook
I webhook inviano notifiche in tempo reale o dati tra due applicazioni o servizi diversi, come Roblox e uno strumento di messageria di terze parti. A differenza delle API tradizionali, che richiedono di configurare un'applicazione client per inviare richieste a un server per ricevere dati, i webhook inviano dati al tuo punto di interruzione client come appena si verifica un evento. Sono utili per automatizzare i
Una volta configurato un webhook, ogni volta che si verifica un evento target, Roblox invia una richiesta all'URL del webhook che Fornire. L'URL del webhook poi reindirizza la richiesta al tuo applicativo di destinazione o punto di fine destinazione, che può agire in base ai dati inclusi nel webhook. Ciò potrebbe includere l'eragliamento dei dati per il RGPD, l'invio di una conferma all'utente o l'attivazione di un altro evento.
Triggers supportati
Roblox supporta attualmente i seguenti trigger di eventi per le notifiche:
- Iscrizione Cancellata - Quando un utente puòcella un abbonamento , viene inviato un messaggio contenente il abbonamento e l'iscritto, nonché il motivo fornito per la cancellazione.
- Istruzione acquistata. - Quando un utente acquista un abbonamento, viene inviato un messaggio contenente l'abbonamento e l'abbonato.
- Istruzioni per il rimborso della sottoscrizione « Subscriber Refunded» - Quando un utente riceve un rimborso per la sua sottoscrizione, un messaggio viene inviato contenente la sottoscrizione e l'utente.
- Iscrizione Rinnovata - Quando un utente rinnova un abbonamento, un messaggio viene inviato contenente l'abbonamento e l'iscritto.
- Resubscription Resubscribed - Quando un utente resubscribe a un abbonamento, un messaggio viene inviato contenente l'abbonamento e l'utente.
- "Diritto di essere dimenticato" richieste di cancellazione dei dati ai sensi del Regolamento generale sulla protezione dei dati ( GDPR ).
For more information on subscription events and their fields, see the Cloud API Subscription reference.
Configurazione dei Webhook sulla Dashboard del Creatore
Per ricevere notifiche tramite webhook, è necessario configurare un webhook che si abbonisce a determinati eventi per l'attivazione delle notifiche. Per le esperienze di proprietà del gruppo, solo i proprietari del gruppo possono configurare e ricevere le notifiche webhook.
Per impostare un webhook:
- Vai alla sezione Webhook della Dashboard del Creatore.
- Click the Aggiungi Webhook button.
- Completa i campi di configurazione:
- URL del webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook webhook
- Nome — Usa un nome personalizzato per differenziare la tua configurazione da quella di altri. Per impostazione predefinita, il valore è lo stesso dell'URL del Webhook.
- Segreto (opzionale) — Fornisci un segreto se vuoi verificare che le notifiche che ricevi provengono da Roblox. Per ulteriori informazioni, vedi Verifica della sicurezza del webhook.
- Trigger) — Scegli uno o più opzioni dalla lista di trigger supportati degli eventi per cui vuoi ricevere le notifiche.
- Click the Salva modifiche button.
Configurazione delle URL di Webhook
Puoi configurare un punto di interfaccia HTTP personalizzato come URL del tuo webhook, a patto che soddisfi i seguenti requisiti:
- Deve essere pubblicamente accessibile per gestire le richieste.
- Può gestire le richieste POST.
- Può rispondere alla richiesta con una risposta 2XX entro 5 secondi.
- Può gestire richieste HTTPS.
Quando il tuo punto di interesse riceve una RichiestaPOST, deve essere in grado di:
- Estrai i dettagli richiesti sulla notifica dal corpo del MessaggioPOST.
- Leggi il corpo del messaggio POST con i dettagli generici sulla notifica e i dettagli specifici relativi al tipo di evento nella Notifiche.
For more information of the schema of POST requests to gestire, see the Payload Schema .
Politica di riprova della consegna dei falliti
Quando una notifica di webhook non riesce a raggiungere l'URL specificato a causa di errori come l'indisponibilità dell' endpoint, Roblox riprova l'invio del messaggio all'URL specificato 5 volte utilizzando una dimensione di finestra fissa. Se la notifica non viene ancora inviata dopo 5 tentativi, Roblox interrompe l'
Requisiti di terze parti
Gli strumenti di terze parti di solito hanno i loro requisiti per i webhook che devi seguire quando impostare l'URL del webhook. Puoi trovare questi requisiti cercando la parola chiave "webhook" sul sito di supporto o di documentazione dell'strumento target. Per i tre strumenti di terze parti supportati, vedi quanto Seguendo:
Webhook di prova
Puoi testare se il webhook che hai configurato può ricevere notifiche con successo sulla Dashboard del Creatore :
Vai alla pagina di configurazione Webhook.
Seleziona l'hook web che vuoi testare dalla lista di hook web configurati.
Fai clic sull'icona del pennello accanto all'evento target webhook.
Click the Risposta di prova button.
Il sistema invia quindi una notifica nel inserisci / scriviSampleNotification, che include l' User ID dell'utente che attiva la Notifiche, come mostra il seguente esempio di schema:
schema di notifica di esempio
Body: {
"NotificationId": "string",
"EventType": "SampleNotification",
"EventTime": "2023-12-30T16:24:24.2118874Z", // Tipo: ISO 8601 Timestamp
"EventPayload": {
"UserId": 1 // Tipo: Lungo
}
}
Se stai integrando il tuo webhook con un servizio di terze parti, puoi testarlo utilizzando l'URL del terze parti per confermare che il servizio può ricevere con successo le notifiche dal tuo webhook. Se fornisci una chiave di accesso segreta quando configuri il webhook, genera anche un roblox-signature che puoi utilizzare per testare la logica roblox-signature.
Verifica della sicurezza del webhook
Una volta configurato il tuo server per ricevere i carichi utile, inizia a ascoltare qualsiasi carico utile inviato all'endpoint. Se hai impostato una firma segreta quando configuri il tuo webhook, Roblox invia una roblox-signature insieme a ogni notifica webhook per aiutare a proteggere la tua sicurezza dei dat
Signature Format with Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>,v1=<signature>"
Se non hai un segreto per il tuo webhook, la firma che ricevi contiene solo il valore dell'ora sull'invio della notifica:
Signature Format without Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>"
Per verificare una firma:
Estrai i valori di timestamp e firma. Tutte le firme per webhook con segreti condividono lo stesso formato di una stringa CSV con questi due valori dopo i prefissi:
- t : Il valore dell'ora sull'invio della notifica.
- v1 : Il valore della firma generato utilizzando la configurazione della dashboard del creatore. Puoi estrarre questi due valori utilizzando la funzione split(), che separa la stringa basata su un separatore, in questo caso il personaggio ,.
Ricrea la stringa di base di roblox-signature unendo:
- L'UTC come Stringa.
- Il carattere periodico . .
- La stringa JSON del corpo della richiesta.
Calcola un codice di autenticazione del messaggio basato su un hashing (HMAC) con la funzione di hashing della chiave e della base string che hai definito durante la configurazione come chiave e la base string che hai generato attraverso la fase 2 come Messaggio. Converti il risultato in Base64 per ottenere la firma prevista.
Confronta il valore della firma estratto con la firma richiesta. Se hai generato la firma correttamente, il valore dovrebbe essere lo stesso.
(Facoltativo) Per prevenire gli attacchi di riproduzione, un tipo di attacco informatico in cui gli attaccanti intercettano e inviano nuovi dati per ottenere l'accesso non autorizzato o eseguire azioni dannose, è utile confrontare il valore dell'UTC estratto con l'UTC attuale e assicurarsi che caduta entro un limite di tempo ragionevole. Ad esempio, una finestra di 10 minuti di solito è un buon limite di tempo ragionevole.
Pagamento della schermata
Quando si attiva l'evento target della tua webhook, invia una richiesta all'URL della webhook, tra cui informazioni sull'evento nel payload. Tutti gli payload delle richieste condividono lo stesso schema che consiste in campi fissi e variabili. Ciò garantisce che i dati trasferiti nel payload siano strutturati e coerenti, rendendo più facile per l'applicazione di destinazione elaborare e utilizzare i dati.
I schermi di proprietà fissa possono aiutare a mantenere la coerenza su tutte le richieste webhook, con i seguenti campi disponibili:
- NotificationId , string : Un identificatore unico per ciascuna notifica inviata. Se lo stesso NotificationId viene ricevuto due volte, viene considerato duplicato.
- EventType , string : Una string rappresenta il tipo di evento per cui la notifica è stata attivata.
- EventTime , timestamp : Indica un timestamp approssimativo che indica quando è stato attivato l'evento.
I campi della variabile 載入場景 forniscono flessibilità per i webhook per accogliere varie tipi di eventi, tra cui:
- EventPayload , object : Contiene informazioni specifiche per il EventType che ha attivato l'hook web. La struttura della 0> EventPayload0> schema varia in base al tipo di evento.
L'esempio seguente mostra lo schema del carico del Right To Erasure Request evento:
Script di esempio per la Diritto alla richiesta di cancellazione
Body:{
"NotificationId": "string",
"EventType": "RightToErasureRequest",
"EventTime": "2023-12-30T16:24:24.2118874Z",
"EventPayload": {
"UserId": 1, // Tipo: Lungo
"GameIds": [ // Tipo: un array di Longs
1234, 2345
]
}
}
Notifiche di gestione
Se memorizzi qualsiasi Personalmente Identificabile Information (Informazioni di identificazione personale (PII)) dei tuoi utenti, come i loro ID utente, devi eliminare questa informazione quando un utente inv
Se usi un punto di interruzione personalizzato come tuo server webhook invece di uno strumento di terze parti, puoi estrarre i dati soggetti alla eliminazione dal punto di interruzione webhook e creare la tua soluzione di automazione. Il seguente esempio di codice fornisce un'esempio di soluzione e aggiunge la prevenzione alle attacchi di riproduzione verificando che la richiesta venga dal Roblox:
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')
})