FreeSWITCH dialplan APPlication

2024-05-11 13:08

本文主要是介绍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

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>

参数说明:

<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]

参数说明:

  • KEY:当*号键按下希望按下的按键。如果希望应答是*1,则可以用1替代KEY。仅仅只可以输入0-9之间的数字,*和#将被解释成0
  • LISTEN_TO:监听数字的leg对象,接受的参数有:a,b,或者ab
  • FLAGS:更改行为。以下值为有效值:
    • a – 在A leg上应答
    • b – 在B leg上应答
    • o – 在对方leg上应答
    • s – 在相同leg上应答
    • i – (内联执行)Execute inline (see below)
    • 1 – 使用一次后解除绑定
  • APPLICATION:要执行的应用(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

参数:

<string to 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

参数:

Event Event-Name=$event_name[,Event-Subclass=$event_subclass][,header=value,header=value]

作用:可用于产生(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(命令行下):

group insert:01@example.com:sofia/gateway/provider/0123456789

示例2:

group insert:01@example.com:[sip_cid_type=none]sofia/gateway/provider/0123456789

 

hangup

作用:挂断一个通话,可选择挂断原因

示例:

<action application="hangup" data="USER_BUSY"/>

如果是在桥接(bridge)后挂断,那么FreeSWITCH会将从bridge收到的挂断原因覆盖该值,可通过设置参数sip_ignore_remote_cause=true来避免这样的情况。

 

info

作用:向控制台打印信道的相关信息

示例:

<action application="info"/> 

在LUA脚本中设置输出级别:

session1:execute("info","notice");

 

Inline Dialplan

参数:

'app1:arg1,app2:arg2,app3:arg3' inline

作用:允许在dialplan中插入一段代码表达式

示例:

uuid_transfer <uuid> playback:/foo.wav inline

示例2:

originate sofia/gateway/my_gw/user@domain.com 'set:myvar=myvalue,info:,playback:foo.wav' inline

 

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"/>

参数说明:

  • name – IVR菜单的名称
  • greet-long – 当菜单运行时将在第一时间播放提示音乐。可能是一个文件名(以\或者/开头)、TTS(格式为say:要说的语音)、或者是phrase:宏名播放语句宏
    • 当使用 "phrase:my_phrase"时,可以指定参数选项如"phrase:my_phrase:options|option2"
  • greet-short – 当IVR功能激活时较短的提示音乐。可能是 filename, say, 或者是phrase
  • invalid-sound – 当无入口(entry)或者无效入口时将播放的提示音乐。可能是filename, say, 或者是phrase
  • exit-sound – 退出音乐
  • inter-digit-timeout – 等待选项的超时毫秒数
  • timeout – 当输入确认数字播放完确认音乐后的等待毫秒数
  • confirm-macro –确认宏
  • confirm-key – 当输完数字后的确认符号,默认是#,也可为空(even if blank)
    • 如果要更改掉默认的#号,可以通过在dialplan中修改配置改掉,相关的配置代码如下

<action application="set" data="ivr_menu_terminator=*"/>

  • confirm-attempts
  • max-failures – 菜单结束前允许的输入数字错误的最大次数 (默认为3次,小于1为禁止失败).
  • max-timeouts – 菜单结束前允许的最大超时重试次数 (默认为max_failures的值或者是3。小于0则禁止重试).
  • tts-engine – TTS引擎的名字(例如cepstral) (可选项)
  • tts-voice –声音源的名字 (例如 david). (如果tts-voice已配置,则该项也必须配置).
  • digit-len – 搜索匹配功能入口前允许的最大数字输入个数.

每个菜单都支持绑定多个按键操作如:

  • menu-exit – 退出IVR菜单
  • menu-sub – 加载一个子菜单(sub-menu)
  • menu-exec-app – 执行一个dialplan的应用(application)
  • menu-play-sound – 播放一个声音文件或者播放文本

<entry action="menu-play-sound" digits="3" param="say: You pressed 3"/>

<entry action="menu-play-sound" digits="6" param="voicemail/vm-goodbye.wav"/>

  • menu-back – 返回上一级菜单
  • menu-top – 返回顶级菜单
  • menu-exec-api 已停止使用

示例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]

参数说明:

backend:后端,详见后续提供的表

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

语法:

log [loglevel] <log message>

作用:向终端打印一个日志文本

示例:

<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

语法:

multiset [^^<delim>]<varname>=<value> <var2>=<val2>"

作用:设置多个信道变量

备注:默认的分隔符为空格,如果要修改可在最前面加“^^”,然后就可以用任意的分隔符了。这个应用可以运行在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>

参数说明:

  • file:要播放的文件。详情可看mod_dptools: playback
  • engine :语音识别模块,如unimrcp
  • {param1=val1}:可选的语言识别参数。这些参数由语音识别模块指定
  • grammar:语言可以为:inline:, builtin:, session:, a URL, a filename, etc.

作用:在语音识别处理的时候播放文件,结果将保存在信道变量[[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>]]]]

