FreeSwitch:群振、顺振研究

在呼叫中心系统中,有二类特殊的应用场景,即所谓的“群振”(也叫“共振”或“同振”)以及“顺振”。

群振的业务场景:

当客人电话进线时,希望呼叫中心的所有客服都能响应(即:假设呼叫中心有5个客服在接线,客人来电时,这5个客服的电话一起响),任何1个客服都可以接听(注:该客服接起来后,其它客服的分机就不再响了)

顺振的业务场景:

当客人电话进线时,可以指定一系列客服按优先级顺序接听(即:假设呼叫中心有2个客服A,B在接线,客人来电时,希望优先A的话机响,如果A一直没接或拒接,再呼客服B,让B的话机继续响)

 

下面我们以FreeSwitch (1.10.11版本),演示下如何实现:

默认情况下,FreeSwitch内置了几个账号(1000,1001...),默认密码是1234,我在自己的windows笔记本上,用开源的软电话终端MicroSIP,分别以1000,1001注册到本机的freeSwitch上

 

群振实现:

FS_Cli终端窗口输入:

originate user/1000,user/1001 &echo
即:在2个号码之间用英文半角逗号拼接

可以看到,2个软电话终端都弹出来电振铃窗口。可以分别测试下面几种接听情况:

  • 1000拒接挂掉,1001仍然继续振铃
  • 1000接听,1001的来电振铃将自动消失
  • 1000接起来,然后FS_Cli再发1次 originate user/1000,user/1001 &echo 这时候,1000话机已在通话中,将只有1001会弹出来电提醒

 

顺振实现:

FS_Cli终端窗口输入:

originate user/1000|user1001 &echo
即:在2个号码之间用管道符|拼接

这时只有1000会弹出来电提醒:可以分别测试下面几种接听情况:

  • 如果点Decline拒接,会继续弹出1001的来电提醒。
  • 如果1000一直不接,振铃超时后,1001并没有按预期继续弹出来电提醒 (后面会讲到改进方法)
  • 如果1000正常接听,然后挂断了,FS_Cli短时间内再发1次 originate user/1000,user/1001 &echo,优先弹出来电提醒的将是1001(即:FS内部应该有号码平均轮训的机制,保证每个号码都有机会雨露均沾,不知道这个特征是否与FS的版本有关,非1.10.11版本建议大家以实际验证结果为准)
  • 如果1000正常接听,持续通话中,FS_Cli再发1次 originate user/1000,user/1001 &echo,由于1000占线通话中,将会弹出1001的来电提醒

第2种测试结果,1000振铃超时后,无法继续呼叫1001,这显示不满足业务要求,在FreeSwitch官方文档找到1个参数:originate_continue_on_timeout

看参数说明, 这个应该管用,验证一下:

originate {originate_continue_on_timeout=true}user/1000|user/1001 &echo
实际验证下来,确实有用。
 
振铃超时设置:
默认的振铃时间是60秒,如果想调整群振或顺振的超时时间,我们参考以前单号码呼叫的设置,比如:
originate {call_timeout=5}user/1000 &echo
将其套用到群振上:
originate {call_timeout=5}user/1000,user/1001 &echo
发现并不管用,仍然是振铃60秒
继续在官网上搜索相关信息,找到1个相关的参数leg_timeout:

尝试一下:

originate {originate_continue_on_timeout=true}[leg_timeout=15]user/1000|[leg_timeout=5]user/1001 &echo
结果符合预期:顺振模式下,1000的振铃超时为15秒,超时不接后,将继续呼叫1001(1001的振铃超时为5秒)
 
在群振模式下,也依然有效:
originate [leg_timeout=15]user/1000,[leg_timeout=5]user/1001 &echo

 

参考文档:

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Dialplan/Variables-Archive/x__Variables_6587314/#origination_timeout

posted @ 2024-01-07 16:07  菩提树下的杨过  阅读(396)  评论(0编辑  收藏  举报