本文主要是介绍FreeSWITCH dialplan APPlication,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以下为所有应用(Application)的一览表,点击对应的超链接进入源网站查看英文版本,若要看中文版本可往下拉按序查找。翻译不妥处请多多指教。
A
- answer – 应答一个信道的呼叫
- att_xfer – 可用于呼叫转移
B
- bind_digit_action – 绑定一个关键字队列或者一个正则表达式到一个action上
- bind_meta_app – 在桥接或者执行另一个dialplan APP期间,对特定的呼叫leg上应答输入的DTMF按键序列
- block_dtmf - Block DTMFs from being sent or received on the channel
- break – 终断信道中正在运行的应用
- bridge – 将信道桥接到另一个已存在的信道上(即产生通话)
- bridge_export – 通过桥接(bridge)导出信道变量
C
- capture – 将捕获到的数字添加到信道变量数组中
- chat — 通过IM客户端发送一个文本消息
- check_acl –根据访问控制列表中的呼叫发起方地址是否符合规则,然后执行允许或者拒绝的操作
- clear_digit_action – 清空所有的数字绑定
- clear_speech_cache – 清除语音句柄缓存
- cluechoo - Console-only "ConCon" choo-choo traing
- cng_plc – 舒适噪音生成的配置
- conference – 建立一个内联(inbound)或者外联(outbound)的会议呼叫(详见https://freeswitch.org/confluence/display/FREESWITCH/mod_conference)
D
- db – 插入数据到数据库中
- deflect -挂断当前通话并向通话发起者(是一个网关或者代)发送一个REFER消息和一个新的INVITE消息
- delay_echo – 延迟一定事件后ECHO一个音频文件.
- detect_speech – 实现语音识别
- digit_action_set_realm – 更改绑定域
- displace_session – 替换(部分替换)信道中的文件或流
E
- early_hangup – 激活信道中的早期挂断(缺少相应资料)
- mod_dptools: eavesdrop –监控一个信道
- echo – 向发起方回应音频或者视频
- enable_heartbeat – 激活媒体的心跳机制(维持与媒体的连接)
- endless_playback –向呼叫方无限播放一个文件
- enum – 执行 E.164查找
- erlang – 用Erlang处理一个呼叫
- eval – 执行一个内部的API
- event – 产生(file)一个事件
- execute_extension -在一个表达式中执行另一个表达式并得到其返回值,就像执行宏一样执行完后返回
- export – 通过桥接导出信号变量
F
- fax_detect – 检查传真的CNG – 可能已被废弃
- fifo – 向FIFO队列发送一个呼叫
- fifo_track_call – 像FIFO呼叫队列一样手工计数队列
- flush_dtmf – 输出所有在队列中等待的DTMF按键输入
G
- gentones – 生成一个TGML音调
- group – 在组插入或者删除成员
H
- hangup – 挂断当前信道
- hash – 向数据库(db)中添加一个哈希值(hash)
- hold – 发送一个等待消息
- httapi – 用HTTAPI向Web服务器发送一个呼叫控制
I
- info – 显示呼叫信息
- intercept – 如果知道一个信道的uuid,则可用于掌管这个通话并接听这个通话
- ivr – 运行一个IVR菜单
J
- javascript – 在diaplan中运行一个JavaScript脚本
- jitterbuffer – 向一个会话(Session)发送一个抖动缓冲(jitter buffer)消息
L
- limit –限制某段号码对某个资源的访问权限
- limit_execute – 有限制的执行某个应用
- limit_hash - Set a limit on number of calls to/from a resource
- limit_hash_execute – 对某个应用设置限制
- log – 向终端打印一个日志文本
- lua – 在dialplan中执行LUA脚本
M
- media_reset – 重设所有的分支或者代理的媒体标记位
- mkdir – 创建一个目录
- multiset – 在一个动作(Action)中设置多个信道变量
- mutex – 互斥锁,仅允许在同一个事件内允许一个呼叫,阻塞其他所有的呼叫
P
- page –在被应答的等待时间中,向信道列表播放录音文件。
- park – 悬空一个呼叫
- park_state – 悬空状态
- phrase – 说出一个句子(phrase)
- pickup –允许接听方为一个或者多个分组,反之即可以同时向一个分组发起呼叫
- play_and_detect_speech – 在语音识别处理时播放文件
- play_and_get_digits – 播放一个音频并捕获数字
- play_fsv – 播放一个FSV文件. FSV - (FS视频文件格式)
- playback – 向发起者播放一个声音文件
- pre_answer – 在早起媒体状状态下的预应答
- preprocess –暂缺描述
- presence – 发送一个Presence
- privacy – 在呼叫中设置呼叫方策略
Q
- queue_dtmf – 桥接成功后发送DTMF数字
R
- read – 读取DTMF按键数字
- record – 在信道输入中录音
- record_fsv – 记录一个FSV 文件. FSV - (FS 视频文件格式)
- record_session – 会话录音
- recovery_refresh – 发送一个复原更新
- redirect – 重定向消息
- regex – 执行一个正则表达式
- remove_bugs – 移除media bugs.
- rename – 重命名文件
- respond – 向会话发送一个应答消息
- ring_ready – 在信道中执行Ring_Ready
- rxfax – 将接收到的传真保存为tif文件
S
- say – 根据预先录制的声音播放时间、IP地址、数字等
- sched_broadcast –计划广播计划
- sched_cancel – 取消一个计划中的广播或者呼叫转移
- sched_hangup – 激活计划中的挂断
- sched_heartbeat – 激活计划中的心跳机制
- sched_transfer – 激活计划中的呼叫转移
- send_display – 发送一个带sipfrag的INFO包
- send_dtmf – 发送DTMF, 2833, 或者SIP Info数字
- send_info – 向终端发送信息
- session_loglevel – 设置会话日志级别
- set – 设置信道变量
- set_audio_level – 调整信道中音频的读或者写级别
- set_global – 设置全局变量
- set_name – 命名信道
- set_profile_var – 设置一个呼叫方配置变量
- set_user – 设置一个用户信息(初始化)
- set_zombie_exec – 在当前信道中设置僵尸执行标记位
- sleep – 暂停一个信道
- socket – 建立一个外联(outbound)套接字连接
- sound_test – 音频分析
- speak – 根据预设的声音引擎播放文本
- soft_hold – 将已桥接的信道置于等待状态
- start_dtmf – 开始带内(inband)检测
- stop_dtmf – 结束带内(inband)检测
- start_dtmf_generate – 开始带内DTMF生成
- stop_displace_session – 停止信道中的音频替换
- stop_dtmf_generate – 停止带内DTMF生成
- stop_record_session – 停止会话录音
- stop_tone_detect – 停止监听tone
- strftime – 返回带格式的日期时间
- system – 执行系统命令
T
- mod_dptools: three_way – 根据UUID发起三方呼叫
- tone_detect – Detect the presence of a tone and execute a command if found.
- transfer – 呼叫转移
- translate – 号码翻译
U
- unbind_meta_app – 解除按键绑定
- unset – 回收一个变量
- unhold – 发送一个取消持有(un-hold)消息
V
- verbose_events - Make ALL Events verbose (Make all variables appear in every single event for this channel).
W
- wait_for_silence – 当在信道上执行无声等待时暂停进程
- wait_for_answer – 当等待呼叫被应答前,暂停进程
answer
作用:应答一个信道中的呼叫
示例:
<action application="answer"/> |
att_xfer
参数表:
参数说明:
<channel_url>:信道URL地址 |
作用:在呼叫中加入第三方channel_url,然后将源呼叫着转移到channel_url
示例:
<extension name="att_xfer"> <condition field="destination_number" expression="^86$"> <action application="read" data="3 4 sounds/getdigits.wav attxfer_callthis 30000 #"/> <action application="att_xfer" data="sofia/default/${attxfer_callthis}"/> </condition> </extension> |
bind_digit_action
参数:
<realm>,<digits|~regex>,<string>[,<value>][,<dtmf target leg>][,<eventtarget leg>] |
参数说明:
realm:数字域,一定程度上类似于dialplan的content digits:要匹配的数字 ~regex:正则表达式 string:dialplan或者API命令,例如exec:<dialplan app> 可选项: value:包含命令的参数 dtmf target leg:值可以为aleg,bleg,peer,both;默认为aleg event target leg: 值可以为aleg,bleg,peer,both;默认为aleg |
作用:绑定对应DTMF输入的操作
示例1:
<action application="bind_digit_action" data="my_digits,11,exec:execute_extension,att_xfer XML default,both,self"/> <action application="bind_digit_action" data="my_digits,11,api:hupall"/> |
示例2:
<action application="bind_digit_action" data="cool,500,exec:playback,ivr/ivr-welcome_to_freeswitch.wav"/> <action application="bind_digit_action" data="cool,~7\d{3},exec:playback,ivr/ivr-welcome_to_freeswitch.wav"/> <action application="bind_digit_action" data="cool,~1\d+,exec:digit_action_set_realm,rad"/> <action application="bind_digit_action" data="rad,~1\d+,exec:digit_action_set_realm,cool"/> <action application="digit_action_set_realm" data="cool"/> |
bind_meta_app
参数:
KEY LISTEN_TO FLAGS APPLICATION[::PARAMETERS] |
参数说明:
|
作用:在桥接及执行另一个dialplan APP期间,对特定的呼叫leg上应答输入的DTMF按键序列。
示例:
<action application="bind_meta_app" data="2 a s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> |
break
参数:
<all> |
作用:终断信道中正在运行的应用
示例:
<action application="break" data="${bridge_to}"> |
注意:目前还不能打断一个endless_playback
bridge
参数:
<endpoint/gateway/gateway_name/address> |
作用:将信道桥接到另一已存在的信道上,用于产生通话
示例:
简单的终端:
bridge <target_endpoint> |
多终端同时呼叫,没有并发性的限制,第一个应答的有应答权,第二个就没有
bridge <target_endpoint>[,<target_endpoint>] |
热备份,一个呼叫失败后拨打另外一个
bridge <target_endpoint>[|<target_endpoint>] |
bridge_export
作用:通过桥接导出参数
示例:
<action application="bridge_export" data="foo=bar"/> |
capture
作用:将捕获到的数字添加到信道变量数组中
示例:
<extension name="arrays"> <condition field="destination_number" expression="^110(\d*)$"> <action application="set" data="barfoo=testing"/> <action application="log" data="ERR barfoo=[${barfoo}]"/> <action application="log" data="ERR barfoo[100]=[${barfoo[100]}]"/> <action application="set" data="barfoo[100]=yipee"/> <action application="log" data="ERR barfoo=[${barfoo}]"/> <action application="push" data="foobar,test A"/> <action application="push" data="foobar,test B"/> <action application="push" data="foobar,test C"/> <action application="unshift" data="foobar,test M"/> <action application="set" data="foobar[1]=w00t"/> <action application="set" data="foobar[100]=doh"/>
<action application="log" data="ERR foobar[1]=[${foobar[1]}]"/> <action application="log" data="ERR foobar[100]=[${foobar[100]}]"/> <action application="log" data="ERR foobar=[${foobar}]"/>
<action application="set" data="foobar=plain"/> <action application="log" data="ERR foobar=[${foobar}]"/>
<action application="set" data="foobar=ARRAY::hip|:hip|:hooray"/> <action application="log" data="ERR foobar= [${foobar[0]}] [${foobar[1]}] [${foobar[2]}]"/>
<action application="log" data="ERR DP_MATCH=[${DP_MATCH}]"/> <action application="log" data="ERR DP_MATCH[1]=[${DP_MATCH[1]}]"/>
<action application="set" data="parseme=2121231234"/> <action application="capture" data="woot|${parseme}|(\d{3})(\d{3})(\d{4})"/> <action application="log" data="ERR woot=[${woot}] parts=[${woot[1]}] [${woot[2]}] [${woot[3]}]"/>
<action application="set" data="parseme="/> <action application="log" data="ERR test=[${parseme}]"/>
</condition> </extension> |
chat
参数:
protocol | from_jid | to_jid | message | [<content-type>] |
参数说明:
protocol — 其值为sip, verto, jingle等等 from_jid — 呼叫方或者发送者的uri to_jid — 接收消息的uri message — 发送的消息体 content-type — 默认类型为text |
作用:给一个IM客户端发送文本消息
注:参数间以“|”隔开,允许其中有空格
示例(命令行的中):
freeswitch@default>chat sip|Server@FS.local|1000@domain.local|Hello chat via SIP! freeswitch@default>chat verto|Server@FS.local|1000@domain.local|Hello chat via Verto! |
Perl中:
$api = new freeswitch::API(); $foo = $api->execute("chat", "jingle|from_jid|to_jid|test Jingle message"); |
check_acl
参数:
<ip> <acl | cidr> [<hangup_cause>] |
参数说明:
ip:IP地址 acl:访问控制列表规则 cidr:一个网络段 hangup_cause:挂断原因 |
作用:根据访问控制列表中的呼叫发起方地址是否符合规则,然后执行允许或者拒绝的操作
示例1:
<action application="check_acl" data="${network_addr} foo normal_clearing"/> |
如果从IP地址发出的呼叫没有在名叫acl的访问控制列表中,将会被中止,错误代码为normal_clearing
示例2:
<action application="check_acl" data="${network_addr} 1.2.3.0/8 normal_clearing" inline="true"/> |
从IP地址为1.2.3.4发起的呼叫将与CIDR(1.2.3.0/8)匹配,并在dialplan中继续传递(呼叫)。
从IP地址为4.3.2.1发起的呼叫将不会匹配并会被中止,因为内部的标记位(inline)的值为true。这个应用执行完毕后不再执行dialplan后续的代码。
clear_digit_action
参数:
<realm>|all[,target] |
参数说明:
1.如果没有指明参数,将默认提供参数all
2.参数target的值为peer(对方)或者both(两者)
作用:清除所有的数字绑定
示例:
<action application="clear_digit_action" data="<realm>"/> |
clear_speech_cache
作用:清除所有的语音(speech)句柄的缓存
示例:
<action application="clear_speech_cache"/> |
cng_plc
作用:舒适噪音生成的配置
示例:
<action application="cng_plc"/> |
作 用:舒适噪音生成(Comfort noise generation)用来确保呼叫过程中未失去连接(因为通话过程中可能有双方没有讲话的情况,舒适噪声的产生让通话双方知道该通话还在持续中)。 cng_plc的全称为comform noise gerenarionandpackage loss concealment
deflect
作用:挂断当前通话并向通话发起者(是一个网关或者代理)发送一个REFER消息和一个新的INVITE消息
示例:
<action application="deflect" data="sip:someone@somewhere.com" /> |
其中sip:可带可不带
delay_echo
作用:该应用会让呼叫信道延迟(delay)音频循环播放。当延迟若干毫秒后,将返回voice,DTMF等等的送音状态。这在RTP音频在双方工作的情况下的检查十分有帮助,因为当在测试说话者电话时echo应用经常失效。简单点说就是暂停若干毫秒后执行echo
示例:
<action application="delay_echo" data="1000"/> |
detect_speech
作用:实现语音识别
使用方法:
detect_speech <mod_name> <gram_name> <gram_path> [<addr>] detect_speech grammar <gram_name> [<path>] detect_speech grammaron <gram_name> detect_speech grammaroff <gram_name> detect_speech grammarsalloff detect_speech nogrammar <gram_name> detect_speech param <name> <value> detect_speech pause detect_speech resume detect_speech start_input_timers detect_speech stop |
示例:
待补充 |
digit_action_set_realm
作 用:与bind_digit_action配合使用。数字绑定后选择数字将产生对应的应用(Usedwith to bind_digit_action select the realm for which digitswillbe applied whendigits are bound)。
示例:
<action application="bind_digit_action" data="cool,500,exec:playback,ivr/ivr-welcome_to_freeswitch.wav"/> <action application="bind_digit_action" data="cool,~7\d{3},exec:playback,ivr/ivr-welcome_to_freeswitch.wav"/> <action application="bind_digit_action" data="cool,~1\d+,exec:digit_action_set_realm,rad"/> <action application="bind_digit_action" data="rad,~1\d+,exec:digit_action_set_realm,cool"/> <action application="digit_action_set_realm" data="cool"/> |
displace_session
参数:
<path> [<flags>] [+time_limit_ms] |
参数说明:
path:任何FreeSWITCH支持的声音格式,例如wav,local_steam,shout等 flags:mlr |
mrl的详细说明:
m/mux = mux, 两个终端仍能听到对方 l = loop, -1为无限循环 r = 应用于读方,默认为写方(在b-leg上写入而不是a-leg) |
作用:替换(部分替换)信道中的文件或流。
示例:
<extension name="record_call"> <condition field="destination_number" expression="^record_call$"> <action application="set" data="rec_session=$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="record_session" data="${rec_session}" /> <action application="playback" data="tone_stream://L=3;%(100,100,350,440)" /> <action application="displace_session" data="tone_stream://%(100,15000,800);loops=-1 mux" /> </condition> </extension> |
这个是diaplan中的一部分,用来调用一个bind_mete_app或者execute_extension中的语句。然后将会开始记录会话,并且没15秒插入一个beep。标记位mux确保音频将被混音。
eavesdrop
参数:
[<uuid>|all] |
参数说明:
<action application="set" data="eavesdrop_require_group=<groupID>"/> <action application="set" data="eavesdrop_indicate_failed=/sounds/failed.wav"/> <action application="set" data="eavesdrop_indicate_new=/sounds/new_chan_announce.wav"/> <action application="set" data="eavesdrop_indicate_idle=/sounds/idle.wav"/> <action application="set" data="eavesdrop_enable_dtmf=true"/> <!-- false means no commands during eavesdrop --> <action application="set" data="eavesdrop_whisper_aleg=true"/> <!-- enables whisper mode in aleg --> <action application="set" data="eavesdrop_whisper_bleg=true"/> <!-- enables whisper mode in bleg --> |
作用:用来监视信道。通常用来会话交驳,若要长期监视需使用mod_spy
示例:待补充
echo
作用:将呼叫信道置于一个环路中。它将简单的返回所有发送的东西,包括语音,DTMF按键灯。
示例:
<action application="echo" data=""/> |
endless_playback
作用:这个应用用于无限播放一个文件。并且播放不能别外部打断
示例:
<action application="endless_playback" data="filename"/> |
eval
参数:
|
作用:用于执行一个内部API,或者简单的向终端输出一些日志文件
示例:
<action application="eval" data="${sched_api(+5 none originate {ignore_early_media=true}sofia/your_GeteWay/${caller_id_number} your_ext XML your_context your_Caller_ID_Name your_Caller_ID_Number)}"/> <action application="hangup"/> |
event
参数:
|
作用:可用于产生(fire)任意事件。
示例:
<extension name="ACDIntro"> <condition field="destination_number" expression="^queue_beta$"> <action application="set" data="acd_line_ext=150"/> <action application="answer" /> <action application="playback" data="intro.wav" /> <action application="event" data="Event-Subclass=VoiceWorks.pl::ACDnotify,Event-Name=CUSTOM,state=Intro,condition=IntroPlayed"/> <action application="playback" data="local_stream://moh" /> </condition> </extension> |
export
语法:
<action application="export" data="name_of_var_to_export=value"/> |
作用:将变量从a-leg导出到b-leg上
示例1(不仅导出到B-leg上,同样也在A-leg上设置):
<action application="export" data="foo=bar"/> |
示例2(加上前缀nolocal:仅仅只导出到B-LEG上):
<action application="export" data="nolocal:foo=bar"/> |
execute_extension
语法:
<action application="execute_extension" data="extension [dialplan] [context]"/> |
作用:在一个表达式中执行另一个表达式并得到其返回值,就像执行宏一样执行完后返回,而transfer没有返回。
示例:
<extension name="hold_music"> <condition field="destination_number" expression="^9999$"/> <condition field="${sip_has_crypto}" expression="^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$"> <action application="answer"/> <action application="execute_extension" data="is_secure XML features"/> <action application="playback" data="$${moh_uri}"/> <anti-action application="answer"/> <anti-action application="playback" data="$${moh_uri}"/> </condition> </extension> |
fax_detect
作用:传真检查工具
使用示例:
<action application="tone_detect" data="fax 1100 r +5000 transfer fax XML default" /> |
示例:
当检测到传真的时候,呼叫将被路由到dialplan中的content=default,表达式为name=fax去
<context name="default"> <extension name="fax"> <condition field="destination_number" expression="^fax$"> <action application="answer"/> <action application="sleep" data="1000"/> <action application="set" data="fax_file_name=/tmp/fax/${caller_id_number}-${strftime(%Y-%m-%d-%H-%M-%S)}.tiff"/> <action application="set" data="fax_mode=recv"/> <action application="socket" data="127.0.0.1:8084 async"/> <action application="hangup"/> </condition> </extension> </context> |
file_string
作用:file_string是一种十分有用的多路音频文件的播放器、写入序列号的应用。
使用方法:
· 高级别(high level), 使用了大部分switch_ivr_playback()的功能 · 低级别(low level), 直接用文件句柄 |
示例(高级别):
<!-- Delimiter is set by a var which also enables the parser --> <action application="set" data="playback_delimiter=!"/> <action application="set" data="playback_sleep_val=500"/> <action application="playback" data="/ram/sr8k.wav!/ram/swimp.wav"/> |
示例(低级别):
<!-- Delimiter is always ! char --> <action application="playback" data="file_string:///ram/sr8k.wav!/ram/swimp.wav"/> |
示例(播放等待音乐):
<action application="set" data="hold_music=file_string://sounds/holdmusic1.wav!sounds/yourcallisimportant.wav" /> |
flush_dtmf
作用:输出一个信道中接收的DTMF。在呼叫方需要输入额外的数字的情况或者想在发送到另一个对话前清空所有DTMF数字时十分有用。
使用方法:
<action application="flush_dtmf"/> |
gentones
语法:
gentones <TGML>[|loops] |
作用:生成TGML声调
示例:
<pre> <!-- Generate a 500ms beep at 800Hz --> <action application="gentones" data="%(500,0,800)"/> <!-- Generate a DTMF string --> <action application="gentones" data="0800500005"/> <!-- Generate French ringing tones continuously (loop: -1) --> <action application="gentones" data="%(1500,3500,350,425)|-1"/> </pre> |
group
语法:
group,[insert|delete|call]:<group name>:<url>,group [insert|delete|call] |
作用:从数据库(内部数据库或者ODBC)中添加或者删除组,允许在bridge应用中直接呼叫组。
示例1(命令行下):
|
示例2:
|
hangup
作用:挂断一个通话,可选择挂断原因
示例:
<action application="hangup" data="USER_BUSY"/> |
如果是在桥接(bridge)后挂断,那么FreeSWITCH会将从bridge收到的挂断原因覆盖该值,可通过设置参数sip_ignore_remote_cause=true来避免这样的情况。
info
作用:向控制台打印信道的相关信息
示例:
<action application="info"/> |
在LUA脚本中设置输出级别:
|
Inline Dialplan
参数:
|
作用:允许在dialplan中插入一段代码表达式
示例:
uuid_transfer <uuid> playback:/foo.wav inline |
示例2:
|
intercept
语法:
intercept [-bleg] <uuid> |
作用:允许一个信道将它自己桥接到另一个呼叫的a-leg或者b-leg。而该呼叫的另一条腿将被自动挂断
示例:
<action application="intercept" data="-bleg myUUID"/> |
示例2(带参数的),仅在呼叫未桥接的情况下生效:
<action application="set" data="intercept_unanswered_only=true"/> <action application="intercept" data="myUUID"/> |
IVR Menu
作用:允许在XML中以简单的描述来便捷的创建IVR
示例:
<menu name="main" greet-long="phrase:mainmenu_phrase_macro" greet-short="phrase:short_mainmenu_phrase_macro" invalid-sound="phrase:invalid_entry_macro" exit-sound="phrase:goodbye_macro" timeout ="10000" max-failures="3" tts-engine="cepstral" tts-voice="david" phrase_lang="en"> <entry action="menu-exit" digits="*"/> <entry action="menu-sub" digits="2" param="menu2"/> <entry action="menu-say-phrase" digits="4" param="enteraccount"/> <entry action="menu-back" digits="5"/> <entry action="menu-exec-app" digits="7" param="transfer 888 XML default"/> <entry action="menu-sub" digits="8" param="menu8"/> </menu> |
使用:
<action application="ivr" data="main"/> |
参数说明:
每个菜单都支持绑定多个按键操作如:
|
示例2(一个数字执行多个应用):
<include> <menu name="ivr-test" greet-long="ivr/ivr-menu.wav" confirm-macro="" confirm-key="" confirm-attempts="3" timeout="5000" inter-digit-timeout="2000" max-failures="3" max-timeouts="2" digit-len="1"> <entry action="menu-exec-app" digits="1" param="execute_extension limit:'hash ivr in', set:call_timeout=15,export:absolute_codec_string=G729,set:sip_cid_type=none, bridge:sofia/internal/1001%10.10.10.10,playback:ivr/ivr-busy.wav,hangup inline"/> <entry action="menu-exec-app" digits="2" param="execute_extension limit:'hash ivr in', set:call_timeout=15,export:absolute_codec_string=G729,set:sip_cid_type=none, bridge:sofia/internal/1002%10.10.10.10,playback:ivr/ivr-busy.wav,hangup inline"/> </menu> </include> |
Limit
语法:
limit_execute <backend> <realm> <resource> <max[/interval]> <application> [application arguments] |
参数说明:
realm:任意名字,域名 resource:被限制的资源 max:运行并发的呼叫数量 transfer_destination_number:在拨号计划中转移到这个表达式中,该项为可选项,如果不想使用,填入limit_excceeded即可 |
作用:限制某段号码对某个资源的访问权限。
示例:
<extension name="limit_exceeded"> <condition field="destination_number" expression="^limit_exceeded$"> <action application="playback" data="/sounds/overthelimit.wav"/> <action application="hangup"/> </condition> </extension>
<extension name="limit" continue="true"> <condition> <!-- You can set ${max_calls} per user in directory.conf and remove the line below --> <action application="set" data="max_calls=1" inline="true"/> <action application="limit" data="db $${domain} ${sip_auth_username} ${max_calls}"/> </condition> </extension> |
limit_execute
语法:
limit_execute <backend> <realm> <resource> <max[/interval]> <application> [application arguments] |
参数说明:
backend:后端,详见后续提供的表 realm:任意名字,域名 resource:被限制的资源 max:运行并发的呼叫数量 application:要执行的应用 application arguments:应用的参数 |
作用:如果资源没有被限制则执行请求的应用
示例:
<extension name="outbound"> <condition field="destination_number" expression="^1?[2-9]\d{2}[2-9]\d{6}$"> <action application="limit_execute" data="hash outbound carrier1 5 bridge sofia/gateway/carrier1/${destination_number}" /> <action application="limit_execute" data="hash outbound carrier2 5 bridge sofia/gateway/carrier2/${destination_number}" /> </condition> </extension> |
log
语法:
|
作用:向终端打印一个日志文本
示例:
<action application="log" data="DIALING Extension DialURI [${sip_uri_to_dial}]"/> <action application="log" data="INFO DIALING Extension DialURI [${sip_uri_to_dial}]"/> <action application="log" data="DEBUG DIALING Extension DialURI [${sip_uri_to_dial}]"/> |
media_reset
作用:重置所有支路(bypass)/代理(proxy)的媒体标志位
示例:
<action application="set" data="continue_on_fail=true"/> <action application="set" data="bypass_media=true"/> <action application="set" data="inherit_codec=true"/> |
mkdir
语法:
mkdir <path> |
作用:创建一个目录
示例:
<action application="mkdir" data="/path/to/new/directory"/> <action application="mkdir" data="${recordings_dir}/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}/"/> <action application="mkdir" data="/usr/local/freeswitch/sounds/custom/blabla"/> |
multiset
语法:
|
作用:设置多个信道变量
备注:默认的分隔符为空格,如果要修改可在最前面加“^^”,然后就可以用任意的分隔符了。这个应用可以运行在XML的 [[Dialplan_XML#Inline_Actions|inline]]
示例:
<action application="multiset" data="effective_caller_id_name=FreeSwitch effective_caller_id_number=12345678"/> <action application="multiset" data="^^:effective_caller_id_name=FreeSwitch:effective_caller_id_number=12345678"/> |
mutex
语法:
mutex <keyname> [on|off] |
作用:互斥锁,即同一时间内仅允许一个呼叫,抑制其他的呼叫流
page
使用方法:
page (page_path=/path/to/page_announcement.wav)<var1=value1,var2=value2...>sofia/internal/foo@bar.com:_:sofia/internal/foo2@bar.com:_:sofia... |
作用:在被应答的等待时间中,向信道列表播放录音文件。
示例:
page (page_path=/path/to/tornado_warning.wav)<nolocal:sip_auto_answer=true>sofia/internal/1000@bar.com:_:sofia/internal/1001@bar.com |
上述这个示例将分别在不同的线程中呼叫1000和1001,谁先接听,取决于sip_auto_answer的值,并且文件tornado_warning.wav将会播放。
示例:
page (page_path=/path/to/tornado_warning.wav)<nolocal:sip_auto_answer=true>sofia/internal/1000@bar.com:_:sofia/internal/1001@bar.com |
park
作用:将一个呼叫悬空(park)。如果一个呼叫被悬空,必须要桥接(bridge)或者转移(transfer)到一个有效的位置。要注意的是,悬空(park)一个呼叫后不会播放等待音乐或者其他任何音乐!
示例:
<action application="park"/> |
phrase
语法:
phrase <macro_name>,<data> |
作用:播放一个预定义宏里目的文本。
示例:
extension name="556"> <condition field="destination_number" expression="^556$"> <action application="answer"/> <action application="sleep" data="1000"/> <action application="phrase" data="spell,${caller_id_name}"/> <action application="phrase" data="spell-phonetic,${caller_id_name}"/> <action application="phrase" data="timespec,12:45:15"/> <action application="phrase" data="saydate,0"/> <action application="phrase" data="msgcount,130"/> </condition> </extension> |
pickup
用法:
pickup/keyname pickup+keyname |
作用:允许接听方为一个或者多个分组,反之即可以同时向一个分组发起呼叫
示例:
<action application="bridge" data="${sofia_contact(100@test.com)},pickup/mygroup,pickup/mygroup2"/> |
分组的设置:
<extension name="group_pickup"> <condition field="destination_number" expression="^\*57(\d+)$"> <action application="pickup" data="$1"/> </condition> </extension> |
play_and_detect_speech
语法:
<file> detect:<engine> {param1=val1,param2=val2}<grammar> |
参数说明:
|
作用:在语音识别处理的时候播放文件,结果将保存在信道变量[[Variable_detect_speech_result|detect_speech_result]]中
示例:
<extension name="play_and_detect_speech example"> <condition field="destination_number" expression="^(1888)$"> <action application="set" data="tts_engine=unimrcp"/> <action application="set" data="tts_voice=donna"/> <action application="play_and_detect_speech" data="say:please say yes or no. please say no or yes. please say something! detect:unimrcp {start-input-timers=false,no-input-timeout=5000,recognition-timeout=5000}builtin:grammar/boolean?language=en-US;y=1;n=2"/> <action application="log" data="CRIT ${detect_speech_result}"/> </condition> </extension> |
play_and_get_digits
语法:
<min> <max> <tries> <timeout> <terminators> <file> <invalid_file> [<var_name> [<regexp> [<digit_timeout> [<transfer_on_failure>]]]] |
参数说明:
|
作用:播放一个提示音乐然后等待数字的输入。提示音乐可以被数字的输入打断
示例:
<extension name="play_and_get_digits example"> <condition field="destination_number" expression="^(1888)$"> <action application="play_and_get_digits" data="2 5 3 7000 # $${base_dir}/sounds/en/us/callie/conference/8000/conf-pin.wav /invalid.wav foobar \d+"/> <action application="log" data="CRIT ${foobar}"/> </condition> </extension> |
playback
作用:在当前信道播放一个声音文件
示例1:
<!--default terminator is *. Keyword 'none' disables on-key termination /--> <action application="set" data="playback_terminators=none"/> <action application="playback" data="sounds/soundfile.wav"/> |
示例2(从第N个采样点开始播放):
<action application="playback" data="/tmp/test.wav@@8000"/> |
pre_answer
作用:类似于SDP中的SIP发送状态码183
示例:
<action application="pre_answer"/> |
presence
语法:
presence <user> <rpid> <message> |
作用:发送一个PRESENCE_IN或者PRESENCE_OUT类型的事件。目前来说在sofia中使用的不是很频繁。当用户处于忙线状态时并不会对其钩子状态产生影响,但是将发送一个带用户钩子状态的事件。
示例1:
|
示例2:
|
privacy
语法:
|
作用:在呼叫中设置呼叫方策略
示例:
<action application="privacy" data="yes"/> |
queue_dtmf
语法:
queue_dtmf <dtmf digits>[@<tone_duration>] |
作用:在终端上的会话中使用配置的方法桥接成功后发送DTMF按键数字
示例:
<action application="queue_dtmf" data="0123456789ABCD*#@100"/> <action application="bridge" data="sofia/internal/101"/> |
以上的例子中,当连接到分机号101后的每隔100毫秒发送‘0123456789ABCD*#’中的一个数字,如果没有配置时间,默认时间为2000毫秒(位间隔还是整体待考究)
read
语法:
read <min> <max> <sound file> <variable name> <timeout> <terminators> |
参数说明:
|
作用:播放一段声音文件后等待用户输入按键。
示例1:
<extension name="Read Example"> <condition field="destination_number" expression="^400$"> <action application="answer"/> <action application="sleep" data="1"/> <action application="read" data="0 10 $${base_dir}/sounds/en/us/callie/conference/8000/conf-pin.wav res 10000 #"/> <action application="phrase" data="spell,${res}"/> <action application="hangup"/> </condition> </extension> |
示例2:
<extension name="Read Example"> <condition field="destination_number" expression="^400$"> <action application="answer"/> <action application="sleep" data="1"/> <action application="read" data="0 10 $${base_dir}/sounds/en/us/callie/conference/8000/conf-pin.wav res 10000 #,*"/> <action application="phrase" data="spell,${res}"/> <action application="hangup"/> </condition> </extension> |
record
语法:
record,Record File,<path> [<time_limit_secs>] [<silence_thresh>] [<silence_hits>] |
参数说明:
|
作用:录音
示例:
<action application="playback" data="/var/sounds/beep.gsm"/> <!--default terminator is *. Keyword 'none' disables on-key termination /-->
<!--following line will set # as recording session terminator /--> <action application="set" data="playback_terminators=#"/> <action application="record" data="/tmp/data.wav 20 200"/> |
record_session
作用:对整个会话或者呼叫进行录音
示例:
<extension name="ext-666"> <condition field="destination_number" expression="^666$"> <action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/> <action application="set" data="RECORD_COPYRIGHT=(c) 1980 Factory Records, Inc."/> <action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/> <action application="set" data="RECORD_ARTIST=Ian Curtis"/> <action application="set" data="RECORD_COMMENT=Love will tear us apart"/> <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/> <action application="set" data="RECORD_STEREO=true"/> <action application="record_session" data="$${base_dir}/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/> <action application="set" data="ringback=${us-ring}"/> <action application="bridge" data="sofia/external/18007842433@sip.voip-provider.com"/> </condition> </extension> |
文件格式:
|
redirect
作用:将信道重定向到另一个终端上。一定要注意不要重定向到一个不兼容的信道上,否则将不会得要你想要的效果。
示例1:
<action application="redirect" data="sip:foo@bar.com "/> |
示例2:
|
regex
语法:
|
参数说明:
|
作用:执行一个正则表达式
示例1,控制台下(返回结果为05555555555):
|
示例2,控制台下(返回结果true):
|
示例3:
<action application="set" data="effective_caller_id_number=${regex(${caller_id_number}|^61([0-9]{9})$|0%1)}"/> |
remove_bugs
作用:移除信道中所有的三通(media bugs,在通话的双方中加入第三方进行监听),包括设置在record_session,tone_detect,或者其他有用三通的应用。
示例:
<action application="remove_bugs"/> |
rename
语法:
rename <from_path> <to_path> |
作用:重命名文件
示例:
<action application="rename" data="/path/to/file /path/to/renamed_file"/> |
respond
用法:
<action application="respond" data="response_info"/> |
作用:向SIP设置发送SIP会话应答码
示例:
<extension name="hold_music"> <condition field="destination_number" expression="^9999$"> <action application="answer"/> <action application="playback" data="$${hold_music}"/> </condition> </extension>
<extension name="check_auth" continue="true"> <condition field="${sip_authorized}" expression="^true$" break="never"> <anti-action application="respond" data="407"/> </condition> </extension>
<extension name="echo"> <condition field="destination_number" expression="^9996$"> <action application="answer"/> <action application="echo"/> </condition> </extension> |
ring_ready
作用:向发起方(originator)发送代码为180的响铃
示例:
<action application="ring_ready" />
<!-- Request a certain tone/file to be played while you wait for the call to be answered--> <action application="set" data="ringback=%(2000, 4000, 440.0, 480.0)"/> <!--<action application="set" data="ringback=/home/ring.wav"/>--> |
say
语法:
say <module_name>[:<lang>] <say_type> <say_method> [gender] <text> |
作用:使用预先录制好的声音文件读出来,或者读数据,事件,数字等不同的东西。
参数说明:
1.模块的名字通常为一个信道语言,如en,或者es
2.say_tpye有
NUMBER ITEMS PERSONS MESSAGES CURRENCY TIME_MEASUREMENT CURRENT_DATE CURRENT_TIME CURRENT_DATE_TIME TELEPHONE_NUMBER TELEPHONE_EXTENSION URL IP_ADDRESS EMAIL_ADDRESS POSTAL_ADDRESS ACCOUNT_NUMBER NAME_SPELLED NAME_PHONETIC SHORT_DATE_TIME |
3.say_method参数,如果要读的数字为42
|
4.gender参数
FEMININE MASCULINE NEUTER |
示例:
<!-- use in a phrase macro, different from using in the dialplan--> <action function="say" data="733#" method="iterated" type="name_spelled"/>
<!-- spelled out alpha-numeric + ascii code, like "a-b-seven-three-three-pound", ASCII code 32-47 and, 58-62, 92-122 --> <action application="say" data="en name_spelled iterated ab733#"/>
<!-- spell out called number, like "one-two-three-four-five" --> <action application="say" data="en name_spelled iterated ${destination_number}"/>
<!-- read number, like "twelve thousand, three hundred forty-five" --> <action application="say" data="en number pronounced 12345"/>
<!-- read IP address, like "one two dot three four dot five six dot seven eight" --> <action application="say" data="en ip_address iterated 12.34.56.78"/>
<!-- read IP address, like "twelve dot thirty-four dot fifty-six dot seventy-eight" --> <action application="say" data="en ip_address pronounced 12.34.56.78"/>
<!-- pronounce a dollar value, even works for negatives, like "negative one dollar and ninety-six cents."--> <action application="say" data="en CURRENCY PRONOUNCED -1.96"/>
<!-- pronounce a short date/time (like "Wednesday, 2:23PM") -- substitute [timestamp] with a UTC timestamp --> <action application="say" data="en short_date_time pronounced [timestamp]"/> |
sched_broadcast
语法1:
application="sched_broadcast" data="[+]<time> <path> [aleg|bleg|both]" |
语法2:
application="sched_broadcast" data="[[+]<time>|@time] <uuid> <path> [aleg|bleg|both]" |
作用:计划中的广播
示例:
<action application="sched_broadcast" data="+3600 playback::/tmp/howdy.wav both"/> |
sched_cancel
语法:
|
作用:取消一个计划中的广播或者呼叫转移
示例1:
<action application="sched_cancel" data="123"/> |
示例2:
<action application="sched_cancel" data="${last_sched_id}"/> |
sched_hangup
作用:计划挂断一个通话,是基础的电话限制。
使用方法:
<action application="sched_hangup" data="+<seconds>[ <cause>]"/> |
示例1:
<action application="sched_hangup" data="+60 allotted_timeout"/> |
sched_transfer
用法1:
application="sched_transfer" data="[+]<time> <extension> [<dialplan> <context>]" |
或者作为一个API:
sched_transfer [+]<time> <uuid> <extension> [<dialplan> <context>]" |
作用:计划一个呼叫转移
示例:
<action application="sched_transfer" data="+600 9999 XML default"/> |
send_info
备注:暂缺
send_display
语法:
send_display <message> |
作用:发送一个带sipfrag的info包。如果电话支持它在将显示器上显示消息。
示例:
<action application="send_display" data="Hello world"/> |
send_dtmf
语法:
send_dtmf <dtmf digits>[@<tone_duration>] |
作用:向配置该方法的终端发送DTMF数字。使用字符w将有5秒的延迟,大写字母W将有1秒的延迟。
示例:
<action application="send_dtmf" data="0123456789ABCD*#@100"/> |
字符串中的每个字符之间有100毫秒的延迟时间,如果没有指定默认为2000毫秒。
session_loglevel
作用:重设日志级别,仅对当前信道有效,配置于switch_conf.xml中
示例1:
<action application="session_loglevel" data="debug"/> |
示例2(在switch.conf.xml中配置方法):
<param name="loglevel" value="info"/> |
示例3(配置完整的debug追踪,在dialplan中添加以下代码):
<extension name="custom debug" continue="true"> <condition field="${should_this_call_be_debugged}" expression="^true$"> <action application="session_loglevel" data="debug"/> </condition> </extension> |
set
语法:
set <channel_variable>=<value> |
作用:在调用它的信道中设置信道变量
示例:
<action application="set" data="effective_caller_id_name=FreeSwitch"/> <action application="set" data="effective_caller_id_number=12345678"/> <action application="set" data="sip_uri_to_dial=${sip_to_user}@${sip_to_host}"/> <action application="log" data="DIALING Extension DialURI [${sip_uri_to_dial}]\n"/> <action application="bridge" data="sofia/sip/${sip_uri_to_dial}"/> |
注意:在执行前这些变量将不会被设置。如果向在一个条件中马上设置,需在内联(inline)模式下使用,如
[[Dialplan_XML#Inline_Actions|inline]] |
set_name
语法:
set_name STRING |
作用:重命名一个信道名称(即设置通道变量${channel_name}的值)
示例:
<action application="set_name" data="My_new_channel"> |
set_audio_level
语法:
set_audio_level <direction> <level> |
参数说明:
direction:方向,取值有read和write level:等级,取值有-4到4 |
作用:增减信道中输入音频流或者输出音频流的级别
示例:
<action application="set_audio_level" data="read 1"/> <action application="set_audio_level" data="write -1"/> |
set_global
语法:
set_global <channel_variable>=<value> |
作用:为所有信道设置全局变量。即使创建它的信道已挂断该变量仍然存在。
示例:
|
set_profile_var
语法:
set_profile_var <profile_variable>=<value> |
作用:在信道事件中添加头域
示例:
<action application="set_profile_var" data="accountcode=${accountcode}"/> |
set_user
语法:
set_user <user@domain> [prefix] |
作用:如果用户已授权过,为用户定义定义所有的信道变量。
示例:
<action application="set_user" data="5551212@${domain}"/> |
示例2(为所有的变量添加前缀):
|
set_zombie_exec
作用:为当前信道设置僵尸执行标记位。即当信道挂断后,会话将继续执行命令。可用于执行额外的操作。
示例:
<action application="set_zombie_exec"/> |
示例2(LUA中的操作):
|
sleep
作用:将信道暂停若干毫秒时间,然后复原至之前的暂停点。
示例:
<action application="sleep" data=<milliseconds>/> |
如果想在DTMF中使用,需进行以下的设置
<action application="set" data="sleep_eat_digits=true"/> <action application="set" data="sleep_eat_digits=true"/> |
以上的配置可以防止在IVR中直接退出。
soft_hold
使用方法:
<action application="soft_hold" data="<unhold_key> [moh_a] [moh_b]"/> |
参数说明:
|
注:如果moh未设置,将使用默认的MOH.
作用:将桥接后的通道至于等待状态,当且仅当两个信道已桥接的情况下才能使用。
sound_test
作用:向终端输出信道相关包的信息(非LOG文件)
用法:
<action application="sound_test"/> |
输出示例:
2013-02-01 18:31:01.278139 [CONSOLE] switch_ivr.c:109 packet_avg=6281 packet_peak=32510 period_avg=32493 global_avg=32290 2013-02-01 18:31:01.298140 [CONSOLE] switch_ivr.c:109 packet_avg=5737 packet_peak=32507 period_avg=32497 global_avg=32290 2013-02-01 18:31:01.318142 [CONSOLE] switch_ivr.c:109 packet_avg=7194 packet_peak=32468 period_avg=32490 global_avg=32290 2013-02-01 18:31:01.338141 [CONSOLE] switch_ivr.c:109 packet_avg=5132 packet_peak=32508 period_avg=32493 global_avg=32290 2013-02-01 18:31:01.358143 [CONSOLE] switch_ivr.c:109 packet_avg=6233 packet_peak=32475 period_avg=32490 global_avg=32290 2013-02-01 18:31:01.378143 [CONSOLE] switch_ivr.c:109 packet_avg=6118 packet_peak=32502 period_avg=32492 global_avg=32290 2013-02-01 18:31:01.398141 [CONSOLE] switch_ivr.c:109 packet_avg=5597 packet_peak=31998 period_avg=32430 global_avg=32290 2013-02-01 18:31:01.418143 [CONSOLE] switch_ivr.c:109 packet_avg=6666 packet_peak=32500 period_avg=32438 global_avg=32290 2013-02-01 18:31:01.438143 [CONSOLE] switch_ivr.c:109 packet_avg=4821 packet_peak=31928 period_avg=32387 global_avg=32290 2013-02-01 18:31:01.458140 [CONSOLE] switch_ivr.c:109 packet_avg=4672 packet_peak=31163 period_avg=32275 global_avg=32290 2013-02-01 18:31:01.478142 [CONSOLE] switch_ivr.c:109 packet_avg=5634 packet_peak=32503 period_avg=32294 global_avg=32290 2013-02-01 18:31:01.498140 [CONSOLE] switch_ivr.c:109 packet_avg=6543 packet_peak=32441 period_avg=32306 global_avg=32290 2013-02-01 18:31:01.518140 [CONSOLE] switch_ivr.c:109 packet_avg=5549 packet_peak=32502 period_avg=32320 global_avg=32290 |
speak
语法:
<action application="speak" data="<engine>|<voice>|<text>|[timer_name]"/> |
注:引擎flite四个voice选项,分别为awb,kal,rms,slt
用法:用定义的语音引擎说出一个字符串或者文件
示例:
|
start_dtmf
作用:可通过在dialplan中使用该参数激活带内DTMF监听(例如监听信道中的DTMF)。如果想在信道中能识别DTMF音键(tones),除此之外别无他法
示例:
<!-- a sample IVR --> <extension name="ivr_demo"> <condition field="destination_number" expression="5000"> <action application="answer"/> <action application="start_dtmf" /> <action application="ivr" data="demo_ivr"/> </condition> </extension> |
警告:千万不要将start_dtmf与start_dtmf_generate混合使用,否则会产生严重的后果。还有,如果跟ring_ready一起使用,请确保先调用ring_ready,否则将不起作用。
注:该应用使用了三通(Media bug,在通话的双方加入第三方监听)
start_dtmf_generate
作用:为当前信道生成一个DTMF
用法:
<action application="start_dtmf_generate"/> |
注意(当于bridge_early_media一起使用时将不起作用):
<action application="export" data="nolocal:execute_on_media=start_dtmf_generate"/> <action application="set" data="bridge_early_media=true"/> <action application="bridge" data="sofia/..."/> |
stop_displace_session
作用:停止替换文件
示例:
|
stop_dtmf
作用:停止带内DTMF监听
用法:
<action application="stop_dtmf"/> |
stop_dtmf_generate
作用:停止当前信道中的DTMF生成
用法:
<action application="stop_dtmf_generate"/> |
stop_record_session
作用:停止会话录音
示例:
<action application="stop_record_session" data="${record_file_name}"/> |
stop_tone_detect
作用:停止信道中的音调(tone)监测
用法:
<extension name="stop_tone"> <condition field="destination_number" expression=".*"> <application="stop_tone_detect"/> </condition> </extension> |
strepoch
作用:返回从新纪元(epoch,1970年1月1日0时0分0秒)至今的秒数。
示例:
<extension name="moh"> <condition field="destination_number" expression="^1234$"/> <condition field="${cond(${strepoch()} < 1273755900 ? true : false)}" expression="^true$"> <action application="answer"/> <action application="playback" data="$${hold_music}"/> <anti-action application="log" data="NOTICE The string quartet has gone home."/> </condition> </extension> |
strftime
语法:
|
参数说明:如果时间格式未指定,默认为%Y-%m-%d %T,打印如2010-04-28 17:47:29
作用;格式话显示当前时间。
示例1:
<action application="strftime" data="%Y-%m-%d"/> <action function="speak-text" data="You have $1 minutes, $2 seconds remaining ${strftime(%Y-%m-%d)}"/> |
示例2:
<extension name="Time_Routing"> <condition field="${strftime(%H%M)}" expression="^((09|1[0-7])[0-5][0-9]|1800)$"> <action application="bridge" data="sofia/$${domain}/1000"/> <anti-action application="voicemail" data="$${profile} $${domain} 1000"/> </condition> </extension> |
示例3:
<extension name="tod_example" break="never"> <!-- First, match M-F; if not M-F then we're definitely closed --> <condition field="${strftime(%w)}" expression="^([1-5])$"> <anti-action application="set" data="business=Sat"/> <anti-action application="transfer" data="IVR_Sat"/> </condition>
<!-- Next, check time of day. First regex is to match 7:30am to 11:59am --> <condition field="${strftime(%H%M)}" expression="^((07[3-5][0-9])|((08|09|1[0-1])[0-5][0-9]))$"> <action application="set" data="business=morning"/> <action application="transfer" data="IVR_Open"/> <anti-action application="set" data="business=lunch"/> <anti-action application="transfer" data="IVR_Lunch"/> </condition>
</extension>
<extension name="Play Lunch IVR" break="never"> <condition field="destination_number" expression="^IVR_Lunch$"/> <!-- This regex matches lunchtime 12:00 to 12:59 --> <condition field="${strftime(%H%M)}" expression="^(12[0-5][0-9])$"> <action application="set" data="business=lunch"/> <action application="transfer" data="IVR_Closed"/> <anti-action application="set" data="business=afternoon"/> <anti-action application="transfer" data="IVR_Afternoon"/> </condition>
</extension>
<extension name="Play Afternoon IVR" break="never"> <condition field="destination_number" expression="^IVR_Afternoon$"/> <!-- This regex matches 1pm to 5:30pm --> <condition field="${strftime(%H%M)}" expression="^((1[3-6])[0-5][0-9]|17[0-2][0-9])$"> <action application="set" data="business=afternoon"/> <action application="transfer" data="IVR_Open"/> <action application="set" data="business=closed"/> <action application="transfer" data="IVR_Closed"/> </condition>
</extension>
<extension name="Play Sat IVR" break="never"> <condition field="destination_number" expression="^IVR_Sat$"/> <!-- First, match Sat; if not Sat then we're definitely closed --> <condition field="${strftime(%w)}" expression="^([6])$"> <anti-action application="set" data="business=closed"/> <anti-action application="transfer" data="IVR_Closed"/> </condition>
<!-- Next, check time of day. First regex is to match 8:00am to 11:59am --> <condition field="${strftime(%H%M)}" expression="^(((08|09|1[0-1])[0-5][0-9]))$"> <action application="set" data="business=morning"/> <action application="transfer" data="IVR_Open"/> <action application="set" data="business=closed"/> <action application="transfer" data="IVR_Closed"/> </condition>
</extension>
<extension name="Play open IVR"> <condition field="destination_number" expression="^IVR_Open$"> <action application="lua" data="ivr-business-open.lua"/> <!-- your "open" Lua script here --> </condition> </extension>
<extension name="Play closed IVR"> <condition field="destination_number" expression="^IVR_Closed$"> <action application="lua" data="ivr-business-closed.lua"/> <!-- your "closed" Lua script here --> </condition> </extension> |
strftime_tz
语法:
|
作用:根据时区格式化的显示当前事件,默认为GMT,%Y-%m-%d %T
示例:
<extension name="Los_Angeles_Business_Hours"> <condition field="${strftime_tz(America/Los_Angeles %u)}" expression="^[1-5]$"/> <condition field="${strftime_tz(America/Los_Angeles %H%M)}" expression="^(0[8-9]\d{2}|1[0-7]\d{2}|18[0-2]\d)$"> <action application="log" data="INFO Business Hours"/> <anti-action application="log" data="INFO After Hours"/> </condition> </extension> |
注:时区列表可在autoload_config/timezone.conf.xml中找到
strmicroepoch
作用:返回从新纪元(epoch,1970年1月1日0时0分0秒)至今的毫秒数。
示例:
<action application="set" data="rec_full=/var/spool/freeswitch/audio_rec/${strmicroepoch()}_${uuid}.wav"/> <action application="set" data="record_post_process_exec_app=system:/opt/scripts/proc_record ${rec_full}"/> <action application="record_session" data="${rec_full}"/> |
system
语法:
system <command> |
作用:执行一个系统命令并等待其结果(阻塞状态)
示例1:
<action application="system" data="myapp.sh"/> |
示例2(存储为信道变量):
<action application="set" data="OUT=${system foo.sh}"/> |
示例3(移除换行符):
<action application="set" data="OUT=${regex(${system foo.sh}|(.+)|%1)}"/> |
three_way
语法:
<action application="three_way" data="<any uuid of a bridged call>"/> |
作用:强行加入一个给定的呼叫,即未收到邀请加入某个活跃呼叫中的信道
tone_detect
语法:
<action application="tone_detect" data="<key> <freqs> <flags> <timeout> <app> <data> <hits>"> |
参数说明:
域 | 描述 | 示例 |
key | tone的名字 (用户定义) | busy, fax, mytone |
freqs | 监听频率 | 425 - 480,620 |
flags | 嗅探tones的方向(r = read (default), w = write) | r |
timeout | 等待来音的空窗期 (0为永久, +<milliseconds> 为相对时间,或者用 epoch时间(从1970年1月1日至今的事件)) | +2000 (2 seconds) or 1227132612 (absolute example) |
app | 可选项,当tone检测条件符合时要调用的应用 | transfer, hangup |
appdata | 可选项,上述应用的参数 | '1000 XML default' , 'normal_clearing' |
hits | 调用APP前需要的命中数(避免相似误差) |
|
作用:音调(tone)检测
示例:
<action application="set" data="execute_on_tone_detect=set my_tone=true"/> <action application="set" data="tone_detect_hits=2"/> <action application="set" data="execute_on_media=tone_detect mytone 820 w +30000"/> <action application="bridge" data="sofia/gateway/foo/123456789"/> |
示例2:
<action application="set" data="execute_on_tone_detect=found_my_tone=true"/> <action application="set" data="tone_detect_hits=2"/> <action application="set" data="execute_on_media=tone_detect mytone 820 w +30000"/> |
transfer
语法:
transfer <destination_number> [<dialplan> [<context>]] |
作用:立即将呼叫信道转移到一个新的地方(content)。
示例1:
<action application="transfer" data="1047 XML cntxt_a"/> |
示例2:
<extension name="public_extensions"> <condition field="destination_number" expression="^(10[01][0-9])$"> <action application="transfer" data="$1 XML default"/> </condition> </extension> |
示例3:
<action application="transfer" data="-bleg 2103"/> |
示例4:
<action application="transfer" data="-both 2103"/> |
unbind_meta_app
作用:取消之前用bind_meta_app的按键绑定。如果未带参数,将取消所有的按键绑定
示例:
<action application="unbind_meta_app" data="7"/>
<!-- Unbind ALL keys bound on this channel. --> <action application="unbind_meta_app" data=""/> |
unset
作用:清除一个信道变量
示例:
<action application="unset" data=" |
verbose_events
作用:显示所有事件,可在XML DIALPLAN中内联执行。
示例:
<condition field="destination_number" expression="^Monroy$"> <action application="verbose_events" data="true"/> <action application="answer"/> </condition> |
wait_for_answer
作用:继续前等待会话被应答
示例:
<action application="wait_for_answer"/> |
wait_for_silence
语法:
wait_for_silence <silence_thresh> <silence_hits> <listen_hits> <timeout_ms> [<file>] |
参数说明:
silence_thresh:静阈值 silence_hits: 低于阈值的帧数 listen_hits:无声的帧数 timeout_ms:超时毫秒数 file:可选项,可被读取的声音文件,用于沉默监听的分析 |
作用:暂停dialplan的执行,经过一定长度的静音后继续执行。
示例:
|
翻译出处:https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools
这篇关于FreeSWITCH dialplan APPlication的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!