Notifikasi webhook

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Alih-alih memantau semua peristiwa di game Anda dan permintaan dari pengguna secara manual, Anda dapat mengatur webhook untuk menerima notifikasi waktu nyata di alat pesan pihak ketiga atau endpoint khusus Anda yang dapat menerima permintaan HTTP. Ini membantu Anda mengotomatiskan alur kerja pengelolaan notifikasi Anda untuk mengurangi upaya manual dalam menangani notifikasi.

Alur kerja Webhook

Webhook mengirimkan notifikasi atau data waktu nyata antara dua aplikasi atau layanan yang berbeda, seperti Roblox dan alat pesan pihak ketiga. Tidak seperti API tradisional, yang mengharuskan Anda mengatur aplikasi klien untuk mengirim permintaan ke server untuk menerima data, webhook mengirimkan data ke endpoint klien Anda segera setelah terjadi sebuah peristiwa. Mereka berguna untuk mengotomatiskan alur kerja antara Roblox dan aplikasi pihak ketiga yang Anda gunakan untuk berkolaborasi dengan tim Anda, karena memungkinkan berbagi dan pengolahan data secara real-time.

Setelah Anda mengatur webhook, setiap kali peristiwa target terjadi, Roblox mengirim permintaan ke URL webhook yang Anda berikan. URL webhook kemudian mengarahkan permintaan ke aplikasi penerima Anda atau endpoint khusus, yang dapat mengambil tindakan berdasarkan data yang disertakan dalam payload webhook. Ini dapat mencakup menghapus data untuk GDPR, mengirim konfirmasi kepada pengguna, atau memicu peristiwa lain.

Trigger yang Didukung

Roblox saat ini mendukung trigger peristiwa berikut.

Langganan

  • Langganan Diperpanjang - Ketika seorang pengguna memperpanjang langganan, sebuah pesan dikirim yang berisi langganan dan subscriber.
  • Langganan Diperbarui - Ketika seorang pengguna memperbarui langganan, sebuah pesan dikirim yang berisi langganan dan subscriber.
  • Langganan Dikembalikan - Ketika seorang pengguna menerima pengembalian dana untuk langganan mereka, sebuah pesan dikirim yang berisi langganan dan subscriber.
  • Langganan Dibeli - Ketika seorang pengguna membeli langganan, sebuah pesan dikirim yang berisi langganan dan subscriber.
  • Langganan Dibatalkan - Ketika seorang pengguna membatalkan langganan, sebuah pesan dikirim yang berisi langganan dan subscriber, serta alasan yang diberikan untuk pembatalan.

Untuk informasi lebih lanjut tentang peristiwa langganan dan bidang mereka, lihat referensi Langganan.

Kepatuhan

Perdagangan

  • Pesanan Produk Perdagangan Dikembalikan - Ketika seorang pengguna telah menerima pengembalian dana untuk pesanan produk perdagangan mereka, atau pesanan tersebut dibatalkan.
  • Pesanan Produk Perdagangan Dibayar - Ketika seorang pengguna telah membayar untuk pesanan produk perdagangan mereka. Harap dicatat bahwa duplikat peristiwa webhook dimungkinkan, jadi Anda harus menduplikasi peristiwa menggunakan ID pesanan perdagangan yang unik.

Mengonfigurasi webhook di Dasbor Pembuat

Untuk menerima notifikasi melalui webhook, Anda perlu mengonfigurasi webhook yang berlangganan ke peristiwa tertentu untuk memicu notifikasi. Untuk game yang dimiliki grup, hanya pemilik grup yang dapat mengonfigurasi dan menerima notifikasi webhook.

Untuk mengatur webhook:

  1. Pilih pengalaman Anda di Creator Hub.

  2. Di bawah Konfigurasi, pilih Webhook dan klik Tambahkan Webhook.

    URL webhook berasal dari penyedia Anda. Sebagai contoh, URL Slack mungkin terlihat seperti ini:


    https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
  3. Masukkan URL webhook Anda dan sebuah nama.

  4. (Opsional) Sertakan rahasia, yang membantu memastikan bahwa notifikasi yang Anda terima berasal dari Roblox. Untuk informasi lebih lanjut, lihat Verifikasi keamanan webhook.

  5. Pilih satu atau lebih opsi dari daftar trigger yang didukung untuk peristiwa yang ingin Anda terima notifikasi.

  6. (Opsional) Gunakan tombol Uji Respon untuk memeriksa apakah layanan Anda dapat menerima permintaan contoh.

  7. Klik Simpan Perubahan.

Mengatur URL webhook

Anda dapat mengatur endpoint layanan HTTP khusus sebagai URL webhook Anda, selama memenuhi persyaratan berikut:

  • Harus dapat diakses secara publik untuk menangani permintaan.
  • Dapat menangani permintaan POST.
  • Dapat merespons permintaan dengan respons 2XX dalam waktu 5 detik.
  • Dapat menangani permintaan HTTPS.

Ketika endpoint Anda menerima permintaan POST, ia harus mampu:

  • Mengambil detail yang diperlukan tentang notifikasi dari badan pesan POST.
  • Membaca badan pesan POST dengan detail umum tentang notifikasi dan detail spesifik terkait dengan jenis peristiwa pada notifikasi.

Untuk informasi lebih lanjut tentang skema permintaan POST yang harus ditangani, lihat Skema Payload.

Kebijakan coba ulang kegagalan pengiriman

Ketika notifikasi webhook gagal sampai ke URL yang Anda tentukan karena kesalahan seperti ketidaktersediaan endpoint, Roblox mencoba mengirim ulang pesan ke URL yang dikonfigurasi 5 kali menggunakan ukuran jendela tetap. Jika notifikasi masih gagal dikirim setelah 5 percobaan, Roblox berhenti mencoba untuk mengirim notifikasi dan mengasumsikan bahwa URL tersebut tidak lagi valid. Dalam situasi ini, Anda perlu memperbarui konfigurasi webhook Anda dengan URL baru yang dapat dijangkau dan mampu menerima notifikasi. Untuk menyelesaikan masalah dan memastikan bahwa URL webhook Anda dapat menerima notifikasi dengan sukses, lihat Uji webhook.

Persyaratan pihak ketiga

Alat pihak ketiga biasanya memiliki persyaratan mereka sendiri untuk webhook yang perlu Anda ikuti saat mengatur URL webhook Anda. Anda dapat menemukan persyaratan ini dengan mencari kata kunci "webhook" di situs dukungan atau dokumentasi dari alat target. Untuk alat pihak ketiga yang didukung, lihat yang berikut ini:

Uji webhook

Anda dapat menguji apakah webhook yang telah Anda konfigurasikan dapat berhasil menerima notifikasi di Dasbor Pembuat:

  1. Arahkan ke halaman konfigurasi Webhook.
  2. Pilih webhook yang ingin Anda uji dari daftar webhook yang dikonfigurasi.
  3. Klik ikon pensil di sebelah webhook target.
  4. Klik tombol Uji Respon.

Sistem kemudian mengirimkan peristiwa SampleNotification, yang mencakup User ID dari pengguna yang memicu notifikasi, seperti yang ditunjukkan di sini:

Skema SampleNotification

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

Jika Anda mengintegrasikan webhook Anda dengan layanan pihak ketiga, Anda dapat mengujinya menggunakan URL pihak ketiga untuk mengonfirmasi bahwa layanan dapat menerima notifikasi dari webhook Anda dengan sukses. Jika Anda menyediakan rahasia saat mengonfigurasi webhook, ia juga menghasilkan roblox-signature yang dapat Anda gunakan untuk menguji logika roblox-signature.

Verifikasi keamanan webhook

Setelah Anda mengonfigurasi server Anda untuk menerima payload, ia mulai mendengarkan setiap payload yang dikirim ke endpoint. Jika Anda menetapkan rahasia saat mengonfigurasi webhook, Roblox mengirimkan roblox-signature di setiap notifikasi webhook untuk memastikan bahwa permintaan benar-benar berasal dari Roblox. Tanda tangan itu ada di header payload untuk endpoint khusus dan di footer untuk server pihak ketiga.

Format tanda tangan dengan rahasia untuk endpoint khusus

t=<timestamp>,v1=<signature>

Jika Anda tidak menetapkan rahasia untuk webhook Anda, tanda tangan hanya berisi timestamp ketika notifikasi dikirim:

Format tanda tangan tanpa rahasia untuk endpoint khusus

t=<timestamp>

Untuk memverifikasi tanda tangan:

  1. Ekstrak nilai timestamp dan signature. Semua tanda tangan untuk webhook dengan rahasia berbagi format yang sama sebagai string CSV dengan dua nilai ini yang diikuti oleh prefix:

    • t: Timestamp ketika notifikasi dikirim.
    • v1: Nilai tanda tangan yang dihasilkan menggunakan rahasia yang diberikan oleh konfigurasi Dasbor Pembuat.
  2. Buat kembali string dasar roblox-signature dengan menggabungkan:

    1. Timestamp sebagai string.
    2. Karakter titik ..
    3. String JSON dari badan permintaan.
  3. Hitung kode otentikasi pesan berbasis hash (HMAC) dengan fungsi hash SHA256 menggunakan rahasia yang Anda tetapkan saat konfigurasi sebagai kunci dan string dasar yang Anda buat melalui langkah 2 sebagai pesan. Ubah hasilnya ke format Base64 untuk mendapatkan tanda tangan yang diharapkan.

  4. Bandingkan nilai tanda tangan yang diekstrak dengan tanda tangan yang diharapkan. Jika Anda menghasilkan tanda tangan dengan benar, nilainya harus sama.

  5. (Opsional) Untuk mencegah serangan pengulangan, jenis serangan siber di mana penyerang mencegat dan mengirim ulang data untuk mendapatkan akses yang tidak sah atau melakukan tindakan jahat, ada baiknya membandingkan nilai timestamp yang diekstrak dengan timestamp saat ini dan memastikan bahwa itu jatuh dalam batas waktu yang wajar. Sebagai contoh, jendela 10 menit biasanya merupakan batas waktu yang wajar.

