实时事件Asterisk集成

时间:2015-03-17 13:39:05

标签: architecture asterisk

这篇文章的目的是从专家那里获得有关该主题的想法。我希望我没有违反任何stackoverflow规则。如果是这样,请告诉我如何正确询问的方式。

我们现在拥有与一个PBX集成的软件(Web应用程序)。我们也希望将该集成扩展到Asterisk。我们当前设置的工作方式是我们从PBX到我们的Web应用程序获得关于PBX中几乎所有事件的实时http通知(扩展振铃,扩展应答呼叫,代理登录到呼叫中心等等)。我们希望用星号遵循相同的模式。

现在,阅读有关Asterisk的信息让我们陷入了两难境地。我们听到了不同的实施方式。即:

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

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

第3。用ARI 来做 - 我不知道有关这个的详细信息

我对每个问题都理解的问题/挑战是:

1。处理AGI() - 对于每次通话(甚至是DIALSTATUS_CHANGE)可能太多而且可能很快就会出现性能问题

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

第3。 ARI - 没有我知道的细节

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

  • 多租户解决方案,拥有数百个租户,每个租户可能有数百个用户(例如,高达300-400)。我知道这需要扩展,但目前我只想查看一个服务器的选项以及在一个服务器范围内执行此操作的最佳方法
  • 来自我们网络应用程序的可靠实时事件
  • 优选地是http通知,最优选地是tcp(包括websockets)

我想听到的是你建议去哪一个以及关于原因的解释/讨论?

谢谢

2 个答案:

答案 0 :(得分:1)

上面的选项是苹果和橘子 - 难以比较。正如你所指出的,Asterisk并不是租户意识到的。创建“多租户”的事件Asterisk包装器简单地将拨号方案分成了很好的部分,但Asterisk并不关心。因此,如果您想要Asterisk的状态/活动,则必须通过AMI。 (ARI并不遥远,但引入了其他复杂性)。

如果您需要将活动地图映射到租户,那么您会遇到单独的问题。

答案 1 :(得分:1)

创建星号时没有多重想法。它被创建为硬件pbx的SIMPLE替代品

因此星号上没有任何多租户功能,除非您使用dialplan和config自行完成。

此外,星号并非旨在为数千名用户提供服务。对于此类负载,您需要基于opensips / kamailio + opensips的结帐群集解决方案。

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

星号的大多数可扩展变体将是FastAGI外部程序,它可以触发事件和控制拨号方案+ AMI监听器,它可以激活AGI中无法使用的传输/其他事件。另外它在纯拨号方案+ AMI中是可行的,但在这种情况下需要关注http部分(如果它响应长可以是星号问题)