asterisk——分支条件

GotoIf()

        带条件判断的Goto,通过计算表达式的值,并根据结果的真假将呼叫这发送到一个特定的目的地。GotoIf()使用特殊的语法,通常被称为条件语法:

GotoIf(expression?destion1:destion2)

目的地可以是下列情况之一:

  • 同一分机中的优先级标签,例如weasels。
  • 同一上下文中的分机和优先级标签组合,例如123、weasels。
  • 上下文、分机和优先级标签的组合,例如incoming、123、weasels。
exten => 209,1,NoOp(Test of conditional braching to labels)
     same => n,GotoIf($[ ${RAND(0,1)} = 1 ]?weasels:iguanas)

     same => n(weasels),Playback(weasels-eaten-phonesys)
     same => n,Hangup()

     same => n(iguanas),Playback(office-iguanas)
     same => n,Hangup()

NoOp() 不进行操作,可将数值打印到控制台进行调试

GotoIfTime()

        带时间条件判断的Goto,着眼于当前的系统时间,并决定是否需要在dialplan中执行不同的跳转。这个应用最明显的用途是在上班时段及下班时段给呼叫提供不同的问候语。语法如下:

GotoIfTime(times,days_of_week,days_of_month,months?label)

times:采用24小时制。例如,09:00-17:00。

days_of_week:一周以内一天或多天,日期被指定为mon、tue、wed、thu、fri、sat或sun。例如,sun-mon&wed&fri-sat。

days_of_month:一月内的天数,日期用数字1到31表示。

months:一个或者多个月列表。月份被记为jan-apr。例如,jan&mar、jan-apr&jun&oct-dec。

label可以是下列情况之一:

  • 同一分机中的优先级标签,例如time_has_passed。
  • 同一上下文中的分机和优先级标签组合,例如123、time_has_passed。
  • 上下文、分机和优先级标签的组合,例如incoming、123、time_has_passed。
[close]
exten => start,1,Noop(after hours handler)
       same => n,Playback(go-away2)
       same => n,Hangup()

[TestMenu]
exten => start,1,Noop(main autoattendant)
       same => n,GotoIfTime(16:59-08:00,mon-fri,*,*?close,start,1)
       same => n,Background(enter-ext-of-person)
       same => n,Hangup()

Gosub

        跳到一个子程序并且返回。dialplan程序允许你将呼叫发送到dialplan的单独部分,进行一些有用的操作,然后将呼叫返回到dialplan的源头。你可以将参数传给GoSub(),也可以从GoSub()接收返回码。这大大增强了dialplan的能力。

[from-internal]
exten => s,1,Noop()
   same => n,GoSub(from-internal-1,s,1(此处为传递给from-internal-1context的参数))
 
[from-internal-1]
exten => s,1,Noop()
   same => n,Return()
 

GosubIf

有条件的跳到一个子程序并且返回。

文章内容参考和来源于:《Asterisk权威指南(第5版)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值