Membuat callback untuk berlangganan event channel atau pengguna.
Deskripsi operasi
Anda dapat memanggil operasi ini untuk membuat callback guna berlangganan event channel atau pengguna. Saat membuat callback, Anda dapat mengonfigurasi parameter seperti URL callback dan tipe event.
Batas QPS
Anda dapat memanggil operasi ini hingga 100 kali per detik per akun. Permintaan yang melebihi batas ini akan dibuang dan dapat menyebabkan gangguan layanan. Pastikan Anda mematuhi batas tersebut saat memanggil operasi ini.
Coba sekarang
Test
RAM authorization
|
Action |
Access level |
Resource type |
Condition key |
Dependent action |
|
live:CreateEventSub |
*Rtc
|
None | None |
Parameter permintaan
|
Parameter |
Type |
Required |
Description |
Example |
| AppId |
string |
Yes |
ID aplikasi. |
9qb1**** |
| ChannelId |
string |
No |
ID channel. Anda dapat memanggil operasi ListEventSub untuk mengkueri ID channel tersebut. Catatan
|
123333 |
| Users |
array |
No |
Pengguna yang event-nya ingin Anda subscribe. Jika Anda membiarkan parameter ini kosong, event semua pengguna dalam channel akan di-subscribe, termasuk event streamer dan penonton. Tentukan parameter ini dengan format berikut: |
|
|
string |
No |
ID pengguna. |
user1 |
|
| Events |
array |
Yes |
Berlangganan event. |
|
|
string |
Yes |
Tipe event. Nilai yang valid:
|
ChannelEvent |
|
| CallbackUrl |
string |
Yes |
URL callback. Untuk informasi lebih lanjut tentang konten pesan yang dikirim ke URL callback, lihat bagian Callback dalam topik ini. |
http://****.com/callback |
CallBack
Pesan callback dikirim ke URL callback yang ditentukan oleh parameter CallbackUrl. Contoh kode berikut memberikan ilustrasi:
Request:
POST /callbackURL
Body
application/json
{
"MsgId": "Message ID",
"MsgTimestamp": 12312324, // Stempel waktu UNIX saat pesan dikirim.
"SubscribeID": "Subscription ID",
"AppId":"", // ID aplikasi tempat pesan dihasilkan.
"ChannelID":"", // ID channel tempat pesan dihasilkan.
"Contents": [
{
"Event": "UserEvent",// Tipe event yang di-subscribe. Dalam kasus ini, tipe event adalah event pengguna.
"UserEvent": {
"UserId": "80331631628*****", // ID pengguna.
"EventTag": "Publish", // Event. Nilai yang valid: Join, Leave, Publish, Unpublish, dan Roleupdate.
"SessionId": "0dr15rrnhkz0jnvz6o8sxo0*****", // ID sesi tempat event dihasilkan.
"Timestamp": 1609854786, // Stempel waktu UNIX saat event terjadi.
"Reason": 1, // Alasan bergabung atau meninggalkan channel. Parameter ini hanya tersedia jika event adalah event Join.
"Role": 1, // Peran pengguna. Peran meliputi streamer dan viewer.
"CurrentMedias":"1,2,3"// Jenis aliran yang diambil oleh pengguna.
}
},
{
"Event": "ChannelEvent",// Tipe event yang di-subscribe. Dalam kasus ini, tipe event adalah event channel.
"ChannelEvent": {
"ChannelId": "88888****",
"EventTag": "Open", // Event. Nilai yang valid: Open dan Close.
"Timestamp": 1609854530 // Stempel waktu UNIX saat event terjadi.
}
}
]
}
Response
HTTP STATUS 200
Parameter event pengguna
| Parameter | Tipe | Wajib | Deskripsi |
| UserId | string | Ya | ID pengguna. |
| SessionId | string | Ya | ID sesi. |
| EventTag | string | Ya | Event. Nilai yang valid:Join: Pengguna bergabung ke channel.Leave: Pengguna meninggalkan channel.PublishVideo: Pengguna melakukan pengambilan aliran video.PublishAudio: Pengguna melakukan pengambilan aliran audio.PublishScreen: Pengguna melakukan pengambilan aliran untuk berbagi layar.UnpublishVideo: Pengguna menghentikan pengambilan aliran video.UnpublishAudio: Pengguna menghentikan pengambilan aliran audio.UnpublishScreen: Pengguna menghentikan pengambilan aliran untuk berbagi layar.Roleupdate: Peran pengguna diubah. |
| Timestamp | number | Ya | Stempel waktu saat event terjadi. |
| Reason | integer | Ya | Alasan bergabung atau meninggalkan channel. Parameter ini hanya tersedia jika event adalah event Join. Nilai yang valid:1: Pengguna bergabung atau meninggalkan channel sesuai kebutuhan.2: Pengguna terhubung ulang untuk bergabung kembali ke channel meskipun sudah berada di dalam channel.3: Pengguna melakukan relay aliran lintas channel.4: Pengguna meninggalkan channel karena timeout.5: Pengguna memulai sesi baru dan dipaksa offline pada sesi saat ini.6: Pengguna dikeluarkan dari channel.7: Channel ditutup. |
| Role | integer | Ya | Peran pengguna. Nilai yang valid:1: streamer2: viewer |
| CurrentMedias | integer | Ya | Jenis aliran. Nilai yang valid:1: audio2: video3: berbagi layar |
Parameter event channel
| Parameter | Tipe | Wajib | Deskripsi |
| EventTag | string | Ya | Event. Nilai yang valid:Open: Channel dibuka.Close: Channel ditutup. |
| Timestamp | number | Ya | Stempel waktu saat event terjadi. |
Otentikasi callback
Otentikasi callback diaktifkan secara default. Logika otentikasi berikut berlaku:
Saat ApsaraVideo Live memulai permintaan callback, header Ali-Rtc-Timestamp dan Ali-Rtc-Signature disertakan dalam permintaan HTTP atau HTTPS sehingga server penerima pesan callback dapat mengotentikasi signature. Nilai Ali-Rtc-Timestamp dihitung berdasarkan rumus berikut: Ali-Rtc-Signature=MD5SUM(MD5CONTENT). Dalam rumus tersebut, MD5CONTENT adalah string dengan format berikut: Nama domain callback|Nilai Ali-Rtc-Timestamp|Kunci otentikasi. Nama domain callback adalah nama domain dalam URL callback. Kunci otentikasi adalah AppKey aplikasi.
Setelah menerima pesan callback, server penerima pesan callback menggabungkan nama domain callback, nilai header Ali-Rtc-Timestamp, dan kunci otentikasi dalam format di atas. Server menghitung nilai MD5 dari string tersebut untuk mendapatkan string terenkripsi. Kemudian, server membandingkan string terenkripsi tersebut dengan nilai header Ali-Rtc-Signature dalam permintaan HTTP atau HTTPS yang dikirim oleh Real-Time Communication (RTC). Jika kedua nilai berbeda, permintaan tersebut tidak valid.
Retry callback
Setelah Alibaba Cloud memulai permintaan callback, callback dianggap berhasil hanya jika server bisnis Anda mengembalikan kode status HTTP 200. Jika callback gagal, ApsaraVideo Live mengirim ulang permintaan callback sebanyak 7 kali dengan interval 1 detik, 2 detik, 5 detik, 10 detik, 60 detik, 120 detik, dan 300 detik. Catatan callback dibuat setiap kali permintaan callback dikirim ulang.
Penanganan eksepsi
Mekanisme keep-alive diterapkan antara klien yang telah bergabung ke channel atau memulai pengambilan aliran dan server Alibaba Cloud. Jika server tidak menerima informasi heartbeat dari klien selama 90 detik, server menganggap klien mengalami timeout dan pengguna meninggalkan channel, lalu memicu callback. Heartbeat gagal terdeteksi jika terjadi pemutusan jaringan atau aplikasi keluar secara tidak sengaja.
Elemen respons
|
Element |
Type |
Description |
Example |
|
object |
Skema Respons |
||
| RequestId |
string |
ID permintaan. |
760bad53276431c499e30dc36f6b**** |
| SubscribeId |
string |
ID langganan. |
ad53276431c**** |
Contoh
Respons sukses
JSONformat
{
"RequestId": "760bad53276431c499e30dc36f6b****",
"SubscribeId": "ad53276431c****"
}
Kode kesalahan
|
HTTP status code |
Error code |
Error message |
Description |
|---|---|---|---|
| 400 | InputInvalid | %s. | Illegal input parameters |
| 400 | QuotaLimitError | %s. | For each AppId, a maximum of 20 subscriptions are allowed at the same time, and only one full channel subscription is allowed. |
| 400 | ErrorInvalidCallBackUrl | %s. | The CallBackURL is invalid, please check and try again. |
| 500 | ServerError | %s. | Unknown error, please try again later or submit a ticket for consultation. |
| 403 | NoAuth | %s. | No permission |
| 404 | ResourceNotExist | %s. | The requested resource does not exist, please check and try again |
Lihat Error Codes untuk daftar lengkap.
Catatan rilis
Lihat Release Notes untuk daftar lengkap.