asterisk——dialplan函数

Goto()

用于将呼叫转到dialplan的另一个地方。Goto()需要将目的上下文分机优先级作为参数传递给它,如下所示:

same => n.Goto(context,extension,priority)

示例:

[sets]
exten => 201,1,Goto(TestMenu,start,1)

[TestMenu]
exten => start,1,Answer()

Background()

        是交互式Asterisk dialplan中比较有用的应用之一。与Playback()一样,Background()也是用来播放事先录制好的声音文件。但与Playback()不同的是,当呼叫者按下电话上的一个按键(或多个按键)时,Background()将中断声音播放,并将呼叫转到按键数字所对应的分机。例如,如果呼叫者按5,则Asterisk将停止播放声音提示,并将呼叫控制转到分机5的第一优先级(假设存在分机5)。
        Background()最常见的用途是创建语音菜单(一般称为自动应答机、IVR或电话树)。很多公司使用语音菜单将呼叫者引导到相应的分机上,从而使他们的前台不必接听所有的电话。

        Background()作用和Playback()的一样,都是播放音乐,但是,Background在播放音乐的时候会等待用户的输入,如果用户输入后,会停止播放音乐并跳转到与用户输入相对应的那个extension中去。利用这个可以来做一个语音导航。如果用户长时间没有输入任何号码则会被视为超时,默认超时时间是10秒,然后会自动的进入到名称为“t”(timeout)的extension中去,如果用户在输入的号码不存在,那么会自动进入到名称为“i”(invalid)的extension中去。

[TestMenu]
exten => start,1,Answer()
       same => n,Background(enter-ext-of-person)
       same => n,n,WaitExten(5)

exten => i,1,Playback(pbx-invalid)
   same => n,Goto(TestMenu,start,1)

exten => t,1,Playback(please-try-again)
   same => n,Goto(TestMenu,start,1)

WaitExten()

WaitExten()直接跟在Background()后面使用,用于等待调用者输入DTMF数字。
 

[TestMenu]
exten => start,1,Answer()
       same => n,Background(enter-ext-of-person)
       same => n,WaitExten()

如果你想让WaitExten()等待指定的时间(而不是使用默认的超时时间),只需要将数字(单位为秒)作为第一个参数传递给WaitExten(),如下所示:

same => n,WaitExten(5)

Dial()

是用来振铃相应的通道,当用户接通后,并桥接相应的通道。Dial()最多包含四个参数:目的地超时时间选项URL

Dial(Technology/Resource[&Technology2/Resource2[&...]][,timeout[,options[,URL]]])

参数1:目的地

        尝试 呼叫的目的地,(最简单的)目的地由呼叫所采用的技术(或传输方式)和远端端点(或资源)的地址组成,中间用斜线分开。例如:

exten => 101,1,Dial(SIP/6001)

        也可以同时拨打多个信道,将多个目的地用“&”字符连在一起。例如:

exten => 110,1,Dial(SIP/6001&SIP/8888)

        Dial()向多个目的地同时发起振铃,并将呼叫与最先应答的目的信道桥接起来(其他信道会立即停止振铃)。如果Dial()无法联系上任何一个目的地,Asterisk会将呼叫失败的原因写入变量DIALSTATUS,并继续执行分机中的下一个优先级。

参数2:超时时间

         Dial()的第二个参数是超时时间,单位为秒。如果指定了超时时间,Dial()将在这段时间内尝试呼叫目的地,直到超时退出并继续执行分机中的下一个优先级。如果没有指定超时时间,Dial()将持续拨打被叫信道,直到有人接听或呼叫者挂断为止。我们给分机添加10秒钟的超时时间:

exten => 101,1,Dial(SIP/6001,10)

参数3:选项

        可选择的字符串,它包含一个或多个能够影响Dial( )应用行为的字符。如果你将 m 作为 Dial()的第3个参数,在目的信道被呼叫时,呼叫者听到的是等待音乐,而不是嗡嗡嗡的振铃声(当然,前提是正确配置了等待音乐)。

exten => 102,1,Dial(SIP/6001,10,m)

如果把字母 r 作为第 3 个参量,在通知被叫通道有来电的这段时间内,主叫方会听到振铃声音。

  exten=>123,1,dial(SIP/6001,10,r) 

参数3
T表示允许主叫用户按“#”键转接呼叫
t表示允许被叫用户按“#”来转接呼叫
 w用户按“*”开始录音
 r表示为被叫用户产生振铃声

参数4:URI

        Dial()的第四个也是最后一个参数是URI。如果目的信道支持在呼叫时接收URI,就会发送这个参数指定的URI(例如,如果你的IP电话支持接收URI,就会显示在电话的显示屏上;同样,如果你使用的是软件电话,就可能在计算机屏幕上弹出URI)。这个参数用得不多。

空白参数

请注意,第二、第三和第四个参数都可以留空不用,只有第一个参数是必需的。例如,如果你想指定一个选项,但又不想指定超时时间,只需要将超时时间参数留空即可,就像这样:

exten => 4,1,Dial(SIP/6001,,m)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值