监听事件
注册监听
接口
AIDeskCoreInstance.eventCenter.addEvent(eventName, handler)
参数
名称 | 类型 | 描述 |
eventName | String | 事件名称。 |
handler | Function | 处理事件的方法,当事件触发时,会调用此 handler 进行处理。 |
返回值
无
示例
import AIDeskCoreInstance from '@tencentcloud/ai-desk-core';AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT, onAIAssistAnswerEvent);
移除监听
接口
AIDeskCoreInstance.eventCenter.removeEvent(eventName, handler)
参数
名称 | 类型 | 描述 |
eventName | String | 事件名称。 |
handler | Function | 处理事件的方法,当事件触发时,会调用此 handler 进行处理。 |
返回值
无
示例
import AIDeskCoreInstance from '@tencentcloud/ai-desk-core';AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT, onAIAssistAnswerEvent);
事件列表
AI_DESK_EVENTS.CALL_IN
客服收到新分配的会话时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onSessionCallIn = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.CALL_IN]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.CALL_IN, onSessionCallIn);
AI_DESK_EVENTS.CALL_IN_ACCEPTED
客服接听会话成功时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onSessionCallInAccepted = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.CALL_IN_ACCEPTED]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.CALL_IN_ACCEPTED, onSessionCallInAccepted);
AI_DESK_EVENTS.SESSION_ENDED
客服在会话结束时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onSessionEnded = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.SESSION_ENDED]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.SESSION_ENDED, onSessionEnded);
AI_DESK_EVENTS.MESSAGE_RECEIVED
客服收到新消息时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onMessageReceived = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.MESSAGE_RECEIVED]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.MESSAGE_RECEIVED, onMessageReceived);
AI_DESK_EVENTS.IM_SESSION_REPLY_TIMEOUT
客服在没回复会话事件达到管理端设置的员工响应超时的时间时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onIMSessionReplyTimeout = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.IM_SESSION_REPLY_TIMEOUT]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.IM_SESSION_REPLY_TIMEOUT, onIMSessionReplyTimeout);
AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT
客服在调用 AI 辅辅助回复时会收到此事件,后台会流式推送机器人生成的消息。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onAIAssistAnswerEvent = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT, onAIAssistAnswerEvent);
AI_DESK_EVENTS.AI_ASSIST_ANSWER_EVENT
客服的状态变更时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onAgentStatusChange = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.AGENT_STATE_CHANGED]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.AGENT_STATE_CHANGED, onAgentStatusChange);
AI_DESK_EVENTS.KICKED_OUT
当客服的账号在其他 web 登录是时会收到此事件,并会把之前页面登录的账号下线。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onKickedOutEvent = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.KICKED_OUT]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.KICKED_OUT, onKickedOutEvent);
AI_DESK_EVENTS.FORCED_OFFLINE
当客服的账号被管理端强制下线时会收到此事件。
示例
import AIDeskCoreInstance, { AI_DESK_EVENTS, type AIDeskEventParamsMap } from '@tencentcloud/ai-desk-core';const onForcedOfflineEvent = (data: AIDeskEventParamsMap[AI_DESK_EVENTS.FORCED_OFFLINE]) => {console.log(data)};AIDeskCoreInstance.eventCenter.addEvent(AI_DESK_EVENTS.FORCED_OFFLINE, onForcedOfflineEvent);
监听 Store 属性
AIDeskCore 内置了一个存储当前系统属性的 Store,Store 里的属性包括当前客服所含有的会话数据、系统的设置数据、用户的数据等,开发者可以通过监听的方式获取内容并做出不同的处理。
注册监听
说明:
此监听在挂载时默认会用当时 Store 内存储的数据去触发一次监听的回调函数。
接口
AIDeskCoreInstance.coreStore.watch(storeName, callbackOptions)
参数
名称 | 类型 | 描述 |
eventName | String | Store 的名称。 |
callbackOptions | [key: string]: (newCallbackData?: any) => void | 指定数据项发生变化时执行的回调。 |
返回值
无
示例
import AIDeskCoreInstance, { StoreName } from '@tencentcloud/ai-desk-core';AIDeskCoreInstance.coreStore.watch(StoreName.SESSION, {IMSessionList: onIMSessionListUpdated, // 监听外部会话的变化IMRobotSessionList: onIMRobotSessionListUpdated, // 监听机器人会话的变化IMQueueSessionList: onIMQueueSessionListUpdated, // 监听排队中会话的变化currentSession: onCurrentSessionUpdated, // 监听当前AIDeskCore选择的会话的变化});
移除监听
接口
AIDeskCoreInstance.coreStore.unwatch(storeName, callbackOptions)
参数
名称 | 类型 | 描述 |
eventName | String | Store 的名称。 |
callbackOptions | [key: string]: (newCallbackData?: any) => void | 指定数据项发生变化时执行的回调。 |
返回值
无
示例
import AIDeskCoreInstance, { StoreName } from '@tencentcloud/ai-desk-core';AIDeskCoreInstance.coreStore.unwatch(StoreName.SESSION, {IMSessionList: onIMSessionListUpdated, // 监听外部会话的变化IMRobotSessionList: onIMRobotSessionListUpdated, // 监听机器人会话的变化IMQueueSessionList: onIMQueueSessionListUpdated, // 监听排队中会话的变化currentSession: onCurrentSessionUpdated, // 监听当前AIDeskCore选择的会话的变化});
Store 列表
系统设置 Store
export type IAppSettingStoreData = {imTimeout: number; // 在线会话超时时间imAutoAccept: boolean; // 是否自动接听在线会话skillGroupMap: Record<//当前客服所属技能组的信息string,{skillGroupName: string; // 技能组名称}>;restReasonList: {name: string; // 小休原因名称state: string; // 数据状态}[]; // 小休原因列表imContactUserEnable: boolean; // 是否开启主动联系staffShowReadReceipt: number; // 是否显示已读回执userMsgTranslationEnable: number; // 是否开启翻译用户消息seatMsgTranslationEnable: number; // 是否开启翻译坐席消息msgEnhanceEnable: number; // 是否支持文本润色generateReplyMsgEnable: number; // 是否支持AI智能回复robotSessionEnabled: number; // 是否开启机器人会话monitorAgentSessionEnabled: number; // 是否开启监控坐席会话chatWorkBenchShowUserIP: number; // 是否在工作台显示用户的ip信息enableModifySelfReceptionLimit: number; // 是否允许修改自己的接待限制legacyMultiCallMode: boolean; // 根据配置进入传统电话多路交互模式imBlackUserEnable: boolean; // 是否开启IM黑名单功能};
聊天消息 Store
export type IChatStoreData = {messageList: MessageModel[]; //当前会话的消息列表isCompleted: boolean; // 是否已拉取完所有消息nextReqCursor: number | string | undefined; // 下一次拉取消息的的浮标quoteMessage: {messageID: string,messageAbstract: string,messageSender: string,messageSenderNick: string,messageType: number,messageTime: number,messageSequence: number,version: 1,} | undefined; // 引用消息};
会话 Store
type CurrentSessionData = {sessionId: string; // 当前会话IDsessionType: ''; // 当前会话类型为空sessionData: null;} | {[T in SESSION_TYPE]: {sessionId: string; // 当前会话IDsessionType: T; // 当前会话类型sessionData: SessionTypeMap[T];}}[SESSION_TYPE];export type ISessionStoreData = {currentSession: CurrentSessionData;IMSessionList: SessionModel<SESSION_TYPE.IM>[]; // 在线会话列表IMRobotSessionList: SessionModel<SESSION_TYPE.ROBOT>[]; // 机器人会话列表IMQueueSessionList: SessionModel<SESSION_TYPE.IM_QUEUE>[]; // 排队会话列表IMOtherInprogressSessionList: SessionModel<SESSION_TYPE.IM_OTHER_INPROGRESS>[]; // 其他坐席进行中的会话列表translateTextInfo: {[sessionId: string]: {[messageId: string]: {translateResult: string;translateStatus: 'loading' | 'success' | 'error';};};}; // 翻译文本消息的结果voiceToTextInfo: {[sessionId: string]: {[messageId: string]: {translateResult: string;translateStatus: 'loading' | 'success' | 'error';};};}; // 语音转文字消息的结果};
用户资料 Store
export type IUserInfoStoreData = {userId: string; // 用户idsdkAppId: string; // 应用idstaffName: string; // 座席名称staffNo: string; // 座席编号mobile: string; // 手机号nickname: string; // 昵称staffAvatar: string; // 头像skillGroupId: string[]; // 所属技能组idreceptionLimit: number; // 个人设置的接待上限connectionState: 'disconnected' | 'connected' | 'connecting' | 'reconnecting',// 客服系统连接状态IMNetStatus: 'disconnected' | 'connected' | 'connecting' | 'reconnecting',// IM 系统连接状态status: | 'offline'| 'free'| 'busy'| 'rest'| 'countdown'| 'arrange'| 'notReady', // 客服状态reason?: string,// 小修原因seatMesssageTranslateTargetLanguage: Record<string, string>,// 记录不同会话客服需要把消息翻译成什么语言messsageListTranslateTargetLanguage: string,// 记录消息列表的消息应该被翻译成什么语言};