XSwitch用户手册

呼叫管理

呼叫相关的功能及设置。

路由

路由表描述呼叫从哪里来到哪里去。当有呼叫到达 XSwitch 时,XSwitch 会根据呼叫的来源确定一个“呼叫源”,并根据呼叫源和被叫号码查找路由表。如果能找到相应的路由,则会根据路由描述送往相应的目的地,如进入 IVR、进入一个会议、呼叫另外一个号码等。

路由表查找策略有以下几个重要参数:

  • 呼叫源:呼叫从哪里来。
  • 被叫字冠:用于匹配被叫号码的前几位数字或字母。
  • 最大号长:该路由允许的最大号码长度。
  • 目的地:如果路由匹配将呼叫送往何处。

路由其他参数功能说明:

  • 黑 / 白名单:如果路由中选择了此参数,比如指定某个黑名单,那么所有通过此路由的呼叫,系统会先判断是否在黑名单中,如果是则不予通过。
  • 费率:默认系统费率为空,如果需要使用计费界面,那么根据呼叫线路选择对应的费率即可。
  • 呼叫类型:默认呼叫类型为最大权限类型(国际呼叫)。此权限类型和分机权限类型相对应。类型权限包含关系为:国际呼叫 > 国内呼叫 > 本地呼叫 > 本局呼叫 > 紧急呼叫。例如:路由呼叫类型为“国内呼叫”,那么类型为国内呼叫或国际呼叫的分机才有权限通过此路由外呼。
  • 代理媒体:默认为是。如果该参数为否,则媒体绕过,即不处理媒体。注意:不处理媒体的情况下,无法录音,也无法播放提示音,慎用。
  • 媒体编码:如果设置了媒体编码,当呼叫本地用户或通过网关呼叫被叫时,则指定此参数的编码进行呼叫协商。
  • 时间段设置:默认为空,所有时间均可用。如果想工作时间和其他时间走不同的路由,那么点击展开,选择时间模版或直接创建工作时间,然后根据时间,选择相应的路由目的地类型即可。
  • 自动录音:默认否。开启该参数,则所有经过此路由的通话均会自动录音。录音文件可在话单或媒体文件中查看。注意:队列以及会议页面有单独的录音按钮,如果队列或会议也开启了录音,则会产生两个不同的录音文件,在队列话单或会议话单中可查看两条录音文件,话单仅关联该路由录音文件。

路由默认功能码

功能码仅针对本地分机而言,为系统自带功能路由。

*3*6为本地通话过程中,话机可通过按功能码实现相应功能;*62*85为分机对其他通话进行的操作。

通话中功能码

  • *3:盲转。1001 呼叫 1002 并建立通话,如果需要转到 1003,1002 只需按*31003即可,1003 将振铃,1002 会自动挂断。
  • *4:协商转。1001 呼 1002 并通话,如果需要转到 1003,但需要先了解 1003 是否方便,那么 1002 只需按*41003,此时 1002 和 1003 通话。若 1002 挂机,则 1001 和 1003 通话;否则,1003 挂机,1001 和 1002 继续通话。
  • *5:三方通话。1001 和 1002 通话,如果需要 1003 加入,1002 只需按*51003即可,此时系统会呼叫 1003,1003 接听后形成三方通话。
  • *6:呼叫停泊。1001 和 1002 通话,1002 临时有事,或者需要在另一个分机上接听,那么他只需按*6将来电暂存在系统中,用其他分机拨打*76即可取回,并与 1001 通话。

分机操作功能码

  • *62:强插。如 1001 正在和 1002 通话,1003 可通过拨打*62+1002,强行插入通话,形成三方通话。
  • *63:强拆。如 1001 正在和 1002 通话,1003 可通过拨打*63+1002,强行挂断 1001,从而和 1002 通话。
  • *75:代答最近号码。如分机 1001 正在振铃,1002 也在振铃,此时,1003 可通过拨打*75代答最后振铃的分机(1002)。
  • *76:指定代答。如分机 1001 正在振铃,1002 也在振铃,此时,1003 可通过拨打*76+1001代答指定分机(1001)。
  • *77:取回指定停泊号码。针对通话通过*6已经停泊的,可以通过其他分机拨打*77+1001重新取回通话。
  • *78:监听指定号码。如 1001 正在和 1002 通话,分机 1003 可通过拨打*78+1001,来实时监听该分机通话。
  • *79:组播。针对拨号*79可对所有配置组播地址话机进行喊话。
  • *85:查询语音信箱文件。如 1002 呼叫 1001,1001 未接听,1002 进行留言。当 1001 想要听取留言时,可直接拨打*85即可听取留言。
  • *86:立即会议接入码。拨打*86即可获取临时会议号码并进入此临时会议。

组播

