# 呼叫中心JS组件
# 更新日志
版本 | 时间 | 说明 |
---|---|---|
--- | --- | --- |
V1.8 | 2022-01-13 | 更新内容:1、修复文档4.21中thirdType参数错误;2、新增座席监听/取消监听功能(参见4.25、4.26);3、增加监听过程中通话事件说明(参见7.13、7.14、7.15、7.16) |
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话机账号与坐席进行绑定。
流程
- 引用智齿指定的js文件。
- 调用指定js文件提供的方法并传递约定的参数。
- 如果使用登录方式为网络电话 ,则页面需添加标签如下,以保证网络电话正常使用
<audio style="visibility:hidden;" id="webcam" autoplay="autoplay" src=""></audio>
- 使用呼叫中心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';
}
- 对接流程图示意如下
呼出流程:
呼入流程:
注意: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-1.1.js"></script>
<script src="https://www.sobot.com/paas/component/plugin/call_1.8.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-1.1.js"></script>
<script src="https://www.soboten.com/paas/component/plugin/call_1.8.js"></script>
# 4.1 初始化js插件
- 初始化js插件API: ininServ
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 当引用智齿提供的呼叫中心插件后,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
- token获取API: getToken
- 云通信平台采用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 坐席上班/下班
- 坐席上班API: agentLogin ; 坐席下班API: agentLoginout
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席上班后,坐席状态默认置为“空闲”,此状态下可接听电话,也可外呼。
- 更新时间: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 坐席外呼
- 坐席外呼API: agentCallOut
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席人员主动发起外呼。坐席状态只有在空闲、忙碌状态下才能进行外呼。
- 更新时间: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 坐席挂断
- 坐席挂断API: agentHangUp
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席人员主动挂断当前通话。
- 更新时间: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 坐席接听(网络电话方式接听)
- 坐席接听(网络电话方式接听)API: agentListen
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 呼入场景下,坐席为网络电话接听方式时,调用该接口接通电话。sip话机或者手机模式无需调用该方法。该接口不适用呼出场景。
- 更新时间:2021-04-08
示例如下:
// 坐席接听
var listen = function () {
// 接听函数无需回调
window.zcVertoServ.agentListen();
}
此操作中无需接收任何参数。
# 4.7 修改坐席状态
- 修改坐席状态API: updateAgentState
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 修改当前坐席状态,支持7种:忙碌、空闲、小休、培训、会议、用餐、活动。其中空闲状态可以外呼,也可以呼入分配来电,忙碌、小休、培训、会议、用餐、活动状态下都是只可外呼、不支持呼入分配来电。
- 更新时间: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 查询坐席状态
- 查询坐席状态API: queryAgentState
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 查询坐席当前状态。
- 更新时间: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 转接坐席
- 转接坐席API: agentTransfer
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A呼叫坐席B(询问坐席B是否可以接待用户)。
- 更新时间: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 确认转接坐席
- 确认转接坐席API: agentTransferConfirm
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A与坐席B通话后。坐席A操作确认转接坐席,通话将转给坐席B(用户与坐席B通话,坐席A退出)。需与转接坐席接口配套使用。
- 更新时间: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 取消转接坐席(发起转接的坐席取消转接)
- 取消转接坐席(发起转接的坐席取消转接)API: agentConsultBack
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A发起呼叫坐席B后。坐席A操作取消转接坐席,坐席B振铃前、振铃中、通话中,坐席A都可以操作取消转接坐席。取消后坐席B将被踢出通话,用户继续与坐席A通话。需与转接坐席接口配套使用。
- 更新时间: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 拒绝转接(被转接坐席拒绝接听)
- 拒绝转接(被转接坐席拒绝接听)API: rejectConsult
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫转接到另外一个坐席B接听。此时用户端保持中,坐席A呼叫坐席B,坐席B振铃后。被转接坐席B拒接(挂断)电话。用户继续与坐席A通话。需与转接坐席接口配套使用。
- 更新时间: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 转接第三方
- 转接第三方API: transferThirdNum
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫直接转给第三方号码(手机或固话号码),执行转接后,坐席A立即退出通话。用户收听第三方号码的振铃或彩铃音,如果呼叫第三方未呼通,则电话会超时挂断。
- 更新时间: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 转接技能组
- 转接技能组API: transferGroup
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话中坐席A将用户的呼叫直接转向其他技能组,执行转接后,坐席A立即退出通话。用户进入目的技能组中排队或被技能组分配坐席。如果用户进入技能组中排队超时,则电话会超时挂断。
- 更新时间: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 呼叫保持
- 呼叫保持API: agentHold
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话时坐席操作呼叫保持后,用户端收听背景音,坐席可以与其他人讲话(用户听不到坐席侧的声音)。
- 更新时间: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 取消呼叫保持
- 取消呼叫保持API: agentUnHold
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 保持中的通话,坐席可以取消呼叫保持,取消后,用户端恢复与坐席正常的双向通话(彼此听到对方声音)。通常与呼叫保持接口配套使用。
- 更新时间: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 坐席状态重置
- 坐席状态重置API: resetStatus
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 用于重置坐席的状态为空闲。通常用于坐席当前状态和实际话务状态不一致(通话异常)时,重置为空闲后,坐席可以再次接打电话。
- 更新时间:2021-04-08
示例如下:
// 坐席状态重置方法
var resetStatus = function() {
window.zcVertoServ.resetStatus(displayResult);
};
参数说明:
displayResult为回调函数 用于接收回调信息,可自行定义
响应示例:
{
"retCode": "000000",
"retMsg": "成功"
}
响应参数说明
属性 | 类型 | 说明 |
---|---|---|
retCode | String | 操作结果代码(000000为成功) |
retMsg | String | 本次操作成功/失败文案提示 |
# 4.18 查询呼叫技能组及技能组空闲坐席数量
- 查询呼叫技能组及技能组空闲坐席数量API: queryGroups
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 查询数据包含呼叫技能组和电销技能组,以及组内空闲坐席数量。
- 更新时间: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 查询空闲状态呼叫坐席
- 查询空闲状态呼叫坐席API: queryAgents
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 查询数据包含呼叫技能组和电销技能组下的坐席。常用于转接、三方前查询空闲状态的坐席。
- 更新时间: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 静音/取消静音
- 静音/取消静音API: muteCall
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 通话时坐席操作静音后,用户端暂时听不到坐席侧声音(用户端感知不到坐席操作了静音),坐席可以听到用户端的声音,坐席与其他人说话(用户听不到)。
- 静音中的通话,坐席可以取消静音,取消后,用户端恢复与坐席正常的双向通话(彼此听到对方声音)。
- 更新时间: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 发起三方通话
- 发起三方通话API:makeThirdCall
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席在通话中邀请其他坐席或第三方号码加入通话,最终实现3人语音通话。支持询呼和盲呼2种方式
- 更新时间: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 发起者结束第三方通话
- 发起者结束第三方通话API:cancelThirdCall
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。坐席A可以结束第三方(坐席B)的通话,第三方(坐席B)振铃前、振铃中、通话中,坐席A都可以操作结束第三方。结束后第三方(坐席B)将被踢出通话,用户继续与坐席A通话
- 更新时间: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 发起者确认第三方加入通话
- 发起者确认第三方加入通话API:confirmThirdCall
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。询呼模式下第三方(坐席B)同意加入通话时,坐席A操作确认第三方加入通话,此后用户、坐席A、第三方(坐席B)3人一起通话。此接口只支持询呼模式
- 更新时间: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 发起者退出三方通话
- 发起者退出三方通话API:exitThirdCall
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 坐席A在通话中邀请其他坐席或第三方号码加入通话,当坐席A发起三方通话后。当第三方(坐席B)成功加入通话后。坐席A可以操作发起者退出三方通话,此时坐席A话路断开,用户与第三方(坐席B)2人通话。此接口支持询呼和盲呼2个模式
- 更新时间: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 | 请求状态描述 |
# 4.25 座席监听
说明:管理员可以发起监听座席的通话。
- 座席监听API:agentMonitor
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 只能是普通的呼入和呼出可以发起监听,如果通话发生了转移/咨询/监听/等操作,不能在发起监听了
- 如果发送监听请求成功了,但是收到了AgentHangUp消息,可能是呼叫话机失败了,需要检查话机等配置信息
- 更新时间:2022-01-13
示例如下:
var agentMonitor = function (){
var data = {
agentId: "*******"
}
window.zcVertoServ.agentMonitor(data, displayResult);
}
参数说明:
agentId:必填;被监听的座席id。
displayResult:非必填,为回调函数 用于接收回调信息,需自行定义
响应示例
{
"retCode": "000000",
"retMsg": "成功"
}
响应参数说明
属性 | 类型 | 说明 |
---|---|---|
retCode | String | 请求状态码,取值000000(成功) |
retMsg | String | 请求状态描述 |
# 4.26 取消/结束监听
- 管理员取消/结束监听API:agentCancelMonitor
- 该API的返回值会持续增加属性,请使用正确的兼容方式编码,保障返回值属性增加时,调用端的代码不会抛错!!
- 管理员话机振铃的时候可以发起取消监听
- 管理员也可以在通话中,发起结束监听
- 更新时间:2022-01-13
示例如下:
var agentCancelMonitor = function (){
var data = {
callId: "*******"
}
window.zcVertoServ.agentCancelMonitor(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 | 话机注册掉线 | |
MonitorRing | 监听振铃消息 | |
MonitorConnected | 监听接通消息 | |
MonitorCancer | 取消监听消息 | |
AgentHangUp | 监听后管理员挂机消息 |
# 6. 页面重载或刷新处理方式
如您页面进行reload事件或者加载时,需按照下列办法进行登录:
- 进行插件初始化事件window.zcVertoServ.ininServ方法调用(此方法无回调,执行即可);
- 调用获取token方法window.zcVertoServ.getToken(displayResult); displayResult为您自定义的回调函数,在回调函数中收到响应的时候进行进行第三步
响应示例:
{
"access_token": "*************",
"token_type": "bearer",
"expires_in": 59,
"scope": "select"
}
- 调用查询状态方法window.zcVertoServ.queryAgentState(displayResult), displayResult为您自定义的回调函数,在回调函数中收到返回值中的agentState不为-1的时候进行进行第四步
响应示例:
{
"item": {
"agentId": "*************",
"agentState": "1",
"appId": "*************",
"companyId": "*************"
},
"retCode": "000000",
"retMsg": "success"
}
- 调用登录坐席方法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 | 转接挂断 | |
MonitorRing | 监听振铃消息 | |
MonitorConnected | 监听接通消息 | |
MonitorCancer | 取消监听消息 | |
AgentHangUp | 监听后管理员挂机消息 |
# 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"
}
# 7.13 监听振铃消息
说明:当管理员发起监听请求后,话机振铃的时候,管理员侧会收到该消息
- 该消息msgType为MonitorRing
响应包体
属性 | 类型 | 说明 |
---|---|---|
callId | String | 通话id |
subCallId | String | 监听产生的子通话id |
agentId | String | 被监听座席id |
monitorAgentId | String | 管理员座席id |
agentGroupId | String | 被监听座席技能组id |
monitorAgentGroupId | String | 管理员座席技能组id |
msgType | String | 消息类型,此处为MonitorRing |
companyId | String | 公司id |
appId | String | 应用id |
messageType | String | 0:监听,1:强插,2:强拆,3:挂机 |
notifyType | int | 0:监听振铃 |
direction | String | 呼叫方向0为呼入,1为呼出 |
timeStamp | String | 时间戳 |
afterWorkFlag | String | 后处理标记 |
monitorNumberId | String | 预留字段,暂时无用 |
numberId | String | 预留字段,暂时无用 |
cause | String | 挂机消息的时候:0:坐席挂机 1:用户挂机 |
newVersion | int | 版本 |
响应示例:
{
"callId":"0d5eab44-d9ac-4e46-ad70-b7bff27edc66",
"agentId":"0d0d578751f447c9aebc8a6dc91e50b5",
"monitorNumberId":"25410",
"monitorAgentGroupId":"1b07632faa9147209082ce2cb36f8db4_4",
"msgType":"MonitorRing",
"agentGroupId":"1b07632faa9147209082ce2cb36f8db4_12",
"cause":"0",
"numberId":"25419",
"afterWorkFlag":"",
"timeStamp":"20220111155051169",
"subCallId":"14fe387f-eee7-4654-9a9d-8b0dea285d52",
"companyId":"1b07632faa9147209082ce2cb36f8db4",
"monitorAgentId":"3035d59c87dd453bb833cfbb022b6c8c",
"notifyType":0,
"messageType":"0",
"appId":"da14de6ae51440daa003f77d149e41f3",
"direction":"1",
"newVersion":0
}
# 7.14 监听接通消息
说明:在话机上面点击接听按钮,管理员侧就会收到该消息
- 该消息msgType为MonitorConnected
响应包体
属性 | 类型 | 说明 |
---|---|---|
callId | String | 通话id |
subCallId | String | 监听产生的子通话id |
agentId | String | 被监听座席id |
monitorAgentId | String | 管理员座席id |
agentGroupId | String | 被监听座席技能组id |
monitorAgentGroupId | String | 管理员座席技能组id |
msgType | String | 消息类型,此处为MonitorConnected |
companyId | String | 公司id |
appId | String | 应用id |
messageType | String | 0:监听,1:强插,2:强拆,3:挂机 |
notifyType | int | 1:监听接通 |
direction | String | 呼叫方向0为呼入,1为呼出 |
timeStamp | String | 时间戳 |
afterWorkFlag | String | 后处理标记 |
monitorNumberId | String | 预留字段,暂时无用 |
numberId | String | 预留字段,暂时无用 |
newVersion | int | 版本 |
响应示例:
{
"callId":"ea832473-a836-4391-b3de-ea23c5c29416",
"agentId":"0d0d578751f447c9aebc8a6dc91e50b5",
"monitorNumberId":"25410",
"monitorAgentGroupId":"1b07632faa9147209082ce2cb36f8db4_4",
"msgType":"MonitorConnected",
"agentGroupId":"1b07632faa9147209082ce2cb36f8db4_12",
"numberId":"25419",
"afterWorkFlag":"",
"timeStamp":"20220111160255042",
"subCallId":"ea2ba1c5-d27b-4874-b716-0c97f1d49cee",
"companyId":"1b07632faa9147209082ce2cb36f8db4",
"monitorAgentId":"3035d59c87dd453bb833cfbb022b6c8c",
"notifyType":1,
"messageType":"0",
"appId":"da14de6ae51440daa003f77d149e41f3",
"direction":"1",
"newVersion":0
}
# 7.15 取消监听消息
说明:当管理员发送取消监听或结束监听的请求后,管理员会收到该消息。
用户挂机/座席挂机/管理员话机振铃时在话机取消接听,不会发送该消息
- 该消息msgType为MonitorCancer
响应包体
属性 | 类型 | 说明 |
---|---|---|
callId | String | 通话id |
subCallId | String | 监听产生的子通话id |
agentId | String | 被监听座席id |
monitorAgentId | String | 管理员座席id |
agentGroupId | String | 被监听座席技能组id |
monitorAgentGroupId | String | 管理员座席技能组id |
msgType | String | 消息类型,此处为MonitorCancer |
companyId | String | 公司id |
appId | String | 应用id |
messageType | String | 0:监听,1:强插,2:强拆,3:挂机 |
notifyType | int | 2:取消监听 |
direction | String | 呼叫方向0为呼入,1为呼出 |
timeStamp | String | 时间戳 |
afterWorkFlag | String | 后处理标记 |
monitorNumberId | String | 预留字段,暂时无用 |
numberId | String | 预留字段,暂时无用 |
newVersion | int | 版本 |
响应示例:
{
"callId":"a565dccc-146d-4286-ba67-a04c22c4c2ea",
"agentId":"8b19d9c27eba4e29bba549ca61bd4d8e",
"monitorNumberId":"24490",
"monitorAgentGroupId":"36b0f8eb2de948d99e89c8f0c3d92e68_1",
"msgType":"MonitorCancer",
"agentGroupId":"36b0f8eb2de948d99e89c8f0c3d92e68_3",
"numberId":"24491",
"afterWorkFlag":"",
"timeStamp":"20220111144649750",
"subCallId":"20b3fa86-db83-48cc-94b8-62cd704855b5",
"companyId":"36b0f8eb2de948d99e89c8f0c3d92e68",
"monitorAgentId":"fbc0ef5c7fd54f38b7b9d79cf5ed1582",
"notifyType":2,
"messageType":"0",
"appId":"29d5c15f38ae48c9bb01ad123988a03c",
"direction":"1",
"newVersion":0
}
# 7.16 监听后管理员挂机消息
说明:当管理员挂机后, 管理员侧会收到该消息
- 该消息msgType为AgentHangUp
响应包体
属性 | 类型 | 说明 |
---|---|---|
callId | String | 通话id |
subCallId | String | 监听产生的子通话id |
agentId | String | 被监听座席id |
monitorAgentId | String | 管理员座席id |
agentGroupId | String | 被监听座席技能组id |
monitorAgentGroupId | String | 管理员座席技能组id |
msgType | String | 消息类型,此处为AgentHangUp |
companyId | String | 公司id |
appId | String | 应用id |
messageType | String | 0:监听,1:强插,2:强拆,3:挂机 |
notifyType | int | 0:监听后管理员挂机,1:监听后坐席挂机 |
direction | String | 呼叫方向0为呼入,1为呼出 |
timeStamp | String | 时间戳 |
afterWorkFlag | String | 后处理标记 |
agentInitState | String | 坐席初始状态 |
adminAgentInitState | String | 管理员初始状态 |
duration | int | 持续时间 |
afterWorkFlag | String | 后处理标记 |
monitorNumberId | String | 预留字段,暂时无用 |
numberId | String | 预留字段,暂时无用 |
newVersion | int | 版本 |
remoteIp | String | ip地址 |
adminAgentBusyCase | String | 座席忙碌原因 |
响应示例:
{
"adminAgentBusyCase":"",
"agentId":"8304985fd1b14a13827317693229d952",
"msgType":"AgentHangUp",
"agentGroupId":"844cdac79544406f968631b630039112_5",
"groupId":"844cdac79544406f968631b630039112_1",
"numberId":"25220",
"agentInitState":"1",
"queeId":"844cdac79544406f968631b630039112_5",
"duration":467,
"subCallId":"38b4ea1b-dab5-41db-9717-ab2cd10eb967",
"monitorAgentId":"03b5a16218284f4dbc0a0a6803a7dcb1",
"messageType":"3",
"appId":"42d84f7f127940c584493a7fe7e2e663",
"adminAgentInitState":"1",
"direction":"1",
"callId":"c256fc6e-59c0-453d-a4b5-4e3f14c0e213",
"monitorNumberId":"25219",
"monitorAgentGroupId":"844cdac79544406f968631b630039112_1",
"remoteIp":"192.168.1.180",
"afterWorkFlag":"",
"timeStamp":"20220111160943266",
"companyId":"844cdac79544406f968631b630039112",
"notifyType":0,
"newVersion":0
}
# 8. 备注
开发时结合此文档及demo作为参考。