# 呼叫中心JS组件

测试地址

# 更新日志

版本 时间 说明
---
---
---
V1.7 2021-05-20 更新内容:1、优化上班操作回调函数;2、优化webSocket重连机制;3、webSocket事件区分离线消息与被挤下线消息
V1.6 2021-04-08 更新内容:新增网络电话模式麦克风权限检测机制(参见4.1中errorCallBack回调说明)、优化插件提供的api中的入参和入参说明(详细说明请参照各api)、新增三方通话功能(参见4.21-4.24)
V1.5 2021-03-04 更新内容:新增静音/取消静音功能(参见4.20)、全版本新增“话机注册掉线”回调消息(参见7.12)
V1.4 2021-01-28 更新内容:外显号码参数非必填(参见4.3、4.4)、优化部分方法触发回调函数机制、新增错误提示机制(参见4.1)
V1.4 2021-01-21 更新内容:优化webSocket重连机制、增加部分方法回调参数说明、新增腾讯云对接文档说明(2021年02月04日后正式进行对接)
V1.3 2020-11-09 更新内容:解决通话中无法进行多次转接问题。
V1.2 2020-10-15 JS组件增加查询技能组列表及技能组在线的坐席列表方法。参见4.18、4.19
V1.1 2020-09-17 初始版本,支持坐席的呼入/呼出,以及回调消息。

# 1.背景介绍

第三方对接PAAS希望能够提供web端JS的对接方式,减少对接工作量。针对PAAS接口进行二次封装,主要对坐席相关操作提供js插件对接能力,通过websocket与后台服务通讯

# 2.提供服务

  • 初始化js插件
  • 获取token
  • 坐席上班/下班
  • 坐席外呼
  • 坐席挂断
  • 坐席接听(网络电话方式接听)
  • 修改坐席状态
  • 查询坐席状态
  • 转接坐席
  • 确认转接坐席
  • 取消转接坐席(发起转接的坐席取消转接)
  • 拒绝转接(被转接坐席拒绝接听)
  • 转接第三方
  • 转接技能组
  • 呼叫保持
  • 取消呼叫保持
  • 坐席状态重置
  • 查询呼叫技能组及技能组空闲坐席数量
  • 查询空闲状态呼叫坐席
  • 静音/取消静音
  • 发起三方通话
  • 发起者结束第三方通话
  • 发起者确认第三方加入通话
  • 发起者退出三方通话

# 3.对接方式

调用js插件提供的方法通过回调函数获取相应操作的结果,通过websocket获取网络电话推送消息。

JS组件中的话机接听模式仅支持绑定模式为“话机绑定到坐席”,请在“话机账号”中先将SIP话机账号与坐席进行绑定。

流程

    1. 引用智齿指定的js文件。
    1. 调用指定js文件提供的方法并传递约定的参数。
    1. 如果使用登录方式为网络电话 ,则页面需添加标签如下,以保证网络电话正常使用
<audio style="visibility:hidden;" id="webcam" autoplay="autoplay" src=""></audio>
    1. 使用呼叫中心js对接需进行请求代理转发配置,nginx代理示例:
如果您的账号为阿里云账号,并且js对接的环境为阿里云,则nginx代理配置为
location /comm {
  proxy_pass http://www.sobot.com;
  proxy_set_header Host 'www.sobot.com';
}
如果您的账号为腾讯云账号,并且js对接的环境为腾讯云,则nginx代理配置为
location /comm {
  proxy_pass http://www.soboten.com;
  proxy_set_header Host 'www.soboten.com';
}
    1. 对接流程图示意如下

呼出流程:

图片

呼入流程:

图片

注意:js组件对接不支持同一个账号同时登录两个窗口

# 4.组件对接

引用智齿提供js插件,调用相应的方法,与后台服务通过websocket建立连接,获取信息。需按照示例顺序分别引用四个js文件 (如您项目中已经引用了jquery以及jquery.json-2.4以上的版本,则无需引用这两个文件),文件引用位置为您页面的 body 标签内部。

阿里云账号对接示例如下:
<script src="https://www.sobot.com/paas/component/common/jquery.min.js"></script>
<script src="https://www.sobot.com/paas/component/common/jquery.json-2.4.min.js"></script>
<script src="https://www.sobot.com/paas/component/common/verto-min.js"></script>
<script src="https://www.sobot.com/paas/component/plugin/call_1.7.js"></script>
腾讯云账号对接示例如下:
<script src="https://www.soboten.com/paas/component/common/jquery.min.js"></script>
<script src="https://www.soboten.com/paas/component/common/jquery.json-2.4.min.js"></script>
<script src="https://www.soboten.com/paas/component/common/verto-min.js"></script>
<script src="https://www.soboten.com/paas/component/plugin/call_1.7.js"></script>