组播是使用 TCP/IP 协议的组播功能(发送一个 IP 包,同网段上有很多其它主机都能收到),从一台话机上对很多话机“广播喊话”,提高通话效率。使用时拿起电话拨打指定号码,即可对一群人(话机)喊话。该功能需要加载mod_esf模块。

目的类型选择“组播”,组播地址如果不填写,则默认组播地址为224.168.168.168:34567。如需填写其他地址及端口,则在文本框内直接填写并保存即可。

实现此功能需要话机按照如下配置:

在支持组播功能界面的话机上,按照如下所示,填写组播地址。如下图所示

方位话机配置\label{fig:esf_fw}

潮流GXV3275配置\label{fig:esf_GXV3275}

此时拿起话机拨打指定号码即可对所有设置过组播地址的话机进行喊话了。

特别注意:使用组播功能需要在同网段下,即话机和系统需要在同一个交换机下,一般不支持 NAT 环境(如需支持需要配置各路由器的组播路由,但需要注意网络安全,具体的配置方法超出本手册范围)。

Linux 服务器系统上通常需要配置组播路由,如下:

ip route add 224.0.0.0/4 dev eth0 src 192.168.x.x

路由优先级

XSwitch 使用呼叫字冠号码最长匹配优先longest-prefix)路由选择算法,被叫号码的前几位称为呼叫字冠(XSwitch 中也称为被叫号码前缀),假设系统中只有如下一条路由:

1              通过移动网关出局

则所有人拨打所有以1开头的号码,都会走这个路由。后来,你又加了一个联通网关,让某些号码通过联通网关出局,但你不确定这个网关是否好用,因此,你想用你自己的手机号测一下,因此你加了一条路由,路由表如下:

1              通过移动网关出局
1860535xxxx    通过联通网关出局

这样,当你拨打1860535xxxx时,它就会从联通网关出局,因为它匹配的号码更长、更精确,而其它以1开头的号码仍然从移动网关出局。等你测试没问题以后,你可以修改路由表,把0535xxxx去掉,让所有186开头的号码都从联通网关出局。如:

1              通过移动网关出局
186            通过联通网关出局

所以,号码最长匹配优先这个规则就是基于上述理论设计,下面是更详细的解释。

路由查找算法可以这样理解(实际的路由查找过程比描述的高效得多,这里的说明仅方便大家理解):

  • 根据呼叫源,找到所有路由表项(行)。
  • 从匹配的行中,找到所有“被叫号码前缀”与实际的被叫号码匹配的路由表项。
  • 如果有多条匹配路由,则根据“最大长度”字段重新排序,最大长度越短越优先(因为它更严格、更精确、更匹配)。
  • 如果还有多条匹配路由,则根据“被叫号码前缀”排序,匹配越长的越优先,这称为“号码最长匹配优先”算法。

如路由表中有以下路由:

139
1390535

则呼叫13905350000会走第二条路由(从开头共有7位匹配,而第一条路由只有3位匹配),呼叫13912345678走第一条路由(3位匹配,第二条不匹配)。

注意,如果路由上设置了最大长度,则路由受号长约束。还是以上述号码为例,如果第一条路由的最大长度为11,第二条最大长度为8,则呼叫13905350000时,由于被叫号码的长度为11位,超出了第二条路由的限制(最大仅支持8位),因此即使它能匹配8位,但也只能走第一条路由。

即使被叫号长没有超出最大长度最大值,也是“最大长度”短者优先(因为这个匹配更精确),如路由表中有以下路由:

  • 起始号码:155 最大长度:12
  • 起始号码:155 最大长度:11

则呼叫15568181234走第二条路由。

路由被叫号码前缀可以为空字符串,依然采用长度最短匹配优先算法,如路由表中有以下路由:

  • 起始号码:[空] 最大长度:12
  • 起始号码:155 最大长度:13

则呼叫15568181234走第一条路由。同理,如果第二条路由长度变为 11,则呼叫15568181234走第二条路由。

路由查找顺序跟路由规则有关,跟在路由表中的顺序关系不大。如果根据路由规则找到多条匹配路由,则以数据库返回的顺序为准取第一条。注意,数据库返回的顺序是不可预知的(如果有两条一模一样的路由,一般数据库会返回更新时间比较早的那一条,但最好不要依赖这种不确定的逻辑)。

路由的目的地有多种不同的条件,根据不同的条件生成相关的呼叫字符串。

这样设计主要是为了解决以下问题,假设路由表中有以下项:

被叫号码前缀最大号长目的地
14本地分机
13网关,短号码如 110 等
111网关,呼手机
012网关,长途
【空】8网关,市话

