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/rtcyarn 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@domaindomain必须是正确的域,否则可能不能通过认证或订阅不到消息。一般来说可以在 XSwitch Web 界面首页上查到这个“域”
  • passwd:如果使用 Token 登录,passwd固定调为password,否则填真正的密码。
  • socketUrl:Websocket 的地址,具体有管理员配置,一般是ws://host:port/ws
  • loginParams:对象。
    • xui_sessid:字符串,用户或分机 Token。如果使用密码登录,则不要提供该字段。

callbacks回调对象:

  • onMessagefunction(verto, dialog, msg, data),收到消息时回调。
    • vertoverto实例
    • dialog:只在 WebRTC 中使用
    • msg:收到的消息对象,根据不同的消息内容不同
    • data:收到的数据,内容因具体的消息而异
  • onWSLoginfunction(verto, success),登录时回调。
    • vertoverto实例
    • successtrue|false,是否成功。
  • onWSClosefunction (v, success),Websocket 断开时回调。参数同上。
  • onEventfunction(v, e),事件回调。

具体的消息内容(msgdata等)可以在使用时打印出来看看。

订阅

连接成功后,要订阅感兴超的消息(事件)。如班长需要订阅整个队列所有人的状态,坐席通常只需要订阅自己的状态。函数原型如下:

verto.subscribe(eventChannel, { handler: onAgentEvent });
  • eventChannel:事件类型。eventChannel 是以“.”分割的主题名。如:
    • vcc:订阅所有vcc开头的消息
    • vcc.default:订阅default这个组的vcc消息,如班长要订阅所有人的状态
    • vcc.default.1007:订阅1007这个坐席的状态
  • handler:回调函数,原型是:onAgentEvent(vt, event)
    • vtverto实例
    • event:事件

事件的具体格式由event.eventType决定。典型的如下:

函数简介

一般来说,事件以队列方式分组,比如vcc.队列名.座席名,队列名也称组名。

设置

目前后面默认硬编码了group_iddefault。如果需要其它组 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(...);
简介