1

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

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

4

9 回答 9

2

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 的真实性能结果:
Dell PowerEdge R200,至强双核 3.2GHz,在抖动前处理 17 个呼叫。
HP DL380 G4,双 Xeon HT 3.2 GHz,在长时间停顿前处理 30 个呼叫。

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

于 2008-12-18T15:45:13.553 回答
1

如果您正在寻找“电信级”应用程序,您可能需要研究 SipXecs 而不是星号。它功能强大、免费且开源,可从北电获得商业支持。您可以通过 ruby​​(或任何其他语言)的 Web 服务 API 与它进行交互。

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

于 2008-11-12T20:34:19.403 回答
1

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

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

于 2009-01-29T02:12:42.847 回答
0

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

于 2008-09-18T23:30:03.280 回答
0

我在这里这里这里问过一些相关的问题。我正在使用 Microsoft 的语音服务器,我非常有兴趣了解那里的任何替代方案,尤其是开源的替代方案。您可能会在其中一个问题的答案中找到一些有用的信息。

于 2008-09-18T23:32:11.327 回答
0

我广泛使用了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 相比)。

于 2009-02-20T18:51:11.460 回答
0

再喷。在使用 PHPAGI 将我客户的 IVR 从 SipX 迁移到 Asterisk 之后,我必须说我还没有遇到任何其他架构如此简单和强大。今天我将在我之前测试过 SipX 的同一硬件上对 Trixbox CE 2.8 进行压力测试。但我必须说,使用 PHPAGI 进行 IVR 和 Asterisk CLI 进行调试非常有效,并且让我开发 IVR 的速度比任何其他公司都快。我今天正在实施 TTS 和 ASR,我会尽可能发布我的压力测试结果。

于 2009-08-12T17:26:16.647 回答
0

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

于 2010-03-11T15:38:01.650 回答
0

对于小型和简单的应用程序,我在 perl 中使用 Asterisk::AGI。Fast AGI 也有扩展。对于更大的应用程序,例如 VoIP 运营商的后端,我使用类似于用 Java 编写的 OrderlyCalls(我自己的代码)的东西。尽管从 java fastagi 引擎开始并将其扩展到您的需要,但 OrderlyCalls 非常棒。

于 2010-05-31T09:01:23.163 回答