上表中是一个简单的办公室 IP-PBX 路由表。

  • 拨打数字 1 开头的 4 位号码是本地分机。
  • 1 开头的 3 位号码是特殊号码,送网关,如110119等。
  • 其它号码可以送到同一个或不同的网关。
  • 最后一条是本地网(市话)呼叫,由于市话可以是除 1 以外任何数字开头的,所以前缀为空可以匹配任何号码,当然也可以以29开头做上 8 条路由,那样更明确,但也更复杂。

如果你买了一个新网关,想做个路由测试,但不想在确认新网关正常前影响其它通话,你就可以做一条更严格的路由,如用你的手机号前 7 位1555555作为被叫号码前缀,指向你的新网关。

号码变换规则

号码变换支持主叫和被叫号码变换,有以下几种类型:

  • -nnn+nnn:其中nnn为号码,-表示从号码开头删除nnn+表示在号码开头加上nnn
  • rnnnRnnn:分别表示在号码开头和结尾替换掉相应位数,其中n可以是多个。如果位长小于n的个数,则号码会变为nnn
  • mxnnn:从第 x 位起,替换掉nnn相应的位数,其中n可以是多个。如果位长小于n的个数,则号码会变为nnn,如果x大于9,还可以使用 16 进制数a-f,如f代表第15位,本算法不支持大于15位的变换。
  • ixnnn:在第x位前插入nnnx取值0-9,a-f
  • Ixnnn:在第x位后插入nnnx取值0-9,a-f
  • dxn:从第x位开始删掉n位,xn取值0-9,a-f
  • nnn:将全部号码替换为nnn
  • /pattern/replace/:正则表达式替换,将匹配pattern的替换为replace。正则表达式使用 PCRE 格式。

: 号码变换实例

原号码变换规则变换后号码
01234-0+991234
01234-01234
01234+9901234
01234999999
01234r99999934
01234R99901999
01r999999
01R999999
01234m3**01**4
01234i3990199234
01234I3990129934
01234d2304
01234/^(.*)[0-9][0-9]$/$1/012
123456/^(\d{2})\d{2}(.*)$/$1**$2/12**56

高级变换规则

  • s/table/field1/field2/:将表table中的field1替换为field2

示例:

numbers表内容如下(该表在数据库中必须存在):

ab
100013912345678
100113987654321

: 高级变换示例

原号码变换规则变换后号码
1000s/numbers/a/b/13912345678
1001s/numbers/a/b/13987654321
01000-0|s/numbers/a/b/13912345678

特别注意:在新建路由时,只能指定基本信息如名称、起始号码、描述、呼叫源、目的类型等,主叫、被叫号码变换等高级信息可以在路由创建完成后再修改。

号码归属地

根据被叫号码归属地,选择对应的归属地线路出局,使用该功能前提是已经导入号码归属地表。

场景一 指定区域号码归属地判断

分机外呼手机,如果被叫号码和指定区域号码归属地相同,则直接通过路由默认网关线路外呼出局,如果归属地和指定区域号码归属地不同,则选按照变换后执行,比如加拨 0 后再外呼出局。

变换示例如下:

原号码变换规则
1000a/山东烟台/+0

场景二 根据网关表判断是否变换

分机外呼手机,查找被叫号码归属地,并从已有的网关中选择对应归属地线路,如果存在则直接通过该线路外呼出局,如果不存在对应归属地线路,则选默认路由中的线路外呼出局

变换示例如下:

原号码变换规则
1000g/gateways/+0

新建路由、修改、删除

创建新用户账号有两种方法:

  • 点击【新建】,输入红色必填项。
  • 点击用户界面右上方【导入】(适用于创建大批量用户),可通过导出获取路由模版。
  • 点击名称进入路由详情页面 ⇨【编辑】⇨ 修改路由信息,保存即可。
  • 点击路由页面右侧【删除】,即可删除路由信息。
  • 点击路由页面右侧【启用】,即可启动或关闭此路由。

添加、修改路由动作(Application)

Application 是 XSwitch 中的应用程序,是一个动作。当一个呼叫到达 XSwitch 后,从路由找到相应的路由后,会执行一个动作,这个动作就是 Application。常见的 Application 有:

  • answer:应答
  • echo:回声测试
  • playback:播放语音
  • record:录音
  • bridge:桥接,发起一路新通道呼叫另一侧
  • conference:进入一个会议
  • set:在当前通话上设置通道变量

点击路由名称进入路由详细页面 ⇨ 点击动作(Applications)【展开】 ⇨ 点击右侧【添加】,即可添加动作(Application) ⇨ 点击【编辑】,可修改选定的动作(Application)。如下图所示:

修改路由Application\label{fig:editrouteapplication}

动作添加提供如下三种方式:

  • 手动添加:默认列出所有 FS 自带的 Application,从中选择所需参数,并填写对应值即可。
  • 选择脚本:提供“内置脚本”及“媒体文件上传脚本”两种。
  • 自定义输入:参数及值可自定义设置。

