講師透過 HTTP 回覆學員提問
接口描述
由業務服務端呼叫,在指定頻道內以講師身份回覆某位觀眾的「提問私聊」記錄; 行為與聊天室 WebSocket 事件 T_ANSWER 對齊(寫入提問記錄、更新列表資料、向仍在線的相關用戶推送 message)。 接口支援 HTTPS 協定。
接口URL
https://api.polyv.net/live/v5/chat/redirect/channel/teacher-answer/post
請求方式
POST
接口約束
1、接口同時支援 HTTP、HTTPS,建議使用 HTTPS 確保接口安全。
2、**viewerUserId** 為被回覆的觀眾在業務裡的用戶 ID。若該觀眾當前正以觀眾身份在目標頻道內在線(已連上聊天室),系統可識別其連線並優先用於即時推送;若未在線,仍會落庫,但即時推送可能無法送達該觀眾。
3、講師展示資訊:若頻道內能識別到已在線的講師身份(與頻道約定規則一致),將使用該講師的暱稱、頭像等;若當前沒有在線講師資訊可識別,須在請求裡傳 teacherNick、teacherPic,否則展示欄位可能為空。
4、msgType 可選;不傳或空則按文字處理。傳 image 表示圖片回覆,此時 content 須為 JSON 字串,物件欄位為:width(number)、height(number)、url(string)、id(string,可選),與 WebSocket T_ANSWER 及站內圖片提問格式一致;服務端會走圖片校驗邏輯。
請求體參數描述
| 參數名 | 必選 | 類型 | 說明 |
|---|---|---|---|
| appId | true | String | 帳號appId【詳見取得金鑰】 |
| timestamp | true | Long | 當前13位毫秒級時間戳,3分鐘內有效 |
| sign | true | String | 簽名,為32位大寫的MD5值,產生簽名的appSecret金鑰作為通訊資料安全的關鍵資訊,嚴禁保存在客戶端直接使用,所有API都必須透過客戶自己伺服器中轉呼叫POLYV伺服器取得回應資料【詳見簽名產生規則】 |
| roomId | true | String(1,100) | 頻道號(與觀眾/講師在聊天室登入時使用的 channelId / roomId 一致) |
| content | true | String(1,10000) | 文字回覆時為正文;當 msgType 為 image 時須為 JSON 字串,序列化物件格式為 { "width": number, "height": number, "url": string, "id"?: string } |
| viewerUserId | true | String(1,2000) | 被回覆的觀眾 userId(提問側學員的業務 ID) |
| teacherNick | false | String | 講師暱稱;當頻道內沒有可識別的在線講師資訊時建議傳入,否則展示可能為空 |
| teacherPic | false | String | 講師頭像 URL;當頻道內沒有可識別的在線講師資訊時建議傳入 |
| msgType | false | String | 可選。傳 image 表示圖片回覆,與 WebSocket T_ANSWER 一致;不傳則按文字回覆處理 |
範例
請求體 JSON:
{
"roomId": "412738",
"content": "同学你好,这个问题我们在第二节课会讲到。",
"viewerUserId": "user_abc_001",
"teacherNick": "王老师",
"teacherPic": "https://liveimages.videocc.net/defaultImg/avatar/viewer.png"
}
圖片回覆範例(msgType 為 image,content 為 JSON 字串):
{
"roomId": "412738",
"viewerUserId": "user_abc_001",
"msgType": "image",
"content": "{\"width\":640,\"height\":360,\"url\":\"https://example.com/img.png\",\"id\":\"img_001\"}",
"teacherNick": "王老师",
"teacherPic": "https://liveimages.videocc.net/defaultImg/avatar/viewer.png"
}
回應體 JSON(成功):
{
"code": 200,
"status": "success",
"message": "发送成功",
"data": {
"id": 123456
}
}
其中 data.id 為該條回覆寫入提問流水後的記錄 ID(與 socket 回呼中 T_ANSWER 的 id 含義一致)。
WebSocket 推送說明
呼叫成功後,服務端會向聊天室推送 message 事件,內容為 JSON 字串,解析後 **EVENT 為 T_ANSWER**,主要欄位包括:roomId、content、user(講師展示資訊)、s_userId(被回覆的觀眾 userId)、id(本條回覆 id)、msgType 等。
- 觀眾:若該觀眾當前仍在該頻道聊天室中在線,一般能收到上述推送;若已離線或未連線,則無法收到即時訊息,但歷史提問列表中仍可出現本條回覆(以各端列表接口為準)。
- 講師:若講師當前正以講師身份在該頻道內在線,一般能收到推送;若講師未在線或未以可識別身份連線,則可能收不到即時推送,但記錄仍會寫入。
透過講師端 WebSocket 自行發送 T_ANSWER 時,還可能向整個頻道房間廣播;本 HTTP 接口以服務端判定在線連線並定向推送為主,具體與實現保持一致。
回應參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| code | Integer | 200 表示成功;400 多為參數校驗失敗;500 多為業務錯誤或服務端異常 |
| status | String | success / fail / error |
| message | String | 提示文案,如「發送成功」或具體錯誤說明 |
| data | Object | 成功時包含 id(回覆記錄 ID);失敗時可為空或附帶校驗資訊 |
異常範例
參數校驗失敗(與 checkDataType 返回一致):
{
"code": 400,
"status": "fail",
"message": "缺少参数roomId"
}
頻道與帳號不匹配(x-auth-user-id 與 roomId 歸屬不一致):
{
"code": 400,
"status": "fail",
"message": "roomId非法"
}
未傳 x-auth-user-id(中介軟體直接返回,HTTP 狀態碼多為 500,body 仍為 JSON):
{
"code": 400,
"status": "fail",
"message": "accountId is required"
}
服務端異常:
{
"code": 500,
"status": "error",
"message": "unknown error"
}
(具體 message 以實際錯誤資訊為準。)
