Webhook bildirimleri

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oyununuzdaki tüm olayları ve kullanıcıların isteklerini manuel olarak izlemek yerine, HTTP isteklerini alabilen özel bir uç noktada veya üçüncü taraf bir mesajlaşma aracında gerçek zamanlı bildirimler almak için webhook'lar kurabilirsiniz. Bu, bildirimleri yönetim iş akışınızı otomatikleştirmenize yardımcı olur ve manuel bildirim yönetimi çabasını azaltır.

Webhook iş akışı

Webhook'lar, Roblox ile üçüncü taraf bir mesajlaşma aracı gibi iki farklı uygulama veya hizmet arasında gerçek zamanlı bildirimler veya veriler gönderir. Geleneksel API'lerin aksine, veri almak için bir istemci uygulaması kurmanızı gerektirmeden, webhook'lar bir olay gerçekleştiği anda veriyi istemci uç noktanıza gönderir. Bu, ekip üyelerinizle işbirliği yapmak için kullandığınız üçüncü taraf uygulamalarla Roblox arasında iş akışlarını otomatikleştirmek için faydalıdır, çünkü gerçek zamanlı veri paylaşımı ve işlenmesine olanak tanır.

Webhook'unuzu kurduğunuzda, hedef bir olay gerçekleştiğinde, Roblox sağladığınız webhook URL'sine bir istek gönderir. Webhook URL'si daha sonra isteği alıcı uygulamanıza veya özel uç noktanıza yönlendirir; burada webhook yükünde dahil edilen verilere dayanarak işlem yapabilirsiniz. Bu, GDPR için verileri silmeyi, kullanıcıya bir onay göndermeyi veya başka bir olayı tetiklemeyi içerebilir.

Desteklenen tetikleyiciler

Roblox şu anda aşağıdaki olay tetikleyicilerini desteklemektedir.

Abonelik

  • Abonelik Yenilendi - Bir kullanıcı bir aboneliğe yeniden abone olduğunda, abonelik ve abone bilgilerini içeren bir mesaj gönderilir.
  • Abonelik Yenilendi - Bir kullanıcı bir aboneliği yenilediğinde, abonelik ve abone bilgilerini içeren bir mesaj gönderilir.
  • Abonelik İade Edildi - Bir kullanıcı aboneliği için bir iade aldığında, abonelik ve abone bilgilerini içeren bir mesaj gönderilir.
  • Abonelik Satın Alındı - Bir kullanıcı bir abonelik satın aldığında, abonelik ve abone bilgilerini içeren bir mesaj gönderilir.
  • Abonelik İptal Edildi - Bir kullanıcı bir aboneliği iptal ettiğinde, abonelik ve abone bilgilerini içeren, iptalin nedenine dair bilgi de içeren bir mesaj gönderilir.

Abonelik olayları ve alanları hakkında daha fazla bilgi için Abonelik referansına bakın.

Uyum

Ticaret

  • Ticaret Ürün Sipariş İadesi - Bir kullanıcı ticaret ürünü siparişinin iadesini aldığında veya siparişi iptal edildiğinde.
  • Ticaret Ürün Sipariş Ödendi - Bir kullanıcı ticaret ürünü siparişinin ücretini ödediğinde. Lütfen, kopya webhook olaylarının mümkün olduğunu unutmayın, bu nedenle olayları benzersiz ticaret sipariş ID'sini kullanarak temizlemeniz gerekir.

Creator Dashboard'da webhook'ları yapılandırma

Webhook'lar aracılığıyla bildirim almak için, belirli olaylara abone olan bir webhook yapılandırmanız gerekir. Grup tarafından sahip olunan oyunlar için yalnızca grup sahipleri webhook bildirimlerini yapılandırabilir ve alabilir.

