注意:
TCCC 是加载 SDK 后的全局变量,可直接访问。
通用结构
AgentStatus
座席状态。
字段 | 描述 |
free | 空闲 |
busy | 忙碌 |
arrange | 话后整理 |
notReady | 示忙 |
rest | 小休 |
ServerType
端服务类型,描述电话类型会话时使用的端类型。
字段 | 描述 |
staffSeat | Web 座席类型 |
staffPhoneSeat | 座席手机类型 |
miniProgramSeat | 小程序类型 |
staffExtensionSeat | 话机类型 |
CommonSDKResponse
参数 | 类型 | 必填 | 备注 | |
options | status | 'success' |'error' | 是 | SDK API 调用结果,成功时返回 success,失败返回 error |
| errorMsg | string | 否 | 错误信息,当 status 为 error 时返回 |
Call(电话客服和音频客服相关接口函数)
电话呼出
tccc.Call.startOutboundCall(options): Promise<CallResponse>
CallResponse 描述如下:
参数 | 类型 | 必填 | 备注 | |
response | sessionId | String | 是 | 指定会话 ID |
| calleeLocation | String | 否 | 被叫号码归属地址 |
| calleePhoneNumber | String | 是 | 被叫号码 |
| callerPhoneNumber | String | 是 | 外呼时使用的主叫号码 |
| serverType | String | 是 | |
| remark | String | 否 | 被叫号码备注 |
接待会话
tccc.Call.accept(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID,从 tccc.events.callIn 事件中获取 |
|
挂断会话
tccc.Call.hungUp(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
删除会话
tccc.Call.deleteCall(options)
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
静音
tccc.Call.muteMic(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
取消静音
tccc.Call.unmuteMic(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
当前是否静音
tccc.Call.isMicMuted(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
发起内部通话
tccc.Call.startInternalCall(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | calleeUserId | String | 是 | 被叫座席账号 |
| useMobile | Boolean | 否 | 是否呼叫对方手机 |
转接会话
tccc.Call.transfer(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| skillGroupId | String | 否 | 转接到指定技能组 |
| userId | String | 否 | 转接到指定座席 |
| phone | String | 否 | 转接到指定号码 |
呼叫保持
tccc.Call.hold(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
通话监听
tccc.Call.monitor(options): Promise<CommonSDKResponse>
注意该 API 需管理员或质检员角色才能调用。
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | |
| textOnly | Boolean | 否 | 默认为 false,表示发起语音监听,指定为 true 表示发起文字监听 |
强拆
tccc.Call.intercept(options): Promise<CommonSDKResponse>
发起通话强拆,被强拆的会话必须处于被监听状态。
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 被强拆的会话ID |
取消通话保持
tccc.Call.unHold(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
发送分机号
tccc.Call.sendDigits(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| dtmfText | String | 否 | 需要发送的分机号 |
开启ASR(语音识别功能)
tccc.Call.startASR(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
关闭ASR(语音识别功能)
tccc.Call.stopASR(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
Chat(在线客服相关接口函数)
接听会话
tccc.Chat.accept(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
结束会话
tccc.Chat.end(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
转接会话
tccc.Chat.transfer(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| skillGroupId | String | 否 | 转接到指定技能组 |
| userId | String | 否 | 转接到指定座席 |
Video(视频客服相关接口函数)
接听会话
tccc.Video.accept(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
挂断会话
tccc.Video.end(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
静音
tccc.Video.muteMic(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
取消静音
tccc.Video.unmuteMic(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
关闭摄像头
tccc.Video.muteVideo(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
开启摄像头
tccc.Video.unmuteVideo(options): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
转接会话
tccc.Video.transfer(): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| skillGroupId | String | 否 | 转接到指定技能组 |
| userId | String | 否 | 转接到指定座席 |
Agent(座席状态相关接口函数)
上线
tccc.Agent.online(): void
下线
tccc.Agent.offline(): void
设置座席状态
tccc.Agent.setStatus(optoins): Promise<CommonSDKResponse>
参数 | 类型 | 必填 | 备注 | |
options | status | String | 是 | 座席状态,可选值: free:空闲 rest:小休 notReady:示忙 stopNotReady:停止示忙 |
| restReason | String | 否 | 小休原因 |
获取座席状态
tccc.Agent.getStatus():AgentStatus
Devices(设备相关接口函数)
检测当前浏览器是否支持
tccc.Devices.isBrowserSupported(): boolean
说明:
TCCC Web SDK 支持 Chrome 56、Edge 80以上的浏览器。
返回麦克风设备列表
tccc.Devices.getMicrophones(): Promise<MediaDeviceInfo []>
返回扬声器设备列表
tccc.Devices.getSpeakers(): Promise<MediaDeviceInfo []>
UI(座席界面相关接口函数)
隐藏 SDK 所有 UI
tccc.UI.hide(): void
显示 SDK 所有 UI
tccc.UI.show(): void
显示浮动按钮
tccc.UI.showfloatButton(): void
隐藏浮动按钮
tccc.UI.hidefloatButton(): void
显示工作台
tccc.UI.showWorkbench(): void
隐藏工作台
tccc.UI.hideWorkbench(): void
显示通话条
tccc.UI.showNotificationBar(): void
隐藏通话条
tccc.UI.hideNotificationBar(): void
修改SDK本地设置
支持关闭SDK铃声和系统通知
tccc.UI.updateUserCustomSettings(settings): void
settings内参数都是可选项,支持增量更新。
参数 | 类型 | 必填 | 备注 | |
settings | disableRingtone | Boolean | 否 | true 表示禁用 SDK 的铃声,包括来电铃声、接听铃声 |
| disableNotification | Boolean | 否 | true 表示禁用 SDK 的系统通知 |
Events(事件)
事件监听
tccc.on(event, callback)
取消事件监听
tccc.off(event, callback)
SDK 初始化完成
tccc.events.ready
当 SDK 初始化完成时触发,此时可安全调用 API。
callback 参数 | 类型 | 必填 | 备注 | |
options | tabUUID | String | 是 | 表示当前页面的唯一 ID,刷新后会变,用于多 Tab 集成 SDK |
会话呼入
tccc.events.callIn
会话呼入类型包括:
phone:电话会话
im:在线会话
voip:音频会话
video:视频会话
internal:内线会话
电话会话呼入
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 会话 ID |
| type | 'phone' | 是 | 电话会话类型 |
| timeout | Number | 是 | 会话接入超时时长,0代表不超时 |
| calleePhoneNumber | String | 是 | 被叫号码 |
| callerPhoneNumber | String | 否 | 主叫号码 |
| callerLocation | String | 否 | 主叫号码归属地 |
| remark | String | 否 | 备注 |
| ivrPath | {key: String, label: String}[] | - | 用户的 IVR 按键路径,key 表示对应按键,label 表示对应的按键标签 |
| protectedCallee | String | 否 | 在开启号码映射时存在,表示被叫 |
| protectedCaller | String | 否 | 在开启号码映射时存在,表示主叫 |
| serverType | 'staffSeat' | 'staffPhoneSeat' | 'staffExtensionSeat' | 是 | 表示呼入到座席哪一端,staffSeat 为默认值,表示 Web 座席;StaffPhoneSeat 表示呼入到座席手机,MiniProgramSeat 表示小程序座席,staffExtensionSeat 表示呼入到座席绑定的话机 |
在线会话呼入
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 会话 ID |
| type | 'phone' | 是 | 电话会话类型 |
| timeout | Number | 是 | 会话接入超时时长,0代表不超时 |
| nickname | String | 是 | 用户昵称 |
| avatar | String | 否 | 用户头像 |
| remark | String | 否 | 备注 |
| peerSource | String | 否 | 渠道来源 |
| channelName | String | 否 | 自定义参数 |
| clientData | String | 否 | 用户自定义参数 |
音频会话呼入
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 会话 ID |
| type | 'voip' | 是 | 音频会话类型 |
| timeout | Number | 是 | 会话接入超时时长,0代表不超时 |
| callee | String | 是 | 渠道入口 |
| calleeRemark | String | 否 | 渠道入口备注 |
| userId | String | 是 | 用户的 openId |
| nickname | String | 否 | 用户授权后可获得微信昵称 |
| avatar | String | 否 | 用户授权后可获得微信头像 |
| remark | String | 否 | 备注 |
| peerSource | String | 否 | 主叫号码归属地 |
| ivrPath | {key: String, label: String}[] | 否 | 用户的 IVR 按键路径,key 表示对应按键,label 表示对应的按键标签 |
| clientData | String | 否 | 用户自定义参数 |
视频会话呼入
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 会话 ID |
| type | 'video' | 是 | 视频会话类型 |
| timeout | String | 是 | 会话接入超时时长,0代表不超时 |
| userId | String | 是 | 用户的 openId |
| nickname | String | 否 | 用户授权后可获得微信昵称 |
| avatar | String | 否 | 用户授权后可获得微信头像 |
| remark | String | 否 | 备注 |
|
内部会话呼入
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 会话 ID |
| type | 'internal' | 是 | 内部会话类型 |
| timeout | Number | 是 | 会话接入超时时长,0代表不超时 |
| peerUserId | String | 是 | 主叫座席的账号 |
| ||||
| ||||
| ||||
|
座席接入会话
tccc.events.userAccessed
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| tabUUID | String | 否 | 开启多 Tab 集成时存在,表示哪个 Tab 接听的会话 |
|
会话超时转接事件
tccc.events.autoTransfer
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
会话结束事件
tccc.events.sessionEnded
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| closeBy | String | 是 | 表示挂断方: user:用户挂断 seat:座席挂断 admin:系统挂断 timer:定时器挂断 |
| mainReason | String | 否 | 仅在电话类型,并且挂断方为"admin"时存在,表示挂断原因 |
| subReason | String | 否 | 仅在电话类型,并且挂断方为"admin"时存在,表示挂断的详细原因 |
外呼成功事件
tccc.events.callOuted
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
| callerPhoneNumber | String | 是 | 外呼使用的主叫号码 |
| calleePhoneNumber | String | 是 | 被叫号码 |
| serverType | 'staffSeat' | 'staffPhoneSeat' | 'staffExtensionSeat' | 'MiniProgramSeat' | 是 | 表示座席外呼类型: staffSeat 为默认值,表示 Web 座席 StaffPhoneSeat 表示使用手机外呼 MiniProgramSeat 表示使用小程序外 staffExtensionSeat 表示使用话机外呼 |
| tabUUID | String | 否 | 开启多Tab集成时存在,表示哪个 Tab 发起的外呼 |
|
外呼对方接听事件
tccc.events.calloutAccepted
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
会话转接事件
tccc.events.transfer
callback 参数 | 类型 | 必填 | 备注 | |
options | sessionId | String | 是 | 指定会话 ID |
|
座席状态变更事件
tccc.events.statusChanged
callback 参数 | 类型 | 必填 | 备注 | | |
options | status | 否 | 详细说明请参见 座席状态 | |
座席被踢下线事件
tccc.events.kickedOut
座席多端登录时触发。
语音识别事件
tccc.events.asr
callback 参数 | 类型 | 必填 | 备注 | | |
options | sessionId | String | 是 | 指定会话 ID | |
| result | ASR 识别结果 | 是 | | |
| flow | 'IN' | 'OUT' | 是 | 识别方向。 IN:用户侧 OUT:座席侧 | |
初始化参数
TCC Web SDK允许在初始化时,新增dataset参数用于开启功能特性
使用方法如下:
function injectTcccWebSDK(SdkURL) {if (window.tccc) {console.warn('已经初始化SDK了,请确认是否重复执行初始化');return;}return new Promise((resolve, reject) => {const script = document.createElement('script');script.setAttribute('crossorigin', 'anonymous');script.src = SdkURL;/** 增加dataset参数,表示开启/关闭功能特性*/script.dataset.xxx = 'true'document.body.appendChild(script);})}
相关 dataset 如下表:
dataset 参数 | 备注 |
enableShared | |
disableNotification | 关闭浏览器通知。 |
disableRingtone | 关闭 SDK 所有铃声。 |
disableCDR | 关闭 SDK 工作台服务记录展示。 |
disableUI | 不初始化 SDK 所有 UI,包括工作台和通话条。 |
disablePreloadMic | 登录后不启动麦克风,并且每次通话完成后释放麦克风。 |
多 Tab 集成 SDK
默认情况下,TCCC Web SDK 只允许在一个地方登录,多处登录会触发 kickedOut 事件。开启多 Tab 功能后,任意一个页面发起的通话,都会在其他页面显示,开发者可根据业务逻辑自行隐藏 UI,或者监听对应事件处理。
限制条件
1. 同一个浏览器的多个窗口,注意不能开启无痕模式。
2. SDK 集成在业务系统处于同一个域名下。
3. 不支持移动端浏览器。
集成步骤
1. 初始化 SDK,参考 Web。
2. 增加 enableShared 参数,表示启用多 Tab 功能。
function injectTcccWebSDK(SdkURL) {if (window.tccc) {console.warn('已经初始化SDK了,请确认是否重复执行初始化');return;}return new Promise((resolve, reject) => {const script = document.createElement('script');script.setAttribute('crossorigin', 'anonymous');script.src = SdkURL;/** 增加enableShared,表示启用多Tab功能*/script.dataset.enableShared = 'true'document.body.appendChild(script);script.addEventListener('load', () => {window.tccc.on(window.tccc.events.ready, ({ tabUUID }) => {resolve('初始化成功,当前tabUUID为' + tabUUID)});window.tccc.on(window.tccc.events.tokenExpired, ({message}) => {console.error('初始化失败', message)reject(message)})})})}
3. 处理多 Tab 逻辑。
触发 callOuted (外呼成功)和 userAccessed (座席接听成功)事件时,会增加 tabUUID 字段,表示哪个页面发起的外呼/接听。
let curTabUUID = '';window.tccc.on(window.tccc.events.ready, ({ tabUUID }) => {console.log('初始化成功,当前tabUUID为' + tabUUID)curTabUUID = tabUUID;});window.tccc.on(window.tccc.events.callOuted, ({ sessionId, tabUUID }) => {if (tabUUID && tabUUID !== curTabUUID) {// 接收到其他页面的外呼成功事件,业务可自行处理}})window.tccc.on(window.tccc.events.userAccessed, ({ sessionId, tabUUID }) => {if (tabUUID && tabUUID !== curTabUUID) {// 接收到其他页面的接听成功事件,业务可自行处理// 此处为示例代码,会忽略该事件return;}})