agi脚本说明中文

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

Note The <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  在播放音频和静默时间内,用户可以按键打断,按键将停止播放音频,超时时间计时从用户第一个按键开始计时,每次按键重新计时,当用户按键复合最大按键数量或超时时间结束,命令结束

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. 

猜你喜欢

转载自jyqc688.iteye.com/blog/1730391
今日推荐