1.执行AGI脚本文件时,Application应用就是“agi”,参数就是脚本文件的文件名。
2.脚本文件需要满足的条件:(1)必须可执行,chmod 775 (2)必须放置在指定的目录,如标准目录:/var/lib/agi-bin (3)必须指定完整的extension信息。
Exten=>1,2,AGI(test.PHP,${CALLERID(name)})
3.脚本执行时可以从控制台上得到不同基本的详细信息;通过agi VERBOSE命令,可以将信息发送到asterisk控制台上,并且可以通过verbosity设置可以关闭开启这个功能。
4.AGI技术实现的基本原理
(1)传递参数到AGI脚本
l 在脚本名称后紧跟以英文半角状态下的逗号,分隔的字符串,把需要的参数传入脚本:AGI(dial_agi.PHP,${CALLERID(name)});
l AGI脚本主要传输两种参数,1是脚本的完整路径,2是拨号方案中的‘EXTEN’的传递参数
l 第一种参数,如果AGI程序放在asterisk的默认路径,可以省略,只写文件名。第二种参数,是AGI程序需要拨号方案传递进来的参数。
(2)通过标准的输出发送命令到asterisk
l 可以在AGI脚本程序中向asterisk发送各种命令从而调用asterisk的某些应用程序,如Dial,Goto.也可以直接发送命令获得或设置某些通道变量的值
l 通过标准的输入,从asterisk接收信息。当AGI脚本执行时,asterisk会向脚本发送各种信息,可以在做其他事情之前通过标准输入获取这种信息。
根据项目需要,人用过需要这些数据,就先保存起来,否则不用处理
5.AGI与Asterisk通信通过STDIN,STDOUT,STDERR.AGI脚本可以通过STDIN从asterisk获得信息,AGI脚本通过STDOUT向asterisk发送信息。AGI脚本可以写数据向STDERR,发送调试信息向asterisk控制台
6. AGI命令
(1)ANSWER
目的:如果通道不再应答状态,则应答该通道 Returns -1 on channel failure,or 0 ifsuccessful.
(2)AUTOHANGUP <time>
在指定时间自动通道挂机,如果时间为0,则该命令在此通道上无效 Returns 0
如果挂机发生在设定事件之前,此设置无效
(3)CHANNEL STATUS [<channelname>]
返回指定通道的状态,如果通道没有指定,返回当前通道状态
Returns
-1 There is no channel that matches thegiven <channelname> 没有匹配的通道
0 Channel is down and available 通道没有上线(激活)但有效
1 Channel is down,but reserved 通道没有上线(激活)但有预留
2 Channel is off hook 通道在挂机状态
3 Digits (or equivalent) have beendialed 通道准备拨号
4 Line is ringing 通道正在振铃
5 Remote end is ringing 通道远端正在振铃
6 Line is up 线路激活可用
7 Line is busy 线路忙
Examples
CHANNEL STATUS Return the status of the currentchannel.
CHANNEL STATUS Zap/9-1 Return the status of channel Zap/9-1
NoteThe <channelname> to use is the same as the channel names reportedby the Asterisk console 'show channels' command. 通道名称与asterisk控制台上 showchannels命令显示的通道名字一致
(4)EXEC <application> <options> 带参数执行指定的Asterisk 应用
(5)GET DATA <filename> [<timeout> [<maxdigits>]]
播放指定的语音文件,同时获取DTMF按键信号,与STREAMFILE类似,但此命令能够接收到多个DTMF按键,而STREAMFILE在接收到第一个DTMF按键时立刻返回。
$playbackvoice存放着语音文件
注意:
l 如果用户没有按键,声音播放完毕后,静默<超时时间>,然后命令结束
l 在播放音频和静默时间内,用户可以按键打断,按键将停止播放音频,超时时间计时从用户第一个按键开始计时,每次按键重新计时,当用户按键复合最大按键数量或超时时间结束,命令结束
l 如果没有定义超时时间,缺省的时间为按键后20秒,如果没有按键,静默6秒后命令结束
l 如果想定义最大按键,最好定义超时时间
l 如果没有定义最大按键,用户可以按任意多的按键
l 按#号箭的效果相当于超时时间结束,命令终止并返回#号建前面的按键,不能获取到#号建本身
(6)GET VARIABLE <variablename> 取得变量值
(7)HANGUP [<channelname>] 断开指定的通道,若没有指定的通道,则断开当前的通道
HANGUP Hangup the current channel.
HANGUP Zap/9-1Hangup channel Zap/9-1
(8)RECEIVE CHAR <timeout>从链接的通道上获取文本的字符,在超时时间内获取到达的字符,如果超时时间为0,则持续接收。
如果一个字符串到达,以10进制数字的方式返回字符的ASCII码,例如A的返回值为:65
如果通道不支持文本接收,或者在超时时间内没有字符被接收,结果如下
result=0 (timeout)On error or failure the result is
result=-1
大多数通道不支持接收文本
(9) RECORD FILE <filename> <format><escape digits> <timeout> [BEEP]
录制通道内的声音,生成文件,直到接收到DTMF确认结束按键,或者超时时间结束。在录制声音时,可以选择在录制前提示'BEEP滴'。
(10)SAY DIGITS <digit string> <escape digits>
播音给定的数字字符,当取消按键确认收到则命令结束,如果不需要取消按键,采用""带入函数
(11)SAY NUMBER <number> <escape digits>播音指定的数值。
(12)SEND IMAGE <image>
the image in /var/lib/asterisk/images
(13)SEND TEXT "<text to send>"
(14)SET CALLERID <caller ID specification>设置当前通道的主叫号码
(15)SET CONTEXT <new context>设置应用结束后的context从而继续流程
(16)SET EXTENSION <new extension>置应用结束后的extension从而继续流程
(18)SET VARIABLE <variablename> <value>
设置变量的初始值,变量将被创建,并在后面的拨号方案中以${变量名字}形式使用
(19)STREAM FILE <filename> <escape digits>
播放指定的语音文件,允许按键终止播放,这命令与GET DATA类似,但只返回用户的第一个按键,GET DATA可以积累返回用户的很多按键
(20)TDD MODE <setting>在当前通道上启用关闭 TDD(分时双功模式)收发模式
(21)VERBOSE <message> [<level>]通过Verbose向Asterisk控制台发送信息
(22)WAIT FOR DIGIT <timeout> 等待号码输入时间
Waits up to 'timeout' milliseconds forchannel to receive a DTMF digit
-1 on channel failure,0 if no digit isreceived in timeout or the numerical value of the ascii of the digit received.