本节书摘来自华章计算机《 FreeSWITCH权威指南》一书中的第3章,第3.5节,作者:杜金房 张令考 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.5 配置SIP网关拨打外部电话
如果你拥有某个运营商提供的SIP账号,那么你就可以通过配置SIP来拨打外部电话了。该SIP账号(或提供该账号的设备)在 FreeSWITCH 中称为SIP网关(Gateway)。添加一个网关只需要在 conf/sip_profiles/external/中创建一个XML文件,名字可以随便起,如gw1.xml,然后在该文件中输入如下代码:
<gateway name="gw1">
<param name="realm" value="SIP服务器地址,可以是IP或IP:端口号"/>
<param name="username" value="SIP用户名"/>
<param name="password" value="密码"/>
</gateway>
如果你的SIP网关还需要其他参数,可以参阅同目录下的 example.xml,但一般来说上述参数就够了。你可以重启 FreeSWITCH,或者执行以下命令使用之生效:
freeswitch> sofia profile external rescan
显示一下网关的注册状态:
freeswitch> sofia status
如果显示 gateway gw1 的状态是 REGED,则表明已正确地注册到了网关上。你可以先用命令试一下网关是否工作正常:
freeswitch> originate sofia/gateway/gw1/xxxxxx &echo
以上命令会通过网关 gw1 呼叫号码 xxxxxx(可能是你的手机号),被叫号码接听电话后,FreeSWITCH 会执行 echo 程序,你应该就能听到自己的回音了。
当然,世界SIP网关五花八门,你实际操作起来可能不会这么顺利。如果真的在这里遇到问题,那么你大可继续往下阅读,相信你读完本书之后,跟任何网关对接的复杂问题都能迎刃而解了。
3.5.1 从某一分机上呼出
如果网关测试正常,你就可以配置从你的SIP软电话或portaudio呼出了。由于我们是把 FreeSWITCH 当作 PBX 用,所以需要选一个出局字冠。常见的 PBX 一般是内部拨小号,打外部电话就需要加拨 0 或先拨 9 。当然,这是你自己的交换机,你可以用任何你喜欢的数字(甚至是字母)。继续修改拨号计划,创建一个新的XML文件— conf/dialplan/default/call_out.xml,内容如下:
<include>
<extension name="call out">
<condition field="destination_number" expression="^0(\d+)$">
<action application="bridge" data="sofia/gateway/gw1/$1"/>
</condition>
</extension>
</include>
其中,“^0(d+)$”为正则表达式,“(d+)”匹配 0 后面的所有数字并存到变量$1中。然后通过bridge程序通过网关gw1打出该号码。当然,建立该XML后需要在控制台中执行reloadxml使之生效。
3.5.2 呼入电话处理
如果你的 SIP 网关支持DID,那么你需要知道呼入的DID号码。一般来说,呼入的 DID 就是你的 SIP 号码,如果你不知道,也没关系,学习完第6章你就能学到如何取得这个值了。创建以下XML文件并放到 conf/dialplan/public/
my_did.xml中:
<include>
<extension name="public_did">
<condition field="destination_number" expression="^(你的DID)$">
<action application="transfer" data="1000 XML default"/>
</condition>
</extension>
</include>
在FreeSWITCH中执行reloadxml使之生效。上述配置会将来话直接转接到分机 1000 上。在后面的章节中你会学到如何更灵活地处理呼入电话,如转接到语音菜单或语音信箱等。