`

asterisk ami

 
阅读更多

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 AMI(Asterisk Manager Interface)接口是Asterisk PBX系统提供的一种用于远程管理和监控的强大工具。这个接口允许开发者通过编程方式与Asterisk进行交互,执行诸如控制呼叫、获取状态、监听通话等多种操作...

    Asterisk AMI代理服务

    asterisk 的AMI代理服务程序。和asterisk之间保持一个tcp连接,可以和多个ami client的保持连接,asterisk ami event向多个client同时发送。

    ASTERISK AMI来电弹屏

    ASTERISK AMI来电弹屏小工具!

    asterisk-java-0.3.1-javadoc.rar_Asterisk AMI j_asterisk_asteris

    Asterisk是一个开源的IP电话系统,而Asterisk Manager Interface (AMI) 是它提供的一种API,用于远程管理和控制Asterisk服务器。Asterisk Java是针对Asterisk AMI的Java库,允许开发者通过Java代码与Asterisk服务器...

    asterisk AMI programs

    【标题】:“asterisk AMI programs” 在IT领域,Asterisk是一个开源的IP电话系统,它提供了丰富的功能,如PBX(Private Branch Exchange),VoIP网关,以及呼叫中心解决方案。Asterisk Management Interface(AMI...

    Asterisk AMI接口 在线手册

    Asterisk AMI接口在线手册可以帮助大家快速的认识AMI接口,编程AMI接口编程

    asterisk-ami-connector:适用于NodeJS的Asterisk AMI连接器(ES2015)

    适用于NodeJS的Asterisk AMI连接器(ES2015) 该库是库的一部分。 安装 $ npm i asterisk-ami-connector NodeJS版本 支持&gt;=4.0.0 用法 具有承诺的基本示例。 const connector = require ( 'asterisk-ami-connector...

    python 控制Asterisk AMI接口外呼电话的例子

    Asterisk Management Interface(AMI)是Asterisk提供的一种功能强大的API,通过它我们可以远程控制和监控Asterisk服务器。Python库如`asterisk-ami`使得与AMI交互变得更加简单,从而能够实现诸如外呼电话这样的高级...

    Asterisk Manager API(AMI) 中文文档

    ### Asterisk Manager Interface (AMI) 中文文档概览 #### 一、引言 Asterisk Manager Interface (AMI) 是一款强大的工具,它允许开发者通过TCP/IP协议与Asterisk PBX系统进行交互,实现远程管理和监控功能。本文档...

    AsteriskProxy:使用Node.js的Asterisk AMI代理

    星号代理基于Node.js和Express Web框架的Asterisk AMI代理。 ##关于此应用程序是一个基本代理,它收集有关基于Asterisk的PBX当前状态的数据,并提供HTTP接口以将该数据作为JSON对象检索。 为Asterisk 13.5.0和CentOS...

    amigo:Golang中的Asterisk AMI连接器

    朋友Golang上的Asterisk AMI连接器。 注意力! API已在v0.1.2中更改。 请阅读godoc。 用法很简单。安装: go get github.com/ivahaev/amigo 使用将模块导入您的项目: import "github.com/ivahaev/amigo" 然后使用:...

    asterisk-code.zip

    Asterisk Management Interface(AMI)是Asterisk的一项重要功能,允许外部应用程序通过网络与Asterisk服务器进行交互,实现诸如监控、控制和管理等任务。 在"Asterisk-code.zip"这个压缩包中,重点内容可能是关于...

    asterisk-java-source

    通过asterisk ami接口,连接asterisk. 封装了ami,agi等接口,通过asterisk-java可以方便控制asterisk,开发自己的呼叫中心

    asterisk-ami-pgsql:这是将Asterisk的AMI接口命令包装到PostgresSQL函数中的中间件

    尝试通过Postgres / SQL提供对Asterisk AMI的访问 特征 您可以通过任何支持对Postgresql进行访问的编程语言来访问星号的ami。 您可以利用sql语言的所有功能:排序,按where子句过滤,分组,将ami命令(如普通数据库...

    asterisk-java.CHM

    asterisk-java AGI 通过asterisk ami接口,连接asterisk. api,开发自己的呼叫中心

    Go-gami-AsteriskAMI接口的Go库

    Asterisk是开源的电话交换软件,而AMI是其提供的一个管理接口,允许外部程序控制Asterisk的行为,如监控呼叫状态、挂断电话、转移呼叫等。 在Go-gami库中,开发者可以找到一系列用于操作Asterisk AMI的方法和结构体...

    星号:Crystal-lang分片,用于管理所有Asterisk PBX库(ARI,AMI和所有类型的AGI)

    这个库主要支持Asterisk的几个关键接口,包括ARI(Asterisk REST Interface)、AMI(Asterisk Manager Interface)以及各种类型的AGI(Asterisk Gateway Interface)。 1. **Asterisk PBX**:PBX(Private Branch ...

    Asterisk-Sample-master.zip_Open Net_asternet

    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 Manager API (AMI) 是 Asterisk 通信平台的核心组件之一,它提供了一种机制,使得外部应用程序可以通过网络与 Asterisk PBX 进行交互和控制。AMI 使用基于文本的简单“key: value”协议,允许管理客户端...

Global site tag (gtag.js) - Google Analytics