bind_digit_action是FreeSWITCH中的一个Application。和bind_meta_app很相似,但是bind_digit_action使用起来更得心应手。可以这么说,在所有使用到bind_meta_app的场合都可以用bind_digit_action来代替。
bind_digit_action中引入了realm的概念来绑定各种按键动作,这个类似于dialplan中的context概念(在收到呼叫后,根据呼叫所在的context来分配呼叫路由)。同样,当FreeSWITCH收到用户的按键后,根据按键所在的realm来执行对应的操作。bind_digit_action的按键可以设置一个,也可以设置成正则表达式。
<action application="bind_digit_action" data="<realm>,<digits|~regex>\,<string>[,<value>][,<dtmf target leg>][,<event target leg>]"/>
OR
利用bind_digit_action可以实现通过按键控制录音开关,下面提供配置说明,假设FreeSWITCH本地有两个用户1001和1002,在其通话的时候,通过各自按*0来控制自己的录音。
<extension name="bind_digit_action_recording_setup">
<condition field="destination_number" expression="^rsetup$">
<action application="bind_digit_action" data="start_recording,*0,exec:execute_extension,rstart XML default"/>
<action application="bind_digit_action" data="stop_recording,*0,exec:execute_extension,rstop XML default"/>
<action application="digit_action_set_realm" data="start_recording"/>
</condition> </extension><extension name="bind_digit_action_recording_start">
<condition field="destination_number" expression="^rstart$">
<action application="set" data="RECORD_APPEND=true"/>
<action application="record_session" data="${record_file}"/>
<action application="digit_action_set_realm" data="stop_recording"/>
</condition> </extension><extension name="bind_digit_action_recording_stop">
<condition field="destination_number" expression="^rstop$">
<action application="stop_record_session" data="${record_file}"/>
<action application="digit_action_set_realm" data="start_recording"/>
</condition> </extension><extension name="local_call">
<condition field="destination_number" expression="^(1\d{3})$">
<action application="set" data="record_file=/tmp/caller.wav"/>
<action application="export" data="nolocal:record_file=/tmp/dest.wav"/>
<action application="execute_extension" data="rsetup XML default"/>
<action application="set" data="bridge_pre_execute_bleg_app=execute_extension"/>
<action application="set" data="bridge_pre_execute_bleg_data=rsetup XML default"/>
<action application="bridge" data="user/$1"/>
</condition> </extension>
上述配置中execute_extension是为了设置 aleg录音,bridge_pre_execute_bleg_app和bridge_pre_execute_bleg_data是bridge之前设置bleg的录音。
在dialplan的default.xml的开头添加上述配置,然后执行fs_cli -x 'reloadxml'使之生效,接着1001拨打1002,1001按*0会看到/tmp下产生caller.wav,1001再按*0,会发现caller.wav文件大小不再变化,说明录音已停止,继续按*0,录音继续。同理,1002按*0后/tmp下会看到dest.wav文件,双方各自按*0来控制自己的录音开关。
当然,上面还可以改成主叫控制被叫录音开关,被叫控制主叫录音开关,当然实际业务中一般不会这么去用,大家感兴趣的话可以课后练习,这里就不多赘述了。
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!