# 4.1 初始化js插件

    1. 初始化js插件API: ininServ
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 当引用智齿提供的呼叫中心插件后,window对象下会有zcVertoServ对象,所有封装的方法都在此对象内。
初始化方法示例:
var params = {
    "client_id": "*******",
    "client_secret": "*******",
    "companyId": "*******",
    "agentId": "*******",
    "groupId" : "*******",
    "voipAccount": "*******",
    "callWay": 1
}
window.zcVertoServ.ininServ(params,statusFunc,errorCallBack);

params参数说明:
    client_id:必填, 呼叫中心应用id,即appId;
    client_secret : 必填,应用密钥;
    companyId:必填,公司id;
    agentId:必填,当前坐席id;
    groupId:非必填,当前坐席加入的技能组id;
    voipAccount:非必填, 坐席绑定的sip账号(当接听方式为网络电话、sip话机的时候,该字段为坐席绑定的sip账号;当接听方式为手机时,该字段为坐席手机接听的手机号码);
    callWay: 必填;当前坐席登录方式(1-网络电话;2-sip话机;3-手机)

statusFunc: 必填, 用于接收呼叫状态变化,通话过程中可以通过此回调函数内的消息进行当前通话信息的获取
例:
var statusFunc = function(res){
  	//websocket状态变化回调函数  此函数需初始化时传入
  	var tem={};
  	if(res && res.data){
    	tem = JSON.parse(res.data);
    	if(tem.msgType){
      		switch(tem.msgType){
				case 'onLine':  
					break;
				case 'offLine': //离线
					break;
				case 'repeat':  //被挤下线
					break;
				case 'StopService':
					break;
				case 'AgentHangUp':
					break;
				case 'AgentStateIdle':
					break;
				default:
					if(!!tem.callId){
						currentCall = tem;
					}
			}
    	}
  	}
}
errorCallBack: 非必填 该参数为接收获取token、登录、外呼方法、网络电话模式麦克风检测失败时的错误信息,用于toast、alert等提示。
例:
var errorCallBack = function (msg){
    alert(msg);
}  

# 4.2 获取token

    1. token获取API: getToken
    1. 云通信平台采用oauth2的client形式的鉴权,开发者发起请求时需要在请求url中带上access_token,如无特殊要求,一般生成的access_token失效时间为1天,到期之后需要重新申请access_token,请您做好token的保存,如果因为特殊需要需要生成永久token的需要联系技术人员为您配置生成永久token(为了您的接口安全不建议这么做),使用时预先进行token获取
示例如下:
//获取token方法:
var getToken = function () {
    window.zcVertoServ.getToken(displayResult);
}

displayResult为获取token的回调函数您可以自行定义,用于接收操作结果以及token值;
响应示例:
{
    "access_token": "***************",
    "token_type": "bearer",
    "expires_in": 59,
    "scope": "select"
}

响应参数说明

属性 类型 说明
access_token String token编码
expires_in Int token凭证有效时间(单位为秒)

# 4.3 坐席上班/下班

    1. 坐席上班API: agentLogin ; 坐席下班API: agentLoginout
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席上班后,坐席状态默认置为“空闲”,此状态下可接听电话,也可外呼。
    1. 更新时间:2021-04-08
示例如下:
var agentOnWork = function () {
	// 该方法支持上班后为空闲以及上班后为忙碌状态 
	// 坐席上班(上班后为忙碌)
	var data = {
		"displayNumber": "*********",
		"isRecordStereo": false,
		"agentState": "0"
	}
	window.zcVertoServ.agentLogin(data,displayResult);
	
	// 坐席上班(上班后为空闲状态)
	var data = {
		"displayNumber": "*********",
		"isRecordStereo": false
	}
	window.zcVertoServ.agentLogin(data,displayResult);
} 

//坐席下班
var loginout = function () {
    window.zcVertoServ.agentLoginout(displayResult);
}

参数说明:
displayNumber:非必填;上班号码用于坐席手机登录时,回呼坐席手机的外显号码;以及坐席发起转接或咨询第三方时,呼叫第三方号码的外显号码。为空时由系统根据企业配置的《号码管理》规则指定号码作为上班号码。
isRecordStereo:非必填;是否开启双声道录音(false-不开启;true-开启),为空时则默认为false-不开启。
agentState:非必填;坐席上班后的状态(0-忙碌;1-空闲),为空时则默认上班后置于1-空闲;
通过调用window.zcVertoServ.agentLogin方法进行传递,此方法接收的第二个参数displayResult为上班/下班操作的回调函数,您需根据上班或者下班进行分开定义回调进行传递。(坐席下班方法中只需接收一个回调函数参数即可,无需data参数)

