若接收烟台小樱桃网络科技有限公司(以下称为“小樱桃”)的此份文档,即表示您已同意以下条款。若不同意以下条款,请立即停止使用本文档。
本文档版权所有烟台小樱桃网络科技有限公司。保留任何未在本文档中明示授予的权利。文档中涉及小樱桃的专有信息。未经小樱桃事先书面许可,任何单位和个人不得复制、传递、分发、使用和泄漏该文档以及该文档包含的任何图片、表格、数据及其他信息。本网页版文档仅在xswitch.cn上发布。
本产品符合有关环境保护和人身安全方面的设计要求,产品的存放、使用和弃置应遵照产品手册、相关合同或相关国法律、法规的要求进行。
本文档按“现状”和“仅此状态”提供。本文档中的信息随着小樱桃的产品和技术的进步将不断更新,小樱桃不再通知此类信息的更新。
烟台小樱桃网络科技有限公司
地址:烟台市高新区蓝海路1号
邮编:264000
电话:0535-6753997
XSwitch是一个高度可定制的综合实时音视频多媒体通信平台。
XSwitch支持电话、传真、视频会议、呼叫中心等。支持主流的通信协议如SIP、H323、WebRTC、RTMP等,可以作为IP-PBX、视频会议服务器、传真服务器、多协议网关、呼叫中心服务器等使用。XSwitch提供REST、Websocket二次开发接口。XSwitch基于开源技术构建,如FreeSWITCH、PostgreSQL、Nginx等。
XSwitch是模块化,积木式按需叠加和无限伸缩扩容的通信产品,更可以通过定制支持集群部署,实现更强大的功能。XSwitch的位置、组件和逻辑关系如下图所示:
其中,SIP话机通过SIP协议接入XSwitch,管理员可以通过Web浏览器进行系统管理和维护,也可以通过WebRTC打电话,静态Web页面都由Web服务器提供,动态API请求会由Web服务器转发到XSwitch端进行处理。
约定
本手册内容和排版遵循以下约定:
context-1
。(TLDR)
标志,即(Too Long Didn't Read
),这些内容在快速阅读时可以先忽略。系统中用到的字符串值(通常是名称字段的约束)遵循以下约定:
-_.
”,不能有其它字符,如“$/\;@%'"[]{}()
”等0~31
的字符)系统中使用的按钮和动作使用以下约定:
系统中的对象,有以下一些通用的字段和属性:
在打通第一个电话之前,你首先要有个XSwitch。最简单的方法是登录
https://demo.xswitch.cn
(用户名和密码可以关注“小樱桃科技”微信公众号,在聊天区输入demo
可免费获取)。
用取得的用户名和密码登录系统后,可以看到【视频会议】和【管理员界面】两个选项。进入视频会议,在号码区输入3000
,点击【视频呼叫】或【音频呼叫】按钮就可以进入一个视频会议中。这时会议中只有你一个人,你可以打开另外一个浏览器Tab,呼入同一个视频会议,体验视频会议功能。
注意:
除了3000
外,你还可以拨打9196
听进入一个回声测试,接通后你可以呼到自己的声音、看到自己的视频。另外,你也可以通过拨打10000200
收听一段美丽的音频。
不知不觉,你已经打通三个电话了。
记住这个用户名和密码,以便下次使用。我们后面也会以该网站做例子。
另外,为了防止系统被滥用,这个用户名和密码也可能会不定期改变,如果变了,可以使用同样的方法重新获取密码。
可以用你趁手的SIP客户端或SIP话机注册到Demo服务器,如果你不熟悉SIP客户端,可以参阅《我用过的那些SIP客户端》或干脆跳过本节。
注册信息如下:
demo.xswitch.cn:18860
UDP
或TCP
1000
或1000 ~ 1019
中的任意一个号码1234
注册成功后就可以呼叫上一节提到的那些号码了。
你也可以尝试以下列方式通过我们的SBC注册到系统:
demo.xswitch.cn
sbc.xswitch.cn
,端口:1001
UDP
或TCP
如果你想尝试使用TLS协议注册到系统,把端口换成1002
。
注意:上述用户名密码信息并不总是可用,因为是公开的服务器,密码可能会被别人改掉。你也可以尝试通过菜单:【呼叫】⇨【分机】⇨【新建】,自己创建一个分机。另外,该服务器上的信息每天午夜会重置,所以,如果你第二天又来测试系统,需要重建相应的账号。
本例中的拓扑结构如下:
如果你想在自己的电脑或服务器上安装XSwitch,也很简单,照XSwitch安装说明做即可。安装完毕后,别忘了再回来继续阅读。以下例子如果没有特别说明都是以你本地安装的为例。
系统安装完毕后默认的管理员用户名和密密码都是admin
,登录Web界面后可以看到一些统计信息和图表。
系统默认自带1000~1019
共20个分机,密码都是1234
。你可以使用任何一个分机注册到系统打电话。
注意,私有化安装没有[视频会议]界面,该界面只在云端提供,但XSwitch的视频会议功能是有的。
可以用SIP话机或软电话注册到系统上,默认注册端口在首页就可以看到,假如你看到:SIP: 192.168.0.1:7060
,其中7060
就是端口,也可以通过【高级配置】⇨【SIP】⇨default
查看SIP端口,默认是7060
),常用的注册选项是:
xswitch.cn
)1000
1234
有时候,你使用的域和IP地址不同,或者“域”只是个标志字符串不是一个合法的域名(FQDN),或者你在内网上注册根本无法解析这个域名2,这时候你就需要填入:
xswitch.cn
通过这种方法,你的SIP终端就会将SIP注册及呼叫消息发到你指定的IP地址上,但SIP消息中的域是你指定的域名。
还有时候,你的SIP终端要求输入“鉴权用户名”,XSwitch默认的设置是它必须跟你的分机号相同。当然你熟悉了本系统,可以参考《XSwitch用户手册》修改这个默认设置。
注册成功后,可以尝试拨打回声测试号码9196
,一切正常的话它应该自动应答,你就能听到自己的声音。
注册两个不同的分机可以互打。
多个分机可以同时呼入3000
会议室开会。如果你的终端支持视频(并且购买了XSwitch的视频许可),也可以进行视频会议。
如果拨打系统外的电话,如手机,则需要添加一个网关。具体网关的添加方法见后面的章节。
本例中的拓扑结构如下:
安装了系统不能只是自己玩,还需要打外部的电话。而打电话就需要连接到运营商,这就需要向运营商申请一个“线路”。“线路”可以是一根普通的电话线,也可以是E1数字中继,或IMS中继线。很抱歉,这一句话中就出了三个术语,很了IMS中继线外,其它的你都需要有一个转换器,这个转换器叫“网关”。
如果申请网关超出了本文的范围,下面假设你已有经了这么一个网关。
假设你已经有了一个无须鉴权的网关,直接IP对接就可以打电话,这是最简单的配置了。
如果你没有,那我们可以给你一个。为了方便大家学习,我们配置了一个“假”网关,这个“假网关”跟真的一样,也能接听电话,播放声音,甚至可以播放空号等。
无须鉴权的网关对接不需要添加网关,只需要加一条路由即可。
打开菜单【呼叫】⇨【路由】⇨【新建】,创建一条路由,内容如下:
10000200
8
default
(或“默认”)系统对接/IP地址
rts.xswitch.cn:20003;transport=tcp
如你所见,这个IP地址可以直接填IP地址,也可以是“IP地址:端口号
”,当然也可以填域名,格式是:IP或域名:端口;参数=值
。上述IP地址描述的就是我们前面说的“假网关”。
提示: 这里的IP地址一般由对端提供,可能的格式如下:
172.16.17.18
172.16.17.18:5060
172.16.17.18:5060;transport=tcp
配置完成后,用你的分机呼叫10000200
,如果能听到“您好,欢迎致电小樱桃……”,恭喜你,电话接通了。
注意:这里默认使用TCP协议,主要是为了防止SIP包太大超过MTU导致UDP消息传输不可靠。
本例拓扑如下:
除了上述方式,你也可以真正添加一个网关,好处是可以选择更多的参数。
打开菜单【呼叫】⇨【网关】⇨【新建】,添加一个网关。参数如下:
test-gw-1
rts.xswitch.cn:20003
a
,随便填,但不能不填a
,随便填,但不能不填[public]
[default]
否
创建成功后,在控制列,点击【开始】或【启动】,启动该网关。目前网关状态缺少必要的指示,可以多次按【开始】和【停止】查看差别。
网关创建成功后,可以按上一节的方法创建路由。不同的是:
系统对接/网关
然后就可以打电话了。除了上面提到的电话号码外,你也可以尝试拨打这些测试电话号码。
当然,为了避免为每一个号码创建一条路由这么笨的方式,可以按如下方法创建路由:
10000
8
这样,所有的8
位以10000
开头的号码都会路由到这个网关上,是不是超级简单?
拓扑结构与上例相同。
有的网关是需要注册和鉴权的,比如我们这里就有一个。
假设我们把上面提到的Demo服务器作为一个网关,从你的XSwitch注册到Demo上去,你可以添加如下网关:
demo
demo.xswitch.cn:10160
1000
,或1001 ~ 1019
之间的号码,或你自己添加的分机号,不能随便填,不能不填1234
,或你在Demo服务器上设置的密码[public]
[default]
是
,注意这里是是添加完成后,【开始】或【启动】,如果能注册成功,对应的网关行会变成绿色。
然后修改路由,把10000
开头的路由指向这个网关,就可以呼叫上面说的以10000
开头的那些测试号码了。是的,你没有看错,你也可以通过我们的Demo服务器呼叫那些号码。具体Demo服务器上的路由规则你可以登录上自行分析。
上面的呼叫拓扑图示如下:
上面我们直接呼叫10000
开头的8
位号码路由是通的,那我们如何呼叫Demo服务器上的9196
和3000
呢?
由于这两个号码跟你本地的路由是冲突的,因此你可以采取一个策略,即拨打外线在号码前加0
,这也是常用的策略。Demo服务器上的号码对于你的XSwitch服务器来话属于外线。
添加路由规则:
0
5
路由创建完成后,要进入路由,修改“被叫号码变换”,改为-0
,然后你呼叫如下号码都会打到Demo服务器上。
09196
03000
你的XSwitch在匹配到这条路由时,会执行号码变换规则,把前面的0
减掉,俗称“吃掉”。也就是说,Demo服务器上看不到首位的0
的,它以为你就拨打了一个9196
或3000
。
处理电话呼入也很简单,你需要先知道呼入的DID。DID的全称是对内直接呼叫,一般也就是呼入的电话号码,但对接不同的网关,呼入规则也不同,被叫号码显示规则也不一样。
以不变应万变,如果与其它网关对接,让对方把SIP呼叫发送到你的public
SIP
Profile对应的端口上。默认安装后的端口是7080
。如果你的IP地址是1.2.3.4
,那就完整的地址就是sip:1.2.3.4:7080
。如果对端也是个XSwitch,或者你装了两个XSwitch,你可以想象,你需要在另一个XSwitch上添加一条路由,指向“IP地址”,内容填sip:1.2.3.4:7080
即可,或sip:1.2.3.4:7080;transport=tcp
使用TCP协议。
打开【高极】⇨【扩展功能】⇨【终端】,就可以看到日志,打一个电话进来,就可以在日志中看到如下字样:
Processing ... 主叫号码 -> 被叫号码 in context public
其中,context
就是呼叫源。有了这些信息以后,就可以添加一条路由了。路由的目的地如果是“本地用户”,则会查找跟被叫号码相同的分机,并呼叫。
一般来说,呼入的电话都是路由到本地分机或IVR,积木是一种更强大的IVR。
你可以到Demo服务器上注册另一个号码,呼叫你在XSwitch中向Demo注册的那个网关号码(如1001
)。查看日志。
小技巧:
如果你觉得上面获取DID的方法还是太复杂了,那么,这里告诉你一个小技巧:让对方网关指向你以后,什么也不用做,打电话,然后就可以在【话单】里找一到一条失败的呼叫,看看里面的主、被叫号码就一目了然了。
ToDo
ToDo
不管系统做得多么完善,你在实际使用时都会遇到各种各样的问题。XSwitch提供了很多跟踪调试手段,可以在你遇到问题是帮你迅速定位排查。
我们帮助过很多人解决过各种各样的问题,很多时候,客户自己也不知道遇到了什么问题,总之就是系统登录不上,或电话打不通。在我们启发和询问下,用户往往自己就把问题解决了。因此,我们一般都回告诉客户我们处理问题的万能公式:
一旦一个问题被充分地描述了它的细节,那么解决方法也是显而易见的。
更详细的解释参见橡皮鸭解题法 。
有问题,看日志。
打开【高极】⇨【扩展功能】⇨【终端】,可以很方便的排查问题。点击【日志指令】⇨【SIP日志】⇨【开】,可以打开SIP日志跟踪,打开【SIP Flow】可以看到简单的呼叫流程图。
如果你看不懂这些日志,不要紧。点【清屏】,然后打电话重现你的问题,点【下载】,把下载下来的日志发给XSwitch技术支持工程师。
当然,你也可以在Linux控制台上查看日志。执行make cli
可以进入容器中的XSwitch控制台。
XSwitch超级简单,最小化安装仅需要两个镜像:
PostgreSQL不用说了,XSwitch依赖它存储数据。首次启动,XSwitch会等待PostgreSQL,如果连不上,会一直尝试重连,所以,如果数据为库有什么问题,自然业务就不正常。
docker logs -f xswitch-pg
可以查看PostgreSQL容器日志。
make bash-pg
可以进入容器,psql -U xui xui
可以进入数据库,执行SQL查询等。
如果数据库正常,再检查XSwitch是否已正常启动。
docker logs -f xswich
可以看XSwitch容器的日志。
make bash
可以进入XSwitch容器,然后可以执行fs_cli
进入XSwitch控制台。
mod_verto
模块中有XSwitch内置的HTTP服务器,收到HTTP请求后,静态文件会直接返回,动态API请求(/api/
)会执行后端的Lua脚本。
XSwitch内部的动态配置,Dialplan使用动态绑定(Binding)方式,也是执行Lua脚本动态生成XML。参见如何使用不带XUI的XSwitch获取更多细节。
理解了上述架构以后,就可以比较方便的排查HTTP问题了。
检查8081
端口是否正确监听:
netstat -an|grep 8081
lsof -i tcp:8081
在XSwitch控制台内:
verto status
使用cURL检查:
curl localhost:8081/
默认情况下无须启动Nginx,但如果你启动了Nginx,那架构就变成:
Nginx默认会战胜80
端口,如果访问Nginx时返回502
、504
之类的,那多半是Nginx到XSwitch之间有问题,也可能XSwitch未正常启动。但如果返回的是401
、403
、404
等,则可能是后台XSwitch内部的错误。一段一段的查,比如是否可以越过Nginx直接访问XSwitch的端口。检查Nginx配置文件,里面的upstream
是否设置正确等。
虽然我们上面说了一个万能公式,实际上,问题是如此千奇百怪,排查问题并没有万能的方法。有时候,查问题还需要一些经验和运气。但不管怎么说,一般来说,你经验越多,运气就会越好。
在XSwitch的文档中,也有很多有效的排查问题的方法,供参考。
本来基本概念应该放到本文档最前面的部分,但考虑到大多数人都不想看基本概念,就放到了这里。
本章描述XSwitch系统中的基本概念和设计原则。
-_.
”外不能有特殊符号。0
的system
用户,没有任何权限,不能登录系统,不能被删除。当对应不到真人的时候可以使用它,如不属于任何人的分机号,可以关联到该用户。1
的admin
用户,该用户是最高级的管理员,在简单的场景中可以使用,在复杂的权限管理下,每个管理员都应该使用自己的账号登录。实际上,为了使系统保持简单,我们淡化了用户的使用。在最小最简的应用中,您可以只有一个admin
用户,但它下面可以挂很多分机。
admin
用户,其它分机都挂在该用户下(当然也可以挂在system
用户下)。system
用户。权限指Web界面和API的使用权限。权限采用业界流行的RBAC(Role Based Access Control,基于角色的访问控制)设计。可以给一个用户分配多个不同的角色,不同的角色可以分配不同的权限。用户总是从自己所属的角色上获取权限。权限用于控制某些菜单对用户是否可见,某些API对用户是否可以访问等。
呼叫方向有入局(Inbound、Incoming)和出局(Outbound、Outgoing)呼叫两种。所有方向都是相对于XSwitch本身而言的。即呼叫的方向是相对的,看参照物是谁。比如我打了你一拳,我就是出拳,而对于你就是入拳了。
一个通常的误解是用户描述电话故障的时候通常说电话打不出去,这时候,他(她)其实是站在自己(电话机)的角度说的,对于XSwitch而言,可能是入局故障(从话机到XSwitch),也可能是出局故障(从XSwitch到落地网关或运营商)。所以在排查电话故障时,一定注意参照物,把呼叫流程搞清楚再下手。
XSwitch是一个B2BUA(背靠背用户代理),一个典型的呼叫流程如下:
问君能有几多愁,恰似在XSwitch中配路由。
路由是本系统中最最重要的概念。路由即电话从哪里来到哪里去。呼叫源用于描述电话从哪里来,目的地描述电话到哪里去。在路由上可以做“号码变换”,设置计费规则,是否自动录音,设置不同时间段目的地等。
本系统路由均根据被叫号码判断。在默认配置中,来自“本地分机”(即注册分机)的呼叫,一般呼叫源为default
,来自中继网关的外部呼叫,一般为public
,在实际部署时可能有所不同。
呼叫源是针对来话而言的,系统允许在最先收到来话的地方设置关联的呼叫源,如本地注册用户来话、中继来话、网关来话等。
DID和DOD中的号码映射规则优先级要高于路由,除此之外,所有送到系统的呼叫都要通过路由决定去向,详见路由。
呼叫权限指分机的呼叫权限,可以在分机上指定。如果分机的呼叫权限大于或等于路由上设置的呼叫权限,电话就能通,反之不通。
会话(Session)和通道(Channel)在XSwitch中是一对一的。XSwitch是一个背靠背的用户代理(B2BUA)。分机A通过XSwitch打给分机B,在XSwitch内会产生两个通道,也就是两个会话。同理,分机A通过XSwitch拨打一个手机号,也会产生两个通道。分机或外线打电话到IVR或会议,只会产生一个通道。每一个通道都有一个唯一的UUID(Universally
Unique
Identifier,通用唯一识别码,全球唯一,包含36个字符,如“00000000-0000-0000-0000-000000000000
”)。
XSwitch的许可证是按通道授权的,分机打IVR或会议只占用一个通道授权,但通过网关打外线电话则占用两个授权。
通话指一路电话、一个电话、或一通电话,指通信的两个实体间逻辑的概念。如分机A打给B,称为一路通话,它包含两个通道。三方通话其实也是一个通话,但是会有三个通道,每个通道代表参与通话的一方。
XSwitch支持基于SIP信令(SIP Over
Websocket)及Verto信令的WebRTC通话,但是,WebRTC通话通常需要相应的https
及相关证书。如何部署WebRTC通话不在本文档范围内。
如果已经部署了WebRTC功能,则可以在最新版的Chrome、Firefox、Microsoft Edge等主流浏览器中使用WebRTC通话。
WebRTC通话支持PCMA、PCMU、OPUS、H264、H265、VP8等音视频编码。
可以通过以下方法设置证书。
Web界面支持多种语言,点击右上角的国旗图标,可以进行中英文切换。如果系统中安装超过三种语言包,则语言选择会以下拉菜单显示。
系统界面使用跨浏览器框架Ant Design提供跨浏览器支持,支持主流浏览器较新的版本。
WebRTC功能支持音、视频通话,目前测试支持最新的桌面版Chrome、FireFox、Opera、Edge、Safari等浏览器、Android版Chrome和FireFox、iOS版Safari。
WebRTC技术比较新,更新也比较快,所以请保持浏览器版本最新。
如果在使用过程中发现功能不正常,请使用最新版本的Chrome或基于Chrome内核的Microsoft Edge浏览器,因为这是我们研发和测试过程中使用最多的浏览器。
系统界面简单直观。大部分页面在设计时都遵循以下约定,下面以分机页面为例加以说明。
如分机列表,列表页列出所有分机,有翻页功能。
在该页面上通常有一个【新建】按钮可以新建一个分机。
点击一个分机号码,可以进入详情页,显示详细信息。
在该页面上有一个【编辑】按钮,点击后进入编辑状态,编辑完毕后可以保存。
可点击进入详情页的区域通常有其它颜色(如绿色)显示,其他参数黑色显示。
有些页面,如SIP Profile管理页面,有即时编辑(In Place Edit)功能。即时编辑适用于一个对象有很多属性,但你只想修改其中某一项内容的情况。
点击某一可编辑的区域时,则出现编辑框,修改内容后按【回车键】,都可以退出编辑状态并自动保存。如果想放弃编辑,则可以按键盘上的【ESC】键或用鼠标单击编辑框以外的任何区域。
如果不知道哪些区域可以编辑,则可以按下旁边的【编辑】按钮,则可编辑的区域会显示成输入文本框或选择框。
有的按钮也有即时编辑功能,一般用于“是”、“否”的场景。点击后会直接改变状态,并自动保存。
恭喜你,读到这里,你应该了解了XSwitch和基本功能。更多功能,请参阅: