蓝牙电话-让FreeSwitch的UA坐席在局域网内通过手机接打电话

让FreeSwitch的UA坐席在局域网内通过手机接打电话

  • 一、前言

前面的篇章《蓝牙电话与FreeSwitch服务器和UA坐席的通话》中,我们叙述了【手机--UA坐席】一一对应的强捆绑模式,使某个固定的UA坐席号和旁边的手机,外呼和来电均会通知到固定的UA坐席。

前几天有用户问:如果我想每个坐席都能通过这个手机拨打电话出去,这个拨号规则要怎么设置呢?

简单思考了一下,这是最基础的FreeSwitch软交换的网关路由的规则,在软交换中通常有两种方式可以实现指定网关外呼的效果。本篇中专门针对这个需求,分两个章节,谈谈如何将手机配置成为公共的电话外呼网关。

  • 二、网络拓扑结构
  • 三、拨号计划

文件位置:C:\Program Files\FreeSWITCH\conf\dialplan\default.xml

在拨号计划的<context name="default">后面,直接加上这一段内容,即可实现外呼和来电的策略。

<!-- 本地坐席通过云服务器外呼出去 -->

<extension name="outbound_all_via_gateway">

<condition field="destination_number" expression="^12122(\d+)$">

<action application="set" data="caller_id_number=6666"/>

<action application="set" data="caller_id_name=6666"/>

<action application="set" data="effective_caller_id_number=6666"/>

<action application="set" data="effective_caller_id_name=6666"/>

<action application="bridge" data="sofia/gateway/sim_gw/$1"/>

</condition>

</extension>

<!-- app直接注册到本地ag网关 -->

<extension name="call_out_via_sim_gateway">

<condition field="destination_number" expression="^12123(\d+)$">

<!-- $1 是剥离前缀后的真实号码,如 10086 -->

<action application="bridge" data="{origination_caller_id_name=1,origination_caller_id_number=1}user/gw001@${domain_name}"/>

</condition>

</extension>

修改后文件内容如下:

下面针对拓扑图中不同的注册场景,分别加入不同的用户节点或网关节点,如下

  • 四、添加用户(fs做为Access Gateway,手机直接注册到fs)

(假设手机app是一个运行在局域网内的GoIP设备)

文件位置:C:\Program Files\FreeSWITCH\conf\directory\default目录中复制1000.xml一份,重命名为《gw001.xml》。

打开这两个文件,将内容中所有的1000字符串,替换为gw001,保存后即可。文件内容如下:

文件位置:C:\Program Files\FreeSWITCH\conf\directory\default\gw001.xml

这样,reloadxml后,结合上一个章节【拨号计划】中call_out_via_sim_gateway节点,即可实现任意freeswitch坐席,拨打带12123前缀的号码时,均能通过gw001这个手机拨打出去(如拨打1212310086,会将10086这个号码送到手机app去拨打)。

手机app中,固定SIP账号密码弹出框输入的内容如下图所示:

  • 五、添加网关(手机先连接云服务器的fs,坐席连接本地fs)

(假设云服务器freeswitch已按《蓝牙电话与FreeSwitch服务器和UA坐席的通话》篇章的方式配置了账号,且手机app已连接到云服务器的fs)

文件位置:C:\Program Files\FreeSWITCH\conf\sip_profiles\external目录中创建sim_gw.xml

打开这个文件,将其内容改为:

<include>

<gateway name="sim_gw">

<!-- 网关参数 -->

<param name="username" value="13691724110"/>

<param name="password" value="5585"/>

<param name="realm" value="120.78.211.195"/>

<param name="proxy" value="120.78.211.195:5090"/>

<param name="register" value="true"/>

<!-- 注册过期时间(秒) -->

<param name="expire-seconds" value="3600"/>

<!-- 呼叫参数 -->

<param name="caller-id-in-from" value="false"/>

<param name="from-domain" value="120.78.211.195"/>

<!-- 编码设置(根据上游平台支持的编码进行调整) -->

<param name="codec-prefs" value="PCMA,PCMU,G729,G723"/>

<!-- 其他优化参数 -->

<param name="retry-seconds" value="30"/>

<param name="register-transport" value="udp"/>

<param name="dtmf-type" value="rfc2833"/>

</gateway>

</include>

修改后文件内容如下:

这样,reloadxml后,结合上一个章节【拨号计划】中outbound_all_via_gateway节点,即可实现任意freeswitch坐席,拨打带12122前缀的号码时,均能通过sofia/gateway/sim_gw这个手机拨打出去(如拨打1212210086,会将10086这个号码送到手机app去拨打)。

手机app中,固定SIP账号密码弹出框输入的内容如下图所示:

  • 六、账号测试方式

本地电脑上安装FreeSwitch,电脑上安装eyeBeam或X-Lite或microSIP做为UA坐席客户端。

运行本地FreeSwitch后,命令行界面大致如下:

运行eyeBeam,随便使用坐席账号(如1001)注册到本地的FreeSwitch后,拨打1212210086或1212310086,可以看到电话号码正常通过旁边的手机中拨打了10086。

用户可正常在电脑eyeBeam中使用麦克风和电脑的扬声器跟10086进行人工对话。

  • 七、总结

文章阐述了FreeSwitch软交换中如何配置Access Gateway(接入网关),允许类似GoIP网关反向注册到FreeSwitch中,进行线路的外呼。

手机转SIP的功能,本质上不是GoIP设备,但由于它长期运行在Wifi或4G/5G内网,因此需要软交换系统允许注册式网关进行反向注册式连接,有兴趣的读者可以自己去配置。