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)
T | 表示允许主叫用户按“#”键转接呼叫 |
t | 表示允许被叫用户按“#”来转接呼叫 |
w | 用户按“*”开始录音 |
r | 表示为被叫用户产生振铃声 |
参数4:URI
Dial()的第四个也是最后一个参数是URI。如果目的信道支持在呼叫时接收URI,就会发送这个参数指定的URI(例如,如果你的IP电话支持接收URI,就会显示在电话的显示屏上;同样,如果你使用的是软件电话,就可能在计算机屏幕上弹出URI)。这个参数用得不多。
空白参数
请注意,第二、第三和第四个参数都可以留空不用,只有第一个参数是必需的。例如,如果你想指定一个选项,但又不想指定超时时间,只需要将超时时间参数留空即可,就像这样:
exten => 4,1,Dial(SIP/6001,,m)
文章内容参考和来源于:《Asterisk权威指南(第5版)》