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 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 在播放音频和静默时间内,用户可以按键打断,按键将停止播放音频,超时时间计时从用户第一个按键开始计时,每次按键重新计时,当用户按键复合最大按键数量或超时时间结束,命令结束 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |