freeswitch的拨号规则配置

来源:互联网 发布:淘宝闲鱼手机版网页 编辑:程序博客网 时间:2024/04/28 00:57


当一个呼叫在ROUTING状态下达到命中拨号规则解析器时,相应的拨号规则就开始解析了。随着解析的进行,在xml文件中的符合条件的或标签中的指令形成一个指令表,安装到这个通道中。

你可以将拨号规则文件放到conf/dialplan/default下,这个目录下的拨号规则要比enum拨号规则优先处理。这个目录下的文件执行优先级是按其文件名开头的数字排序(由小到大),最大的那个文件是99999_enum.xml,这个文件捕捉所以的呼叫,所以我们自己定义的文件一定要小于这个文件才可能被先执行。一个以字母开头的文件名会大小999999_enum.xml。

可以通过${api func(api arg ${var_name})}的方式调用一个模块的函数。

通常一个拨号规则文件会包括三个要素:context, extension, condition和action。这些项目会被依次处理,只到达到action。

context

context是一个extension的逻辑组,一个context可以包含一个或多个extension。

context有一个name参数,any是一个保留的name参数值,它代表任何context。name用来标识一个context。在freeswitch.xml的dialplan section中可以有多个context。

extension

extension就是一个呼叫的目标。它有一个name,一些condition和action,这些东西会告诉freeswitch应该做什么。

语法:

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="{exten_name}"</span> [<span class="attr">continue</span><span class="kwrd">="[true|false]"</span>]<span class="kwrd">></span>

name参数是必须的,它是extension的唯一标识。

另外还有一个可选的参数continue,如果它配置为true的话,即使这个extension已经匹配,在执行完它的action后,还会继续执行后序的extension。其默认值为false。

{exten_name}可以是任何值。有一种特殊情况,如果exten_name正好与destination_number相等的话,解析器会从这个extension开始解析。但这是意味着就会执行它(执行要看它里面的condition)。如果没有这一特殊情况,解析器会从第一个extension开始解析。

如果condition中的field与expression匹配,再执行condition中的action。此时如果expresion中的以()括起来的值话,$1,$2,…,$N会依次得到这些值。在action中的data可以使用这些变量。

如果没有匹配成功,则会执行中的指令。此时,因为没有匹配,所以$1,$2等是没有值的。

condition中除了field和expression参数外,还可以有一个break参数,这个参数指明什么情况下中断这个extension的条件匹配。也就是说extension在什么情况下在这个condition中止查询,这个condition后面的condition不在执行了。

break的值可以是:

  • ‘on-true’ :  如果这个匹配成功,则下面的condition不再查询
  • ‘on-false’:  如果这个匹配失败,则…… (这个是默认值) 。也就是说,默认的情况下,只要有一个condition匹配失败了,这个extension也就不再往下执行了,再换它下面的extension。
  • ‘always’  : 总是在此处停止
  • ‘never’    : 永远不在此处停止

示例1:

<span class="kwrd"><</span><span class="html">extension</span><span class="kwrd">></span>  <span class="rem"><!-- destination_number是freeswitch的内部变量 --></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^500$"</span><span class="kwrd">></span>     <span class="rem"><!-- 这是在本地注册用户里找500,用%,后面的x.x.x.x是freeswitch服务器的ip --></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/500%x.x.x.x"</span><span class="kwrd">/></span>     <span class="rem"><!-- 这是在不在本地找用户,而是直接桥接到一个指定的sip uri,用@, x.x.x.x是sip uri的地址 --></span>     <span class="rem"><!-- <action application="bridge" data="sofia/profilename/500@x.x.x.x"/> --></span>  <span class="kwrd"><!--</span--><span class="html">condistion</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例2,通过网关呼叫用户:

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="testing"</span><span class="kwrd">></span>   <span class="rem"><!-- expression里的(100)就设置了$1为100 --></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(100)$"</span><span class="kwrd">></span>    <span class="rem"><!-- gateway是mod_sofiar的一个关键字,指就是网关。"gw"就是这个网关的名字。 --></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/gateway/gw/$1"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

 

condition

condition就是决定当然呼叫是否要在这个extension中处理的一个模式匹配标签。

