用于IVR的Asterisk AGI框架;格斗替代品?

时间:2020-03-06 14:23:58  来源:igfitidea点击:

我正在尝试开始使用Asterisk和Ruby编写可伸缩的电信级应用程序。我原本打算为此使用Adhearsion框架,但是它没有所需的成熟度,并且严重缺乏其文档资料。 AsteriskRuby似乎是一个不错的选择,因为它有据可查,并且似乎由Vonage编写。

有没有人有部署基于AGI的IVR应用程序的经验?我们使用了什么框架(如果有)?如果有理由,我什至会考虑使用非Ruby。谢谢!

解决方案

确实没有任何其他框架。当然,每种语言都有AGI绑定,但是就用于开发电话应用程序的成熟框架而言,我们还不存在。至少在开源世界中。

我在这里,这里和这里都提出了一些相关的问题。我正在使用Microsoft的Speech Server,并且非常有经验地了解那里存在的任何替代方案,尤其是开源的替代方案。我们可能会在这些问题之一的答案中找到一些不错的信息。

如果我们正在寻找"电信级"应用程序,则可能需要研究SipXecs而不是星号。它是功能强大,免费和开放源代码,并拥有北电提供的商业支持。我们可以通过使用ruby(或者任何其他语言)的Web Services API与之交互。

有关更多信息,请参见SipXecs Wiki。该站点上有一个比较矩阵,用于将功能与AsteriskNOW和TrixBox进行比较。

SipX确实是错误的答案。我已经在SipX 3.10.2上编写了一些非常复杂的VoiceXML,并且自从SipX 4删除了要求将IVR编译为JAR的接口的SipXVXML以来,一切都变得毫无意义。最重要的是,北电申请破产,开源版本的文档非常差,对VXML 2.0(自3.10.2起)和SIP标准(自3.10.2起)的依从性差,不能很好地适应ITSP。我将为PBX做一项旨在完成其设计工作的bangup工作而称赞。但是作为IVR,如果我要再做一次,我会做一些不同的事情。我不知道该怎么办,但有所不同。我现在正在玩Trixbox CE,并将它与JVoiceXML或者VoiceGlue绑定在一起。

另外,不要阅读SipX Wiki废话。它将SipX 3.10与AsteriskNOW 1与Trixbox 1进行比较。这就像将Mac OS X与Win95进行比较!更为现实的比较是将SipX 4(将于2009年第一季度到期)与Asterisk 1.6和Trixbox 2.6进行比较,这表明它们在可扩展性和高可用性方面的结果几乎相同。 SipX胜出。但是,为了成熟和稳定,我主张Asterisk。

另外,我在SipXVXML上的真实表现是:
Dell PowerEdge R200,至强双核3.2GHz,可处理17次抖动前的呼叫。
HP DL380 G4,双核Xeon HT 3.2 GHz,可在长时间停顿之前处理30个电话。

当我完成对VoiceGlue和JVoiceXML的评估后,我将发布我的发现,但是我认为我将最终编写从AGI调用的自定义PHP,因为所有工具都是Asterisk固有的。

随着v0.8.1的发布,我们应该重新访问Adhearsion,并且文档最近已经变得更好。在这里看看:

http://adhearsion.com
http://docs.adhearsion.com
http://api.adhearsion.com

我已经广泛使用了JAGIServer,即使它不再处于开发中了,它也非常好并且易​​于使用。这是FastAGI的接口,我建议我们使用它而不是简单的AGI。

该框架的新版本是OrderlyCalls,它似乎具有更多功能,但是由于我不需要它们,因此我没有尝试过。

我想这一切都取决于我们想对AGI进行什么操作。通常我有一个比较复杂的拨号计划来收集和验证所有用户输入,然后使用AGI连接到Java应用程序,该程序将读取一些变量,对其进行处理(执行操作,查询等),然后进行更多设置AGI通道上的变量并断开连接。此时,拨号计划将继续进行,具体取决于Java应用程序设置的变量的结果。

这真的非常快,因为我们在Java应用程序上有一个ServerSocket,它可以接收来自AGI的传入连接,并使用新套接字和JAGIProcessor的新实例创建一个JAGIClient(我们必须编写该文件,该对象将完成处理),然后在线程池中运行JAGIClient。
JAGIProcessor实现了processCall方法,它在其中完成所需的所有工作,并与作为参数传递的JAGIClient进行交互,以读取和设置变量或者执行AGI接口允许我们执行的所有操作。

因此,我们有一个始终运行的Java应用程序,它可以是简单的J2SE应用程序或者容器上的EE应用程序,这无关紧要;一旦运行,它将立即非常快速地处理AGI请求,因为不必启动新的进程(与简单的AGI相比,它为每个AGI调用运行一个程序)。

再次。在使用PHPAGI将客户的IVR从SipX迁移到Asterisk之后,我必须说,我还没有遇到任何其他简单而又强大的体系结构。今天,我将在与之前测试SipX相同的硬件上对Trixbox CE 2.8进行压力​​测试。但是我必须说,将PHPAGI用于IVR和将Asterisk CLI用于调试非常有效,这使我开发IVR的速度远远超过了其他公司。我今天正在努力实施TTS和ASR,并会在可能的时候发布我的压力测试结果。

用PHP编写的简单小型灵活的Asterisk AGI IVR
http://freshmeat.net/projects/phpivr

对于小型应用程序,我在perl中使用Asterisk :: AGI。快速AGI也有扩展。对于较大的应用程序,例如VoIP运营商的后端,我使用类似于Java编写的OrderlyCalls(我自己的代码)的东西。尽管从Java fastagi引擎开始并将其扩展到需求,OrderlyCalls还是很棒的。