Asterisk 具有Asterisk Manager Interface (AMI)和Asterisk Gateway Interface (AGI),使用它们可以在来自 Asterisk 的某些事件中触发 PHP 脚本。使用相同的 PHP 脚本也可以指示 Asterisk 在电话/会议旁边做什么。FreeSWITCH 中是否与 AMI 和 AGI 有相似之处?
4 回答
这些都是很好的问题。我只是想在@dkwiebe 所说的内容中添加一些内容(这是正确的,顺便说一句)。
FreeSWITCH 中的 AMI 等效项是事件套接字。(从技术上讲,它不是“事件套接字库”或 ESL,它是用于编写使用事件套接字的程序的抽象层。我只是想区分一下。)事实上,“星号 -r”的 FreeSWITCH 等效项实际上是一个名为“fs_cli”的基于 ESL 的程序 - FreeSWITCH 命令行界面的缩写。fs_cli 程序是一个很好的例子,说明您可以使用 ESL 完成什么。
此外,您没有理由不能使用 ESL 程序来完成许多可以使用 AGI 脚本完成的事情。ESL“连接对象”可以“锁定”到单个调用分支并对其进行控制。wiki 上有示例,即将出版的 FreeSWITCH Cookbook 将包含一些关于该主题的食谱。(全面披露:我是 FreeSWITCH Cookbook 的合著者。)
另一种与 ESL 相关的控制调用(如 AGI)的方法是使用 fs_ivrd 守护程序。它不如 ESL 常用,但对于类似 AGI 的脚本来说是一个不错的选择。有关更多详细信息,请参阅此 wiki 页面。
最后,我想提一下 Lua 是执行脚本/逻辑/等的绝佳选择。在通话控制中。它简单、轻便且易于学习。在实验室中,我们已经在一台 8 核机器上看到了数千个 Lua 控制的并发调用。Lua 甚至可以在一些非常苛刻的环境中工作。
随时加入 irc.freenode.net 上的#freeswitch,与 FreeSWITCH 社区讨论您的问题。
FreeSWITCH wiki 上有一个页面解决了大多数“Asterisk to FreeSWITCH”问题:Rosetta Stone。
AGI 用于在调用期间使用的脚本(即在拨号计划执行期间从拨号计划中调用)。侦听 AMI 并等待事件的脚本是独立的。虽然后者在技术上也可以完成前者的工作,但最好将它们分开。
@dkwiebe 给出了关于 serverfault 的答案- https://serverfault.com/a/345513/105376
对于 AMI,您正在寻找Event Socket Library。mod_event_socket 页面上提供了一些示例。
AGI 有点不同。你可以在 FreeSWITCH 中做类似的事情,但他们会推荐使用lua。我个人使用过 FreeSWITCH mod_perl,效果很好。