[freeswitch+卡池呼叫中心搭建] 内网SIP网关与公网Freeswitch服务器对接实现SIP网关落地

Song • 2227次浏览 • 0个评论 • 2018-12-20 07:00:27

一、内网配置SIP网关与Freeswitch对接

1、认证模式

sip对接模式相同,FreeSWITCH需要建立一个网关并注册到网关设备上即可执行操作,具体方法是在sip_profiles/external下新增goip设备完成注册即可进行呼叫,这里只是简单的配置使用,具体可以参考文章下面的参考链接。

<include>
    <gateway name="goip">
        <param name="username" value="goip"/>
        <param name="realm" value="GOIP所在IP"/>
        <param name="password" value="123456"/>
        <param name="register" value="false"/>
    </gateway>
</include>

可以参考这里: GOIP的VoIP基本配置以及与Freeswitch对接

2、非认证模式

非认证模式直接参考一下文章下末尾的参考链接。

二、内网SIP网关对接公网Freeswitch服务器

一般情况下,我们的SIP网关一般在内网中,而FreeSWITCH在公网中,FreeSWITCH无法直接指向内网地址,也没法注册到网关设备上。所以此时用上面的方法不可以了,此时就需要用到NAT,让内网网关注册到公网的FreeSWITCH上,内网注册过去之后,会在路由器上打洞,即做了一个内外网端口映射。FreeSWITCH无法直接到达网关,但是通过外网端口就能到达内网的网关了。

1、简单理解

上面可能大家不好理解(对于新手来说,比如刚开始的我),实现方法就是把你的网关当成一个软电话注册到Freeswitch 中,然后通过sofia_contact获取到网关的注册地址,可以理解为获取到了网关的外网SIP地址,这样就可以实现呼叫了。

2、具体实施方案

a、注册一个fs账号

我们可以在directory/default/中添加一个user,你可以用软电话先测试一下是否能连接上这个账户,我们这里命名为gateway.xml

b、SIP网关注册到FS以及获取网关对应的外网地址和端口

我们使用SIP网关注册到Freeswitch,然后在FreeSWITCHconsole里调用

sofia_contact gateway

其中sofia_contact是一个API命令,它会根据用户的注册地址扩展成相应的呼叫字符串。如果注册成功显示:

sofia/internal/sip:gateway@61.149.10.189:26529

如果失败则显示error/user_not_registered,你需要查看一下sip网关是否异常。

c、使用网关对应的外网地址和端口进行外网呼叫
<extension name="callout">
    <condition field="destination_number" expression="^10010$">
        <action application="bridge" data="${regex(${sofia_contact(internal/gateway@${domain_name})}|^(.+)sip:(.+)@(.+)|%1sip:10010@%3)}"/>
    </condition>
</extension>
d、总结

FreeSWITCH和网关如果在同一网段或者网关在FreeSWITCH的外网的话(即FreeSWITCH可以直接访问到网关),就采用FreeSWITCH注册到网关或者指向网关的方式,这也是常用的方式。 如果网关在内网,而FreeSWITCH在外网的话,就只能采用内网网关注册到FreeSWITCH的方式。

三、使用DBL SIP网关内网对接公网Freeswitch服务器

我使用的是DBL的语音网关设备,需要购买设备的小伙伴可以自己去看一下,相比还是很便宜的dbltek;其他厂家网关可以参考一下:

1、注册用户

directory/default/中添加goip.xml,内容为:

<include>
    <user id="gateway1">
        <params>
            <param name="password" value="1234"/>
        </params>
        <variables>
            <variable name="toll_allow" value="domestic,international,local"/>
            <variable name="accountcode" value="gateway1"/>
            <variable name="user_context" value="public"/>
        </variables>
    </user>
</include>

注意,不要设置以下两行:

<variable name="effective_caller_id_name" value="Extension goip"/>
<variable name="effective_caller_id_number" value="goip"/>

否则,上车时主叫号码无法透传。

2、配置SIP网关注册到外网FS服务器

参考下图,你可以把你成功注册的软电话的信息负责过来即可,配置如下:

使用DBL SIP网关内网对接公网Freeswitch服务器

3、配置网络穿越

如上配置后你会看发现执行sofia_contact goip还是提示error/user_not_registered,这是因为注册上去,询问厂家技术得知可以设置网络穿越(服务很好)

使用DBL SIP网关内网对接公网Freeswitch服务器

2、设置外呼规则

设置outbound呼出路由规则,在dialplan/default/中添加00_outbound.xml,内容为:

<include>
    <extension name="outbound_00">
        <condition field="destination_number" expression="^9(\d+)$">
            <!--设置呼出前缀为9-->
            <action application="bridge" data="${regex(${sofia_contact(internal/gateway1)}|^(.+)sip:.+@(.+)|%1sip:$1@%2)}"/>
            <!--这里data的值最终将是sofia/internal/sip:$1@gateway1注册的源地址和端口-->
        </condition>
    </extension>
</include>

置呼出字冠为9,匹配任意以9开头的被叫号码,删掉9,再路由到网关。

3、设置呼入路由规则

由于在goip.xml中,我们定义了context=public,所以,在dialplan/public/中定义呼入规则00_inbound.xml

<include>
    <extension name="public_extensions">
        <condition field="destination_number" expression="^(10[01][0-9])$">
            <!--匹配被叫号1000~1019,请根据实际情况调整-->
            <action application="transfer" data="$1 XML default"/>
            <!--转移到deafult中的extension,根据实际情况调整。也可以直接bridge的-->
        </condition>
    </extension>
</include>

也可以直接在publuc.xml中编辑新的文件。

参考:

提交评论
要回复文章请先登录注册
用户评论
  • 2019-08-13 08:26:01 回复

    问一下,这个配置拨打的时候,是只能拨打内线电话吗

  • Song Song 2018-12-29 03:12:56 回复

    我在测试DBL的过程中发现用户拒接电话主叫还是会听到等待音,原因是DBL的高级设置中彩铃模式设置为了假回铃;需要修改为彩铃即可

    公告
    中国晚上好,随时随地分享前沿科技,好吃好玩,有趣有料的新鲜事;本站可以分享资源,技术,观点,态度;同时希望大家做一个文明的分享者!
    广告
    pytorch中文网