前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >bind_digit_action

bind_digit_action

作者头像
杜金房
发布2020-12-21 15:55:32
发布2020-12-21 15:55:32
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

简介

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的按键可以设置一个,也可以设置成正则表达式。

用法说明

代码语言:javascript
代码运行次数:0
运行
复制
<action application="bind_digit_action" data="<realm>,<digits|~regex>\,<string>[,<value>][,<dtmf target leg>][,<event target leg>]"/>

需要参数如下

  • realm — 没有具体含义,类似dialplan的context,决定用户按键后所要执行的操作。
  • digits — 所要匹配的按键

OR

  • ~regex — 所要匹配的正则表达式
  • string — 收到按键匹配后,所要执行的Dialplan或者API, 例如: exec:\<dialplan app\>, e.g. api:\<api app\>

可选参数如下

  • value — 上述string执行所需的参数,可以为空
  • dtmf target leg — 表示按键绑定在哪条leg上,值有self, peer, both,空的情况下默认值是self。self表示aleg,peer表示是绑定在bleg上的按键。
  • event target leg —表示当用户按下按键后,触发哪条leg去执行realm所对应的操作,值同dtmf target leg。比如有如下bind_digit_action的参数:start_recording,*0,exec:execute_extension,rstart XML default,self,peer,当aleg按下*0的时候,会触发bleg重新unting dialplan。

用bind_digit_action实现录音开关

利用bind_digit_action可以实现通过按键控制录音开关,下面提供配置说明,假设FreeSWITCH本地有两个用户1001和1002,在其通话的时候,通过各自按*0来控制自己的录音。

代码语言:javascript
代码运行次数: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来控制自己的录音开关。

当然,上面还可以改成主叫控制被叫录音开关,被叫控制主叫录音开关,当然实际业务中一般不会这么去用,大家感兴趣的话可以课后练习,这里就不多赘述了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 用法说明
    • 需要参数如下
    • 可选参数如下
    • 用bind_digit_action实现录音开关
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档