系统内置脚本主要提供如下四个:

  • 启用智能回呼:所有经过这条路由打出去的通话都会被追踪。
  • 应用智能回呼:所有经过这条路由的来话都会先判断一定时间内是否有分机呼叫过,如果有则直接路由到对应的分机响铃
  • 阿里语音识别测试:如果已在【高级】 ⇨ 【AI】 ⇨ 【阿里】中设置了阿里语音识别账号,则选择了该脚本,则可体验简单版本的人机对话。
  • 本地分机不存在则通过网关出局:一般针对目的类型为“本地分机”的路由,启动了该脚本,则会先判断被叫号码是否为本地分机,如果不是,则通过指定网关外呼(指定的网关可通过【高级】 ⇨ 【系统管理】 ⇨ 【全局变量】中查找out_call_gw_default参数对应的值)

智能回呼

智能回呼:在一定时间内打出去的电话,如果客户回过来时就直接分配到最近的分机号上去。

指定时间通过【高级配置】⇨【系统管理】⇨【全局变量】中参数callback_time_limit控制(单位为秒)。如果没有设置此参数,则系统默认为 3600 秒时间内的通话可以回呼。如下图所示:

时间设置\label{fig:callback_time_limit}

示例一 为了实现部分用户想要的智能回呼功能,我们在路由中通过设置 Application 实现。如下:

  • 外呼路由里,在动作(Application)添加弹出框中,点击“选择脚本”,选择“内置脚本”,选择“启用智能回呼”,那么所有经过这条路由打出去的通话都会被追踪。

  • 来话路由里,在动作(Application)添加弹出框中,点击“选择脚本”,选择“内置脚本”,选择“应用智能回呼”,那么所有经过这条路由的来话都会先判断一定时间内是否有分机呼叫过,如果有则直接路由到对应的分机响铃。如下图所示:

智能回呼\label{fig:callback}

示例二 如果想要实现通过相同的网关出局的通话,只能通过相同的网关线路呼入时才去分配到最近的号码,那么如下:

  • 外呼路由里,在动作(Application)添加弹出框中,点击“自定义输入”,输入名称xcallback,值track-zl保存,那么所有经过这条路由打出去的通话都会被追踪并记录该线路名。

  • 来话路由里,在动作(Application)添加弹出框中,点击“自定义输入”,输入名称xcallback,值check-zl保存,那么所有经过这条路由的来话都会先判断一定时间内是否有经过此线路的分机呼叫过,如果有则直接路由到对应的分机响铃。

目的地类型

路由的目的的决定通话的去向。有以下类型:

分机

路由到与被叫号码相同的分机号。如果分机不存在,则返回空号(SIP 404)。

同振分机组

路由到临时分机组,即目的类型选择【同振分机组】后,手动选择需要同振的分机。

当呼叫此路由的被叫号码时,被选中的分机会同步振铃,直到某个分机应答。

顺振分机组

路由到临时分机组,即目的类型选择【顺振分机组】后,手动选择需要顺振的分机。

当呼叫此路由的被叫号码时,被选中的分机中第一个会优先振铃,如果超时未接听则第二个分机振铃,直到主叫挂机或被应答。

指定会议室

路由到一个已存在的会议室,即在会议室界面已经创建好的会议室。会议室号码和被叫号码可以不相同。

同号会议室

路由到和被叫号码相同的会议室,如果被叫是 3000,则路由到已创建好的号码为 3000 会议室。

指定预约会议

路由到一个已存在的预约的会议,即在会议 - 预约界面已经创建好的会议。会议号码和被叫号码可以不相同。

预约会议

路由到和被叫号码相同的预约会议,会议号码通常为 71 开头 9 位数。

临时会议

不需要提前创建会议室,可随时开会,即动态创建一个临时会议室,会议号码会随机生成。

IVR

路由到一个 IVR(语音导航功能)

指定队列

路由到指定的队列。比如拨打0535xxx,进到测试队列中。

同号码队列

需要事先建立与被叫号码相同的队列,适用于有很多队列需要适配的场景。

网关

路由到一个网关。需要在网关界面,提前创建对接网关信息。

分机网关

FXO 口的网关作为一个分机注册到系统中,可以使用该网关出局。用于 FXO 网关位于 NAT 后面的情况。

简单来说,适用于网关在内网,系统在公网情况。

中继

SIP Server 间一个点对点的连接,中继分为出、入和双向三种。

现在开放的版本中该功能已隐藏,如需使用请咨询工作人员。

中继组

中继组中包含中继的负载分担策略。轮循、按百分比选择等。

主要用于高并发高负载的情况,即使用 kamailio 时。

现在开放的版本中该功能已隐藏,如需使用请咨询工作人员。

IP 地址

