帮你快速理解、总结文档立即下载

监听相关

最近更新时间:2026-08-13 16:20:00
我的收藏

监听事件

注册监听

接口
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; // 当前会话ID
sessionType: ''; // 当前会话类型为空
sessionData: null;
} | {
[T in SESSION_TYPE]: {
sessionId: string; // 当前会话ID
sessionType: 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; // 用户id
sdkAppId: string; // 应用id
staffName: string; // 座席名称
staffNo: string; // 座席编号
mobile: string; // 手机号
nickname: string; // 昵称
staffAvatar: string; // 头像
skillGroupId: string[]; // 所属技能组id
receptionLimit: 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,// 记录消息列表的消息应该被翻译成什么语言
};