task_doc
更新時間:2025-06-17 22:18:09
前端文件
1、取得聊天室 socket 實例物件
概述:以觀看頁 SDK 開源專案 0.11.0 版本為例,其他版本也可參考使用取得 socket 實例。本文介紹的聊天室相關 EVENT 事件均未經觀看頁 SDK 封裝,故需使用下方程式碼範例進行發送與監聽,其他已封裝過的聊天室 EVENT 可在幫助中心 -> 聊天室模組文件或開源專案中查看使用
// [获取聊天室 socket 实例](https://help.polyv.net/index.html#/live/js/new_sdk/live_watch_sdk/articles/modules/chat/chat-message?id=classmethoddoc_plvchatmodule_getsocket "获取聊天室 socket 实例")
// 代码示例
import { getWatchCore } from '@/core/watch-sdk';
const watchCore = getWatchCore();
2、發送聊天室事件 (TASK_STATUS)
概述:前端主動查詢任務進展狀態
// 代码示例 (建议30S调用一次)
const jsonData = {
EVENT: 'TASK_STATUS',
};
watchCore.chat.getSocket().emit('interactEvent', JSON.stringify(jsonData), (data: string) => {
const taskStatusData = JSON.parse(data)
console.warn('interactEvent-TASK_STATUS接收回调', taskStatusData);
/**
* @socket {callback} <interactEvent> TASK_STATUS
* 获取任务状态
* @returns {object} taskStatusData
* @returns {object[]} taskStatusData.taskStatus
* @returns {string} taskStatusData.taskStatus[].taskId 任务id
* @returns {?number} taskStatusData.taskStatus[].onlineTime 已在线在线时长(单位:毫秒)
* @returns {?number} taskStatusData.taskStatus[].signCount 已完成签到次数
* @returns {boolean} taskStatusData.taskStatus[].isDone 是否达成
* @returns {?number} taskStatusData.taskStatus[].speakCount 发言次数
* @returns {?string} taskStatusData.taskStatus[].payload 自定义参数
* @returns {string} taskStatusData.taskStatus[].activityId 活动id
*/
});
3、監聽聊天室 message 類型 (onSliceID)
// 代码示例
watchCore.chat.getSocket().addEventListener('message', (data: string)=> {
const objData = JSON.parse(data)
// 后进入直播间的观众触发
if(objData.EVENT === 'onSliceID') {
console.warn('onSliceID', objData)
/**
* @socket {on} <message> onSliceID
* 监听onSliceID事件
* @returns {...}
* @returns {?object} objData.data.listenInteractEventPayload或listenInteractEventPayloadForCustomTask 监听互动事件的数据,表示正在监听中。创建任务监听时,存在callbackUrl则为listenInteractEventPayloadForCustomTask。;否则为listenInteractEventPayload
*/
}
})
4、監聽聊天室 interactEvent 類型 (START_LISTEN、TASK_DONE、END_TASK、REMOVE_TASK)
// 代码示例
watchCore.chat.getSocket().addEventListener('interactEvent', (data: string)=> {
const interactData = JSON.parse(data)
// 先进入直播间的观众触发
if(interactData.EVENT === 'START_LISTEN') {
console.warn('START_LISTEN', interactData)
/**
* @socket {on} <interactEvent> START_LISTEN
* 开始监听互动事件
* @returns {object} interactData
* @returns {string} interactData.type 互动类型,'inAndOut' | 'sign' | 'speak' | 'parent'
* @returns {?string} interactData.activityId 活动id
* @returns {?Array} interactData.userTags 用户标签
*/
}
// 完成任务触发
if(interactData.EVENT === 'TASK_DONE') {
console.warn('TASK_DONE', interactData)
/**
* @socket {on} <interactEvent> TASK_DONE
* 完成任务
* @returns {object} interactData
* @returns {string} interactData.EVENT TASK_DONE
* @returns {string} interactData.taskId 任务ID
* @returns {string} interactData.activityId 活动ID
* @returns {string} interactData.roomId 房间ID
* @returns {string} interactData.taskType 任务类型,speakCount、signCount、onlineTime等
* @returns {object} interactData.taskData 任务数据
*/
}
// 任务结束触发
if(interactData.EVENT === 'END_TASK') {
console.warn('END_TASK', interactData)
/**
* @socket {on} <interactEvent> END_TASK
* 任务结束通知
* @returns {object} interactData
* @returns {string} interactData.EVENT END_TASK
* @returns {string} interactData.taskId 任务ID
* @returns {string} interactData.activityId 活动ID
*/
}
// 任务删除触发
if(interactData.EVENT === 'REMOVE_TASK') {
console.warn('REMOVE_TASK', interactData)
/**
* @socket {on} <interactEvent> REMOVE_TASK
* 任务删除通知
* @returns {object} interactData
* @returns {string} interactData.EVENT REMOVE_TASK
* @returns {string} interactData.taskId 任务ID
* @returns {string} interactData.activityId 活动ID
*/
}
})
5、簽到成功回呼
/**
* checkInSdk.events.SIGN_IN 开始签到
* checkInSdk.events.SIGN_IN_SUCCESS 签到成功
* checkInSdk.events.SIGN_IN_FINISH 签到限时结束
* checkInSdk.events.STOP_SIGN_IN 讲师结束签到
* checkInSdk.events.SIGN_IN_FAIL 签到失败
**/
// 1、在开源项目中找到文件src\components\page-watch-common\interactive-receive\check-in\hooks\use-check-in.ts
// 2、改动参考如下
const signInSuccess = () => {
console.warn('签到成功')
beforeRemoveCheckInEntrance()
}
onBeforeMount(() => {
...
checkInSdk.on(checkInSdk.events.SIGN_IN_SUCCESS, signInSuccess);
});
onBeforeUnmount(() => {
...
checkInSdk.off(checkInSdk.events.SIGN_IN_SUCCESS, signInSuccess);
});
6、監聽聊天室 customMessage 類型 (中獎廣播通知)
// 代码示例
watchCore.chat.getSocket().addEventListener('customMessage', (data: string)=> {
console.warn('customMessage', data);
});
後端文件
7、建立互動監聽事件
8、刪除互動監聽事件
1、END_TASK下发会带上任务id或活动id。
2、删除会发送 REMOVE_TASK 事件
9、廣播中獎訊息介面
並發限制:1 秒內,所有請求的 userIds 長度加總不得超過 8 萬
