Browsed by
分类:How-to

一些简单的技术技巧,有助于您更有效地配置或者使用SIP服务器

保存录制的语音

保存录制的语音

miniSIPServer 支持客户录制根据需要录制自己的语音,并替换系统默认的语音文件。以前的版本中,如果客户需要升级 MSS 的话,每次都需要备份好自己的语音,并重新替换系统默认的语音。

这当然是个小小的麻烦。现在,最新的V32可以解决这个麻烦了。

MSS 启动时,将在“mss_ann”目录下自动创建子目录“cust_ann”,现在您所有的自定义语音文件都可以放在这个子目录下。当 MSS 卸载或者升级时,这个子目录和内部的所有语音文件都不会删除或者被替换。MSS 启动后,会自动读取并加载“cust_ann”子目录下的语音文件。

在 windows 系统,这个子目录默认应该是“d:/myvoipapp/minisipserver/mss_ann/cust_ann”。在Linux系统中,这个子目录默认是“/opt/sipserver/mss_ann/cust_ann/”。

请参考在线文档了解录制自定义语音的更多细节。

https://www.myvoipapp.com/cn/docs/others/how_to_record_your_own_audio/index.html

连接Sonetel

连接Sonetel

“Sonetel.com”是一家VoIP运营商,提供各国本地电话号码服务。我们可以在MSS中添加外线,连接Sonetel的服务器。根据Sonetel给出的配置参考,有以下几方面的内容需要注意:

  • Sonetel采用用户的email地址作为SIP帐号,并且
  • 部署了Proxy(SBC)服务器统一处理外部SIP消息。

本文给出一个简单的示例,指导如何配置MSS与Sonetel互联。我们假设用户的SIP帐号是“abc@gmail.com”。

在MSS中,请点击菜单“数据 – 外线”,增加一条新记录。

配置Sonetel外线
配置Sonetel外线

在“基本配置”页中,外线类型是“连接到对端VoIP服务器”,用户名是“abc”,而“服务器地址/域”必须是“gmail.com”。

另外请注意,密码項应该是在注册sonetel帐号时的密码,而不是email帐号自身的密码。

由于sonetel前置了Proxy(SBC)来处理SIP消息,因此我们在外线中还需要指定这个Proxy地址。在“出呼叫”页面中,指定对应的服务器地址,如下图所示。

Sonetel代理服务器地址
Sonetel代理服务器地址

Sonetel代理服务器地址为“sip.sonetel.com”,在注册时sonetel发送的email邮件有相应的说明。如果未来有变动,参考sonetel邮件说明即可。

对接中国电信IMS网络

对接中国电信IMS网络

最近帮助一位客户部署MSS服务器,对接中国电信IMS网络。在本次对接中,中国电信的软交换是ZTE的设备(至少SIP消息中的User-Agent是这么描述的),存在一些问题,需要特别注意配置方法才能完成对接。

由于中国电信是提供账号、密码信息进行对接,因此在MSS中应配置“外线”,其中需要注意的是以下几个关键点:

鉴权用户

通常外线配置中,默认采用“外线/账户”做鉴权用户(或者配置单独的鉴权ID)。而ZTE设备要求采用完整的URI作为鉴权用户名,因此在MSS的外线配置中,必须配置“鉴权用户名应包含地址信息”项,请参考下图。

外线鉴权用户配置
外线鉴权用户配置

设置该项后,例如上图的信息,MSS将采用“+8612345678@gd.ctcims.cn”作为鉴权用户名进行鉴权操作。

如果不采用完整格式的鉴权用户名,IMS网络会返回“403 Forbidden”拒绝注册和呼叫。我们认为这实际是ZTE软交换的缺陷,因为鉴权信息中本来就携带了域信息,无论鉴权用户名是否携带域信息,应该都不影响鉴权。如果您在与其他IMS设备对接时,也遇到了类似的问题,建议试试上述配置項。

Proxy设置

在中国电信的IMS网络中,对外的服务器地址作为逻辑域存在,实际上并不可访问。例如,上述例子中的“gd.ctcims.cn”就是域,而不是实际的SIP服务器。SIP消息实际应路由到指定的物理实体(在此我们理解为IMS网络前置的一个SBC或者Proxy),因此在MSS外线配置中,必须指明实际SIP消息需要路由的地址,请参考下图:

IMS网关的物理地址
IMS网关的物理地址
阻止匿名呼叫

阻止匿名呼叫

我们可以使用“系统黑白名单”来过滤、阻止匿名呼叫。请点击菜单“业务 – 系统黑名单”,添加以下记录:

