实时事件 Asterisk 集成

Realtime-events Asterisk integration

此 post 的目的是征求专家对该主题的看法。我希望我没有违反任何计算器规则。如果有,请教教我如何正确提问。

我们目前拥有与一台 PBX 集成的软件(Web 应用程序)。我们也想将该集成扩展到 Asterisk。我们当前设置的工作方式是,我们从 PBX 获得实时 http 通知到我们的 Web 应用程序,了解 PBX 中发生的几乎所有事情(分机响铃、分机接听电话、座席登录呼叫中心等)。我们很乐意遵循带有星号的相同模式。

现在,阅读有关 Asterisk 的文章让我们陷入了困境。我们听到了不同的实施方式。即:

1.用 AGI() 做 - 因此,在拨号方案的不同关键点放置 AGI,它将收集有关当前呼叫的信息并向我们的应用程序发送 http 请求。

2。使用 AMI - 连接到 TCP,收听所有内容,然后在接收方应用程序端(我们的网络应用程序)过滤您需要的内容

3。用 ARI 做 - 我不知道这个的细节

Problems/challanges 我理解的每一个是:

1.处理 AGI() - 每次调用(甚至 DIALSTATUS_CHANGE)可能太多并且可能很快成为性能问题

2。 AMI - 没有任何 'native' 多租户支持 - 没有简单的方法来进行任何类型的事件排队(如果接收器应用程序关闭,一段时间后重新发送) - 连接到潜在的防火墙后星号的 TCP 可能很麻烦

3。阿里 - 没有我知道的细节

我们需要的解决方案范围是:

我想听听的是你建议去哪一个以及 explanation/discussion 的原因?

谢谢

你上面的选择是苹果和橘子 - 很难比较。正如您所指出的,Asterisk 不了解租户。创建 'multi-tenant' 的事件 Asterisk 包装器只是简单地将拨号方案拆分为适合您的部分,但 Asterisk 并不关心。因此,如果您想要 Asterisk 的 state/activity,则必须通过 AMI。 (ARI 并不遥远,但引入了其他复杂性)。

如果您需要将活动映射到租户,那么您有一个单独的 issue/question。

创建asterisk的时候没有multitennt的想法。它被创建为硬件 pbx

的简单替代品

所以在 asterisk 上没有任何多租户特性,除非你自己使用拨号计划和配置。

另外,asterisk 并不是为成千上万的用户设计的。对于这样的负载,您需要基于 opensips/kamailio+opensips.

的结帐集群解决方案

无论如何,如果您期望高度可扩展的解决方案,最好的选择是至少在架构阶段聘请 asterisk 专家。否则解决方案可以占用 100 个用户的服务器的所有资源。

asterisk 最具可扩展性的变体将是 FastAGI 外部程序,它触发事件并控制拨号方案 + AMI 侦听器,它触发 transfers/other 在 AGI 中可用的事件。也可以在纯拨号方案+AMI 中执行,但在那种情况下需要注意 http 部分(如果它响应长可能是星号的问题)