建立訂閱房間訊息的回呼。
介面說明
本介面用於建立訂閱房間訊息的回呼。例如:在建立回呼時,您可以設定回呼位址、事件類型等參數。
QPS 限制
本介面的單一使用者 QPS 限制為 100 次/秒。超過限制,API 呼叫會被限流,這可能會影響您的業務,請合理呼叫。
調試
您可以在OpenAPI Explorer中直接運行該介面,免去您計算簽名的困擾。運行成功後,OpenAPI Explorer可以自動產生SDK程式碼範例。
調試
授權資訊
|
操作 |
存取層級 |
資源類型 |
條件關鍵字 |
關聯操作 |
|
live:CreateEventSub |
none |
*Rtc
|
無 | 無 |
請求參數
|
名稱 |
類型 |
必填 |
描述 |
樣本值 |
| AppId |
string |
是 |
訂閱的應用程式 ID。透過存取 影片直播>直播+>即時音影片>應用程式管理 可以查看擁有的應用程式 ID,沒有時可以透過【建立應用程式】進行新建。 |
9qb1**** |
| ChannelId |
string |
否 |
訂閱的頻道 ID。您可透過呼叫 ListEventSub 介面查詢訂閱的頻道 ID。 說明
|
123333 |
| Users |
array |
否 |
訂閱哪些使用者的訊息,參數為空表示訂閱該房間全部使用者(包含主播和觀眾)。格式如下所示: |
|
|
string |
否 |
使用者 ID。 |
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*****", // 使用者 ID
"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 | 是 | 使用者 ID。 |
| 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 | 是 | 事件發生的時間戳記。 |
回呼驗證說明
事件回呼驗證功能預設開啟,驗證邏輯如下所示:
阿里雲端影片直播服務發起回呼請求時在 HTTP(S) 請求標頭中包含 Ali-Rtc-Timestamp 和 Ali-Rtc-Signature 欄位,供回呼訊息接收伺服器進行簽章認證。Ali-Rtc-Timestamp 值計算方式為:Ali-Rtc-Signature=MD5SUM(MD5CONTENT)。其中,MD5CONTENT=回呼網域|Ali-Rtc-Timestamp 取值|驗證金鑰;回呼網域指設定回呼 URL 的網域,驗證金鑰指使用者建立 AppId 時產生的 AppKey。
回呼訊息接收伺服器接收回呼訊息時,將回呼網域、Ali-Rtc-Timestamp 取值、驗證金鑰進行拼接後計算 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. | 請求資源不存在,請檢查後重新嘗試。 |
訪問錯誤中心查看更多錯誤碼。
變更歷史
更多資訊,參考變更詳情。