Membuat callback untuk berlangganan pesan saluran.
Deskripsi operasi
Membuat callback untuk berlangganan pesan saluran. Misalnya, saat membuat callback, Anda dapat mengonfigurasi parameter seperti URL callback dan tipe event.
Batas QPS
Batas QPS per pengguna tunggal untuk operasi ini adalah 100 panggilan per detik. Jika batas terlampaui, panggilan API akan dibatasi (throttled), yang dapat memengaruhi bisnis Anda. Panggil operasi ini dengan tepat.
Coba sekarang
Test
RAM authorization
|
Action |
Access level |
Resource type |
Condition key |
Dependent action |
|
live:CreateEventSub |
none |
*Rtc.
|
None | None |
Parameter permintaan
|
Parameter |
Type |
Required |
Description |
Example |
| AppId |
string |
Yes |
ID aplikasi yang akan dilanggan. Anda dapat melihat ID aplikasi dengan menavigasi ke ApsaraVideo Live > Live+ > ApsaraVideo Real-time Communication > Manajemen Aplikasi. Jika tidak ada aplikasi, buat satu dengan mengklik [Buat Aplikasi]. |
9qb1**** |
| ChannelId |
string |
No |
ID saluran yang akan dilanggan. Anda dapat memanggil operasi ListEventSub untuk mengkueri ID saluran yang dilanggan. Catatan
|
123333 |
| Users |
array |
No |
Pengguna yang pesannya ingin Anda langgan. Jika parameter ini kosong, semua pengguna di saluran (termasuk streamer dan penonton) dilanggan. Format: |
|
|
string |
No |
ID pengguna. |
user1 |
|
| Events |
array |
Yes |
Event langganan. |
|
|
string |
Yes |
Event langganan. Nilai valid:
|
ChannelEvent |
|
| CallbackUrl |
string |
Yes |
URL callback. Untuk konten callback, lihat contoh konten callback di bawah ini. |
http://****.com/callback |
Callback
Contoh berikut menunjukkan konten yang dikembalikan ke pengguna melalui CallbackUrl yang ditentukan:
Request:
POST /callbackURL
Body
application/json
{
"MsgId": "ID Pesan",
"MsgTimestamp": 12312324, // Tampilan Unix saat pesan dikirim
"SubscribeID": "ID Langganan",
"AppId":"", // AppId yang menghasilkan pesan ini
"ChannelID":"", // Saluran yang menghasilkan pesan ini
"Contents": [
{
"Event": "UserEvent",// Event langganan: event pengguna dalam saluran
"UserEvent": {
"UserId": "80331631628*****", // ID Pengguna
"EventTag": "Publish", // Event, termasuk Join, Leave, Publish, Unpublish, Roleupdate
"SessionId": "0dr15rrnhkz0jnvz6o8sxo0*****", // SessionID yang menghasilkan event ini
"Timestamp": 1609854786, // Tampilan Unix saat event terjadi
"Reason": 1, // Alasan bergabung atau keluar. Hanya tersedia untuk event Join.
"Role": 1, // Tipe peran: streamer atau penonton
"CurrentMedias":"1,2,3"// Tipe stream: stream yang diterbitkan oleh pengguna
}
},
{
"Event": "ChannelEvent",// Event langganan: event saluran
"ChannelEvent": {
"ChannelId": "88888****",
"EventTag": "Open", // Event saluran, termasuk Open dan Close
"Timestamp": 1609854530 // Tampilan Unix saat event terjadi
}
}
]
}
Response
HTTP STATUS 200
UserEvent
| Parameter | Tipe | Wajib | Deskripsi |
| UserId | string | Ya | ID pengguna. |
| SessionId | string | Ya | ID sesi pengguna. |
| EventTag | string | Ya | Tipe event. Nilai valid: Join: bergabung ke saluran. Leave: keluar dari saluran. PublishVideo: mulai menerbitkan stream video. PublishAudio: mulai menerbitkan stream audio. PublishScreen: mulai berbagi layar. UnpublishVideo: berhenti menerbitkan stream video. UnpublishAudio: berhenti menerbitkan stream audio. UnpublishScreen: berhenti berbagi layar. Roleupdate: mengganti peran. |
| Timestamp | number | Ya | Tampilan saat event terjadi. |
| Reason | integer | Ya | Alasan bergabung atau keluar (hanya tersedia untuk event Join). Nilai valid: 1: bergabung atau keluar normal. 2: bergabung kembali (pengguna sudah ada di saluran dan bergabung lagi). 3: relay lintas saluran. 4: keluar karena timeout. 5: pengguna memulai sesi baru dan sesi saat ini dipaksa offline. 6: dikeluarkan. 7: saluran dibubarkan. |
| Role | integer | Ya | Tipe peran. Nilai valid: 1: streamer. 2: penonton. |
| CurrentMedias | integer | Ya | Tipe stream. Nilai valid: 1: audio. 2: video. 3: berbagi layar. |
ChannelEvent
| Parameter | Tipe | Wajib | Deskripsi |
| EventTag | string | Ya | Tipe event. Nilai valid: Open: rapat dimulai. Close: rapat berakhir. |
| Timestamp | number | Ya | Tampilan saat event terjadi. |
Autentikasi callback
Fitur autentikasi callback event diaktifkan secara default. Logika autentikasinya adalah sebagai berikut:
Saat ApsaraVideo Live memulai permintaan callback, header permintaan HTTP(S) berisi bidang Ali-Rtc-Timestamp dan Ali-Rtc-Signature agar server penerima pesan callback dapat melakukan autentikasi tanda tangan. Nilai Ali-Rtc-Timestamp dihitung sebagai berikut: Ali-Rtc-Signature=MD5SUM(MD5CONTENT), di mana MD5CONTENT=Nama domain callback|Nilai Ali-Rtc-Timestamp|Kunci Autentikasi. Nama domain callback adalah nama domain yang dikonfigurasi di URL callback, dan Kunci Autentikasi adalah AppKey yang dihasilkan saat AppId dibuat.
Saat server penerima pesan callback menerima pesan callback, server tersebut menggabungkan nama domain callback, nilai Ali-Rtc-Timestamp, dan Kunci Autentikasi, menghitung nilai MD5 untuk memperoleh string terenkripsi, lalu membandingkan string terenkripsi yang dihitung dengan nilai bidang Ali-Rtc-Signature di header permintaan HTTP(S) yang dimulai oleh ApsaraVideo Real-time Communication. Jika tidak cocok, permintaan tidak valid.
Percobaan ulang exception callback
Saat Alibaba Cloud memulai permintaan callback, callback dianggap berhasil hanya ketika server bisnis Anda merespons dengan kode status HTTP 200. Jika callback gagal, Alibaba Cloud akan mencoba ulang 7 kali dengan interval 1 detik, 2 detik, 5 detik, 10 detik, 1 menit, 2 menit, dan 5 menit. Setiap percobaan ulang menghasilkan catatan callback yang sesuai.
Penanganan exception
Klien yang telah bergabung ke saluran atau sedang menerbitkan stream mempertahankan mekanisme heartbeat keep-alive dengan server Alibaba Cloud. Ketika heartbeat keep-alive gagal karena klien kehilangan konektivitas jaringan atau aplikasi ditutup secara abnormal (kegagalan ditentukan jika tidak ada heartbeat yang diterima dari klien selama 90 detik), server menentukan bahwa klien telah timeout dan keluar secara abnormal, serta menghasilkan callback event untuk pengguna yang berhenti menerbitkan stream dan keluar dari saluran.
Elemen respons
|
Element |
Type |
Description |
Example |
|
object |
Skema Respons. |
||
| RequestId |
string |
ID permintaan. |
760bad53276431c499e30dc36f6b**** |
| SubscribeId |
string |
ID langganan yang dibuat. |
ad53276431c**** |
Contoh
Respons sukses
JSONformat
{
"RequestId": "760bad53276431c499e30dc36f6b****",
"SubscribeId": "ad53276431c****"
}
Kode kesalahan
|
HTTP status code |
Error code |
Error message |
Description |
|---|---|---|---|
| 400 | InputInvalid | %s. | Parameter input tidak valid. |
| 400 | QuotaLimitError | %s. | Setiap AppId mengizinkan maksimum 20 langganan bersamaan, dan hanya satu langganan semua saluran yang diizinkan. |
| 400 | ErrorInvalidCallBackUrl | %s. | CallBackURL tidak valid. Periksa nilai dan coba lagi. |
| 500 | ServerError | %s. | Terjadi kesalahan tidak diketahui. Coba lagi nanti atau ajukan tiket. |
| 403 | NoAuth | %s. | Anda tidak memiliki izin yang diperlukan. |
| 404 | ResourceNotExist | %s. | Sumber daya yang diminta tidak ada. Periksa permintaan dan coba lagi. |
Lihat Error Codes untuk daftar lengkap.
Catatan rilis
Lihat Release Notes untuk daftar lengkap.