Tüm etkinliklerinizi deneyiminizde ve kullanıcıların isteklerinden manuel olarak izlemek yerine, webhook'ları ayarlayabilirsiniz, böylece üçüncü parti mesajlaşma aracı veya kullanıcınızın özelindeki istemci bağlantısını gerçek zamanlı bildirimler almak için alabilirsiniz. Bu, manuel çalışma iş akışınızı otomatikleştirerek manuel çalışma işlemlerinin
Webhook İşlemi
Webhook'lar, Roblox veya üçüncü taraf bir mesajlaşma aracı gibi iki farklı uygulama veya hizmet arasında gerçek zamanlı bildirimler veya veriler gönderir. Geleneksel API'ler, bir istemeyi bir sunucuya göndermek için bir klişe uygulamaya sahip olmalınız, b
Bir webhook oluşturduktan sonra, bir hedef etkinliği oluştuğunda, Roblox, sağladığınız webhook URL'si aracılığıyla bir istek gönderir. Webhook URL'si, webhook'in içindeki verilere dayanarak isteği alıcı uygulamanıza veya özel uç noktasına yönlendirir. Bu, webhook'un yüklenmesi, kullanıcıyı onaylaması
Desteklenen Triggerler
Roblox şu anda bildirimler için şu etkinlik tetikleyicilerini desteklemektedir:
- Abonelik Satın Alındı - Bir kullanıcı bir abonelik satın aldığında, abonelik ve aboneler içeren bir mesaj gönderilir.
- Abonelik İade Edildi - Bir kullanıcının aboneliği için bir iade alındığında, abone ve abone içeren bir mesaj gönderilir.
- Abonelik Yenilenmiştir - Bir kullanıcı abonesini yenilemezse, abone ve abone içeren bir mesaj gönderilir.
- Abonelik Yeniden Abonelendi - Bir kullanıcı aboneliğe tekrar abone olduğunda, abone ve aboneler içeren bir mesaj gönderilir.
- "Unutulmak hakkında haklı olmak" data deletion requests under the General Data Protection Regulation ( GDPR ).
Abonelik olayları ve alanları hakkında daha fazla bilgi için Bulut API Aboneliği referansını görün.
Yaratıcı Dashboard'ında Webhook'ları Yapılandırma
Webhook'lar aracılığıyla bildirim almak için, bir webhook'a abone olarak belirli etkinlikler için bildirim göndermeyi yapmanız gerekir. Grubunuzun deneyimleri için sadece grubunuzun sahipleri, webhook'ları yapılandırabilir ve alabilir.
Bir webhook oluşturmak için:
- Navigate to the Webhook'larınız section of the Yaratıcı Dashboard .
- Click the Webhook Ekleme Düğmesi button.
- Yapılandırma alanlarını tamamla:
- Webhook URL'si — Bildirimleri alacağınız URL'yi belirtin ve üçüncü parti entitelerinden gelen webhook URL'lerini kabul edin. İhtiyaçlar için daha fazla bilgi için, Webhook URL'lerini Yükleme bakın.
- İsim — Yapılandırmanızı diğerlerinden ayırmak için özel bir isim kullanın.Varsayılan olarak değer, varsayılan olarak Webhook URL ile aynıdır.
- Gizli (isteğe bağlı) — Roblox'tan aldığınız bildirimlerin gizli olduğunu doğrulamak için bir gizli sağlayın. For more information, see Webhook Güvenliğini Doğrulama.
- Tetikleri etkinleştirir — Etkinleştirileceği etkinliklerin listesinden bir veya daha fazla seçenek seçin.
- Değişiklikleri Kaydet'e tıklayın.
Webhook URL'lerini ayarlama
Webhook URL'siz kullanıcınız, aşağıdaki gereksinimleri yerine getirirse, özel bir HTTP hizmeti sunucusu ayarlayabilirsiniz:
- İşlemlerin işlenmesi için herkese açık olmalıdır.
- POST isteklerini ele alabilir.
- 5 saniye içinde bir 2XX yanıtıyla isteğe yanıt verebilir.
- HTTPS isteklerini ele alabilir.
Uçbunuz bir POST talepalırsa, şu şekilde olmalıdır:
- POST mesajının vücudundan gelen bildirimin ayrıntılarını çıkarın.
- Haber bildiriminin vücudunu okuyun, bildirimin notifikasyonu ile ilgili genel ayrıntılar ve etkinlik türüne ilişkin özel ayrıntılar.
Post isteklerinin işlenmesi için schema'yu daha fazla bilgi için Payload Schema bakın.
Kurye Başarısızlığı Yeniden Deneme Poligonu
Bir webhook bildirimi, yanılma gibi hatalar nedeniyle özel URL'nize ulaşmayı başarısız, Roblox tekrar göndermeyi deneyecek ve belirli bir pencere boyutu kullanarak mesajı yeniden gönderecek. Eğer bildirim hala baş
Üçüncü Taraf Gereksinimleri
Üçüncü parti araçları genellikle webhook URL'nizi ayarlarken takip etmeniz gereken webhook'lar için kendi gereksinimlerine sahiptir. Bu gereksinimleri, hedef araçlarının destek veya belgelerinde "webhook" anahtar kelimesini arayarak bulabilirsiniz. Üç desteklenen üçüncü parti araçlar için, takip edilengörüntüde görüntülenen görüntüde görüntülenen görüntüde görünt
Webhook'ları Test Ediliyor
Yapılandırdığınız webhook'un Yaratıcı Dashboard üzerinde bildirimleri alabilip alamayacağını test edebilirsiniz:
Navigate to the Webhooklar konfigürasyon sayfasına.
Yapılandırılmış webhook'lar listesinden test etmek istediğiniz webhook'u seçin.
Hedef webhook'ın yanındaki kalem simgesine tıklayın.
Click the Test Cevabını İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi İzlemeyi
Sistem, bir bildirimi SampleNotification yazgönderir, bu da bildirimi etkileyen kullanıcının Kullanıcı ID 'ini içerir, aşağıdaki örnek şeması gibi gösterildiği gibi:
Örnek bildirim notu
Body: {
"NotificationId": "string",
"EventType": "SampleNotification",
"EventTime": "2023-12-30T16:24:24.2118874Z", // Tür: ISO 8601 Zamanlayıcı
"EventPayload": {
"UserId": 1 // Tür: Uzun
}
}
Eğer webhook'unuzu üçüncü bir hizmetle entegre ediyorsanız, webhook'unuzun hizmet alabilmesini onay etmek için üçüncü parti URL'sini kullanarak test edebilirsiniz. Webhook'u yapılandırırken gizli bir roblox-signature oluşturur ve webhook'un logik'ini test etmek için kullanabilirsiniz.
Webhook Güvenliğini Doğrulama
Sunucunuzu yükleme alanlarına almak için yapılandırdıktan sonra, gönderilen her yükleme alanı için dinlemek başlar. Webhook'unuzu yapılandırırken gizli bir kullanıcıyı korumak için Roblox, her webhook bildiriminin Roblox tarafından
Signature Format with Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>,v1=<signature>"
Webhook'unuzun bir gizli anahtarı yoksa, bildirim gönderildiğinde sadece bildirimin sağlayıcısı tarafından imzalanır:
Signature Format without Secret for Custom Endpoints
"roblox-signature": "t=<timestamp>"
Bir imzayı doğrulamak için:
Zaman damgası ve imza değerlerini çıkarın. Tüm webhook'ların gizli imzaları bu iki değerin ardındaki bir CSV yoluyla aynı biçimi paylaşır:
- t : Bildirim gönderildiğindeki zaman damgası değeri.
- v1 : Yaratıcı Dashboard'ın sağladığı gizli imzayı kullanarak imzalanan değer oluşturulur. Bu iki değeri çıkarmak için split() işlevini kullanabilirsiniz, bu durumda, yazın delimitleyicisi olarak ayrılan , karakteri.
roblox-署 ile şu anki strung'u yeniden oluşturulur:
- Zaman damgası bir diziolarak.
- Dönem karakteri . .
- İstek bedeninin JSON dizisi.
Şifreli bir mesaj doğrulama kodu (HMAC) oluşturmak için, yükleme aşamasında belirlediğiniz anahtar ve varsayılanınızı kullanarak SHA256 hasiş işlevini kullanarak bir mesajı doğrulayın. Sonuçu Base64 biçimine dönüştürün, ki beklendiği imzayı alın.
Çıkarılan imza değerini bekleilenen imza ile karşılaştırın. Eğer imzayı doğru oluşturursanız, değer aynı olmalıdır.
(Opcional) Yeniden oynatma saldırılarını önlemek için, saldırganların verileri alıp yeniden göndererek geçersiz erişim elde etmeye veya kötü niyetli eylemler yapmaya kullanılan bir tür siber saldırı, aşağıdaki grafikteki çıkarılan güncelleme değerine karşılaştırılırsa yaygın bir iyi nedenlidir. Ö
Ödeme Şeması
Webhook'unuzun hedef etkinliği tetiklendiğinde, etkinliğinizin URL'sine bir istek gönderir, kişiselleştirilmiş alan adını içeren bir istek gönderir. Tüm isteklerin paylaşılan aynı schema'yı vardır. Bu, verilerinizin paylaşıldığından emin olur ve alıcı uygulamasının verileri işlemesi ve kullanmasını kolaylaştırır.
dizinlenmiş ödeme alanı ile tüm webhook isteklerinde konsistansı korumak için kullanılabilen şemalar yardımcı olabilir:
- NotificationId, string : Her gönderilen bildirim için benzersiz bir kimlik. Aynı NotificationId iki kez alınırsa, bu çift şeklinde kabul edilir.
- EventType , string : Bir dizi, bildirimin tetiklendiği olayın türünü temsil eder.
- EventTime , timestamp : Etkinliğin tetiklendiğini gösteren yaklaşık bir tarih gösterir.
Çeşitli etkinlikleri içeren webhook'lar için esnekliği sağlayan çeşitli etkinlik değiştirici alanları sunar
- EventPayload , object : Webhook'ın başlatıldığına ilişkin bilgi içerir. EventType şemasının yapısı, etkinleştiriciyi tetikleyen webhook'ın türüne bağlı olarak değişir.
Aşağıdaki örnek, Right To Erasure Request etkinliğinin yükleme şemasını gösterir:
Silme İsteği için Örnek Şema
Body:{
"NotificationId": "string",
"EventType": "RightToErasureRequest",
"EventTime": "2023-12-30T16:24:24.2118874Z",
"EventPayload": {
"UserId": 1, // Tür: Uzun
"GameIds": [ // Tür: Uzunların bir matrisi
1234, 2345
]
}
}
Bildirimleri Ele Alma
Eğer kullanıcılarınızın Kişisel Kimliklendirilebilir Bilgi (Kişisel Tanıtıcı Bilgiler) ile ilgili herhangi bir
Üçüncü parti bir eklenti olmadan webhook sunucunuz bir özel URL'yi kullanarak, veri nesneyini webhook'a bağlantısından çıkarabilir ve kendi otomasyon çözümünüzü oluşturabilirsiniz. Aşağıdaki kod örneği, bir istemin Roblox'tan geldiğini doğrulayarak gösterim sırasını ekler ve yeniden oynatma saldırılarını güvenli bir ş
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')
})