【Freeswitch从入门到精通】六、Condition

Condition 属 Extension 下的内容,是执行 [ant-]Action 的条件。

常见于 Freeswitch 各 XML 配置文件下,路由表 Dialplan 中作用显著。

<condition field="destination_number" expression="^2906$">

1、工作流程

  • 作为 Dialplan 路由表 / 拨号方案中的控制元素,condition 可以通过正则表达式或者其他参数是否满足某种条件来控制 路由表 的进入。

  • 如果 condition 的判断结果为 true,那么 condition 内指定的 action 将被添加到 TODO 预执行列表中。

  • 如果 condition 的判断结果为 false,那么 condition 内指定的 anti-action 将被添加到 TODO 预执行列表中。

  • 但只要 condition 结果为true,或者有内部 anti-action 被加入到 TODO 预执行列表中,就会触发参数 break

注:有特殊情况,当遍历到的 action 中参数 inline=true 时,当前 action 不会放到 TODO 列表中,会被直接执行。常用语 set action 中,用于给变量赋值,并在接下来的 condition 中,作为条件被引用。

2、参数及用法

2.1 时间条件

<condition wday="6" hour="8-12">
其他相关参数:

  • year : 日历年,0-9999
  • yday :一年中的某一天,1-366
  • mon :月份,1-12(一月份=1)
  • mday : 一个月中的某一天,1-31
  • week :一年中的某一周,1-53
  • mweek:一个月中的某一周,1-6
  • wday:一周中的某一天,1-7(周日=1,周一=2…),或者英语缩写"sun"、 “mon”、 "tue"等
  • hour:一天中的某小时,0-23
  • minute:一小时中的某一分钟,0-59
  • minute-of-day:一天中的某一分钟,(1-1440)(午夜=1,凌晨1点=60,正午=720)
  • time-of-day:格式化的时间范围,格式:hh:mm[:ss]-hh:mm[:ss] (秒数是可选的),例如:“08:00-17:00”
  • date-time:格式化日期/时间范围:格式YYYY-MM-DD hh:mm[:ss]~YYYY-MM-DD hh:mm:ss,例如:2010-10-01 00:00:01~2010-10-15 23:59:59

2.2 require-nested

默认值: true

当前参数用于嵌套条件

如果一个条件的 require-nested 参数值为 “true” ,那么它的所有嵌套条件都必须为 true (其表达式值为 true ),condition 才能计算为 true 。如果 “require-nested” 值为 false,那么只要它的表达式值为 truecondition 结果就为 true ,不管嵌套条件是什么。

有兴趣,可以测试测试:
你可以修改 expressionrequire-nestedinlinebreak 值。

<extension name="nested_example">
    <condition field="destination_number" expression="^2901$" require-nested="false">
        <action application="log" data="ERR 00 CIDnum is
${caller_id_number} CIDname is ${caller_id_name}"/>
        <action application="set" data="var_01=N/A" inline="true"/>
        <action application="set" data="var_02=N/A" inline="true"/>
        <action application="set" data="var_03=N/A" inline="true"/>
        <action application="set" data="var_04=N/A" inline="true"/>
        <action application="set" data="var_05=N/A" inline="true"/>
        <action application="log" data="ERR 01 I'm before..."/>
        <action application="set" data="var_01=01" inline="true"/>
        <action application="log" data="ERR 02 I'm before        ${var_01}
${var_02} ${var_03} ${var_04} ${var_05}"/>
        <condition field="caller_id_number" expression="1011" break="on-false">
            <action application="log" data="ERR 03 I'm the first..."/>
            <action application="log" data="ERR 04 I'm the first CIDnum is
${caller_id_number}"/>
            <action application="set" data="var_02=02" inline="true"/>
            <action application="log" data="ERR 05 I'm the first ${var_01}
${var_02} ${var_03} ${var_04} ${var_05}"/>
        </condition>
        <action application="log" data="ERR 06 I'm in between..."/>
        <action application="set" data="var_03=03" inline="true"/>
        <action application="log" data="ERR 07 I'm in between ${var_01}
${var_02} ${var_03} ${var_04} ${var_05}"/>
        <condition field="${caller_id_name}" expression="Giovanni" break="on-false">
            <action application="log" data="ERR 08 I'm the second..."/>
            <action application="log" data="ERR 09 I'm the second CIDname is ${caller_id_name}"/>
            <action application="set" data="var_04=04" inline="true"/>
            <action application="log" data="ERR 10 I'm the second ${var_01}
${var_02} ${var_03} ${var_04} ${var_05}"/>
        </condition>
        <action application="log" data="ERR 11 I'm after..."/>
        <action application="set" data="var_05=05" inline="true"/>
        <action application="log" data="ERR 12 I'm after ${var_01}
${var_02} ${var_03} ${var_04} ${var_05}"/>
    </condition>
</extension>
<extension name="call_has_not_stopped_before_here">
    <condition field="destination_number" expression=".*">
        <action application="log" data="ERR NOT STOPPED BEFORE HERE"/>
    </condition>
</extension>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值