保利威文档中心

幫助中心

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 萬

根據用戶 ID 進行廣播訊息

10、廣播開獎介面

發送自訂訊息

联系客服,在线咨询