路由到一个 IP 地址。格式如下(以10.0.0.1为例):

  • 10.0.0.1:直接送往 IP 地址,默认端口5060,SIP 消息为:sip:被叫号码@10.0.0.1
  • 10.0.0.1:5060:送往指定的 IP 和端口,默认使用 UDP 协议
  • 10.0.0.1:5060;transport=tcp:送往指定 IP 和端口,使用 TCP 协议
  • this.domain;fs_path=sip:proxy.this.domain;transport=tcp:送往域名,指定真实 IP 和端口,使用 TCP 协议

脚本

可以选择一个已编程的路由脚本,特殊应用,用于一些特定的场景。

积木

路由到一个积木。在积木界面,通过积木模块组合实现需求。也可以理解为图形化脚本功能实现。

分配器

分配器是一个算法,可对指定对象等进行加权轮询分配。通常用于网关分配。分配器可通过点击【高级】 ⇨ 【系统管理】⇨ 【分配器】页面,添加想要的分配器即可。

系统

系统路由是一种高级路由。系统路由支持底层 XSwitch(FreeSWITCH)提供的标准 Application,如下列内容执行应答并回声:

answer
echo

下面的内容应答并播放文件:

answer
playback http://ip:port/welcome.wav

该路由一般仅供高级管理员使用,用于一些比较复杂的边缘场景,如在二次开发或调试时快速创建一些路由逻辑等。对于标准配置方法无法支持的路由逻辑,也可以在这里设置。

注意:错误的使用系统路由可能导致电话不通或不可预知的后果,使用前请咨询 XSwitch 工程师。

路由查询

查询功能,是根据被叫号码来确定路由是否建立正确。比如想拨打156xxxxxxx这个号码,但是不知道是否已经建了路由或不知道拨打此号码会走哪条路由,则可以输入被叫号码进行查询。注意:要输入完整的被叫号码才能查询到正确的结果,因为路由通常跟号码位长也有关。

如果不输入呼叫源则默认查询所有呼叫源。

路由查询\label{fig:help}

如果结果列表有多条路由,则会走与呼叫源的匹配的第一条路由。如果没有结果,表示没有路由,拨打该号码将返回空号。

点击【重置】后,可重新显示所有路由。

点击【?】可显示查询使用说明。

路由列表导出

点击路由列表左上方【导出】,导出后格式为.csv

呼叫源

呼叫源,即电话呼叫的来源,用于标志呼叫从哪里来的。呼叫源会在“最先”收到通话的地方配置,如通常在用户、分机、网关中设置。呼叫源本身没有任何意义,它可以是任何的有说明意义的文字。呼叫源字符串本身需要一个“标志符”字符串,为了避免用户在实际使用时“纠结”使用什么字符串,呼叫源的标志符会在创建时自动生成。生成规则为“context- 呼叫源 ID”。

系统预置了几个呼叫源。用户也可以根据情况创建新的呼叫源。

如果你需要实现 DID 功能,则需要在相应的呼叫源右侧点击【启用 DID】。开启 DID 功能后,当有通话过来时,系统会自动判断此号码是否为 DID 号码,如果是则直接呼叫对应的号码。通常分机(default)和外部(public)为默认系统呼叫源,默认不开启 DID,如下图所示:

DID号码\label{fig:did_context}

黑白名单

黑白名单主要配合路由使用。白名单与黑名单相对应。通过黑白名单规则对通话进行控制。路由中黑名单启用后,被列入到黑名单的用户(号码)不能通过。如果设立了白名单,则在白名单中的用户(号码)才可通过,其他用户(号码)则直接被拒绝,安全性和快捷性都大大提高。

新建 / 修改 / 删除黑白名单

  • 点击黑名单界面右上方【新建】,填入名称等必填参数。

  • 新建黑名单后,点击名称进入黑名单界面 ⇨ 点击右上方【编辑】,即可修改黑名单信息 ⇨ 点击【保存】,保存修改后的分组信息。

  • 点击黑名单界面最右侧【删除】,即可删除时间管理信息。

添加、编辑黑名单号码列表

  • 点击名称,进入黑名单界面,点击号码列表右侧的【添加】,填写名称、起始号码等创建新的黑名单号码列表。如下所示:

黑白名单\label{fig:blacklist}

  • 添加黑名单号码列表后,点击【编辑】,编辑完成后按回车键保存编辑好的黑白名单号码列表。

特别注意:起始号码采用相似匹配模式,当起始号码写为10时,那么此条信息就包含所有 10 开头的号码。当路由中采用此黑 / 白名单,则会针对所有 10 开头的号码均起作用。

IVR

IVR(Interactive Voice Response)即交互式语音应答,也就是我们常说的语音菜单。当来电后,播放欢迎音,然后根据语音提示,执行不同操作。