回调函数收到响应示例:
{
    "retCode": "000000",
    "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.4 坐席外呼

    1. 坐席外呼API: agentCallOut
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席人员主动发起外呼。坐席状态只有在空闲、忙碌状态下才能进行外呼。
    1. 更新时间:2021-04-08
示例如下:
// 坐席外呼
var callOut = function () {
    var data = {
        "displayNumber": "*******",
        "destinationNumber": "*******",
        "params":""
    }
    window.zcVertoServ.agentCallOut(data,displayResult);
}

参数说明:
displayNumber:非必填;外呼时显示的主叫号码。为空时由系统根据企业配置的《号码管理》规则指定号码作为外显号码;
destinationNumber:必填;不支持国际号码,国内短号是否支持受中继号码的线路约束决定;
params: 非必填;此参数会在推送通话记录的接口中,向用户返回您传入的数据。
encrypt:外呼被叫号码是否加密参数,当encrypt为1时表示被叫号码已经加密,不携带该参数表示被叫号码不加密。加密算法请联系您的销售或客服获取。

displayResult用于接收本次外呼操作成功/失败结果;
外呼方法返回值包含当前通话信息的通话id、外呼结果;

通话的详细参数在初始化方法传入的statusFunc状态回调函数中获取,如果statusFunc函数中接收到带有callId的消息,则进行存储即可(详细请参照4.1初始化js插件示例)

响应示例:
{
  "callId": “*************”, 
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示
callId String 外呼成功的通话ID

# 4.5 坐席挂断

    1. 坐席挂断API: agentHangUp
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席人员主动挂断当前通话。
    1. 更新时间:2021-04-08
示例如下:
// 坐席挂断
var agentHangUp = function () {
	var data = {
	    "callId": "*********"
	}
    window.zcVertoServ.agentHangUp(data,displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为用于接收挂断操作信息的回调函数,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.6 坐席接听(网络电话方式接听)

    1. 坐席接听(网络电话方式接听)API: agentListen
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 呼入场景下,坐席为网络电话接听方式时,调用该接口接通电话。sip话机或者手机模式无需调用该方法。该接口不适用呼出场景。
    1. 更新时间:2021-04-08

示例如下:
// 坐席接听
var listen = function () {
	// 接听函数无需回调
	window.zcVertoServ.agentListen();
}
此操作中无需接收任何参数。

# 4.7 修改坐席状态

    1. 修改坐席状态API: updateAgentState
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 修改当前坐席状态,支持7种:忙碌、空闲、小休、培训、会议、用餐、活动。其中空闲状态可以外呼,也可以呼入分配来电,忙碌、小休、培训、会议、用餐、活动状态下都是只可外呼、不支持呼入分配来电。
    1. 更新时间:2021-04-08
示例如下:
// 修改坐席状态
var updateAgentState = function (agentState){
    var data = {
        "agentState": "0"
    }
    window.zcVertoServ.updateAgentState(data,displayResult);
}
参数说明:
agentState:必填;坐席状态(0-忙碌;1-空闲;114-小休;116-培训;117-会议;118-用餐;119-活动)

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
    "retCode": "000000",
    "retMsg": "success"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.8 查询坐席状态

    1. 查询坐席状态API: queryAgentState
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 查询坐席当前状态。
    1. 更新时间:2021-04-08
示例如下:
// 查询坐席状态
var queryAgentState = function () {
    window.zcVertoServ.queryAgentState(displayResult);
}
参数说明:
displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
    "item": {
        "agentEmail": "******@sobot.com"
        "agentId": "**********",
        "agentName": "智齿测试坐席",
        "agentState": "0",
        "appId": "**********",
        "busyCause": "0",
        "callWay": "1",
        "companyId": "**********"
    },
    "retCode": "000000",
    "retMsg": "success"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示
item Object 返回的查询结果信息对象

item信息对象参数说明

属性 类型 说明
agentEmail String 坐席邮箱
agentId String 坐席ID
agentName String 坐席名称
agentState String 本查询支持的状态(0-忙碌;1-空闲;3-通话中;-1-离线;114-小休;115-后处理;116-培训;117-会议;118-用餐;119-活动;)
appId String 坐席所在的企业appId
busyCause String 当坐席状态为(0-忙碌;1-空闲;3-通话中;-1-离线;)时,则置忙原因为空。当坐席状态为(114-小休;115-后处理;116-培训;117-会议;118-用餐;119-活动;)时,置忙原因和坐席状态相同。企业通常仅使用坐席状态参数即可。
callWay String 当前坐席登录方式(1-网络电话、2-sip话机、3-手机)
companyId String 坐席所在的公司ID

# 4.9 转接坐席

    1. 转接坐席API: agentTransfer
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A呼叫坐席B(询问坐席B是否可以接待用户)。
    1. 更新时间:2021-04-08

示例如下:
// 转接坐席
var agentTransfer = function () {
    var data = {
        "callId": "*********",
        "transferNumber": "*********"
    }
    window.zcVertoServ.agentTransfer(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;
transferNumber: 必填;转到的目的坐席id。

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.10 确认转接坐席

    1. 确认转接坐席API: agentTransferConfirm
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A与坐席B通话后。坐席A操作确认转接坐席,通话将转给坐席B(用户与坐席B通话,坐席A退出)。需与转接坐席接口配套使用。
    1. 更新时间:2021-04-08
示例如下:
// 确认转接坐席
var agentTransferConfirm = function () {
    var data = {
        "callId": "*********"
    }
    window.zcVertoServ.agentTransferConfirm(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.11 取消转接坐席(发起转接的坐席取消转接)

    1. 取消转接坐席(发起转接的坐席取消转接)API: agentConsultBack
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A发起呼叫坐席B后。坐席A操作取消转接坐席,坐席B振铃前、振铃中、通话中,坐席A都可以操作取消转接坐席。取消后坐席B将被踢出通话,用户继续与坐席A通话。需与转接坐席接口配套使用。
    1. 更新时间:2021-04-08
示例如下:
// 取消转接坐席(发起转接的坐席取消转接)
var agentConsultBack= function () {
    var data = {
        "callId": "*********",
    }
    window.zcVertoServ.agentConsultBack(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
    retCode: "000000",
    retMsg: "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.12 拒绝转接(被转接坐席拒绝接听)

    1. 拒绝转接(被转接坐席拒绝接听)API: rejectConsult
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A呼叫坐席B,坐席B振铃后。被转接坐席B拒接(挂断)电话。用户继续与坐席A通话。需与转接坐席接口配套使用。
    1. 更新时间:2021-04-08
示例如下:
// 拒绝转接(被转接坐席拒绝接听)
var rejectConsult= function () {
    var data = {
        "callId": "*******",
        "agentId": "********"
    }
    window.zcVertoServ.rejectConsult(data, displayResult);
}
参数说明:
agentId:必填;为statusFunc回调函数中的返回的当前通话信息中的转接发起人的id,在currentCall通话信息中取adminAgentId参数即可;
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
    retCode: "000000",
    retMsg: "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.13 转接第三方

    1. 转接第三方API: transferThirdNum
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫直接转给第三方号码(手机或固话号码),执行转接后,坐席A立即退出通话。用户收听第三方号码的振铃或彩铃音,如果呼叫第三方未呼通,则电话会超时挂断。
    1. 更新时间:2021-04-08

示例如下:
// 转接第三方
var transferThirdNum = function () {
    var data = {
        "callId": "*******",
        "transferNumber": "********"
    }
    window.zcVertoServ.transferThirdNum(data, displayResult);
}

参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;
transferNumber:必填;第三方号码,支持大陆地区固话号码和手机号码(实际以中继号码的线路要求为准)。

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.14 转接技能组

    1. 转接技能组API: transferGroup
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话中坐席A将用户的呼叫直接转向其他技能组,执行转接后,坐席A立即退出通话。用户进入目的技能组中排队或被技能组分配坐席。如果用户进入技能组中排队超时,则电话会超时挂断。
    1. 更新时间:2021-04-08
示例如下:
// 转接技能组
var transferGroup = function () {
    var data = {
        "callId": "*******",
        "groupId": "*******",
        "timeout": 50
    }
    window.zcVertoServ.transferGroup(data, displayResult);

参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;
groupId:必填;将要转接到的目的技能组id;
timeout:必填;转接技能组时可以设置本次电话转接技能组时,技能组的单次排队超时时间,超过该时间会继续执行[客户排队设置]中的重复排队次数。单位为秒,建议设置为15-60秒之间。


displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.15 呼叫保持

    1. 呼叫保持API: agentHold
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话时坐席操作呼叫保持后,用户端收听背景音,坐席可以与其他人讲话(用户听不到坐席侧的声音)。
    1. 更新时间:2021-04-08
示例如下:
// 呼叫保持
var agentHold = function () {
    var data = {
        "callId": "********"
    }
    window.zcVertoServ.agentHold(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.16 取消呼叫保持

    1. 取消呼叫保持API: agentUnHold
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 保持中的通话,坐席可以取消呼叫保持,取消后,用户端恢复与坐席正常的双向通话(彼此听到对方声音)。通常与呼叫保持接口配套使用。
    1. 更新时间:2021-04-08
示例如下:
// 取消呼叫保持
var agentUnHold = function () {
    var data = {
        "callId": "********"
    }
    window.zcVertoServ.agentUnHold(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;

displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.17 坐席状态重置

    1. 坐席状态重置API: resetStatus
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 用于重置坐席的状态为空闲。通常用于坐席当前状态和实际话务状态不一致(通话异常)时,重置为空闲后,坐席可以再次接打电话。
    1. 更新时间:2021-04-08
示例如下:
// 坐席状态重置方法
var resetStatus = function() {
    window.zcVertoServ.resetStatus(displayResult);
};
参数说明:
displayResult为回调函数 用于接收回调信息,可自行定义

响应示例:
{
  "retCode": "000000",
  "retMsg": "成功"
}

响应参数说明

属性 类型 说明
retCode String 操作结果代码(000000为成功)
retMsg String 本次操作成功/失败文案提示

# 4.18 查询呼叫技能组及技能组空闲坐席数量

    1. 查询呼叫技能组及技能组空闲坐席数量API: queryGroups
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 查询数据包含呼叫技能组和电销技能组,以及组内空闲坐席数量。
    1. 更新时间:2021-04-08
示例如下:
var queryGroups = function (){
    window.zcVertoServ.queryGroups(displayResult);
}
参数说明:
displayResult为回调函数 用于接收回调信息,需自行定义

响应示例:
{
     "retCode": "000000",
     "retMsg": "查询成功"
     "items": [
          {
               "groupType": 2,
               "typeName": "呼叫技能组",
               "items": [
                    {
                         "groupName": "智齿测试技能组",
                         "groupType": "2",
                         "groupId": "************",
                         "free": 0
                    },
                    {
                         "groupName": "智齿测试技能组",
                         "groupType": "2",
                         "groupId": "************",
                         "free": 0
                    }
               ]
          },
          {
               "groupType": 3,
               "typeName": "电销技能组",
               "items": [
                    {
                         "groupName": "智齿测试技能组",
                         "groupType": "3",
                         "groupId": "************",,
                         "free": 0
                    }
               ]
          }
     ]
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述
items String 本公司内所有类型技能组集合参数详情(释义见下方)

本公司所有类型技能组集合参数详情

属性 类型 说明
items String 同一类型技能组集合(释义见下方)
groupType String 技能组类型,2:呼叫,3:电销
typeName String 技能组类型名称

同一类型技能组集合参数详情

属性 类型 说明
groupId String 技能组ID
groupType String 技能组类型,2:呼叫,3:电销
groupName String 技能组名称
free Int 空闲坐席数量

# 4.19 查询空闲状态呼叫坐席

    1. 查询空闲状态呼叫坐席API: queryAgents
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 查询数据包含呼叫技能组和电销技能组下的坐席。常用于转接、三方前查询空闲状态的坐席。
    1. 更新时间:2021-04-08
示例如下:
var queryAgents = function (){
    var data = {
        groupId: "*********",
        queryContent: "*********"
    }
    window.zcVertoServ.queryAgents(data,displayResult);
}
参数说明:
groupId:非必填;查询的技能组范围,为空时在所有呼叫技能组和电销技能组中搜索;
queryContent:非必填;模糊搜索坐席姓名;

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
    "items": [
          {
            	"agentStatus": "1",
            	"groupId": "*************",
            	"groupName": "智齿测试技能组",
       		  	"groupType": 3,
       		  	"typeName":  "电销技能组",
            	"serviceEmail": "*****@sobot.com",
    	        "serviceId": "*************",
          	  "serviceName": "智齿测试坐席"
          },
          {
            	"agentStatus": "1",
            	"groupId": "*************",
            	"groupName": "智齿测试技能组",
       		  	"groupType": 3,
       		  	"typeName":  "电销技能组",
            	"serviceEmail": "*****@sobot.com",
    	        "serviceId": "*************",
          	  "serviceName": "智齿测试坐席"
          }
    ]
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述
items String 坐席列表,数组类型(释义见下方)

坐席列表参数详情

属性 类型 说明
agentStatus String 坐席状态
groupId String 技能组ID
groupName String 技能组名称
groupType Int 技能组类型,2:呼叫技能组,3:电销技能组
serviceEmail String 坐席邮箱
serviceId String 坐席id
serviceName String 坐席名称
typeName String 技能组类型名称

# 4.20 静音/取消静音

    1. 静音/取消静音API: muteCall
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 通话时坐席操作静音后,用户端暂时听不到坐席侧声音(用户端感知不到坐席操作了静音),坐席可以听到用户端的声音,坐席与其他人说话(用户听不到)。
    1. 静音中的通话,坐席可以取消静音,取消后,用户端恢复与坐席正常的双向通话(彼此听到对方声音)。
    1. 更新时间:2021-04-08
示例如下:
var muteCall = function (){
    var data = {
        callId: "*********",
        mute: true
    }
    window.zcVertoServ.muteCall(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;
mute: 必填;是否静音标识(false-取消静音;true-对通话进行静音)。当通话已静音中,才可以操作取消静音。当通话不在静音中(且非咨询、非转接咨询、非三方通话状态),才可以操作静音。

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述

# 4.21 发起三方通话

    1. 发起三方通话API:makeThirdCall
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席在通话中邀请其他坐席或第三方号码加入通话,最终实现3人语音通话。支持询呼和盲呼2种方式
    1. 更新时间:2021-04-08
示例如下:
var makeThirdCall = function (type){
    var data = {
        callId: "*******",
        thirdType: 0,
		targetAgentId: "******",
		targetThirdNum: "******"
    }
    window.zcVertoServ.makeThirdCall(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;
thirdType: 必填; 呼叫第三方的方式(0-询呼;1-盲呼;)。询呼是指坐席A发起呼叫坐席B,并询问坐席B是否愿意加入3人通话。盲呼是指坐席A发起呼叫坐席B,不经过坐席B同意,一旦坐席B接听后,立即形成3人通话。;
targetAgentId: 非必填;第三方坐席的id。<第三方坐席id>和<第三方号码>有且仅有1个属性有值;
targetThirdNum: 非必填;第三方号码,支持大陆地区固话号码和手机号码(实际以中继号码的线路要求为准)。<第三方坐席id>和<第三方号码>有且仅有1个属性有值。

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述

# 4.22 发起者结束第三方通话

    1. 发起者结束第三方通话API:cancelThirdCall
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。坐席A可以结束第三方(坐席B)的通话,第三方(坐席B)振铃前、振铃中、通话中,坐席A都可以操作结束第三方。结束后第三方(坐席B)将被踢出通话,用户继续与坐席A通话
    1. 更新时间:2021-04-08
示例如下:
var cancelThirdCall = function (type){
    var data = {
        callId: "*******"
    }
    window.zcVertoServ.cancelThirdCall(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;。

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述

# 4.23 发起者确认第三方加入通话

    1. 发起者确认第三方加入通话API:confirmThirdCall
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。询呼模式下第三方(坐席B)同意加入通话时,坐席A操作确认第三方加入通话,此后用户、坐席A、第三方(坐席B)3人一起通话。此接口只支持询呼模式
    1. 更新时间:2021-04-08
示例如下:
var confirmThirdCall = function (type){
    var data = {
        callId: "*******"
    }
    window.zcVertoServ.confirmThirdCall(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可;。

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述

# 4.24 发起者退出三方通话

    1. 发起者退出三方通话API:exitThirdCall
    1. 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
    1. 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。当第三方(坐席B)成功加入通话后。坐席A可以操作发起者退出三方通话,此时坐席A话路断开,用户与第三方(坐席B)2人通话。此接口支持询呼和盲呼2个模式
    1. 更新时间:2021-04-08
示例如下:
var exitThirdCall = function (type){
    var data = {
        callId: "*******"
    }
    window.zcVertoServ.exitThirdCall(data, displayResult);
}
参数说明:
callId:必填;为statusFunc回调函数中的返回的当前通话信息中的通话id,在currentCall通话信息中取callId参数即可。

displayResult为回调函数 用于接收回调信息,需自行定义

响应示例
{
    "retCode": "000000",
    "retMsg": "查询成功",
}

参数说明

属性 类型 说明
retCode String 请求状态码,取值000000(成功)
retMsg String 请求状态描述

# 5.Websocket回调消息格式

msgType字段解释:(此处仅有msgType字段解释,详细字段场景及解释请参考本文第八章)

消息类型 含义 备注
StartService 通话开始 呼入到达智齿系统或者呼出时开始呼叫
StopService 呼叫结束 整个通话结束
PhoneStateConnected 电话接起 用户或者坐席的电话接起
PhoneStateAgentConnected 坐席电话接起
PhoneStateUserConnected 用户电话接起
PhoneStateDisConnected 电话挂断 用户或者坐席的电话挂断
PhoneStateIdle 话机空闲
PhoneStateRing 话机振铃
PhoneStateAgentRing 坐席振铃
PhoneStateUserRing 用户振铃
AgentStateBusy 坐席状态忙碌
AgentStateException 坐席状态异常
AgentStateAfterWorking 坐席后处理
AgentStateIdle 坐席空闲
AgentStateTalking 坐席通话中
AgentStateLogOut 坐席离线
TransferConnected 转接接通
TransferRing 转接振铃
TransferConfirm 转接确认
TransferHangup 转接挂断
PhoneStateExtOffline 话机注册掉线

# 6. 页面重载或刷新处理方式

如您页面进行reload事件或者加载时,需按照下列办法进行登录:

  1. 进行插件初始化事件window.zcVertoServ.ininServ方法调用(此方法无回调,执行即可);
  2. 调用获取token方法window.zcVertoServ.getToken(displayResult); displayResult为您自定义的回调函数,在回调函数中收到响应的时候进行进行第三步
响应示例:
{
    "access_token": "*************",
    "token_type": "bearer",
    "expires_in": 59,
    "scope": "select"
}
  1. 调用查询状态方法window.zcVertoServ.queryAgentState(displayResult), displayResult为您自定义的回调函数,在回调函数中收到返回值中的agentState不为-1的时候进行进行第四步
响应示例:
{
    "item": {
        "agentId": "*************",
        "agentState": "1",
        "appId": "*************",
        "companyId": "*************"
    },
    "retCode": "000000",
    "retMsg": "success"
}
  1. 调用登录坐席方法window.zcVertoServ.reConnect(); 注:当调用此方法成功后,会收到一条连接socket成功消息,并且如果上一次操作为非离线动作,则websocket会推送上一条动作消息(消息格式参照第五章内容),可根据该条消息进行页面状态的恢复。
刷新操作示例见下图:

window.zcVertoServ.ininServ(params,statusFunc);
window.zcVertoServ.getToken(function(res){
  if(!!res['access_token']){
    window.zcVertoServ.queryAgentState(function(rs){
      if(rs.retCode==='000000' && rs.item.agentState >= 0) {
        //如果查询结果状态不是离线  单独重连
        window.zcVertoServ.reConnect();
      }
    })
  }
})

# 7. 回调消息参数说明

# 7.1 消息类型列表

消息类型 含义 备注
StartService 通话开始 呼入到达智齿系统或者呼出时开始呼叫
StopService 呼叫结束 整个通话结束
PhoneStateConnected 电话接起 用户或者坐席的电话接起
PhoneStateAgentConnected 坐席电话接起
PhoneStateUserConnected 用户电话接起
PhoneStateDisConnected 电话挂断 用户或者坐席的电话挂断
PhoneStateIdle 话机空闲
PhoneStateRing 话机振铃
PhoneStateAgentRing 坐席振铃
PhoneStateUserRing 用户振铃
AgentStateBusy 坐席状态忙碌
AgentStateException 坐席状态异常
AgentStateAfterWorking 坐席后处理
AgentStateIdle 坐席空闲
AgentStateTalking 坐席通话中
AgentStateLogOut 坐席离线
TransferConnected 转接接通
TransferRing 转接振铃
TransferConfirm 转接确认
TransferHangup 转接挂断

# 7.2 开始通话

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为StartService
callId String 用户呼叫id
agentId String 坐席id
agentGroupId String 技能组ID
agentName String 坐席名称
direction String 呼叫方向0为呼入,1为呼出
extSatisfyType String 是否开启满意度 1为开启
groupType String 技能组类型
caller String 主叫
callee String 被叫
timestamp String 时间
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
示例
{
	"agentGroupId": "**************",
	"agentGroupName": "呼入客服组",
	"agentGroupType": "2",
	"agentid": "**************",
	"appId": "**************",
	"callee": "*******",
	"caller": "*******",
	"callid": "**************",
	"companyId": "**************",
	"direction": "1",
	"extSatisfyType": 0,
	"groupType": "2",
	"messageNumber": 215271,
	"msgType": "StartService",
	"satisfyNumber": "-1",
  "numberProvice":"北京",
  "numberCity":"北京",
	"timestamp": "20190117114230215"
}

# 7.3 用户振铃

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为PhoneStateUserRing
callId String 用户呼叫id,当状态为2、3、由3变为0时,此值不为空。默认值为空。
agentId String 坐席id
caller String 主叫
callee String 被叫
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
示例
{ 
  "companyId":"**************",
  "appId": "**************",
  "callId": "**************",
  "callee": "******",
	"caller": "******",
  "numberProvice":"北京",
  "numberCity":"北京",
  "msgType": "PhoneStateUserRing",
  "agentId":"**************"
} 

# 7.4 坐席振铃

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为PhoneStateAgentRing
callId String 用户呼叫id
agentId String 坐席id
caller String 主叫
callee String 被叫
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
direction String 呼叫方向,0为呼入,1为呼出
示例
{ 
	"companyId":"**************",
  "appId": "**************",
  "callId": "**************",
  "callee": "******",
	"caller": "******",
  "numberProvice":"北京",
  "numberCity":"北京",
  "direction":0
  "msgType": "PhoneStateAgentRing",
  "agentId":"**************"
} 

# 7.5 坐席接通

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为PhoneStateAgentConnected
callId String 呼叫id
agentId String 坐席id
caller String 主叫
callee String 被叫
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
direction String 呼叫方向,0为呼入,1为呼出

示例
{ 
	"companyId":"**************",
  "appId": "**************",
  "callId": "**************",
  "callee": "******",
	"caller": "******",
  "numberProvice":"北京",
  "numberCity":"北京",
  "direction":0
  "msgType": "PhoneStateAgentConnected",
  "agentId":"**************"
} 

# 7.6 用户接听

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为PhoneStateUserConnected
callId String 呼叫id
agentId String 坐席id
caller String 主叫
callee String 被叫
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
示例
{ 
	"companyId":"**************",
  "appId": "**************",
  "callId": "**************",
  "callee": "******",
	"caller": "******",
  "numberProvice":"北京",
  "numberCity":"北京",
  "msgType": "PhoneStateUserConnected",
  "agentId":"**************"
} 

# 7.7 通话结束

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为StopService
callid String 用户呼叫id
agentGroupId String 呼叫所属技能组ID
agentGroupName String 呼叫所属技能组名称
caller String 主叫
callee String 被叫
direction String 呼叫方向,0为呼入,1为呼出
duration Integer 有效通话时长
timestamp String 时间
voiceAliyunUrl String 录音地址
agentId String 坐席id
numberProvice String 号码归属地-省
numberCity String 号码归属地-市
示例
{
	"agentGroupId": "**************",
	"agentGroupName": "管理团队",
	"agentGroupType": "3",
	"agentid": "**************",
	"appId": "**************",
	"callee": "******",
	"caller": "******",
	"callId": "**************",
	"companyId": "**************",
	"direction": "1",
	"duration": 0,
  "numberProvice":"北京",
  "numberCity":"北京",
	"extSatisfyType": 0,
	"groupType": "3",
	"messageNumber": 195837,
	"msgType": "StopService",
	"satisfyNumber": "-1",
	"timestamp": "20190117112823492",
	"voiceAliyunUrl": ""
} 

# 7.8 转接振铃

注:转接振铃,被转接坐席振铃时,向转接坐席和被转接坐席推送该消息

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为TransferRing
adminAgentId String 发起转接方坐席id
adminGroupId String 发起转接方技能组id
agentGroupId String 被转接技能组id
agentId String 被转接坐席id
callId String 用户呼叫id,当状态为2、3、由3变为0时,此值不为空。默认值为空
subCallId String 子通话id
direction Integer 呼叫方向,0为呼入,1为呼出
remoteIp String 通话所在服务器IP
timeStamp String 时间

示例
{
  "adminAgentId ": "**************",
	"adminGroupId ": "**************",
	"agentGroupId ": "**************",
	"agentId": "**************",
	"appId": "**************",
	"callId": "**************",
	"companyId": "**************",
	"direction": "1",
	"msgType ": "TransferRing",
	"remoteIp": "*****",
	"subCallId ": "**************",
	"timeStamp": "20191216222042345"
} 

# 7.9 转接确认

注:当转接坐席确认转接后,向被转接坐席都推送该消息

属性 类型 说明
companyId String 企业ID
appId String 应用Id
agentId String 发起转接方技能组id
callId String 用户呼叫id,当状态为2、3、由3变为0时,此值不为空。默认值为空
msgType String 消息类型,此处为 TransferConfirm
subCallId String 子通话id
Timestamp String 时间
adminAgentInitState String 发起转接坐席初始话状态
agentInitState String 被转接坐席初始话状态
示例
{
  "adminAgentInitState ": "",
	"agentInitState ": "**************",
	"agentId": "**************",
	"appId": "**************",
	"callId": "**************",
	"companyId": "**************",
	"msgType ": " TransferConfirm ",
	"subCallId ": "**************",
	"timeStamp": "20191216222042345"
} 

# 7.10 转接接通

注:被转接坐席接听后,向转接坐席和被转接坐席都推送该消息

属性 类型 说明
companyId String 企业ID
appId String 应用Id
msgType String 消息类型,此处为TransferConnected
adminAgentId String 发起转接方坐席id
adminGroupId String 发起转接方技能组id
agentGroupId String 被转接技能组id
agentId String 被转接坐席id
callId String 用户呼叫id,当状态为2、3、由3变为0时,此值不为空。默认值为空
direction Integer 呼叫方向,0为呼入,1为呼出
remoteIp String 通话所在服务器IP
subCallId String 子通话id
Timestamp String 时间
示例
{
	"adminAgentId ": "**************",
	"adminGroupId ": "**************",
	"agentGroupId ": "**************",
	"agentId ": "**************",
	"appId": "**************",
	"callId": "**************",
	"companyId": "**************",
	"direction": "1",
	"msgType": "TransferConnected ",
	"remoteIp": "****",
	"subCallId ": "**************",
	"timeStamp": "20191216222042345"
} 

# 7.11 转接挂断

注:当转接坐席确认转接后,向转接坐席都推送该消息

属性 类型 说明
companyId string 企业ID
appId string 应用Id
adminAgentId string 发起转接方坐席id
adminGroupId string 发起转接方技能组id
agentGroupId string 被转接技能组id
agentId string 被转接坐席id
adminAgentInitState string 发起转接坐席初始话状态
agentInitState string 被转接坐席初始话状态
callId string 用户呼叫id,当状态为2、3、由3变为0时,此值不为空。默认值为空
afterWorkFlag string 后处理标记
direction Integer 呼叫方向,0为呼入,1为呼出
duration string 持续时间
msgType string 消息类型,此处为TransferHangup
notifyType int 0: 转接中被转接坐席挂机。 1: 转接中发起转接坐席挂机。 2: 确认转接后被转接坐席挂机。 3: 确认转接后发起转接坐席挂机。 4:取消转接后被转接坐席挂机。 5:取消转接后发起转接坐席挂机。
remoteIp string 通话所在服务器IP
Timestamp string 时间
示例
{
    "adminAgentId ": "**************",
    "adminGroupId ": "**************",
    "agentGroupId ": "**************",
    "agentId": "**************",
    "appId": "**************",
    "callId": "**************",
    "companyId": "**************",
    "adminAgentInitState ": "1",
    "agentInitState ": "1",
    "direction": "1",
    "notifyType ": 2,
    "duration": "96",
    "msgType": "TransferHangup",
    "remoteIp": "****",
    "subCallId": "**************",
    "timeStamp": "20191216222042345"
} 

# 7.12 话机注册掉线

注:当坐席sip话机掉线后,向坐席推送该消息

属性 类型 说明
companyId string 企业ID
appId string 应用Id
agentId string 被转接坐席id
ext string 掉线的分机号
stateTime string 掉线时间 例:20210302174622279
msgType string 消息类型,此处为PhoneStateExtOffline
示例
{
    "agentId": "**************",
    "appId": "**************",
    "companyId": "**************",
    "msgType": "PhoneStateExtOffline",
    "ext": "****",
    "stateTime": "20191216222042345"
} 

# 8. 备注

开发时结合此文档及demo作为参考。