Freeswitch功能非常多, 还有一些常用功能
企业常用的电话转接, 代接等
压力测试, 安全等
1.转接和代接
来电转接分
盲转(Blind Transfer)
协商转(Attended Transfer)
盲转:
将来电直接转到某一分机, 用于电话已经接听的情况
A呼叫B, B接听 A与B通话, A要求转C,
B转接到C C开始振铃, B挂断 C接听, A与C通话
默认Dialplan的Local_extensions
<action application="bind_meta_app" data="1 b s execute_extension::dx XML features" />
有电话打入后,如果是最终路由到一个内部分机, 就执行这一行,来话是a-leg, 还没有b-leg
bind_meta_app,会在本次通话上绑定参数中的"1",后续由"*1"激活,
b表示绑定到b-leg,s表示same,在哪条腿收到按键就在哪条腿上执行
execute_extension表示在Dialplan找extension去执行,最终执行bridge(user/B),A与B桥接并开始通话
answer保证电话时应答状态, read表示等待用户按键,等待用户输入分机号,输入后, B开始拨号
is_transfer判断B输入的号是不是合法,如果是执行transfer 进行转移
C开始振铃, 如果C接听, A就与C通话, A被转走, B就自己挂断
协商转:
如果C长时间不应答, 则转接失败, A需要重新呼叫B转接
A与B通话中, B转接C , A播放等待音乐, 如果C呼叫失败, B仍可与A通话, C长时间不应答, B可以取消呼叫
如果C接通后, B与C通话, B询问C是否愿意接听, 如果C不愿意则C挂机, B与A继续通话, 如果C接受则B挂机
如果B不挂机, 按3则形成3方通话,
B还可以随时与A, 与C通话
代接
A电话响铃, A不在座位, B代替A接听电话
当分机有振铃, 另外的话机直接按866就能接听, 同时响铃结束
拨**1001, 接听正在振铃的1001分机上电话
2.共享线路呈现
在自己话机上监视其他话机的状态, 知道另一个电话是否处于忙或闲的状态
有人想打秘书电话找老板, 秘书转播老板电话, 恰好老板正在占线, 就导致转接失败, 如果秘书事前知道老板电话在忙, 就可以判断是否要转接, 或告诉用户先等等
3.使用组播功能做网络广播
拿起电话拨打一个号码, 就可以对一大群人喊话, 广播功能可以大大提高工作效率
广播也可以用会议实现, 简单发起N路通话加入一个会议也能起到广播的效果
但建立N路通话消耗太多网络资源, 也无法保证对方即使接听, 影响信息送达
最经济的实现方式:
组播(Multicast),只向组播地址发送一个RTP流, 监听该组播地址的所有主机都能收到
esf_page_group有三个参数:
组播地址, 默认为224.168.168.168
端口号, 默认为35467
控制端口号,默认为6001
在Freeswitch默认配置中, 拨打号码7243就直接向该地址发送组播
<extension name="rtp_multicast_page">
<condition field="destination_number" expression="^pagegroups$|^7243$">
<action application="answer"/>
<action application="esf_page_group"/>
</condition>
<extension>
如果你想发送到其他地址, 可以配置相关参数,如下配置可以将RTP包发送到组播地址224.0.0.100
<action application="esf_page_group" data="esf_page_group 224.0.0.100 34567 6001"/>
与普通的IP地址不同, 组播需要配置组播地址, 组播地址从224.0.0.0到239.255.255.255,
实际用到组播的业务很少, 在有些系统需要配置组播路由,
在Linux的eth0配置组播路由:
ip route add 224.0.0.0/4 dev etho src 192.168.5.2