语法:

<span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="[{field_name}|${variable_name}|${api_func(api_args ${var_name})}]"</span> <span class="attr">expression</span><span class="kwrd">="{expression}"</span> <span class="attr">break</span><span class="kwrd">="[on-true|on-false|always|never]"</span><span class="kwrd">></span>   <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="app name"</span> <span class="attr">data</span><span class="kwrd">="app arg"</span><span class="kwrd">/></span>   <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="app name"</span> <span class="attr">data</span><span class="kwrd">="app arg"</span><span class="kwrd">/></span><span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span></span>

fileld和expression是必须的,break是可选的。

有一些内部变量可以用:

  • context Why can we use the context as a field? Give us examples of usages please.
  • rdnis Redirected Number, the directory number to which the call was last presented.
  • destination_number Called Number, the number this call is trying to reach (within a given context)
  • dialplan Name of the dialplan module that are used, the name is provided by each dialplan module. Example: XML
  • caller_id_name Name of the caller (provided by the User Agent that has called us).
  • caller_id_number Directory Number of the party who called (caller) -- can be masked (hidden)
  • ani Automatic Number Identification, the number of the calling party (caller) -- cannot be masked
  • aniii The type of device placing the call ANI2
  • uuid Unique identifier of the current call? (looks like a GUID)
  • source Name of the FreeSWITCH module that received the call (e.g. PortAudio)
  • chan_name Name of the current channel (Example: PortAudio/1234). Give us examples when this one can be used.
  • network_addr IP address of the signaling source for a VoIP call.
  • year Calendar year, 0-9999
  • yday Day of year, 1-366
  • mon Month, 1-12 (Jan = 1, etc.)
  • mday Day of month, 1-31
  • week Week of year, 1-53
  • mweek Week of month, 1-6
  • wday Day of week, 1-7 (Sun = 1, Mon = 2, etc.)
  • hour Hour, 0-23
  • minute Minute (of the hour), 0-59
  • minute-of-day Minute of the day, (1-1440) (midnight = 1, 1am = 60, noon = 720, etc.)

除了上面的变量外,还可以使用自定义的变量${variable},以及一些api函数${api(args)}

这些变量可以在field及expression里。

condition是不能嵌套的,但可以将多个condition堆在一起,并设置break为on-false(默认值),这样的效果与嵌套一样。

示例1,利用cond API函数:

<span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span>="${<span class="attr">cond</span>(${<span class="attr">my_var</span>} <span class="kwrd">></span> 12 ? YES : NO)}" expression="^YES$"<span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="log"</span> <span class="attr">data</span><span class="kwrd">="INFO ${my_var} is indeed greater than 12"</span><span class="kwrd">/></span>    <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="log"</span> <span class="attr">data</span><span class="kwrd">="INFO ${my_var} is not greater than 12"</span><span class="kwrd">/></span><span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span></span>

示例2, 嵌套效果:

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="To PSTN"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="fdnis"</span> <span class="attr">expression</span><span class="kwrd">="9541231234"</span><span class="kwrd">/></span>   <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="(.*)"</span><span class="kwrd">></span>     <span class="rem"><!-- 一个网关注册到fs, x.x.x.x就是这个网关的地址,5061是它的sip协议端口。但这里为什么没有用gateway关键字呢? --></span>      <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$1@x.x.x.x:5061"</span><span class="kwrd">/></span>   <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

action

action是在condition匹配的时候执行,而anti-action是在condition不匹配的时候执行。

action有两个参数,一个是application,一个是data。其中application是指一个注册的应用程序。data是给这个应用程序传递的参数。

在anti-action里不能使用$1这样的变量,原因是expression没有匹配成功,所以$1没有值。

 

内联action

 

先说说hunting和executing,hunting就是freeswitch扫描符合条件action放到一个队列里,executing就是执行队列里的action。

所以,在通常情况下freeswitch中的hunting和executing是分两步执行的。这说意味着在executing时设置的变量,在hunting时是不可用的。也就是说,即使我们能用可以显示变量的值,但是在我们的xml文件中的condition中可能是不可用的。

要解决这个问题就要用到inline参数。

