Freeswitch 多端桥接
示意图
模拟情况简述:
用A 的1001 呼叫 c1002 ,实现 呼到 C的1002 分机上.
1.1 IP 模拟分配情况
A: 10.10.1.101
B: 10.10.1.102 , 10.10.2.201
C: 10.10.2.202
网络打通,添加相关路由.
1.2 A的呼出拨号计划(dialplan/default.xml)
<extension name="SIP">
<condition field="destination_number" expression="^c1002$">
<action application="bridge" data="sofia/external/1002@10.10.1.102:5280"/>
</condition>
</extension>
1.3 B创建两个sip_profiles
操作:
- 将
sip_profiles/external.xml
重命名为ex_net1.xml
. - 复制一份 , 重命名为
ex_net2.xml
1.3.1 sip_profiles/ex_net1.xml 将对应变量改为对应的固定值:
name=ex_net1
<param name="rtp-ip" value="10.10.1.102"/>
<param name="sip-ip" value="10.10.1.102"/>
<param name="ext-rtp-ip" value="10.10.1.102"/>
<param name="ext-sip-ip" value="10.10.1.102"/>
<param name="sip-port" value="5280"/>
1.3.2 sip_profiles/ex_net2.xml 将对应变量改为对应的固定值:
name=ex_net2
<param name="rtp-ip" value="10.10.2.201"/>
<param name="sip-ip" value="10.10.2.201"/>
<param name="ext-rtp-ip" value="10.10.2.201"/>
<param name="ext-sip-ip" value="10.10.2.201"/>
<param name="sip-port" value="5080"/>
1.4 B的呼入拨号计划(dialplan/public.xml) 桥接计划
<extension name="test_name">
<condition field="network_addr" expression="^10\.10\.1\.101$"/>
<condition field="caller_id_number" expression="^1002$">
<action application="bridge" data="{origination_caller_id_number=1001}sofia/external/${destination_number}@10.10.2.202:5080"/>
</condition>
</extension>
1.5 C的呼入拨号计划(dialplan/public.xml)
<extension name="test_name">
<condition field="network_addr" expression="^10\.10\.2\.201$"/>
<condition field="caller_id_number" expression="^1002$">
<action application="bridge" data="{origination_caller_id_number=1001}user/1002"/>
</condition>
</extension>
1.6 呼叫测试
1.6.1 分别登录 A的1001 和 C的1002
1.6.2 A的分机 1002 输入 c1002 呼叫,接通测试相关情况.
核心点
1. URI
SIP URI是通过SIP呼叫他人的SIP地址方案。换句话说,一个SIP URL就是一个用户的SIP电话号码。
SIP-URL按以下格式书写:
sip[s]:username@domain:port
sip 为协议
username 被叫
domain 域
port 端口
例如:
sip:1001@10.10.10.101:5060
2. dialplan(拨号计划)
dialplan(拨号计划)分为 default.xml (出方向) 和 public.xml (入方向) .
此处主要用到 public.xml ,配置路径如下
/usr/local/freeswitch/conf/dialplan/public.xml
配置内容如下:
<extension name="test_name">
<condition field="network_addr" expression="^10\.10\.10\.201$"/>
<condition field="caller_id_number" expression="^101001$">
<action application="bridge" data="{origination_caller_id_number=1001}sofia/external/92${destination_number}@10.10.10.202:5060"/>
</condition>
</extension>
示例解释:收到来自 10.10.10.201 的 主叫为 101001 呼叫时,将呼叫桥接至 10.10.10.202 并修改主叫为 1001,被叫加前缀92.
其中:
test_name 为计划名-自定义.
network_addr 为 对方IP.
caller_id_number 为 对方的主叫号码.
bridge 是 桥接应用,(关键),将 匹配中的呼叫转接到指定地址.
- origination_caller_id_number 上游主叫.
- destination_number 上游被叫号码.
sofia/external/
# 表示 使用 sofia 模块 external 配置
3. 场景假设
假设有三台设备:A,B,C
A 呼叫 B 转接 到 C .
在B上配置 public.xml ,将满足条件的呼叫 桥接(bridge) 至 C .