Bir webhook ayarlamak için:

  1. Creator Hub üzerinde deneyiminizi seçin.

  2. Yapılandır altında Webhook'lar seçeneğini seçin ve Webhook Ekle'ye tıklayın.

    Webhook URL'si sağlayıcınızdan gelecektir. Örneğin, bir Slack URL'si muhtemelen şöyle görünür:


    https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
  3. Webhook URL'nizi ve bir ad girin.

  4. (Opsiyonel) Bildirimlerin Roblox'tan geldiğinden emin olmaya yardımcı olan bir gizli anahtar dahil edin. Daha fazla bilgi için Webhook güvenliğini doğrula bölümüne bakın.

  5. Bildirim almak istediğiniz desteklenen tetikleyici olaylarının listesinden bir veya daha fazla seçenek seçin.

  6. (Opsiyonel) Servisinizin örnek bir isteği alıp almadığını kontrol etmek için Test Yanıtı butonunu kullanın.

  7. Değişiklikleri Kaydet'e tıklayın.

Webhook URL'lerini ayarlama

Webhook URL'niz olarak özel bir HTTP servis uç noktası ayarlayabilirsiniz; bunun aşağıdaki gereksinimleri karşılaması gerekmektedir:

  • Talepleri işleme alabilmek için kamuya açık erişilebilir olmalıdır.
  • POST isteklerini işleyebilmelidir.
  • İsteğe 5 saniye içinde 2XX yanıtı vermelidir.
  • HTTPS isteklerini işleyebilmelidir.

Uç noktanız bir POST isteği aldığında, şunları yapabilmelidir:

  • POST mesajının gövdesinden bildirim hakkında gerekli ayrıntıları çıkartabilmelidir.
  • Bildirimle ilgili genel bilgiler ve olay türüne ilişkin özel ayrıntıları içeren POST mesajının gövdesini okuyabilmelidir.

İşlenmesi gereken POST isteklerinin şeması hakkında daha fazla bilgi için Yük Şeması bölümüne bakın.

Teslimat hatası tekrar deneme politikası

Webhook bildirimi, belirttiğiniz URL'ye hatalar meydana geldiğinde ulaştığında, Roblox yapılandırılan URL'ye mesaj göndermeyi 5 kez tekrar dener. Eğer 5 deneme sonrası bildirim hala ulaşılamıyorsa, Roblox bildirimin gönderilmesine son verir ve URL'nin artık geçerli olmadığını varsayar. Bu durumda, webhook yapılandırmanızı başarıyla bildirim alabilen yeni bir URL ile güncellemeniz gerekir. Webhook URL'nizin başarıyla bildirim alıp almadığını kontrol etmek için Webhook'ları test et bölümüne bakın.

Üçüncü taraf gereksinimleri

Üçüncü taraf araçların genellikle webhooks için kendi gereksinimleri vardır; bu gereksinimlere webhook URL'nizi ayarlarken uymalısınız. Bu gereksinimleri, hedef aracın destek veya dokümantasyon sitesinde "webhook" anahtar kelimesi ile arama yaparak bulabilirsiniz. Desteklenen üçüncü taraf araçlar için aşağıdaki bağlantılara göz atın:

Webhook'ları Test Et

Yapılandırdığınız webhook'un bildirimleri başarıyla alıp almadığını Creator Dashboard üzerinde test edebilirsiniz:

  1. Webhook'lar yapılandırma sayfasına gidin.
  2. Test etmek istediğiniz webhook'u yapılandırılmış webhook'lar listesinden seçin.
  3. Hedef webhook'un yanındaki kalem simgesine tıklayın.
  4. Test Yanıtı butonuna tıklayın.

Sistem ardından Kullanıcı ID'sini içeren bir SampleNotification olayını gönderir, bu şu şekilde görünebilir:

SampleNotification şeması

{
"NotificationId": "string",
"EventType": "SampleNotification",
"EventTime": "2023-12-30T16:24:24.2118874Z",
"EventPayload": {
"UserId": 1
}
}

