《 FreeSWITCH权威指南》——3.5 配置SIP网关拨打外部电话

本节书摘来自华章计算机《 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 上。在后面的章节中你会学到如何更灵活地处理呼入电话,如转接到语音菜单或语音信箱等。

上一篇:JServ/Tomcat/OC4J 有何区别 mod_jserv 和 mod_jk 的演变


下一篇:串讲Apache OFBiz技术架构