Callcenter API
简介
本手册提供 XSwitch 呼叫中心相关的 API 接口说明。
XSwitch 是一个电信级的 IP 电话软交换系统和综合实时音视频多媒体通信平台。
该项目以 XSwitch 软交换平台为核心,对外提供呼叫中心开发接口。开发者可以灵活方便地与其行业应用业务系统进行集成。
系统集成接口
在阅读本文之前,请先阅读:
呼叫控制类采用的是 WebSocket 接口,业务类接口采用的是 HTTP 接口。请求及返回数据都为 JSON 格式。
名词术语
- HTTP:Hyper Text Transfer Protocol,即通常说的 HTTP 协议。
- JSON:JavaScript Object Notation,Web 上常用的数据封装格式。
- UUID:Universal Unique IDentifer,随机产生的 36 位字符串,常用作唯一标志符。
version-1
和version-2
的 UUID 是基于网卡 Mac 地址的,通常不会重。常用的version-4
UUID 是有可能重复的,但重复几率很小,可以忽略不计。如果每秒钟产生 10 亿个version-4
的 UUID,连续产生 85 年,产生一次碰撞(重复)的概率是 50%。 - 队列: 客户呼入后,在这里排队,等候分配坐席。坐席签入队列,可以接听该队列客户的来话。
- 坐席: 对客户进行服务的人。
- 坐席分机: 跟坐席相关联的电话分机。
- WebSocket: HTTP 协议的升级版,现代浏览器都支持,跟服务器建立长连接,常用于服务器给浏览器推送消息。XSwitch 用它推送坐席状态变化事件。
什么是 WebSocket
传统的 HTTP 协议是单向的,而现代化丰富的应用需要在服务端和客户端实时的交换信息,这就需要一个双向的传输通道,Websocket 就是为了这一需求而生的。它在普通 HTTP 协议的基础上,通过 Upgrade 操作升级为一个双向的 Socket 长连接。
什么是 JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 这些特性使 JSON 成为理想的数据交换语言。
更多信息可参考 JSON 官方网站: http://www.json.org/json-zh.html
呼叫中心简介
坐席状态
这里说的呼叫中心一般是指呼入型(如客服)呼叫中心。一般来说,呼叫中心坐席有以下状态:
- 签入(
LOGIN
):坐席已签入系统,表示坐席已上班,可以统计坐席的上班时长,通常跟呼叫没有直接关系。 - 签出(
LOGOUT
):坐席退出系统,可能坐席已下班。不再接受呼叫。 - 示忙(
UNREADY
、BUSY
):坐席处于忙碌状态,可能忙于处理客户的问题,或处理其它问题,不方便接电话。系统不会给坐席分配电话。 - 示闲(
READY
):坐席已签入,电话处于空闲状态,可以接听客户电话。如果有客户电话呼入,可以将电话分配给该状态的坐席。 - 话后处理(
ACW
,After Call Work):话务处理状态,一般是坐席接听一个客户电话后,可能做一些记录之类的,这时候不方便再次接听下一个客户的电话。
一般来说,坐席的状态是由坐席主动控制的,当通话到来后,系统在分配、呼叫坐席、以及坐席主动挂机时,都会主动改变坐席的状态。
完整的坐席状态机如下:
LOGOUT
: 初始状态,未签入LOGIN
: 签入,临时状态,自动过渡为UNREDY
状态UNREADY
: 已签入但是不能接电话,有子状态WAIT
: 等待变为READY
状态DND
: 免打扰BREAK
: 小休,可以有相关原因AWAY
: 离开工位CUSTOM
:其它
READY
: 就绪,可以接电话BUSY
: 忙,有子状态CALLING
: 外呼中RINGING
: 有电话呼入ANSWERED
: 已接听TRANSFER
: 转移中CONFERENCE
: 会议中HOLD
: 保持
ACW
: After Call Work,即话后处理,操作 CRM 等。在此状态后可以在一段时间内自动变为READY
状态,也可以手动改变。
状态机如下图:
触发条件与状态转换如下图:
队列
对于呼入型的呼叫中心,队列(Queue)用于将客户来话进行排队。当客户电话呼入后,先将客户放进一个排队队列,然后查找是否有空闲坐席,如果有,则将客户与坐席绑定,然后呼叫坐席。如果没有空闲坐席,客户侧会听音乐。在客户听音乐的过程中,可以周期性地播放一些提示音,提示用户可以通过按键选择其它服务,如 IVR 和其它人工智能自助服务或留言等。
队列在有些系统中也称技能组。
坐席可以签入到多个队列中,任意一个队列中有来话都可以选择这个坐席。这样可以增加坐席的利用率。
队列可以选择排列策略、等待音乐等参数。
XSwitch 中的队列有两中实现方式:
- callcenter:呼叫中心方式
- fifo:First in First out,先入先出方式
坐席
坐席(Agent)也就是客服人员。每个坐席对应一个分机号,有的情况下,也可以在坐席登录时选择分机号。
ACD
ACD 即 Automatic Call Distribution,也就是来话自动分配,是一种分配机制和算法逻辑。它相当于队列和坐席相结合的一整套呼叫中心逻辑。
底层逻辑
XSwitch 底层使用mod_callcenter
及mod_fifo
模块实现,屏蔽了底层逻辑,但由于两者实现有所不同,具体的状态变化和消息也有所差异。以下是原生模块相关的内容供参考。
Callcenter 坐席
在 Callcenter 类型的队列中,坐席有两种状态,一个是坐席的工作状态,一个是坐席的话务状态。
坐席工作状态(Status):
- LoggedOut:签出,非工作状态,不会被分配电话
- Available:自动就绪,可以接听电话,接听一个电话后并挂机后,会自动变成就绪状态
- Available (on Demand):手动就绪,接听一个电话后,通话状态会变成 Idle 状态,需要手动就绪才能再接下一个电话
- On Break:暂停、签入状态,但不会被分配电话
坐席话务状态(State):
- Idel:空闲,没有电话
- Waiting:等待接听电话(就绪)
- Receiving:队列来话已锁定坐席,正在呼叫坐席
- In a qeueue call:正在通话
FIFO 坐席
在 FIFO 坐席中,坐席没有工作状态,只有话务状态。理论上,坐席的工作状态本来就不需要由 XSwitch 管理,可以由业务层自己管理。
FIFO 坐席功能也很强大,目前缺少相应的文档。如有需要,我们后续可以继续补充。