应用情景: 使用阿里服务器,落地使用本地的模拟线路(O口网关)。
1、FreeSWITCH 服务器开一个账号,比如 5000 internal , O口 SIP设置页面按照网关注册 5000 的账号信息。
2、dialplan 中添加拨号规则:
<condition field="destination_number" expression="^(\d{8,12})$">
<action application="lua" data="reregister.lua 5000 $1"/>
</condition>
3、FreeSWITCH scripts/ 目录下 生产如下 reregister.lua :
gatewayNumber = argv[]
destNumber = argv[] api = freeswitch.API();
-- 获取网关注册的地址,主叫号码替换
local domain = freeswitch.getGlobalVariable("domain");
local sofiaContactStr = api:executeString("sofia_contact " .. gatewayNumber .."@" .. domain);
local dialStr = string.gsub(sofiaContactStr, gatewayNumber, destNumber); -- bridge到被叫号码
session:execute("bridge" , dialStr);
当然还有最方便和直接的方式,直接在dialplan中进行替换:
最直接方式还是在拨号规则中直接配置:
<include>
<extension name="gopstn">
<condition field="destination_number" expression="^9(.*)$">
<action application="bridge" data="sofia/internal/sip:$1${regex(${sofia_contact(user/3000)}|^sofia/internal/sip:(\d+)(.*)|$2)}"/>
</condition>
</extension>
</include>
如: ${sofia_contact(user/3000)} ==> sofia/internal/sip:3000@192.168.5.58:5060
${regex(${sofia_contact(user/3000)}|^sofia/internal/sip:(\d+)(.*)|$2)} ==> @192.168.5.58:5060 经过拼接和组装,一个替换过的呼叫字符串就组装好了。
或者:
<include>
<extension name="gopstn">
<condition field="destination_number" expression="^9(.*)$">
<action application="bridge" data="${replace(${sofia_contact(user/6003)}|6003|$1)}"/>
</condition>
</extension>
</include>