Webhook'unuzu üçüncü taraf bir hizmetle entegre ediyorsanız, bu hizmetin başarılı bir şekilde bildirim alabileceğini doğrulamak için üçüncü taraf URL'sini kullanarak test edebilirsiniz. Webhook'u yapılandırırken bir gizli anahtar sağlarsanız, roblox-signature'ınızı test etmek için de kullanabileceğiniz bir roblox-signature oluşturur.

Webhook güvenliğini doğrula

Yükleri almak için sunucunuzu yapılandırdıktan sonra, gönderilen her yük için uç noktayı dinlemeye başlar. Webhook'unuzu yapılandırırken bir gizli anahtar belirlediyseniz, Roblox her webhook bildiriminde bir roblox-signature gönderir; bu, isteğin gerçekten Roblox'tan geldiğini doğrulamak içindir. Imza, özel uç noktalar için yük başlığında ve üçüncü taraf sunucular için altbilgide bulunur.

Gizli anahtar ile özel uç noktalar için imza formatı

t=<zaman damgası>,v1=<imza>

Eğer webhook'unuz için gizli bir anahtar belirlemediyseniz, imza yalnızca bildirimin gönderildiği zaman damgasını içerir:

Gizli anahtar olmadan özel uç noktalar için imza formatı

t=<zaman damgası>

Bir imzayı doğrulamak için:

  1. Zaman damgası ve imza değerlerini çıkarın. Gizli anahtar olan webhook'lar için tüm imzalar, bu iki değerin ön ekleriyle birlikte bir CSV dizesinin aynı formatını paylaşır:

    • t: Bildirimin gönderildiği zaman damgası.
    • v1: Creator Dashboard yapılandırması tarafından sağlanan gizli anahtar kullanılarak üretilen imza değeri.
  2. roblox-signature'ın temel dizesini yeniden oluşturmak için:

    1. Zaman damgasını bir dize olarak.
    2. Sonra bir nokta karakteri ..
    3. İsteğin gövdesinin JSON dizesi.
  3. Yapılandırma sırasında belirlediğiniz gizli anahtarı anahtar olarak ve adım 2'de oluşturduğunuz dizeyi mesaj olarak kullanarak SHA256 hash fonksiyonu ile bir hash tabanlı mesaj kimlik doğrulama kodu (HMAC) oluşturun. Sonucu Base64 formatına dönüştürerek beklenen imzayı elde edin.

  4. Çıkarılan imza değerini beklenen imza ile karşılaştırın. İmzanızı doğru bir şekilde oluşturduysanız, değer aynı olmalıdır.

  5. (Opsiyonel) Tekrar saldırılarını önlemek için, saldırganların yetkisiz erişim veya kötü niyetli eylemler gerçekleştirmek amacıyla verileri kesip yeniden göndermesi türündeki bir siber saldırı türüne karşı, çıkarılan zaman damgası değerinin mevcut zaman damgası ile karşılaştırılması ve makul bir zaman aralığında olması gerektiğinden emin olmak yararlı olabilir. Örneğin, 10 dakikalık bir zaman aralığı genellikle makul bir sınırdır.

Yük şeması

Webhook'unuzun hedef olayı tetiklendiğinde, yük içindeki olay hakkında bilgi içeren bir isteği webhook URL'nize gönderir. Tüm istek yükleri, sabit ve değişken alanlardan oluşan aynı şemayı paylaşır. Bu, yükte iletilen verilerin yapılandırılmış ve tutarlı olmasını sağlar, bu da alıcı uygulamanın verileri işlemesini ve kullanmasını kolaylaştırır.

Sabit yük şeması alanları, tüm webhook istekleri arasında tutarlılığı sağlamakta yardımcı olabilir ve aşağıdaki alanlar mevcuttur:

  1. NotificationId (string): Gönderilen her bildirim için benzersiz bir tanımlayıcı. Aynı NotificationId iki kez alındığında, bu bir kopya olarak kabul edilir.
  2. EventType (string): Bildirimin tetiklendiği olayın türünü belirtir.
  3. EventTime (string): Olayın tetiklendiği zaman damgası.

