Callcenter API
JS SDK
JS SDK 可以直接在浏览器中使用。JS SDK 底层使用 Websocket 与 XSwitch 后台通信,使用长连接。
JS SDK 可以使用以下方式鉴权:
- 用户名/密码:该方式主要用于客户端与后台通信(C-S 架构),因为在流量器端保存密码通常不够安全。
- 用户 Token 登录:推荐的登录方式,用户 Token 即坐席 Token,可以代表坐席登录到系统,订阅事件和发送命令。
- 分机 Token 登录:分机 Token 主要是为了区分 WebRTC 坐席,目前系统不支持 WebRTC 坐席,因此暂不需要使用分机 Token 登录。
具体的登录和鉴权方式可以参考XSwitch 认证和鉴权接口。
SDK 引入
JS SDK 支持 es5 和 es6 语法和开发方式,具体可参考callcenter 代码示例 。
es5 方式可以直接在 HTML 文件中引入 JS,如:
<script type="text/javascript" src="//xswitch.cn/static/js/verto-min.js"></script>
es6 可以直接在package.json中添加@xswitch/rtc,或通过npm install @xswitch/rtc、yarn add @xswitch/rtc等安装 SDK。
SDK 使用
SDK 使用 Verto 库连接 Websocket。Verto 是 XSwitch 中连接 Websocket 协议的 JS 库,支持连接、登录验证、API、以及 WebRTC 呼叫等。在呼叫中心应用中暂不考虑 WebRTC 部分。
在 es5 中,可以初始化一个实例变量,如:
var verto = new Verto();
在 es6 中,可以使用以下方法引入:
import verto, { Verto, VertoCallcenter } from "@xswitch/rtc";
verto是一个单例,不需要初始化。
有了verto以后,可以继续初始化 Callcenter:
var vcc = new VertoCallcenter(verto);
vcc 是在 Verto 连接的基础上增加了 Callcenter 相关的控制函数。
连接
可以使用以下代码连接:
const loginParams = { xui_sessid: "你的用户token 或分机 token", }; const params = { login: "1001@xswitch.cn", passwd: "password", socketUrl: socketUrl, loginParams: loginParams, }; verto.connect(params, callbacks);
params参数:
login:字符串,格式是user@domain。domain必须是正确的域,否则可能不能通过认证或订阅不到消息。一般来说可以在 XSwitch Web 界面首页上查到这个“域” 。passwd:如果使用 Token 登录,passwd固定调为password,否则填真正的密码。socketUrl:Websocket 的地址,具体有管理员配置,一般是ws://host:port/ws。loginParams:对象。xui_sessid:字符串,用户或分机 Token。如果使用密码登录,则不要提供该字段。
callbacks回调对象:
onMessage:function(verto, dialog, msg, data),收到消息时回调。verto:verto实例。dialog:只在 WebRTC 中使用。msg:收到的消息对象,根据不同的消息内容不同。data:收到的数据,内容因具体的消息而异。
onWSLogin:function(verto, success),登录时回调。verto:verto实例。success:true|false,是否成功。
onWSClose:function (v, success),Websocket 断开时回调。参数同上。onEvent:function(v, e),事件回调。
具体的消息内容(msg、data等)可以在使用时打印出来看看。
订阅
连接成功后,要订阅感兴超的消息(事件)。如班长需要订阅整个队列所有人的状态,坐席通常只需要订阅自己的状态。函数原型如下:
verto.subscribe(eventChannel, { handler: onAgentEvent });
eventChannel:事件类型。eventChannel 是以“.”分割的主题名。如:vcc:订阅所有vcc开头的消息。vcc.default:订阅default这个组的vcc消息,如班长要订阅所有人的状态。vcc.default.1007:订阅1007这个坐席的状态。
handler:回调函数,原型是:onAgentEvent(vt, event)。vt:verto实例。event:事件。
事件的具体格式由event.eventType决定。典型的如下:
agentStatus:坐席状态- 其它:略
函数简介
一般来说,事件以队列方式分组,比如vcc.队列名.座席名,队列名也称组名。
设置group_id
目前后面默认硬编码了group_id为default。如果需要其它组 ID,请与我们联系。
vcc = new VertoCallcenter(verto); vcc.setGroup("default");
签入
vcc.ccLogin(queue, agent, extn, success_cb, failed_cb);
queue:队列名,与 XSwitch 后台一致。agent:坐席名,当前坐席工号。extn:分机号。目前只有在后台设置的与坐席对应的分机号才能登录,下一个版本中将放开这个限制,坐席以选择任意的分机号。success_cb:登录成功时回调。failed_cb:登录失败时回调。
签出
vcc.ccLogout(queue, agent, success_cb, failed_cb);
示闲
将坐席置于READY状态,可以接听来话。
vcc.ccGoReady(queue, agent, success_cb, failed_cb);
示忙
将坐席置于UNREADY状态,不能接听来话。
vcc.ccGoBreak(queue, agent, reason, success_cb, failed_cb);
reason:可选,原因值,任意字符串,如吃饭等。这个会影响统计结果,所以建议在使用前规划好。常用的有:DND:Do Not Disturb,免打扰BRB:Be Right Back,一会就回
外呼
vcc.ccDial( agent, extn, cidNumber, destNumber, earlyMedia, success_cb, failed_cb );
callerID:主叫号码destNumber:被叫号码earlyMedia:早期媒体,默认为false
外呼将使用回呼方式。系统先呼叫坐席对应的分机,分机接听后再去呼叫destNumber。
其他
其它函数参数示例。
断开连接
可以用如下代码断开 WebSocket 连接:
verto.logout();
多连接
Verto 是一个类,verto是一个 Verto 的实例。为方便使用,ES6 中有一个verto单例,因而可以直接使用。
如果需要创建多个 Websocket 连接,比如同时连接多个 Websocket 服务器,或者在同一个 Websocket 服务器上创建多个连接,可以直接初始化多个实例。
var verto1 = new Verto(); var verto2 = new Verto(); ... verto1.connect(...); verto2.connect(...);