Skema Payload

Ketika peristiwa target dari webhook Anda dipicu, ia mengirimkan permintaan ke URL webhook Anda, termasuk informasi tentang peristiwa dalam payload. Semua payload dari permintaan berbagi skema yang sama yang terdiri dari bidang tetap dan variabel. Ini memastikan bahwa data yang dikirimkan dalam payload terstruktur dan konsisten, memudahkan aplikasi penerima untuk memproses dan menggunakan data.

Bidang skema payload tetap dapat membantu mempertahankan konsistensi di seluruh permintaan webhook, dengan bidang-bidang berikut tersedia:

  1. NotificationId (string): Sebuah pengidentifikasi unik untuk setiap notifikasi yang dikirim. Jika NotificationId yang sama diterima dua kali, itu dianggap sebagai duplikat.
  2. EventType (string): Menunjukkan jenis peristiwa yang memicu notifikasi.
  3. EventTime (string): Timestamp ketika peristiwa dipicu.

Bidang skema payload variabel memberikan fleksibilitas untuk webhook agar dapat menampung berbagai jenis peristiwa, yang meliputi:

  1. EventPayload (object): Berisi informasi spesifik untuk EventType yang memicu webhook. Struktur skema EventPayload bervariasi berdasarkan jenis peristiwa.

Contoh berikut menunjukkan skema payload dari peristiwa Permintaan Hak untuk Menghapus:

Contoh skema untuk permintaan Hak untuk Menghapus

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

Menangani notifikasi

Jika Anda menyimpan Informasi Identitas Pribadi (PII) pengguna Anda, seperti ID Pengguna mereka, Anda harus menghapus informasi ini ketika seorang pengguna mengajukan permintaan semacam itu untuk mematuhi persyaratan kepatuhan hak untuk menghapus GDPR. Anda dapat membuat bot untuk menangani notifikasi webhook dan membantu mengotomatiskan penghapusan data, asalkan Anda menyimpan PII dalam penyimpanan data. Lihat Mengotomatiskan Penghapusan Permintaan Hak untuk Menghapus untuk contoh cara membuat bot dalam Discord yang menggunakan Open Cloud API untuk penyimpanan data untuk menghapus data PII sebagai solusi otomatisasi. Contoh ini dapat disesuaikan untuk menangani notifikasi lainnya, seperti peristiwa langganan.

Jika Anda menggunakan endpoint kustom sebagai server webhook Anda alih-alih alat pihak ketiga, Anda dapat mengekstrak data yang memerlukan penghapusan dari payload webhook dan membangun solusi otomatisasi Anda sendiri. Contoh kode berikut adalah contoh server yang mencegah serangan pengulangan dengan memverifikasi timestamp dan memastikan bahwa permintaan berasal dari Roblox:

Mengetik PII dari Payload

const crypto = require('crypto');
const express = require('express');
const secret = '<your_secret>' // Ini dapat diatur sebagai variabel lingkungan
let app = express();
app.use(express.json());
app.all('/*', function (req, res) {
console.log('Permintaan baru diterima');
// Ekstrak timestamp dan signature dari header
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);
// Pastikan permintaan datang dalam jendela 300 detik untuk mencegah serangan pengulangan
const requestTimestampMs = timestamp * 1000;
const windowTimeMs = 300 * 1000;
const oldestTimestampAllowed = Date.now() - windowTimeMs;
if (requestTimestampMs < oldestTimestampAllowed) {
return res.status(403).send('Permintaan Kedaluwarsa');
}
// Validasi tanda tangan
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('Permintaan Tidak Sah');
}
// Logika Anda untuk menangani payload
const payloadBody = req.body;
const eventType = payloadBody['EventType'];
if (eventType === 'RightToErasureRequest'){
const userId = payloadBody['EventPayload']['UserId'];
const gameIds = payloadBody['EventPayload']['GameIds'];
console.log(`Data payload: UserId=${userId} dan GameIds=${gameIds}`);
// Jika Anda menyimpan PII dalam penyimpanan data, gunakan UserId dan GameIds untuk menghapus informasi dari penyimpanan data.
}
return res.json({ message: 'Pesan diproses dengan sukses' });
});
app.listen(8080, function () {
console.log('Server dimulai');
});
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.