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-1version-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):坐席退出系统,可能坐席已下班。不再接受呼叫。
  • 示忙(UNREADYBUSY):坐席处于忙碌状态,可能忙于处理客户的问题,或处理其它问题,不方便接电话。系统不会给坐席分配电话。
  • 示闲(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_callcentermod_fifo模块实现,屏蔽了底层逻辑,但由于两者实现有所不同,具体的状态变化和消息也有所差异。以下是原生模块相关的内容供参考。

Callcenter 坐席

在 Callcenter 类型的队列中,坐席有两种状态,一个是坐席的工作状态,一个是坐席的话务状态。

坐席工作状态(Status):

  • LoggedOut:签出,非工作状态,不会被分配电话
  • Available:自动就绪,可以接听电话,接听一个电话后并挂机后,会自动变成就绪状态
  • Available (on Demand):手动就绪,接听一个电话后,通话状态会变成 Idle 状态,需要手动就绪才能再接下一个电话
  • On Break:暂停、签入状态,但不会被分配电话

坐席话务状态(State):

  • Idel:空闲,没有电话
  • Waiting:等待接听电话(就绪)
  • Receiving:队列来话已锁定坐席,正在呼叫坐席
  • In a qeueue call:正在通话

FIFO 坐席

在 FIFO 坐席中,坐席没有工作状态,只有话务状态。理论上,坐席的工作状态本来就不需要由 XSwitch 管理,可以由业务层自己管理。

FIFO 坐席功能也很强大,目前缺少相应的文档。如有需要,我们后续可以继续补充。

欢迎