transfer [-bleg|-both] <exten> [<dialplan> <context>]
transfer是一个dialplan application,在mod_dptools工具集中定义。
功能是将当前的通话channel重新转入dialplan去匹配新的extension,并可修改目标dialplan的类型(XML/LUA/INLINE)和用户的context。
这种转移是对于FreeSWITCH来说的,另一个比较准确的表达叫做dialplan-jump。
同时对于已经bridge的channel,可以选择transfer的对象是aleg、bleg或both。
让我们以安装FreeSWITCH后的默认dialplan来看看transfer App的用法。
<!-- default.xml --><extension name="redial">
<condition field="destination_number" expression="^(redial|870)$">
<action application="transfer"
data="${hash(select/${domain_name}-last_dial/${caller_id_number})}"/>
</condition></extension>
这是实现重拨的extension,当用户摘机拨打redial或者870的时候会hunt这条extension
这里查询出上次话机正常呼叫时呼出的号码,然后使用transfer以新的destination number再次转入dialplan去Hunt被叫来实现Redial功能。
当然在这之前你需要先呼出过电话并插入记录到hash里面。
<!-- default.xml --><extension name="operator">
<condition field="destination_number" expression="^(operator|0)$">
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="transfer" data="1000 XML features"/>
</condition></extension>
这里实现了context的跳转,当话机呼叫operator或0的时候,将它转移到features.xml中去hunt 1000的destination number,即将话务转给1000话务员。
当然在features.xml匹配的extension中还做了sleep playback操作后又再次回到了default.xml后才实际的去呼叫1000话务员。
由于默认路由中没有aleg和bleg bridge后做transfer的例子,让我们来自己简单的写一个。
<extension name="test-transfer-on-bridge">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="bind_meta_app" data="1 a s transfer::-both 9196"/>
<action application="bridge" data="user/$1"/>
</condition></extension>
这个例子中我们给aleg绑定了按键功能,当A话机在通话过程中按*1两个按键时将会触发绑定的transfer app。
在这个extension中我们先绑定app,然后bridge到要呼叫的用户B,在通话过程中当A触发按键后两条腿都会transfer到9196这个nubmer,也就是echo。
当然transfer App还有更多灵活的用法,这需要根据具体的业务场景去使用。要想灵活掌握好App的使用还需要多写多用,才能让你了解到它的能力范围和限制的地方。
点击阅读原文,报名我们最新一期的沙龙!
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!