[freeswitch+卡池呼叫中心搭建] 内网SIP网关与公网Freeswitch服务器对接实现SIP网关落地
一、内网配置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
,然后在FreeSWITCH
的console
里调用
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服务器
参考下图,你可以把你成功注册的软电话的信息负责过来即可,配置如下:
3、配置网络穿越
如上配置后你会看发现执行sofia_contact goip
还是提示error/user_not_registered
,这是因为注册上去,询问厂家技术得知可以设置网络穿越(服务很好)
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
中编辑新的文件。
参考:
用户评论
-
2021-11-01 02:31:55我现在就是这个状态 不知道怎么对接了0 赞 0 条评论 回复评论查看更多评论!问一下,这个配置拨打的时候,是只能拨打内线电话吗0 赞 0 条评论 回复评论查看更多评论!我在测试`DBL`的过程中发现用户拒接电话主叫还是会听到等待音,原因是`DBL`的高级设置中`彩铃模式`设置为了`假回铃`;需要修改为彩铃即可
更多相关好文
当前暂无更多相关好文推荐...-
微信公众号文章/菜单添加小程序时路径如何获取? 2021-12-22
-
如何轻松获取微信小程序路径path? 2021-12-22
-
cannot import name 'CUDA_HOME' from 'mmcv.utils' 2021-12-05
-
vgg的loss一轮达到ln(1/n)阈值,如何解决 2021-11-21
-
如何下载使用utils库 2021-10-27
热门文章
-
微信公众号文章/菜单添加小程序时路径如何获取? 2021-12-22
-
如何轻松获取微信小程序路径path? 2021-12-22
-
python/MySQL分页查询方法与性能优化 2021-06-23
-
mitmproxy & python 忽略所有的https/ssl请求 2021-04-19
-
如何使用邮件/邮箱推广微信公众号/小程序? 2021-01-28
栏目最新文章
Pytorch是Facebook的AI研究团队发布了一个Python工具包,是Python优先的深度学习框架。作为numpy的替代品;使用强大的GPU能力,提供最大的灵活性和速度,实现了机器学习框架Torch在Python语言环境的执行,基于python且具备强大GPU加速的张量和动态神经网络。公告提示
- pytorch中文文档
- pytorch官方文档
其他产品
提交评论