Değişken yük şeması alanları, webhook'ların çeşitli türde olaylara uyum sağlaması için esneklik sunar ve şunları içerir:

  1. EventPayload (object): Webhook'u tetikleyen EventType ile ilgili bilgilere sahiptir. EventPayload şemasının yapısı olay türüne göre değişir.

Aşağıdaki örnek, Silme Hakkı talebi olayı için yük şemasını göstermektedir:

Silme Hakkı talebi için örnek şema

{
"NotificationId": "string",
"EventType": "RightToErasureRequest",
"EventTime": "2023-12-30T16:24:24.2118874Z",
"EventPayload": {
"UserId": 1,
"GameIds": [
1234, 2345
]
}
}

Bildirimleri İşleme

Kullanıcılarınıza ait Kişisel Tanımlanabilir Bilgileri (PII) saklıyorsanız, kullanıcı bir talep yaptığında bu bilgileri silmeniz gerekir; bu, GDPR silme hakkı uyumluluk gereksinimlerine uygundur. PII’yi bir veri deposunda saklıyorsanız, webhook bildirimlerini yönetmek ve veri silme işlemlerini otomatikleştirmek için bir bot oluşturabilirsiniz. Bunun için Silme Hakkı Talep Silme bölümüne bakın; Discord içerisinde PII verilerini silmek için Açık Bulut API'sini kullanan bir bot oluşturma örneğine ulaşabilirsiniz. Bu örnek, abonelik olayları gibi diğer bildirimleri işlemek için de uyarlanabilir.

Üçüncü taraf bir aracın yerine bir özel uç nokta kullanıyorsanız, silinmesi gereken verileri webhook yükünden çıkarabilir ve kendi otomasyon çözümünüzü oluşturabilirsiniz. Aşağıdaki kod örneği, zaman damgasını doğrulayarak ve isteğin Roblox'tan geldiğinden emin olarak tekrar saldırılarını önleme tedbirine sahip bir sunucunun örneğidir:

Yükten PII çıkarma

const crypto = require('crypto');
const express = require('express');
const secret = '<your_secret>' // Bu bir ortam değişkeni olarak ayarlanabilir
let app = express();
app.use(express.json());
app.all('/*', function (req, res) {
console.log('Yeni istek alındı');
// Başlıktan zaman damgası ve imzayı çıkarın
const signatureHeader = req.headers['roblox-signature'].split(',');
const timestamp = signatureHeader.find(e => e.startsWith('t=')).substring(2);
const signature = signatureHeader.find(e => e.startsWith('v1=')).substring(3);
// Taleplerin yeniden oynatma saldırılarını önlemek için 300 saniyelik bir zaman penceresi içinde geldiğinden emin olun
const requestTimestampMs = timestamp * 1000;
const windowTimeMs = 300 * 1000;
const oldestTimestampAllowed = Date.now() - windowTimeMs;
if (requestTimestampMs < oldestTimestampAllowed) {
return res.status(403).send('Süresi Dolmuş İstek');
}
// İmza doğrulama
const message = `${timestamp}.${JSON.stringify(req.body)}`;
const hmac = crypto.createHmac('sha256', secret);
const calculatedSignature = hmac.update(message).digest('base64');
if (signature !== calculatedSignature) {
return res.status(401).send('Yetkisiz İstek');
}
// Yükü işleme mantığınız
const payloadBody = req.body;
const eventType = payloadBody['EventType'];
if (eventType === 'RightToErasureRequest'){
const userId = payloadBody['EventPayload']['UserId'];
const gameIds = payloadBody['EventPayload']['GameIds'];
console.log(`Yük verisi: UserId=${userId} ve GameIds=${gameIds}`);
// Eğer PII'yi veri depolarında saklıyorsanız, bilgileri veri depolarından silmek için UserId ve GameIds'i kullanın.
}
return res.json({ message: 'Mesaj başarıyla işlendi' });
});
app.listen(8080, function () {
console.log('Sunucu başlatıldı');
});
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.