每个 IVR 都有个自己的名字,如“welcome”。在各自的 IVR 中通过配置参数实现不同功能。参数简介如下:

IVR 常用参数如下:

  • 名称:IVR 的名称
  • 描述:简短的描述信息
  • 欢迎音:首次进入 IVR 的欢迎音,如:“您好,欢迎致电 XSwitch,请直拨分机号,查号请拨 0……”
  • 短欢迎音:如果用户超时没有按键,或按键错误,则重复提醒用户,一般省略前面的欢迎语或广告语,直接说功能,如:“请直拨分机号,查号请拨 0……”
  • 标志符:自动生成,用于 XSwitch 内部关联该 IVR,该标志符也会出现在 XSwitch 的日志中。
  • 最大按键位数:收到几位开始匹配,默认为1,如果需要输入分机号的情况下,则至少要有分机号相同的位数。
  • 错键提示音:用户按错了键提示音
  • 挂断音:菜单退出时(一般超时没有按键)的声音

IVR 其他默认参数如下:

  • 最大失败次数:容忍用户按键错误次数
  • 最大超时次数:最大超时次数
  • 超时时长:即多长时间没有收到按键就超时,播放其他提示音
  • 两次按键间隔:两次按键最大间隔时间
  • 失败后执行:超过最大失败次数后执行一个或一些指令,见后面“IVR 内部指令”
  • 超时后执行:超过最大失败次数后执行一个或一些指令,见后面“IVR 内部指令”
  • TTS 嗓音:如果使用 TTS 语音转换则填入对应声音
  • TTS 引擎:如果使用 TTS 语音转换则填入

IVR 内部指令

通常可以在按键多次失败后或超时后执行一些指令。

进入另一个 IVR

ivr ivr-name

执行一个 Lua 脚本

如:

lua /tmp/test.lua

Lua 脚本内容:

session:streamFile("/tmp/test.wav")
session:hangup()

执行路由

执行路由表项中的指令,语法:

execute_extension dest XML context
  • execute_extension:执行路由中的动作
  • dest:被叫号码
  • XML:拨号计划类型,一般为 XML
  • context:呼叫源标志符,如:context-2

示例:

execute_extension play XML context-2

在路由中配置:

  • 呼叫源:context-2
  • 被叫号码前前缀:play
  • 目的地类型:系统
  • 目的地:
    • play /tmp/test.wav
    • hangup

该路由执行完毕后会返回当前 IVR,所以,如果不需要返回,则需要在路由执行完毕后transfer到其它路由或挂机。

转移到路由

与执行路由类似,转移后不再回到当前 IVR,如:

transfer play XML context-2

转移到内联路由

内联路由语法比较复杂,本质上与上面相同,如:

transfer set:ivr_hangup_cause=system_hangup,playback:/tmp/test.wav,hangup inline

新建 / 修改 / 删除 IVR

  • 点击 IVR 界面右上方【新建】,填入名称等必填参数,欢迎音,欢迎音简短提示,错键提示音等创建新的 IVR。点击红色框内按钮,即可直接播放欢迎音,再次点击则暂停此音乐,其他语音文件同上进行播放。如下图所示:

添加 IVR\label{fig:addivr}

  • 新建 IVR 后,点击名称,进入 IVR 界面,点击【编辑】,即可修改分组信息 ⇨ 点击【保存】,保存修改后的 IVR 信息。其中语音类文件修改,只需要点击参数右侧【...】,然后点击“选择文件”即可弹出媒体文件选择,点击“清空”则可删除已选择的语音文件。

  • 点击 IVR 界面最右侧【删除】,即可删除 IVR 信息。

IVR 按键动作

  • 匹配前缀:默认不开启此功能。如果选择开启,则匹配按键开头的所有号码,比如:按键写10, 那么当用户按10xx时均可以匹配此项。

系统默认提供如下功能:

  • 转分机:输入按键数,选择转到的分机号码,支持选择多个分机(多个分机同时振铃);如果不选任何分机,则默认转到按键值对应的分机,比如按键输入 1001,则直接转到 1001 分机。
  • 转队列:输入按键数,选择转到的已创建的队列名(如没有下拉框,需前往队列界面创建)
  • 转会议室:输入按键数,选择转到已创建的会议室(如没有下拉框,需前往会议室界面创建)
  • 转预约会议:输入按键数,选择转到已创建的预约会议(如没有下拉框,需前往会议中预约界面创建)
  • 转临时会议:输入按键数,选择会议模版,则,用户按键后直接进入和按键相同号码会议
  • 执行脚本:输入按键数,选择脚本(如没有下拉框,需媒体文件界面上传脚本)
  • 高级指令:输入按键数,在文本框填写 FS 动作指令(适用于对 FS 指令比较熟悉的人员,文本框不支持多 app)
  • 转路由:输入按键数,选择呼叫源,被叫号码(如果不填,默认为客户输入的按键数值)。通话会重新查找路由并转接出去(适用于所有已在路由界面创建的情况)
  • 播放文件:输入按键数,选择语音文件(如没有下拉框,需媒体文件界面上传)
  • 转下级菜单:转到下级 IVR
  • 返回上级菜单:返回上级 IVR
  • 返回主菜单:返回主 IVR
  • 退出