caller number prefix = anonymous
called number prefix = *
rate = 100

该记录的作用就是:100%阻断来自“anonymous”的呼叫。

有些匿名呼叫的主叫号码可能会有差别,不过仍然可以在“系统黑名单”配置类似的记录进行过滤。

Invalid CSeq number

Invalid CSeq number

最近一位客户报告了一个问题:他的外线始终无法注册到VoIP运营商的网络。这让人倍感奇怪,毕竟“外线”是MSS非常基础的功能,已经和众多VoIP运营商对接过,我们从没想到过“外线注册”居然会有问题。

抓取了相应的log,发现该运营商返回了“400 Bad Request”消息,其中携带了以下原因信息:

P-Registrar-Error: Invalid CSeq number

我们检查了REGISTER消息,MSS在处理CSeq时并没有任何问题。以下是MSS消息的摘要:

==>
REGISTER sip:sip.xxx.com SIP/2.0
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 13 REGISTER
...

<==
SIP/2.0 401 Unauthorized
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 13 REGISTER
...

==>
REGISTER sip:sip.xxx.com SIP/2.0
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 14 REGISTER
...

<==
SIP/2.0 400 Bad Request
...
Call-ID: 18BF67854AE23D6D2CD772AFMSS002A0001.
CSeq: 14 REGISTER
P-Registrar-Error: Invalid CSeq number
...

我们再次检查了RFC3261规范中的定义:

A UA MUST increment the CSeq value by one for each REGISTER request with the same Call-ID.

显然我们是完全正确的,但是为什么对端会拒绝了注册呢?

最终我们尝试修改了Call-ID参数后注册成功。这让我们更感困惑!RFC3261规范很清楚地说明了注册流程中Call-ID参数的注意事项:

All registrations from a UAC SHOULD use the same Call-ID header field value for registrations sent to a particular registrar.

我们认为这个VoIP运营商的系统是不专业的。不幸的是,该运营商很难去升级他们的系统,因此我们在MSS中增加了一个开关变量来控制这种情况:

[sip]
gVarSipRegSameDialog=0

如果您在与某些VoIP运营商系统对接时遇到类似的问题,请在“mss_var_param.ini” 文件中增加上述参数并重启MSS。

外线无应答时长

外线无应答时长

在外线的“出呼叫”配置中,我们增加了一个配置项“无应答时长”。该参数用于限制外线外呼时的无应答时间。请参考下图:

外线无应答配置
在外线中配置无应答定时器时长

该参数默认值为0,也就是缺省采用系统定义的无应答定时器时长。如果设置了其他值,则优先采用该值。

例如,设置为15,则该外线的外呼呼叫如果在15秒内没有应答,外线将强制释放呼叫。

IP地址鉴权

IP地址鉴权

本特性已经合入最新的V25版本(build 20160126)。

某些特殊的SIP设备,例如自动控制系统中的嵌入式SIP设备,往往不具备全SIP能力集,只能发起或者接受简单的SIP呼叫,不能进行账号和密码鉴权。部分设备甚至不支持发送“注册”消息到MSS更新自己的状态。

嗯,我们在MSS中可以将这些设备配置为“SIP中继”,但是这样也会丢掉一些关键特性,例如“振铃组”。在某些场景中,客户们希望能让所有设备同时振铃,这样我们就只能将设备配置为“分机”用户。

为满足这些需求,我们在“分机”中增加了“IP地址鉴权”的特性。也就是说,MSS可以不要求SIP终端首先进行注册,呼叫过程中也可以不再对账号和密码进行鉴权,只要SIP消息来自特定的或者预先配置的IP地址即可。请参考下图了解更多的细节:

IP地址鉴权
IP地址鉴权

另外,在新版本中我们同样也更新了openAPI文档,如果您有兴趣的话,可以参考最新的文档。

MSS之间采用SIP中继通信

MSS之间采用SIP中继通信

1. 描述

部分客户在多地都有分支机构或者分公司,因此希望在这些分公司之间建立VOIP连接。有很多种方法可以实现这个需求,本文给出一个具体的实例描述两个MSS之间采用SIP中继建立这种连接。

2. 网络拓扑

整个网络拓扑结构是比较简单的,总共只有两个分支办公室,各部署一套MSS。如下图所示:

网络拓扑
网络拓扑

在部署VoIP网络之前,我们应先做好号码规划。不同的号码格式或者规划直接影响到后期的呼叫路由配置。在上图中可以看到:我们给分支1规划的号码是1xx格式,例如100、101等,而给分支2规划的号码是2xx格式,例如200、201等。