<action inline="true" application="set" data="some_var=some_val"/>
action的参数inline设置为"true"时,action会在hunting时执行。这样,后面的condition就可以使用这个${some_var}变量了。
另外,用inline方式执行的application不能显示在cdr里,原因是它们在hunting时就已经执行了。
不是所有的application都可以在hunting时执行。只有那些快速执行get或set变量值,且不会影响当前session的application才可以。它们包括下面这些:
  • check_acl,
  • eval,
  • event,
  • export,
  • log,
  • presence,
  • set,
  • set_global,
  • set_profile_var,
  • set_user,
  • sleep,
  • unset,
  • verbose_events,
  • cidlookup,
  • curl,
  • easyroute,
  • enum,
  • lcr,
  • nibblebill,
  • odbc_query

可用的action

参见这两个: API Reference 和 Dialplan Functions

示例

示例1

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test1"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$1@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>
<span class="rem"><!-- 这是一个错误的示例,$1是没有值的 --></span><span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test1Wrong"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(/d+)$"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$1@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>
<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test1_2"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="dialed_number=$1"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/${dialed_number}@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span></span>

示例2

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test2"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^1(/d+)$"</span><span class="kwrd">></span>    <span class="rem"><!-- 注意下面的$0,它代表最初的destination_number --></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$0@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例3

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test3.1"</span><span class="kwrd">></span>   <span class="rem"><!-- 只取被叫号码中00后面的数字 --></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^00(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$1@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test3.2"</span><span class="kwrd">></span>  <span class="rem"><!-- 取00后面的任何字符 --></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^00(.+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/$1@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例4

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test4"</span><span class="kwrd">></span>  <span class="rem"><!-- 将前缀00替换为011 --></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^00(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profilename/011$1@x.x.x.x"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例5

 

假设我们有两个不同的profile, profile的配置文件在conf/sip_profiles/

<span class="kwrd"><</span><span class="html">profile</span> <span class="attr">name</span><span class="kwrd">="profile1"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="debug"</span> <span class="attr">value</span><span class="kwrd">="1"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="rfc2833-pt"</span> <span class="attr">value</span><span class="kwrd">="101"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="sip-port"</span> <span class="attr">value</span><span class="kwrd">="5060"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="dialplan"</span> <span class="attr">value</span><span class="kwrd">="XML"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="dtmf-duration"</span> <span class="attr">value</span><span class="kwrd">="100"</span><span class="kwrd">/></span>  <span class="rem"><!-- 这个是u-law --></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="codec-prefs"</span> <span class="attr">value</span><span class="kwrd">="PCMU@20i"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="codec-ms"</span> <span class="attr">value</span><span class="kwrd">="20"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="use-rtp-timer"</span> <span class="attr">value</span><span class="kwrd">="true"</span><span class="kwrd">/></span><span class="kwrd"><!--</span--><span class="html">profile</span><span class="kwrd">></span><span class="kwrd"><</span><span class="html">profile</span> <span class="attr">name</span><span class="kwrd">="profile2"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="debug"</span> <span class="attr">value</span><span class="kwrd">="1"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="rfc2833-pt"</span> <span class="attr">value</span><span class="kwrd">="101"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="sip-port"</span> <span class="attr">value</span><span class="kwrd">="5070"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="dialplan"</span> <span class="attr">value</span><span class="kwrd">="XML"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="dtmf-duration"</span> <span class="attr">value</span><span class="kwrd">="100"</span><span class="kwrd">/></span>  <span class="rem"><!-- 这个是a-law --></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="codec-prefs"</span> <span class="attr">value</span><span class="kwrd">="PCMA@20i"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="codec-ms"</span> <span class="attr">value</span><span class="kwrd">="20"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">="use-rtp-timer"</span> <span class="attr">value</span><span class="kwrd">="true"</span><span class="kwrd">/></span><span class="kwrd"><!--</span--><span class="html">profile</span><span class="kwrd">></span></span></span>

这两个profile1和profile2

要使用u-law的配置

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test5ulaw"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^1(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profile1/$0@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

要使用a-law的配置

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Test5alaw"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^192/.168/.1/.1$"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^1(/d+)$"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/profile2/$0@192.168.2.2"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例6

<span class="rem"><!-- 将呼叫桥接到一个注册到fs的设备, 注册的域名是example.com --></span><span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="internal"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="source"</span> <span class="attr">expression</span><span class="kwrd">="mod_sofia"</span> <span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(4/d+)"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/local_profile/$0%example.com"</span> <span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例7

<span class="rem"><!-- 这个示例就有点意思啦!</span><span class="rem">首先,要明白一个事件,在一个condition里有多个action的情况下,如果一个action挂断的通道的话,下面的action将不会被执行,否则,下面的action还会继续执行。</span><span class="rem">--></span><span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="internal"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^1111"</span><span class="kwrd">></span>    <span class="rem"><!-- 设置了hangup_after_bridge=true,也就是说如果有一个桥接成功了,就挂机--></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="hangup_after_bridge=true"</span><span class="kwrd">/></span>    <span class="rem"><!-- 如果下面这个bridge成功了,则挂机,再下面那个action就不会执行啦 --></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/local_profile/1111@example1.company.com"</span> <span class="kwrd">/></span>    <span class="rem"><!-- 只有在上一个action失败的时(通道没有挂断),下面这个action才会执行 --></span>    <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/local_profile/1111@example2.company.com"</span> <span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span></span>

示例8

<span class="rem"><!-- 这是一个需要认证的示例 --></span> <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="9191"</span><span class="kwrd">></span>   <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^9191$"</span><span class="kwrd">/></span>  <span class="rem"><!-- 判断是否认证通过,估计前面得有一个认证的过程 --></span>   <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="${sip_authorized}"</span> <span class="attr">expression</span><span class="kwrd">="true"</span><span class="kwrd">></span>     <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="reject"</span> <span class="attr">data</span><span class="kwrd">="407"</span><span class="kwrd">/></span> <span class="rem"><!-- 如果没有通过 --></span>   <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>  <span class="rem"><!-- 通过了, 觉得这个action可以直接放到上面的condition里, 效果应该是一样的。</span><span class="rem">         注意这个condition没有匹配什么,也就是什么都匹配  --></span>   <span class="kwrd"><</span><span class="html">condition</span><span class="kwrd">></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="playback"</span> <span class="attr">data</span><span class="kwrd">="/tmp/itworked.wav"</span><span class="kwrd">/></span>   <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span> <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span></span></span>

示例9

将一个DID(Direct inward dailing)路由到一个指定的extension 1001。

本示例是一个发送和查询voicemail的配置示例。

首先是在conf/dialplan/public.xml里:

   <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="test_did"</span><span class="kwrd">></span>     <span class="rem"><!-- XXXxxxxxxx是DID号码 --></span>     <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(XXXxxxxxxx)$"</span><span class="kwrd">></span>       <span class="rem"><!-- 将呼叫transfer到default(这个应该是指context的name),它现在是在public context里的 --></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="transfer"</span> <span class="attr">data</span><span class="kwrd">="$1 XML default"</span><span class="kwrd">/></span>     <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>   <span class="kwrd"><!--</span-->extension</span></span>

然后在conf/dialplan/default.xml的default context里:

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="Local_Extension"</span><span class="kwrd">></span>     <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(XXXxxxxxxx)$"</span><span class="kwrd">></span>        <span class="rem"><!-- 定义dialed_ext变量 --></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="dialed_ext=$1"</span><span class="kwrd">/></span>     <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>     <span class="rem"><!-- 如果被叫号码与主叫号码相同,也就是用户拨自己的号码,他是想查询voicemail。</span><span class="rem">             否则,就是发送voicemail  --></span>     <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^${caller_id_number}$"</span><span class="kwrd">></span>       <span class="rem"><!-- 下面的action是查询voicemail的动作  --></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="voicemail_authorized=${sip_authorized}"</span>/ <span class="kwrd">></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="answer"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="sleep"</span> <span class="attr">data</span><span class="kwrd">="1000"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="voicemail"</span> <span class="attr">data</span><span class="kwrd">="check default $${domain} ${dialed_ext}"</span><span class="kwrd">/></span> <span class="rem"><!-- $${domain}会自动获取本机域名 --></span>       <span class="rem"><!-- 下面是发送voicemail的动作 --></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="ring_ready"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="call_timeout=10"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="hangup_after_bridge=true"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="continue_on_fail=true"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="USER/1001@$${domain}"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="answer"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="sleep"</span> <span class="attr">data</span><span class="kwrd">="1000"</span><span class="kwrd">/></span>       <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="voicemail"</span> <span class="attr">data</span><span class="kwrd">="default $${domain} ${dialed_ext}"</span><span class="kwrd">/></span>     <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span> <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span></span></span>

示例10

呼出示例, 可以替换主叫号码

   <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="asterlink.com"</span><span class="kwrd">></span>     <span class="rem"><!-- 主叫号码是1000 --></span>     <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="caller_id_number"</span> <span class="attr">expression</span><span class="kwrd">="^1000$"</span><span class="kwrd">/></span>    <span class="rem"><!-- 被叫号码长度是10个数字 --></span>     <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(/d{10})$"</span><span class="kwrd">></span>             <span class="rem"><!-- 设置主叫号码id --></span>             <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="effective_caller_id_number=8001231234"</span><span class="kwrd">/></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="effective_caller_id_name=800 Number"</span><span class="kwrd">/></span>         <span class="rem"><!-- 从asterlink.com网关出局, 加1208前缀 --></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/gateway/asterlink.com/1208$1"</span><span class="kwrd">/></span>     <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>   <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例11

根据目标号码不同路由到不同的目标

<span class="kwrd"><</span><span class="html">extension</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="network_addr"</span> <span class="attr">expression</span><span class="kwrd">="^(66/.123/.321/.231|70/.221/.221/.221)$"</span> <span class="attr">break</span><span class="kwrd">="on-false"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^/d+$"</span> <span class="attr">break</span><span class="kwrd">="never"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="continue_on_fail=NORMAL_TEMPORARY_FAILURE,TIMEOUT,NO_ROUTE_DESTINATION"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="bypass_media=true"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="accountcode=myaccount"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(1813/d+|1863/d+|1727/d+|1941/d+|404/d+)$"</span> <span class="attr">break</span><span class="kwrd">="never"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/outbound_profile/${sip_to_user}@switch1.mydomain.com"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="info"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="respond"</span> <span class="attr">data</span><span class="kwrd">="503"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="hangup"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(1404/d+|1678/d+|1770/d+)$"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="sofia/outbound_profile/${sip_to_user}@switch2.mydomain.com"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="info"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="respond"</span> <span class="attr">data</span><span class="kwrd">="503"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="hangup"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="respond"</span> <span class="attr">data</span><span class="kwrd">="503"</span><span class="kwrd">/></span>  <span class="kwrd"><</span><span class="html">anti-action</span> <span class="attr">application</span><span class="kwrd">="hangup"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span></span></span>

示例12

捕捉所有的号码,

<span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="catchall"</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">=".*"</span> <span class="attr">continue</span><span class="kwrd">="on-true"</span><span class="kwrd">></span>   <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="playback"</span> <span class="attr">data</span><span class="kwrd">="bla.wav"</span><span class="kwrd">/></span>  <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

 

示例13

从主号方取得名字,接通被叫并显示主叫名字,如果被叫按“1”则接通主被叫,如果被叫方挂机,则主叫会被路由到voicemail。

这个没搞清楚它是怎么实现的!

 <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="screen"</span><span class="kwrd">></span>   <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(/d{4})$"</span><span class="kwrd">></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="call_screen_filename=/tmp/${caller_id_number}-name.wav"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="answer"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="sleep"</span> <span class="attr">data</span><span class="kwrd">="1000"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="phrase"</span> <span class="attr">data</span><span class="kwrd">="voicemail_record_name"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="playback"</span> <span class="attr">data</span><span class="kwrd">="tone_stream://%(500, 0, 640)"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="playback_terminators=#*0123456789"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="record"</span> <span class="attr">data</span><span class="kwrd">="${call_screen_filename} 7 200 2"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="group_confirm_key=1"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="fail_on_single_reject=true"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="group_confirm_file=phrase:screen_confirm:${call_screen_filename}"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="continue_on_fail=true"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="bridge"</span> <span class="attr">data</span><span class="kwrd">="user/$1"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="voicemail"</span> <span class="attr">data</span><span class="kwrd">="default $${domain} $1"</span><span class="kwrd">/></span>     <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="hangup"</span><span class="kwrd">/></span>   <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span> <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

示例14

wav格式语音的录/放音

     <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="recording"</span><span class="kwrd">></span>       <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(2020)$"</span><span class="kwrd">></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="answer"</span><span class="kwrd">/></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="playback_terminators=#"</span><span class="kwrd">/></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="record"</span> <span class="attr">data</span><span class="kwrd">="/tmp/recorded.wav 20 200"</span><span class="kwrd">/></span>       <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>     <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

     <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="playback"</span><span class="kwrd">></span>       <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^(2021)$"</span><span class="kwrd">></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="answer"</span><span class="kwrd">/></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="playback_terminators=#"</span><span class="kwrd">/></span>         <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="playback"</span> <span class="attr">data</span><span class="kwrd">="/tmp/recorded.wav"</span><span class="kwrd">/></span>       <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>     <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span></span></span>

 

示例15

用Flite text to speech报时,mod_flite

<span class="kwrd"><</span><span class="html">include</span><span class="kwrd">></span>  <span class="kwrd"><</span><span class="html">extension</span> <span class="attr">name</span><span class="kwrd">="SpeakTime"</span><span class="kwrd">></span>    <span class="kwrd"><</span><span class="html">condition</span> <span class="attr">field</span><span class="kwrd">="destination_number"</span> <span class="attr">expression</span><span class="kwrd">="^2910$"</span><span class="kwrd">></span>      <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="actime=${strftime(%H:%M)}"</span><span class="kwrd">/></span>      <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="tts_engine=flite"</span><span class="kwrd">/></span>      <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="set"</span> <span class="attr">data</span><span class="kwrd">="tts_voice=slt"</span><span class="kwrd">/></span>                            <span class="kwrd"><</span><span class="html">action</span> <span class="attr">application</span><span class="kwrd">="speak"</span> <span class="attr">data</span><span class="kwrd">="Is it +${actime}"</span><span class="kwrd">/></span>     <span class="kwrd"><!--</span--><span class="html">condition</span><span class="kwrd">></span>  <span class="kwrd"><!--</span--><span class="html">extension</span><span class="kwrd">></span><span class="kwrd"><!--</span--><span class="html">include</span><span class="kwrd">></span></span></span></span>

SIP特定的拨号字符串

 

呼叫一个SIP URI

基本语法:sofia/my_profile/user@host, 如:

sofia/my_profile/1234@192.168.1.1

 

呼叫一个注册用户

没有注册别名的情况:sofia/my_profile/1234%mydomain.com

注册别名的情况:sofia/mydomain.com/1234,注意:这里没有显示指定profile文件。也可以这样:user/1234@mydomain.com

 

通过网关呼叫

sofia/gateway/mygateway.com/1234

其中网关名就是mygateway.com,呼叫的用户1234

 

呼叫时指定传输协议

传输协议可以是:TCP, UDP, TLS, SCTP,如:

sofia/my_profile/1234@192.168.0.1;transport=tcp

 

指定编解码

{absolute_codec_string=XXXX}sofia/my_profile/user@your.domain.com

 

Getting Fancy With PortAudio,这个没搞明白是做什么用的

If you have PortAudio running and would like to specify the codec you need to originate first and bridge second:

originate {absolute_codec_string=XXXX}sofia/default/foo@bar.com bridge:portaudio/auto_answer inline

 

修改SIP联系人

fs正常会用mod_sofia@ip:port做为内部的联系人,如果想修改一下,

{sip_contact_user=foo}sofia/my_profile/1234@192.168.0.1;transport=tcp

 

使用定制的SIP URI

比如,要发送在“SIP:”开头的URI,

sofia/my_profile/sip:xxxx;phone-context=cdp.udp@somedomain.com;user=phone
0 0
原创粉丝点击