集成开发指南

呼叫处理

呼叫处理

XSwitch 在技术上是一个背靠背的用户代理,每路通话在 XSwitch 中称为通话的一条“腿”,为便于描述,我们做如下约定:

  • a:话机,或一个分机号
  • b:另一个话机,或分机叫
  • c:第三个话机
  • d:外线号码,如手机号
  • e:另一个外线号码,如手机号
  • x:XSwitch,本交换机
  • t:Trunk,中继,第三方 SIP 服务器
  • controller:控制平台,用于呼叫控制
  • db:数据库
  • ai:人工智能平台
  • nlp:NLP 平台
  • 所有的呼叫方向都是针对 XSwitch 而言,即 a -> x 称为呼入,x -> b 称为呼出。

常用的呼叫场景如下:

  • 单腿呼叫:电话呼入后,播放欢迎音,用户通过 DTMF 按键、语音等跟系统交互。整个过程中只有这一路通话。
  • 桥接的呼叫:电话呼入后,桥接到另外一路,一般会有两条腿。
  • 会议呼叫:电话入呼后,进入一个会议,一般会有 1 ~ n(n ≥ 1)条腿。

这些场景又能组合出很多场景,下面我们分别来看。

呼入处理

XSwitch 上的电话呼入后,先查询路由(Route,Dialplan),如果找不到路由,则呼叫失败,返回空号。如果路由错误,可能回其它失败信息。

找到路由后,可以执行相应的动作,如应答,桥接等。

呼叫源和目的地

XSwitch 针对呼入的电话,会指定一个呼叫源。呼叫源用于标志电话“从哪里来”,它本身是一个没有意义的字符串,名称可以任意起,比如,每个分机号可以指定一个呼叫源,当该分机打电话时,我们就知道该通话是从哪里发起的,以后去路由里查找相应的路由,好知道电话“到哪里去”。这个到哪里去称为目的地,也就是决定怎么处理这路通话。

IVR

IVR 是交互式语音应答,如果目的地是 IVR,就会由 IVR 程序自动处理来话。比如自动应答这路呼叫,提示用户通过按键选择不同的菜单等。呼叫拓扑和流程如下:

IVR 转分机

不管是内部还是外部来话,都可以转分机,呼叫拓扑和流程如下:

分机打分机

分机打分机可以直接查找路由,路由目的地是本地分机。

会议

分机打外线

分机打外线与分机打分机流程类似,区别是路由的目的是通常是网关或 IP 地址。

外线打分机

外线打分机流程与分机打分机类似。

来话处理

下面是几种来话处理方式。

通过路由处理

上述的几种方式都是直接在路由里处理的。

通过 AI API 处理

a 呼入,x 查找路由,执行系统路由:ai {url=http://controller-ip:port},向 Controller 通过 HTTP 发送来话信息,HTTP 返回相关指令。

通过 XCC API 处理

处理流程与 AI API 类似,将电话路由到系统路由:xcc cn.xswitch.ctrl.controller-name

分机处理多个电话呼入

当有多个电话呼入时,c 一般有以下两种策略:

  • 对第二路呼叫回被叫忙(Busy,b 听忙音)
  • 将第一路呼叫 Hold(保持,这时 b 听回铃音),接听第二路呼叫,b 与 c 通话。

在 XSwitch 上处理多个呼入

还是 a 与 b 同时呼 c 的场景。

  • 可以在 x 上设置并发限制,对第二路通道在 x 上直接给 b 回忙音。
  • 可以执行排队,x 应答,播放提示音,告知 c 忙,然后放等待音乐,a-x-c 挂机后,x 再呼 c,接通 b-x-c。

XSwitch 上排队

XSwitch 上排队有两种方式 FIFO 和 Callcenter。

  • a、b 两个座席签入队列 888
  • d、e 呼叫 888 客服号进入 x,将两个呼入放到队列 888
  • d、e 听等待音乐
  • FIFO 或 Callcenter 查找空闲坐席,发现 a 和 b
  • 对 a 和 b 分别振铃
  • 如果有新电话呼叫,在 d、e 挂机前只能进入队列听音乐
  • XSwitch 中的 FIFO 和 Callcenter 自动跟踪 a 和 b 的忙闲,根据事先配置的策略进行电话分配

外部排队方式

电话呼入后,通过 AI API 或 XCC API 通知并询问 controller 下一步怎么办,controller 会跟踪座席状态,告诉 x 将电话转接到哪个座席。

在这种状态下,controller 可以通过订阅相关座席分机的通话事件,感知话机的通话状态,以便对电话进行分配。

集成架构