Asterisk Manager Interface主要提供AST系统监控以及管理功能,它可以要求AST做一些事情,例如发起一个新呼叫。
需要的配置:
manager.conf
;
; 打开AMI并本地访问
[general]
enabled = yes
webenabled = yes
bindaddr = 127.0.0.1
;
; 创建用户hello,密码world
;
[hello]
secret=world
上面的配置打开了http访问,这个需要配置http.conf(注意这个不是apache的httpd.conf)但是我安装的ASteriskNow并没有这个http.conf配置文件,也没打开http访问,常见的还是使用tcp访问,默认端口是5038。
如果没发现这个文件http.conf,可以自己加一个:
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
prefix=gui ;这个前缀用于http请求的url前缀
enablestatic=yes
这样的话请求AMI应该是:
http://localhost:8088/gui/rawman?action=login&username=hello&secret=world
然后重新加载:CLI>core reload
如果登陆不成功,还要看manager.conf中deny设置是否禁止了你的ip访问。
协议:
主要有两种协议:
Manager events 只从AST到AMI客户端的单项事件
Manager actions AMI客户端请求AMI会得到返回Action Response。
对于http连接,事件需要通过poll来获取。
下面是开源AMI客户端库。
Adhearsion Ruby http://adhearsion.com/
StarPy Python http://starpy.sourceforge.net/
Asterisk-Java Java http://asterisk-java.org/
介绍几个有用的AMI应用:
Asterisk GUI这个包含在AsteriskNow中 ,参见http://www.asterisk.org/asterisknow/developers/gui-guide
第二十一章 AGI
内置的dialplan写法可能有很多不便之处(如果你熟知一门编程语言的话),使用AGI则可以使用其他编程语言来控制呼叫流程,但是这么做还是离不开native dialplan的参与。
例如
exten => 500,1,AGI(hello-world.sh)
这里就调用了shell脚本的AGI
打开AGI调试:
*CLI> agi set debug on
AGI变种
Process-Based AGI:
最简单的AGI,调用方式AGI(command[,arg1[,arg2[,...]]]) command可以使绝对路径,相对路径,arg1…是AGI需要传入的参数。
执行AGI时,与AST交互的方式是通过stdin 和 stdout来进行的。
有点:简单
缺点:太简单,高并发时建议使用FastAGI
EAGI (Enhanced AGI)
相对于AGI,除了stdin和stdout外还可以获得单向只读语音流(app_jack提供获得AST之外音频流的功能)。
*CLI> core show application EAGI
优点:简单
缺点:性能消耗比Process-Based AGI高
DeadAGI
这个已被废弃,不要使用。
FastAGI—AGI over TCP
使用tcp连接,不再是每个call一个进程,提高效率。
exten => 1234,1,AGI(agi://192.168.1.199:4573,arg1,arg2,arg3)
FASTAGI支持srvrecord
exten => 1234,1,AGI(hagi://shifteight.org)
优点:效率较好
缺点:实现FASTAGI Server比较复杂
Async AGI—AMI-Controlled AGI
异步AGI,可以使AMI调用AGI。
exten => 1234,1,AGI(async:agi)
这种方式的流程是,当执行上面一句时,会等待,然后,在AMI客户端中向·这个通道发命令,以这样的方式来执行。
对于要执行AGI的影虎需要在manager.conf中指明权限
[hello]
secret = world
read = agi ;有读权限
write = agi ;有写权限
优点:AMI可使用AGI
缺点:最复杂的一种用法
会话过程
调用AGI或EAGI后,会话建立,自定义参数(如agi_arg_0)和固有参数(如agi_request)会传入:
对于Async AGI,开始时AMI会发送事件Manage Events,例如:
Event: AsyncAGI
Privilege: agi,all
SubEvent: Start
Channel: SIP/0000FFFF0001-00000000
Env: agi_request%3A%20async%0Aagi_channel%3A%20SIP%2F0000FFFF0001-00000000%0A \
agi_language%3A%20en%0Aagi_type%3A%20SIP%0Aagi_uniqueid%3A%201285219743.0%0A \
agi_version%3A%201.8.0-beta5%0Aagi_callerid%3A%2012565551111%0A \
agi_calleridname%3A%20Julie%20Bryant%0Aagi_callingpres%3A%200%0A \
agi_callingani2%3A%200%0Aagi_callington%3A%200%0Aagi_callingtns%3A%200%0A \
agi_dnid%3A%20111%0Aagi_rdnis%3A%20unknown%0Aagi_context%3A%20LocalSets%0A \
agi_extension%3A%20111%0Aagi_priority%3A%201%0Aagi_enhanced%3A%200.0%0A \
agi_accountcode%3A%20%0Aagi_threadid%3A%20-1339524208%0A%0A
一旦会话开始,AGI就可以发送命令和获得回应,命令的执行是序列化的,一个执行完毕才会执行下一个。
AGI会话的终止
各种AGI的行为不一样:
Process-based AGI/FastAGI:
会话挂断会通知AGI程序来做后续处理。(1.4之前是直接中断,不会通知)
Process-based AGI 会发SIGHUP 信号
FASTAGI会发HANGUP信号。
可以通过这样来禁止发送SIGHUP /HANGUP信号:
;
; Don’t send SIGHUP to an AGI process
; or the "HANGUP" string to a FastAGI server.
;
exten => 500,1,Set(AGISIGHUP=no)
same => n,AGI(my-agi-application)
如果禁用,则相当于DeadAGI模式,会话其实结束了,但仍可以执行。不过只能执行不需要交互的命令,具体看每个命令的文档说明。
对于Async AGI,如果会话中断,会发中断提示,如果想要主动中断会话,AMI客户端需要发送ASYNCAGI BREAK命令。
AGI各种开发语言库:
Adhearsion Ruby http://adhearsion.com/
StarPy Python http://starpy.sourceforge.net/
Asterisk-Java Java http://asterisk-java.org/
Asterisk-perl Perl http://asterisk.gnuinter.net/
PHPAGI PHP http://phpagi.sourceforge.net/
第二十五章 web 接口
这一章介绍了有名的相关项目:
坐席管理
http://www.asternic.org/ Flash Operator Panel 免费
http://www.fop2.com/ Flash Operator Panel2 15个以上收费
http://www.cdr-stats.org/ Call Detail Records 分析统计工具
http://www.asterisk2billing.org/ 计费系统 A2Billi ng
第十八章 外部服务
使用XMPP
需要res_jabber模块,默认是没有安装的,如果要支持gtalk的话,需要chan_gtalk,chan_jingle(这两个依赖res_jabber)
centos上需要iksemel:
yum install iksemel-devel openssl-devel
现在假设res_jabber安装好了,需要配置 jabber.conf
[general]
debug=no
autoprune=no
autoregister=yes
auth_policy=accept
[asterisk]
type=client
serverhost=talk.google.com ;这里连到了gtalk
username=asterisk@shifteight.org ;xmpp用户名
secret=<super_secret_password> ;xmpp密码
port=5222
usetls=yes
usesasl=yes
status=available
statusmessage="Ohai from Asterisk"
dialplan:
exten => 106,1,Verbose(2,Example using the Local channel) ;一开始就呼叫dialplan
same => n,Dial(Local/jabber@${CONTEXT}/n&Local/dial@${CONTEXT}/n)
exten => jabber,1,Verbose(2,Send an XMPP message and expect a response) ;接到呼叫发送xmpp消息
; *** This line should not have any line breaks
same => n,JabberSend(asterisk,leif.madsen@gmail.com,Incoming call from
${CALLERID(all)}. Press 2 to send to voicemail.) ;消息不能换行
same => n,Set(JabberResponse=${JABBER_RECEIVE(asterisk,leif@shifteight.org,6)})
same => n,GotoIf($["${JabberResponse}" = "2"]?voicemail,1)
same => n,Hangup()
exten => dial,1,Verbose(2,Calling our desk)
same => n,Dial(SIP/0000FFFF0002,15)
same => n,Goto(voicemail,1)
exten => voicemail,1,Verbose(2,VoiceMail)
same => n,Answer()
; *** This line should not have any line breaks
same => n,Set(VoiceMailStatus=${IF($[${ISNULL(${DIALSTATUS})}
| "${DIALSTATUS}" = "BUSY"]?b:u)})
same => n,Playback(silence/1)
same => n,VoiceMail(100@lmentinc,${VoiceMailStatus})
same => n,Hangup()
这个例子是通过发送xmpp消息来让xmpp用户来选择。
与skype整合
可以通过skype发、接消息,呼叫好友
LDAP整合
TextToSpeech
Festival 和 Cepstral 引擎
相关推荐
Asterisk AMI(Asterisk Manager Interface)接口是Asterisk PBX系统提供的一种用于远程管理和监控的强大工具。这个接口允许开发者通过编程方式与Asterisk进行交互,执行诸如控制呼叫、获取状态、监听通话等多种操作...
asterisk 的AMI代理服务程序。和asterisk之间保持一个tcp连接,可以和多个ami client的保持连接,asterisk ami event向多个client同时发送。
ASTERISK AMI来电弹屏小工具!
Asterisk是一个开源的IP电话系统,而Asterisk Manager Interface (AMI) 是它提供的一种API,用于远程管理和控制Asterisk服务器。Asterisk Java是针对Asterisk AMI的Java库,允许开发者通过Java代码与Asterisk服务器...
【标题】:“asterisk AMI programs” 在IT领域,Asterisk是一个开源的IP电话系统,它提供了丰富的功能,如PBX(Private Branch Exchange),VoIP网关,以及呼叫中心解决方案。Asterisk Management Interface(AMI...
Asterisk AMI接口在线手册可以帮助大家快速的认识AMI接口,编程AMI接口编程
适用于NodeJS的Asterisk AMI连接器(ES2015) 该库是库的一部分。 安装 $ npm i asterisk-ami-connector NodeJS版本 支持>=4.0.0 用法 具有承诺的基本示例。 const connector = require ( 'asterisk-ami-connector...
Asterisk Management Interface(AMI)是Asterisk提供的一种功能强大的API,通过它我们可以远程控制和监控Asterisk服务器。Python库如`asterisk-ami`使得与AMI交互变得更加简单,从而能够实现诸如外呼电话这样的高级...
### Asterisk Manager Interface (AMI) 中文文档概览 #### 一、引言 Asterisk Manager Interface (AMI) 是一款强大的工具,它允许开发者通过TCP/IP协议与Asterisk PBX系统进行交互,实现远程管理和监控功能。本文档...
星号代理基于Node.js和Express Web框架的Asterisk AMI代理。 ##关于此应用程序是一个基本代理,它收集有关基于Asterisk的PBX当前状态的数据,并提供HTTP接口以将该数据作为JSON对象检索。 为Asterisk 13.5.0和CentOS...
朋友Golang上的Asterisk AMI连接器。 注意力! API已在v0.1.2中更改。 请阅读godoc。 用法很简单。安装: go get github.com/ivahaev/amigo 使用将模块导入您的项目: import "github.com/ivahaev/amigo" 然后使用:...
Asterisk Management Interface(AMI)是Asterisk的一项重要功能,允许外部应用程序通过网络与Asterisk服务器进行交互,实现诸如监控、控制和管理等任务。 在"Asterisk-code.zip"这个压缩包中,重点内容可能是关于...
通过asterisk ami接口,连接asterisk. 封装了ami,agi等接口,通过asterisk-java可以方便控制asterisk,开发自己的呼叫中心
尝试通过Postgres / SQL提供对Asterisk AMI的访问 特征 您可以通过任何支持对Postgresql进行访问的编程语言来访问星号的ami。 您可以利用sql语言的所有功能:排序,按where子句过滤,分组,将ami命令(如普通数据库...
asterisk-java AGI 通过asterisk ami接口,连接asterisk. api,开发自己的呼叫中心
Asterisk是开源的电话交换软件,而AMI是其提供的一个管理接口,允许外部程序控制Asterisk的行为,如监控呼叫状态、挂断电话、转移呼叫等。 在Go-gami库中,开发者可以找到一系列用于操作Asterisk AMI的方法和结构体...
这个库主要支持Asterisk的几个关键接口,包括ARI(Asterisk REST Interface)、AMI(Asterisk Manager Interface)以及各种类型的AGI(Asterisk Gateway Interface)。 1. **Asterisk PBX**:PBX(Private Branch ...
AsterNET is an open source .NET framework for Asterisk AMI and FastAGI. AsterNET allows you to talk to Asterisk AMI any .NET application and create FastAGI applications in any .NET language.
Asterisk Manager API (AMI) 是 Asterisk 通信平台的核心组件之一,它提供了一种机制,使得外部应用程序可以通过网络与 Asterisk PBX 进行交互和控制。AMI 使用基于文本的简单“key: value”协议,允许管理客户端...