微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。应用:STL标准库迭代器实现、Java集合类型迭代器等模式结构:心得:迭代器模式的目的是在不获知集合对象内部细节的同时能对集合元素进行遍历操作
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它的客户而变化。应用:排序的比较方法、封装针对类的不同的算法、消除条件判断、寄存器分配算法等。模式结构:心得:对对象(Context)的处理操作可
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下定义作用于这些元素的新操作。应用:作用于编译器语法树的语义分析算法。模式结构:心得:访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方
命令模式(Command)命令模式(Command)[Action/Transaction]意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。对请求排队或记录请求日志,以及支持可撤消的操作。应用:用户操作日志、撤销恢复操作。模式结构:心得:命令对象的抽象接口(Command)提供的两个
生成器模式(Builder)生成器模式(Builder)意图:将一个对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 应用:编译器词法分析器指导生成抽象语法树、构造迷宫等。模式结构:心得:和工厂模式不同的是,Builder模式需要详细的指导产品的生产。指导者(Director)使用C
设计模式学习心得《设计模式:可复用面向对象软件的基础》一书以更贴近读者思维的角度描述了GOF的23个设计模式。按照书中介绍的每个设计模式的内容,结合网上搜集的资料,我将对设计模式的学习心得总结出来。网络上关于设计模式的资料和文章汗牛充栋,有些文章对设计模式介绍生动形象。但是我相信“一千个读者,一千个
工厂方法模式(Factory Method)工厂方法模式(Factory Method)[Virtual Constructor]意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实力化延迟到子类。应用:多文档应用管理不同类型的文档。模式结构:心得:面对同一继承体系(Produc
单例模式(Singleton)单例模式(Singleton)意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。应用:Session或者控件的唯一示例等。模式结构:心得:单例模式应该是设计模式中最简单的结构了,它的目的很简单,就是保证自身的实例只有一份。实现这种目的的方式有很多,在Java中
装饰者模式(Decorator)装饰者模式(Decorator)[Wrapper]意图:动态的给一个对象添加一些额外的职责,就增加功能来说,比生成子类更为灵活。应用:给GUI组件添加功能等。模式结构:心得:装饰器(Decorator)和被装饰的对象(ConcreteComponent)拥有统一的接口