参数说明:

  • min:捕获的最小数字个数(最小值为0)
  • max:捕获的最大数字个数(最大值为128)
  • tries:提示音乐播放次数
  • timeout:在PAGD重试之前及在提示音乐播放完之后等待应答的毫秒数
  • terminators:当输入小于max时可按该符号进行终结。如果是以#开头的,那么终结符代表输入结束 (从 FS 1.2版本起). (默认为'#', 可以为空).
  • file:提示音乐文件。当输入数字时自动被打断播放 (可以设置为空,或者输入字符串“silence”略过提示音乐)
  • invalid_file:如果输入数字跟正则表达不匹配,播放的提示音乐
  • var_name:保存输入数字的信道变量(Channel variable into which valid digits should be placed )(可选项,没有默认值. 可参考下列中的'var_name_invalid').
  • regexp:数字串要匹配的正则表达式 (可选项, 值为空则允许所有输入,默认为空).
  • transfer_on_failure:当达到了最大重试次数,要呼叫转移(transfer)的地方,例如: "1 XML hangup" (可选项, 默认为空, 允许呼叫方处理信道变量)

作用:播放一个提示音乐然后等待数字的输入。提示音乐可以被数字的输入打断

示例:

<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:

presence in|1000@xxx.xxx.xxx.xxx|dnd|'Do not disturb.'

示例2:

presence out|1000@xxx.xxx.xxx.xxx|unavailable|'Currently out for a pot of hot coffee.'

 

privacy

语法:

privacy no|yes|name|full|number

作用:在呼叫中设置呼叫方策略

示例:

<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>

参数说明:

  • 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>]

参数说明:

  • time_limit_secs - (可选项)播放的最长秒数
  • silence_thresh - (可选项) 收音阈值
  • silence_hits - (可选项)收音事件的秒数。默认时间为3秒

作用:录音

示例:

<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>

文件格式:

1.record_session /tmp/test.gsm : 将生成一个由GSM编码的原始声音文件,而不是wav,ogg等格式的文件。注意,采样率不受文件名的影响

2.record_session /tmp/test.mp3 :如果已加载mod_shout模块,将生成一个MP3格式的文件

 

redirect

作用:将信道重定向到另一个终端上。一定要注意不要重定向到一个不兼容的信道上,否则将不会得要你想要的效果。

示例1:

<action application="redirect" data="sip:foo@bar.com "/> 

示例2:

action application="redirect" data="sip:foo@bar.com,sip:foo@end.com"/> 

 

regex

语法:

regex value expression results*

参数说明:

  • value:待匹配的值
  • expression:正则表达式
  • results:处理结果的字符串 ( 可选项,未指定则返回匹配结果,true或者false)

作用:执行一个正则表达式

示例1,控制台下(返回结果为05555555555):

regex 61555555555|^61([0-9]{9})$|0%1

示例2,控制台下(返回结果true):

regex 61555555555|^61([0-9]{9})$

示例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

  • pronounced – 常规读法,如 "forty two"
  • iterated – 按位读法, 如 "four two"
  • counted – 次序读法, 如 "forty second"

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

语法:

application="sched_cancel" data="[groupid|taskid]" 

作用:取消一个计划中的广播或者呼叫转移

示例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>

作用:为所有信道设置全局变量。即使创建它的信道已挂断该变量仍然存在。

示例:

<action application="set_global" data="global_var1=FreeSwitch"/>

<action application="set_global" data="global_var2=12345678"/>

 

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(为所有的变量添加前缀):

<action application="set_user" data="5551212@${domain} dest_"/>

 

set_zombie_exec

作用:为当前信道设置僵尸执行标记位。即当信道挂断后,会话将继续执行命令。可用于执行额外的操作。

示例:

<action application="set_zombie_exec"/> 

示例2(LUA中的操作):

session:execute("set_zombie_exec")

 

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]"/>

参数说明:

  • unhold_key : 用于释放的DTMF按键
  • moh_a : 在a-leg播放的等待音乐(moh)
  • moh_b : 在b-leg播放的等待音乐(moh)

注:如果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

用法:用定义的语音引擎说出一个字符串或者文件

示例:

<action application="speak" data="flite|kal|FreeSWITCH is awesome"/>

 

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

作用:停止替换文件

示例:

action application="stop_displace_session" data="/tmp/sound_file.wav"/>

 

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

语法:

strftime [format_string] 

参数说明:如果时间格式未指定,默认为%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

语法:

strftime_tz [timezone [format_string]]

作用:根据时区格式化的显示当前事件,默认为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="variable_name"/>

 

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的执行,经过一定长度的静音后继续执行。

示例:

<action application="wait_for_silence" data="200 15 15 5000"/>

<action application="sleep" data="1000"/>

<action application="wait_for_silence" data="200 15 15 5000"/>

<action application="sleep" data="1000"/>

<action application="wait_for_silence" data="200 15 15 5000"/>

<action application="sleep" data="1000"/>

 

 

翻译出处:https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools

 

 

这篇关于FreeSWITCH dialplan APPlication的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979618

相关文章

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

git中,隐藏application.properties文件,修改不用提交了

git中,隐藏application.properties文件,修改不用提交了 A、将文件名放入 .gitignore 文件中 B、执行git命令隐藏文件         执行在ide上执行命令         a、执行隐藏命令 git rm --cached src/main/resources/application.properties          b、执行提交命

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使

How to apply streaming in azure openai dotnet web application?

题意:"如何在 Azure OpenAI 的 .NET Web 应用程序中应用流式处理?" 问题背景: I want to create a web api backend that stream openai completion responses. "我想创建一个 Web API 后端,用于流式传输 OpenAI 的完成响应。" How can I apply the f

XCode6 中如何创建empty application工程

在XCode 6中,创建IOS工程时,移除了empty application工程模板。但有时候我们又想创建empty application工程,该怎么办呢? 具体步骤如下: 1、在IOS工程中,选择创建一个Single View Application工程。 2、创建好后,把工程目录下的Main.storyboard和LaunchScreen.xib删除,扔进废纸篓。 3、打开Info

myeclipse导入项目右键runas中没有MyEclipse Server Application,而且往tomcat部署时也不能自动定位到项目

说明myeclipse没有识别导入的工程,没有web模块就没有办法使用web的server。 检查工程目录下的.project文件中有没有如下部分: <natures><nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature><nature>com.genuitec.eclipse.spri

SecureCRT Application 已停止工作

解决方法一: cmd ----> regedit —>HKEY_LOCAL_MACHINE\SOFTWARE\vandyke 删掉vandyke 解决方法二: SecureCRT使用过程中出现异常后自动关闭,导致下次无法正常启动(运行程序无反应),此时一种可能的原因是由于SecureCRT异常关闭,所以异常关闭会在C:\Documents and Settings\Administrator\

spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch...

前半部分转自:https://www.cnblogs.com/tibit/p/7337045.html (后半原创) spark-shell不支持yarn cluster,以yarn client方式启动 spark-shell --master=yarn --deploy-mode=client 启动日志,错误信息如下   其中“Neither spark.yarn.ja

If an application has more than one locale, then all the strings declared in one language should als

字符串资源多国语言版本的出错问题 假如你仅仅针对国内语言 加上这句即可 //保留中文支持resConfigs "zh"

Zabbix 企业级高级应用(Zabbix Enterprise Advanced Application)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。 常用运维工具系列:常