两地的MSS都配置了公共IP地址,能直接连接公网。如果您的MSS是部署在私网或者路由器后面,并且您希望也能向外部用户提供服务,请先点击文档了解细节。

现在我们开始本场景的具体配置细节。

3. 配置

在下面各项配置中,如果没有特别申明,部分参数总是采用默认值即可。

3.1 MSS1

请点击菜单“数据 – SIP中继”,添加以下记录:

SIP中继编号 = 1
描述 = to MSS2
服务器地址 = 10.23.x.x

请点击菜单“拨号规则 – 分析被叫号码”,增加以下记录用于MSS将呼叫路由给MSS2:

被叫号码前缀 = 2
路由类型 = SIP中继
SIP中继编号 = 1

3.2 MSS2

基本配置与MSS1几乎相同。

请点击菜单“数据 – SIP中继”,添加以下记录:

SIP中继编号 = 1
描述 = to MSS1
服务器地址 = 41.32.x.x

请点击菜单“拨号规则 – 分析被叫号码”,增加以下记录用于MSS将呼叫路由给MSS1:

被叫号码前缀 = 1
路由类型 = SIP中继
SIP中继编号 = 1
在csipsimple中配置STUN

在csipsimple中配置STUN

csipsimple是android平台非常好用的一款SIP客户端软件,我们经常向客户推荐这款软件。

众所周知,在VOIP部署中经常会遇到“语音单通”或者“语音双不通”的问题。通常我们都建议用户在终端侧配置STUN来解决。可是经常有用户反馈,不知道如何在csipsimple中配置STUN。

实际上配置方法还是很简单的。请参考下面的步骤:

(1)请点击“Setting (设置)”  > Network (网络)>  “Use Stun(使用STUN)”,然后设置STUN服务器即可。如果您是Cloud-MSS客户,您可以直接用您的虚拟服务器地址作为STUN服务器。当然,您也可以选择csipsimple默认的STUN服务器。

(2)如果STUN仍然没有解决问题,您可以再尝试使用ICE:Settings(设置) > Network (网络) > “Use ICE”.

规整被叫号码

规整被叫号码

特性说明

V14.4版本最近进行了一次更新,主要是在“拨号规则”功能中增加一个新特性:规整被叫号码。

“规整被叫号码”允许我们在将呼叫路由给外线或者SIP中继时,有最后一次机会对被叫号码进行变换,以满足对端服务器对被叫号码格式的不同要求。

该特性一个比较典型的应用场景:客户有两个VOIP账户,一个是本地VOIP运营商,一个是国际VOIP运营商。两个VOIP运营商对号码格式有不同要求,而客户自己只想采用一套拨号方案,因此可以在MSS中配置“规整被叫号码”,对最终的号码进行规整,满足运营商的要求。我们通过一个简单的示例来说明如何应用这个特性。

示例场景

如上所述,客户有两个VOIP账户,外呼的拨号方式为“90xxxx”。其中“9”为MSS默认外呼前缀。“0”为本地VOIP运营商要求的呼叫前缀。而国际VOIP运营商要求的号码格式为“0086xxxx”。

对比上述要求,实际上我们仅需要针对国际VOIP运营商,将外呼的“0”前缀,替换为“0086”前缀即可。

步骤1:为国际VOIP的外线定义独立的“出呼叫群编号”

请点击菜单“数据 / 外线”,选择国际VOIP账户对应的外线进行编辑,点击“出呼叫”页,设置如下:

出呼叫群编号 = 1

步骤2:定义号码变换方式

我们需要定义号码变换数据,将“0”变换为“0086”。请点击菜单“拨号规则 / 变换”,定义新记录:

变换编号 = 1
变换类型 = 替换
起始位置 = 0
长度 = 1
替换字符串 = 0086

 步骤3:为特定出呼叫群定义“规整被叫号码”

请点击菜单“拨号规则 / 规整被叫号码”,定义新记录:

出呼叫群编号 = 1  <== 在步骤1中定义
被叫号码前缀 = 0
变换编号 = 1  <== 在步骤2中定义

在此可能会有疑问:为什么被叫号码前缀不是”9“呢?因为”9“是默认外呼前缀,完成”分析被叫号码“处理后,该前缀已经被删除,剩余号码是”0xxxx“,因此在最后送往外线或者SIP中继之前,我们应当根据被叫号码的”0″前缀进行规整分析。