高级指令参考

IVR 常用指令参考如下:

按键执行文本备注
0高级指令bridge user/1001|user/1003桥接到 1001 或 1003,1001 如果未响应,则 1003 响铃
1高级指令bridge [leg_timeout=40]user/$1桥接到获取的按键号码,40 秒后超时挂断
2高级指令transfer $1 xml public转接到获取的按键号码
3高级指令lua ivr.lua $1执行 Lua 脚本,在脚本中可以通过argv[1]获取按键值
4高级指令fifo default in undef转接到 fifo,可实现多个账号順玲或全部响铃等功能

IVR 如果进入 callcenter 队列后,在队列无人应答时如果想跳出队列回到 IVR 开始欢迎音处,需要在 IVR 对应的路由设置如下参数,

set cc_exit_keys=8

即按8跳出队列,重新听取 IVR 欢迎信息并重新选择。路由设置如下图所示

IVR路由设置\label{fig:cc_ivr}

积木

该模块可通过积木组合实现大多数程序员想要的功能,并导出相对应的代码,代码形式共三种:Lua、XML、SVG。同理,也可通过导入,将代码转变成积木模式。

点击首页左侧【呼叫管理】⇨【积木】⇨ 进入积木模块。

点击【新建】⇨ 输入名称,添加描述 ⇨ 点击名称,创建积木。

生成积木

从左侧中选择合适的积木进行组合,实现各种功能。直观,易操作。

参考积木如下所示:

积木参考一\label{fig:block1}

积木参考二\label{fig:block2}

注意:逻辑、文本、列表、函数的模块中含有设置按钮,点击设置可根据需求修改模板,提供更多选择。如下图所示:

积木隐藏功能\label{fig:hidden}

积木完成后,点击【保存】,共生成三种保存格式:XML、SVG 和 Lua。

导入代码生成积木

通过导入,可将 XML 文件代码转换成积木。该功能仅限 XML 格式的代码。 点击【导入】,选中 XML 文件,打开即可还原成积木。

特别注意:XML 文件内容必须是积木对应的 XML 代码。

保存路径:默认所有积木生成的文件保存在/usr/local/freeswitch/storage/blocks中。

详细说明参见《XSwitch 积木使用手册》。

DID

DID,即直接向内拨号,该服务原本由电话公司提供的,它使用户能够直接拨打 PBX 或 VoIP 系统中的分机号码,而无需求助于总机或自动话务系统。现通过 XSwitch 系统也可以实现。

如果使用 DID 功能,需要在【呼叫】⇨【呼叫源】中启用 DID。在 DID 页面设置好 DID 号码后,当有来话时如果开启了 DID,则直接呼叫 DID 对应的分机。

DID 设置如下图所示:

热线号码\label{fig:did}

DOD

DOD 应用于分机外呼时使用哪条线路或中继组。在 XSwitch 中仅对路由类型为网关或分配器或集群中继时起作用。

现在以类型为网关为例:

场景说明:1001对应 DOD 线路号码为01086201111,那么当1001通过网关 / 分配器路由外呼时会优先查看01086201111下的网关,如果设置了指定网关那么会优先选01086201111下的指定网关并发送指定号码01086201111

如下图所示:

分机与线路\label{fig:dod_extn}

网关

如果你拥有某个运营商提供的 SIP 账号、模拟网关或数字中继网关,均可通过此界面配置实现 SIP 拨打外部电话,该账号即为 SIP 网关。

点击页面左侧【呼叫管理】⇨【网关】,即可进入网关管理界面。

新建网关

点击【新建】⇨ 输入名称、服务器、用户名、密码、描述,选择SIP Profile【default】/【public】,选择模板【default】或【gateway】,选择是否注册。其中红色部分为必填。在此页面仅含基本参数,如需更详细的设置,请点击【编辑】进行重新设置。

在与对端网关使用 IP 对接时,服务器处输入网关地址,用户名和密码处可以随便填(底层逻辑中这两项为必填项,但可以随意填),是否注册处可选择“否”。

注意:新建网关时,名称必须为英文,否则网关无法生效。如果不想出现呼入需要鉴权的情况,SIP Profile 选择public

网关注册图如图所示:

网关\label{fig:gateway}

修改及删除

  • 在网关界面,如下图所示,控制一栏含有【注册】/【注销】/【启动】/【停止】共四个控制按钮。点击【注册】即可进行网关注册;点击【注销】即注销注册;点击【停止】则关闭网关功能;点击右侧【删除】,即可删除该网关。

控制网关\label{fig:control_gateway}

  • 删除网关时,需要先停止网关。当网关信息为灰色时,点击删除即可生效。
  • 点击网关名称,即可对网关信息进行编辑修改,在编辑页面中包含网关需要的更多其他参数,根据需要可自行启动。

特别注意:修改网关参数后,需要通过点击停止再开始方可生效

网关参数及变量

网关参数列出了网关可能用到的参数,默认不需要开启,如果在和其他硬件网关对接时遇到特殊情况,比如发送指定头,那么根据需求开启参数即可。

网关变量是为了更好的针对某个网关进行设置通道变量。比如,SIP 中设置了全局编码,但有时我们需要根据不同网关设置不同编码,此时,我们在网关变量中设置添加即可。如下图所示:

网关变量\label{fig:gateway_variable}

其中,方向可选inboundoutboundnull,其中 null 表示两个方向均设置。

中继

SIP Server 间一个点对点的连接,中继分为出、入和双向三种。网关也可以理解为一个中继。

一般中继和中继组配合 Kamailio 使用,普通通话,使用网关即可。

  • 点击中继界面右上方“新建”,填入名称、中继地址、类型(普通中继、GW-FS 中继、国际长途中继、WAC 中继)等必填参数,创建新的中继。如下图所示:

添加中继\label{fig:addrelay}

  • 新建中继后,点击名称,进入中继详细界面 ⇨ 点击右上方【编辑】,即可修改中继信息 ⇨ 点击【保存】,保存修改后的中继信息。
  • 点击中继界面最右侧【删除】,即可删除选中的中继信息。

默认开放的版本中该页面已隐藏,如需使用请咨询工作人员。

中继组

中继组主要对所包含的中继进行负载分担,策略为轮循、按百分比选择等。通常配合 Kamailio 使用,在不使用 Kamailio 时,目前仅支持轮循、百分比两种策略。

  • 点击中继组界面右上方【新建】,填入名称、类型(普通中继、GW-FS 中继、国际长途中继、WAC 中继)等必填参数,创建新的中继组。如下图所示:

添加中继组\label{fig:addrelaygroup}

  • 新建中继组后,点击名称,进入中继组详细界面 ⇨ 点击右上方【编辑】,即可修改中继组信息 ⇨ 点击【保存】,保存修改后的中继组信息。
  • 点击中继组界面最右侧【删除】,即可删除选中的中继组信息。

默认开放的版本中该页面已隐藏,如需使用请咨询工作人员。

添加、删除中继组中继成员

点击中继组名称,进入中继组详细界面:

  • 勾选【全选】,可一次性添加全部中继成员。
  • 点击【添加中继】,可选择性添加中继成员。
  • 点击【移除所有】,可移除所有添加的中继成员。
  • 点击添加的中继成员右侧【删除】,可删除选定的中继。

时间管理

新建 / 修改 / 删除时间管理

  • 点击时间管理界面右上方【新建】,填入名称等必填参数,创建新的时间管理即可。
  • 新建时间管理后,点击名称,进入时间管理界面 ⇨ 点击右上方【编辑】,即可修改分时间管理信息 ⇨ 点击【保存】,保存修改后的分组信息。
  • 点击【时间范围设置】,可设置工作时间、节假日。

启用 / 禁用工作时间

在时间管理界面创建完成后,可进入“路由界面”,在路由详情界面的“时间段设置”中,选择该模版即可

路由码

路由码限制由 8 位字母或数字(可以包含“-_”等连字符,不能有其它字符和空格)组合,可以在主叫号码,被叫号码,或 SIP 头域中携带。用于区分同一中继来话不同的主叫类型,进而可以选择不同的出局路由。

系统收到一路电话,首先确定呼叫源(即呼叫是从哪里来的),呼叫源通常以字符串表示。路由码也是其中一种呼叫源。如果来话带路由码,则呼叫源等于“code-路由码”。

通常配合 Kamailio 使用,如无 Kamailio,则忽略此界面即可。

默认开放的版本中该页面已隐藏,如需使用请咨询工作人员。

IP 黑名单

IP 黑名单功能是用来查看、管理被拉黑的 IP 地址。

在话单页面点击 IP 地址将 IP 地址加入 IP 黑名单后,就能在 IP 黑名单页面查看到,来自这个 IP 地址的通话将会被防火墙拦截,防火墙使用了 IPTABLES

可以在 IP 黑名单页查看、删除被拉黑的 IP 地址,删除后,该 IP 地址将不再被拦截。

xswitch 容器重启后,IP 黑名单会清空。

用户