【问题标题】:Asterisk AGI framework for IVR; Adhearsion alternative?用于 IVR 的 Asterisk AGI 框架;粘连替代?
【发布时间】:2008-09-18 23:14:32
【问题描述】:
我正在尝试开始使用 Asterisk 和 Ruby 编写可扩展的电信级应用程序。我原本打算为此使用 Adhearsion 框架,但它没有所需的成熟度,而且它的文档严重缺乏。 AsteriskRuby 似乎是一个不错的选择,因为它有很好的文档记录并且似乎是由 Vonage 编写的。
有人有部署基于 AGI 的 IVR 应用程序的经验吗?你使用了什么框架(如果有的话)?如果合理的话,我什至会考虑使用非 Ruby 的。谢谢!
【问题讨论】:
标签:
ruby
asterisk
telephony
ivr
agi
【解决方案1】:
SipX 确实是错误的答案。我在 SipX 3.10.2 上编写了一些极其复杂的 VoiceXML,但自从 SipX 4 放弃 SipXVXML 用于需要编译 JAR 的 IVR 的接口后,这一切都是徒劳的。最重要的是,北电申请破产,开源版本的文档极差,对 VXML 2.0(截至 3.10.2)和 SIP 标准(从 3.10.2 开始,与 ITSP 不兼容)的合规性差。我会为它的设计目的而做的一项出色的工作鼓掌,成为一个 PBX。但作为 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 的真实世界性能结果:
戴尔 PowerEdge R200,至强双核 3.2GHz,可在抖动前处理 17 个呼叫。
HP DL380 G4,双 Xeon HT 3.2 GHz,在长时间停顿前处理 30 个呼叫。
我将在完成对 VoiceGlue 和 JVoiceXML 的评估后发布我的发现,但我认为我最终会编写一个从 AGI 调用的自定义 PHP,因为所有工具都是 Asterisk 的原生工具。
【解决方案2】:
【讨论】:
-
自 0.8.1 以来,Adhearsion 进一步增长。 Adhearsion 1.0 于去年发布,其中包括由专业技术作家(谢谢,贾斯汀!)进行的大量文档审查,以及无数错误修复和新功能。社区继续围绕它发展。当前版本是 Adhearsion 1.2.0,几周前发布。开始的地方是http://adhearsion.com
【解决方案3】:
如果您正在寻找“电信级”应用程序,您可能需要研究 SipXecs 而不是星号。它功能强大、免费且开源,可从北电获得商业支持。您可以通过 ruby(或任何其他语言)的 Web 服务 API 与它进行交互。
请参阅SipXecs wiki 了解更多信息。该网站上有一个比较矩阵,将功能与 AsteriskNOW 和 TrixBox 进行比较。
【解决方案4】:
那里真的没有任何其他框架。当然,每种语言都有 AGI 绑定,但就用于开发电话应用程序的成熟框架而言,我们还没有。至少在开源世界中。
【解决方案5】:
我问过一些相关的问题here、here 和here。我正在使用 Microsoft 的语音服务器,我非常想了解那里的任何替代方案,尤其是开源的替代方案。您可能会在其中一个问题的答案中找到一些有用的信息。
【解决方案6】:
我广泛使用了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 相比)。
【解决方案7】:
又来了。在使用 PHPAGI 将我客户的 IVR 从 SipX 迁移到 Asterisk 之后,我必须说我还没有遇到任何其他架构如此简单和强大。今天我将在我之前测试过 SipX 的同一硬件上对 Trixbox CE 2.8 进行压力测试。但我必须说,使用 PHPAGI 进行 IVR 和 Asterisk CLI 进行调试非常有效,这让我开发 IVR 的速度比其他任何公司都快得多。我今天正在实施 TTS 和 ASR,我会尽可能发布我的压力测试结果。
【解决方案9】:
对于小型和简单的应用程序,我在 perl 中使用 Asterisk::AGI。 Fast AGI 也有扩展。对于更大的应用程序,比如 VoIP 运营商的后端,我使用类似于用 Java 编写的 OrderlyCalls(我自己的代码)的东西。尽管从 java fastagi 引擎开始并将其扩展到您的需要,但 OrderlyCalls 非常棒。