CheckGroup( ) 检查特定组中的信道数。 CheckGroup(max[@category]) 备注: 检查看是否在当前的信道集合中的信道的总数超过了最大值(max参数指定最大值)。 如果数字不超过最大,应用程序继续到达下一个优先权。 如果在该组的信道数比最大值高,而且优先权 n+101 存在 (现在的优先权是n),执行n+101优先权。 否则,应用终止同时返回-1 。 当可选参数category被传递时,该应用检查category组中的信道数。 关于组类的更多信息请参阅 SetGroup() 。 示例: exten => 123,1,SetGroup(support) exten => 123,2,CheckGroup(5) ;如果在所给的组中呼叫数小于5时 exten => 123,3,Dial(${SUPPORT}) ; 如果在所给的组中呼叫数大于5时 exten => 123,103,Playback(im-sorry) 请参阅: SetGroup() ,GetGroupCount(),GetGroupMatchCount() Congestion( ) 显示信道拥塞。 Congestion([timeout]) 备注: 当用户请求一个出现拥塞的信道时,等待用户挂机或者在可选参数timeout规定期满后自动终止请求。 该应用只显示拥塞信号,它并没有给用户播放拥塞提示音。可以通过Playtones(congestion)给呼叫方播放拥塞提示音。 返回值: 始终为-1 示例: ;如果呼叫方ID是 555-1234, 就会拥塞 exten => 123,1,GotoIf($[${CALLERIDNUM} = 5551234]?5:2) exten => 123,2,Playtones(congestion) exten => 123,3,Congestion( ) exten => 123,4,Hangup( ) exten => 123,5,Dial(Zap/1) 请参阅: Busy( ), Progress( ), Playtones( ) ControlPlayback( ) 播放录音文件,具有快进或者重复播放该文件的功能。 ControlPlayback(filename[,skipms[,ffchar[,rewchar[,stopchar[,pausechr]]]]]) 备注: 播放filename参数指定的录音文件(不需要文件扩展),同时允许用户通过按ffchar和rewchar来快进快退文件。默认情况下,用户可以按 * 和 # 键重播或者快进录音文件。如果指定了stopchar参数,当用户按下stopchar时应用将停止重播。如果文件不存在,应用将跳转到优先权 n+101上,假设当前的优先权号是n。 skipms 选项指出了每按一次ffchar 或 rewchar时文件前进或后退的长度。 pausechr 选项也可能被指定,pausechr用来暂停播放录音文件,再按一次pausechr 将会继续播放该文件。 返回值: -1:如果信道在播放录音文件的时候被挂断。 示例: ; 允许呼叫方控制播放录音文件 exten => 123,1,ControlPlayback(tt-monkeys|3000|#|*|5|0) 请参阅: Playback( ),Background( ) Curl( ) 加载外部URL地址并将结果赋给一个变量。 Curl(URL[,postdata]) 备注: 加载URL参数指定的地址并将该值赋给变量CURL。Postdata参数可选,如果指定了该参数,Postdata将作为HTTP邮票传递给该URL。Curl( )通常用于给外部拨打应用发信号。 返回值: 0:正常返回值 -1:发生致命错误时 示例: ;给一个URL传递呼叫方ID和独一无二的呼叫ID exten => 123,1,Curl(http://localhost/test. php,CallerID=${CALLERID}&UniqueCallID={$UNIQUEID}) ;使用NoOp( )在Asterisk控制台显示结果 exten => 123,2,NoOp(${CURL}) Cut( ) 取一个变量中的部份分配给另一个变量。 Cut(newvar=varname,delimiter,fieldspec) 备注: 将一个已有的名为varname的变量分割成几部分, 同时分配一个或更多块到newvar参数指定的变量。 delimiter参数是分割varname的字符。 默认是字符-。 fieldspec 参数指出想要分配到newvar 的字段数字,范围从1开始计数。 fieldspec 通过使用符号-来指定一个字段范围,使用符号&来指定一组字段。如果超过一个字段被选择,Cut( )在字段之间保留分界符delimiter。 返回值: 0:正常返回值 -1:挂机或错误 示例: exten => 123,1,Set(TEST=123-456-7890) exten => 123,2,Cut(FIRST=TEST,-,2) ; 给出456 exten => 123,3,Cut(SECOND=TEST,,1-2) ; 给出123-456 exten => 123,4,Cut(THIRD=TEST,-,1&3) ; 给出 123-7890 |
DateTime( )
以一个通用的格式来表示指定的时间。
DateTime([unixtime][,timezone[,format]])
备注:
在timezone指定的时区中,依照在format处指定的格式来表示时间 unixtime。
unixtime 参数表示时间,以秒为单位,从 1970 年1月1日开始。1970 之前的日期被认为是错误的。unixtime 默认值是当前时间。
timezone 参数指定了时区。 See /usr/share/zoneinfo/ 可以看到一个有效时区列表。 timezone 的默认值是Asterisk server中的当前时区。
format参数指定了日期和时间的哪一个部份应该被读出。 格式选项可参考voicemail.conf 文件。 格式默认值是 "ABdY 'digits/at' IMp".
返回值:
0:正常返回值
-1:挂机时返回
示例:
;当前日期和时间
exten => 123,1,DateTime( )
;当前日期
exten => 124,1,DateTime(,,BdY)
;一个特定的日期
exten => 125,1,DateTime(871624800,,BdY)
DBdel( )
删除Asterisk数据库中的关键字。
DBdel(family/key)
备注:
删除AstDB 中被family参数指定的关键成员中的关键字,该关键字由key参数指出。
返回值:
始终为0。
示例:
exten => 123,1,DBput(test/name=John) ; 向AstDB添加名字
exten => 123,2,DBget(NAME=test/name) ; 从AstDB获取名字
exten => 123,3,DBdel(test/name) ; 删除AstDB中的名字
请参阅:
DBdeltree(),DBput(),DBget()
DBdeltree( )
删除Asterisk数据库中的成员或键树。
DBdeltree(family[/keytree])
备注:
删除指定的AstDB成员或键树。
返回值:
始终为0。
示例:
;在AstDB中创建几个输入项
exten => 123,1,DBput(test/blue)
exten => 123,2,DBput(test/green)
;删除名为test的成员
exten => 123,3,DBdeltree(test)
请参阅:
DBdel( ), DBput( ), DBget( )
DBget( )
获取Asterisk数据库中的指定关键字。
DBget(varname=family/key)
备注:
获取AstDB中的键值并存储该值到指定的变量名。如果请求键不存在,自动跳到n+101优先级(假设n为当前优先级)。
返回值:
始终为0。
示例:
;设置AstDB输入项;
exten => 123,1,DBput(test/color=blue)
;获取该关键字并将该值赋给一个变量
exten => 123,2,DBget(COLOR=test/color)
请参阅:
DBdel( ), DBdeltree( ), DBput( )
DBput( )
将值存储到AstDB中。
DBput(family/key=value)
备注:
给AstDB中相应的成员或者关键字存储给定值。
返回值:
始终为0。
示例:
;设置AstDB输入项
exten => 123,1,DBput(test/color=blue)
请参阅:
DBdel( ), DBdeltree( ), DBget( )
DeadAGI( )
在一个已经挂断的通道上执行Asterisk网关接口适配脚本。
DeadAGI(program,args)
备注:
AGI:Asterisk Gateway Interface-compliant(Asterisk网关接口)。
在一个已经挂断的通道上执行Asterisk网关接口适配脚本。Asterisk网关接口允许任何语言写的外部程序控制一个通话信道,播放音频,读取DTMF数字,与标准输入输出文件中的AGI协议通信等。程序输入参数由Args指定。
本方法是专门针对已经挂断的通道编写的,因为正常的Asterisk网关接口不能在已经关闭的通道上正常工作时。
在命令行界面使用show agi命令列出所有可用的AGI命令。
返回值:
-1:如果请求一个已经挂断的通道
0:存在一个没有挂断的通道
示例:
exten => h,1,DeadAGI(agi-test)
请参阅:
AGI( ), FastAGI( )
Dial( )
试图建立通道连接。
Dial(tech/username:password@hostname/extension,ring-timeout,flags)
备注:
允许实现各种信道的连接,Dial()是Asterisk中最重要的应用。可能需要花费一段时间来阅读本节。
Asterisk可以随意的连接IAX,SIP,H.323, Skinny, PRI, FX(O/S)以及任何别的信道让人惊奇。但是最让人惊奇的还是本地信道,Asterisk仅仅通过一个Dial()命令就可以连接很多本地信道,一个Dial()事件可以引起成百上千的完全独立的通话。Dial()的能力非常强大。
Dial()可以接收任何类型的信令,包括SIP, IAX2, H.323, MGCP, Local, 或Zap,但是传送到各种信令的参数则取决于该信令的需求。例如,SIP协议需要网络地址和用户名来连接通话,而Zap协议需要电话号码来连接通话。
当指定了协议类型,用户可以通过Dial()参数来传递信宿地址(名字或IP地址),用户名,密码以及远端扩展名,用户也可以将涉及到的所有信道写入appropriate .conf 文件中。所有需要的信息都可以从appropriate .conf 文件中获得。用户名和密码可以用信道配置文件中方括号([])中的名字来替代,主机名可选。
下面是正确表达式:
exten => s,1,Dial(SIP/sake:[email protected])
下面表达式同样正确:
exten => s,1,Dial(SIP/some_SIP_friend)
但是,只有在sip.conf文件中定义了[some_SIP_friend]信道该表达式才能工作,该信道定义包含:fromuser=sake, password=arigato, 以及 host=thathostoverthere.tld。
通常扩展名附加在地址信息后面,示例如下:
exten => s,1,Dial(IAX2/user:[email protected]/500)
该表达式请求与扩展名为500的远端地址建立呼叫连接。扩展名在Dial()中不是必须的,因为可能存储远端信道信息的配置文件不是最新,或者,远程服务器直接将呼叫传递给s扩展名。最终,用户只需要一个特殊的处理就可实现与另一端的控制。
如果没有设定响铃最大时长,该通道将不断的响铃。这并不总是坏事,因此不要认为不断的响铃代表很长的时间而设置该值。ring-timeout可以在地址信息后面指定(以秒为单位),示例如下:
exten => s,1,Dial(IAX2/user:[email protected]/500,ring-timeout)
标志位:
很多Dial()功能都是通过标志位来实现的。下面是指定下一跳地址以及超时信息的示例:
exten => s,1,Dial(IAX2/user:[email protected]/500,60,flags)
特别注意:
必须先做超时限定才能指派标志位。可以通过添加一个逗号来写出超时限制,参考如下:
exten => s,1,Dial(IAX2/user:[email protected]/500,,flags
Dail()应用中的有效标志位:
d
当用户等待一个呼叫应答的时候允许他拨打一位数的扩展名,此时退出呼叫而转移到该位数的扩展名(不管当前文本或者${EXITCONTEXT}指定的文本中是否存在该扩展名)。
t
允许被叫方拨#键来转移一个呼叫。请注意,如果使用该选项后,再邀请将失去效力,因为Asterisk始终监视当前通话直到被叫方按#键。
T
允许呼叫方拨#键来转移一个已经建立的通话。同样注意,再邀请将失去效力,因为Asterisk始终监视当前通话直到呼叫方按#键。
w
允许被叫方开始(停止)录音,自动监控序列在features.conf文件中配置。如果设定TOUCH_MONITOR,该值将作为参数传送给Monitor( )程序开始录音;如果没有设定TOUCH_MONITOR,传送默认值WAV||m给Monitor( )程序。
W
允许呼叫方开始(停止)录音,自动监控序列在features.conf文件中配置。
f
强制呼叫方ID作为发起方或者重定向一个外部呼叫的扩展名。这样做是因为有些PSTN提供者除了他们提供给用户的ID以外不允许随意设置呼叫方ID。例如,你有优先权,你就可以使用f标记来随意设置本地SIP电话而不管任何呼叫ID。
o
使用本机呼叫记录来发起呼叫。这在用户接受一个呼叫然后将它转移到另一个地址的时候很有用,而且,该用户希望从本地呼叫记录中直接拨号而不是重新输入呼叫ID。在Asterisk1.2版本以上默允这种行为。
r
给呼叫方返回响铃信号直到呼叫被应答,并没有传递任何音频。这个标志位通常是不需要的,因为如果一个通道被呼叫Asterisk将发送响铃信号。
m[ class]
呼叫被应答之前给呼叫方提供音乐。同时可以通过可选参数class指出音乐类型。
M( x[ ^arg])
在一个呼叫连接上执行x宏,任意地传递被 ^ 限定的参数。该宏也可设定MACRO_RESULT通道,变量如下:
ABORT
挂断所有呼叫。
CONGESTION
显示队列遭遇拥塞。
BUSY
显示队列忙(转到n+101,n为当前优先级)。
CONTINUE
挂断被叫方,然后继续执行拨叫计划。
GOTO:<context>^<extension>^<priority>
呼叫转移到指定地址。
h
允许被叫方通过按*键来挂断通话。
H
允许呼叫方通过按*键来挂断通话。
C
重新设置呼叫详细记录。CDR(呼叫详细记录)从Answer( )呼叫开始记录,重置CDR后,在Dail()应用被调用之前的最后用户将不计费。
P[( x)]
设定秘密模式,可选的x参数为本地AstDB中的成员或者主键。该模式对拨叫黑名单(明确列出的拒绝呼叫的号码)或良好名单(明确列出的接受呼叫的号码)非常有用。参见:LookupBlacklist( )。
g
如果被叫通道挂断则继续下一步骤。
G( context^ extension^ priority)
如果呼叫被答应,转移所有对话参与者到指定的信宿地址。
A( x)
给被叫方播放一个公告;x是作为公告的声音文件的名字。
D([ called][: calling])
呼叫被答应但是连接还没有建立的时候发送DTMF位,called参数传送给被叫方,calling参数传送给呼叫方。每个参数被单独使用。
L( x[: y][: z])
限制呼叫在x毫秒内,当y毫秒的时候提出警告,然后每隔z秒警告一次直到限制时间到达。x参数是必须的,y和z参数是可选的。下列的特殊变量也可以用来提供附加控制:
LIMIT_PLAYAUDIO_CALLER=yes|no
指出是否给呼叫方播放声音
LIMIT_PLAYAUDIO_CALLEE=yes|no
指出是否给被叫者播放声音
LIMIT_TIMEOUT_FILE= filename
指出时间到的时候播放的文件
LIMIT_CONNECT_FILE= filename
指出呼叫开始的时候播放的文件
LIMIT_WARNING_FILE= filename
当参数y被定义时,指出播放的警告文件
n
当所有的通道被认为忙的时候,跳跃到n+101优先级(n位当前优先级)。
变量:
当呼叫转移的时候呼叫有可能被停泊(用标志位t或T实现)。拨叫700扩展可以正常停泊呼叫,这些扩展在features.conf文件中配置。
Dial()应用设定了如下变量:
DIALEDTIME
从开始执行Dial()到结束的时间总和。
ANSWEREDTIME
呼叫时间总和。
DIALSTATUS
呼叫状态,参数状态值如下:
CHANUNAVAIL
通道不可用。
CONGESTION
通道返回拥塞信号,通常表示无法建立连接。
NOANSWER
在响铃时限期间内通道没有返回响应。
BUSY
被叫通道当前正忙。
ANSWER
通道响应该呼叫。
CANCEL
呼叫被取消。
示例:
;在Zap通道4上拨一个七位数
exten => 123,1,Dial(Zap/4/2317154)
;拨相同的号码,但是这次只允许响铃10秒
;继续前面的拨号计划
exten => 124,1,Dial(Zap/4/2317154,10)
exten => 124,2,Playback(im-sorry)
exten => 124,3,Hangup( )
;拨相同的号码,但是这次没有时限,同时使用t、T、m标记
exten => 125,1,Dial(Zap/4/2317154,,tTm)
;拨打位于远端主机上的扩展名500(穿越IAX协议),
;使用给定的用户名和密码
exten => 126,1,Dial(IAX/username:password@remotehost/500)
;拨叫任意号码,但是限制呼叫在5分钟(300,000毫秒)之内
;在呼叫过程中,当4分钟(240,000毫秒)的时候警告呼叫者
;同时,每隔30秒(30,000毫秒)重复一次该警告
exten => 127,1,Dial(Zap/4/2317154,,L[300000:240000:30000])
DigitTimeout( )
设置数字拨号间隔时长。
DigitTimeout(seconds)
备注:
设置用户拨号时数字按键最长间隔时间。当呼叫者输入一个数字后间隔时间超过seconds指定的数值,系统认为完成输入并执行相关程序。
注意:具有代表性的是,当间隔期满的时候,如果输入一个合法的扩展名,系统将不再测试是否超时,该扩展名被系统认为非法(然后系统执行扩展名为i 语句,如果不存在扩展名为i 的语句则终止呼叫)。
返回值:
始终为0。
示例:
exten => 123,1,DigitTimeout(3)
exten => 123,2,Background(enter-ext-of-person)
exten => i,1,Playaback(im-sorry)
exten => i,2,Goto(123,1)
请参阅:
AbsoluteTimeout( )
Directory( )
提供一个可以拨叫的扩展路径。
Directory(vm-context[,dial-context[,options]])
备注:
给用户提供一个可以通过名字来查找的扩展路径。这些名字和扩展存储在voicemail.conf。vm-context参数是必须的,它指定了使用的voicemail.conf中的相关项。
dial-context参数是用户输入的相关项,默认情况下与vm-context相同。
Options参数只有唯一的选项f,当参数为f的时候,路径按照首字母匹配,而不是末尾字母。
如果用户输入0(零),而当前配置文件中存在扩展名为o(小写字母o)的选项,程序将执行该扩展;输入*将直接退出,同时执行扩展名为a的操作,类似于Voicemail( )的操作。
返回值:
如果用户不挂机,返回值始终为0。
示例:
exten => *,1,Directory(default,incoming)
exten => #,1,Directory(default,incoming,f)
请参阅:
voicemail.conf