建立訂閱房間訊息的回調。
介面說明
本介面用於建立訂閱房間訊息的回調。例如:在建立回調時,您可以配置回調地址、事件類型等參數。
QPS 限制
本介面的單使用者 QPS 限制為 100 次/秒。超過限制,API 呼叫會被限流,這可能會影響您的業務,請合理調用。
調試
您可以在OpenAPI Explorer中直接運行該介面,免去您計算簽名的困擾。運行成功後,OpenAPI Explorer可以自動產生SDK程式碼範例。
調試
授權資訊
|
操作 |
存取層級 |
資源類型 |
條件關鍵字 |
關聯操作 |
|
live:CreateEventSub |
*Rtc
|
無 | 無 |
請求參數
|
名稱 |
類型 |
必填 |
描述 |
樣本值 |
| AppId |
string |
是 |
訂閱的應用 ID。 |
9qb1**** |
| ChannelId |
string |
否 |
訂閱的頻道 ID。您可通過調用 ListEventSub 介面查詢訂閱的頻道 ID。 說明
|
123333 |
| Users |
array |
否 |
訂閱哪些使用者的訊息,參數為空白表示訂閱該房間全部使用者(包含主播和觀眾)。格式如下所示: |
|
|
string |
否 |
使用者識別碼。 |
user1 |
|
| Events |
array |
是 |
訂閱事件。 |
|
|
string |
是 |
訂閱的事件,取值:
|
ChannelEvent |
|
| CallbackUrl |
string |
是 |
回調地址。回調內容請參見以下回調內容樣本。 |
http://****.com/callback |
CallBack
通過使用者傳入的 CallbackUrl,回調使用者的內容,樣本如下所示:
Request:
POST /callbackURL
Body
application/json
{
"MsgId": "訊息 ID",
"MsgTimestamp": 12312324, // 訊息發送時的 Unix 時間戳記
"SubscribeID": "訂閱 ID",
"AppId":"", // 產生該訊息的 appid
"ChannelID":"", // 產生該訊息的頻道
"Contents": [
{
"Event": "UserEvent",//訂閱的事件:頻道內使用者事件
"UserEvent": {
"UserId": "80331631628*****", // 使用者識別碼
"EventTag": "Publish", // 事件,包括 Join, Leave, Publish, Unpublish, Roleupdate
"SessionId": "0dr15rrnhkz0jnvz6o8sxo0*****", // 產生該事件的 SessionID
"Timestamp": 1609854786, // 事件發生 Unix 時間戳記
"Reason": 1, // 入會、離會原因,僅 Join 事件有
"Role": 1, // 角色類型, 主播,觀眾
"CurrentMedias":"1,2,3"// 推流類型:使用者推了哪些流
}
},
{
"Event": "ChannelEvent",//訂閱的事件:頻道事件
"ChannelEvent": {
"ChannelId": "88888****",
"EventTag": "Open", // 頻道事件,包括開啟與關閉 Open, Close
"Timestamp": 1609854530 // 事件發生 Unix 時間戳記
}
}
]
}
Response
HTTP STATUS 200
UserEvent 使用者事件
| 參數 | 類型 | 是否必填 | 描述 |
| UserId | string | 是 | 使用者識別碼。 |
| SessionId | string | 是 | 使用者 SessionID。 |
| EventTag | string | 是 | 事件類型,取值: Join:入會。 Leave:離會。 PublishVideo:開始推視頻流。 PublishAudio:開始推音頻流。 PublishScreen:開始畫面共用。 UnpublishVideo:停止推視頻流。 UnpublishAudio:停止推音頻流。 UnpublishScreen:停止螢幕畫面分享。 Roleupdate:角色切換。 |
| Timestamp | number | 是 | 事件發生的時間戳記。 |
| Reason | integer | 是 | 入會、離會原因(僅 Join 事件有),取值: 1:正常入會、離會。 2:重連入會(當前會中已有該使用者執行個體,該使用者再次入會)。 3:跨頻道轉推。 4:逾時離會。 5:使用者啟用新的會話,當前會話被擠下線。 6:被踢出。 7:頻道解散。 |
| Role | integer | 是 | 角色類型,取值: 1:主播。 2:觀眾。 |
| CurrentMedias | integer | 是 | 推流類型,取值: 1:音頻。 2:視頻。 3:螢幕畫面分享。 |
ChannelEvent 頻道事件
| 參數 | 類型 | 是否必填 | 描述 |
| EventTag | string | 是 | 事件類型,取值: Open:會議開始。 Close:會議結束。 |
| Timestamp | number | 是 | 事件發生的時間戳記。 |
回調鑒權說明
事件回調鑒權功能預設開啟,鑒權邏輯如下所示:
阿里雲ApsaraVideo for Live服務發起回調請求時在 HTTP(S)要求標頭中包含 Ali-Rtc-Timestamp 和 Ali-Rtc-Signature 欄位,供回調訊息接收服務端進行簽名認證。Ali-Rtc-Timestamp 值計算方式為:Ali-Rtc-Signature=MD5SUM(MD5CONTENT)。其中,MD5CONTENT=回調網域名稱|Ali-Rtc-Timestamp 取值|鑒權 Key;回調網域名稱指配置回調 URL 的網域名稱,鑒權 Key 指使用者建立 AppId 時產生的 AppKey。
回調訊息接收服務端接收回調訊息時,將回調網域名稱、Ali-Rtc-Timestamp 取值、鑒權 Key 進行拼接後計算 MD5 值,得到加密字串,再將計算出的加密字串與音視頻通訊服務發起的 HTTP(S)要求標頭中的 Ali-Rtc-Signature 欄位值進行對比,如果不一致,則請求非法。
回調異常重試
阿里雲發起回調請求時,僅當您的商務服務器響應 HTTP 狀態代碼為 200 時認定為回調成功。若回調失敗,阿里雲會重試 7 次,分別間隔 1 秒、2 秒、5 秒、10 秒、1 分鐘、2 分鐘、5 分鐘。每次重試請求均會產生對應的回調記錄。
異常處理
已經入會或者推流的用戶端和阿里雲的服務端有心跳保活機制,當用戶端因為斷網、App 關閉異常等原因導致心跳保活失敗(90 秒未收到用戶端心跳資訊則認定為失敗),服務端會判定用戶端異常逾時離開,併產生使用者停止推流和離會的事件回調。
返回參數
|
名稱 |
類型 |
描述 |
樣本值 |
|
object |
Schema of Response |
||
| RequestId |
string |
請求 ID。 |
760bad53276431c499e30dc36f6b**** |
| SubscribeId |
string |
建立的訂閱 ID。 |
ad53276431c**** |
樣本
正常返回樣本
JSON格式
{
"RequestId": "760bad53276431c499e30dc36f6b****",
"SubscribeId": "ad53276431c****"
}
錯誤碼
|
HTTP status code |
錯誤碼 |
錯誤資訊 |
描述 |
|---|---|---|---|
| 400 | InputInvalid | %s. | 輸入參數不合法 |
| 400 | QuotaLimitError | %s. | 每個AppId,最多同時允許建立20個訂閱,並且只允許1個全頻道訂閱 |
| 400 | ErrorInvalidCallBackUrl | %s. | CallBackURL無效,請檢查後重新嘗試。 |
| 500 | ServerError | %s. | 未知錯誤,請稍後重試或提交工單諮詢。 |
| 403 | NoAuth | %s. | 沒有許可權 |
| 404 | ResourceNotExist | %s. | 請求資源不存在,請檢查後重新嘗試 |
訪問錯誤中心查看更多錯誤碼。
變更歷史
更多資訊,參考變更詳情。