【问题标题】:Asterisk AMI AGI Notification PHP ScriptAsterisk AMI AGI 通知 PHP 脚本
【发布时间】:2015-12-19 11:54:04
【问题描述】:

我是 Asterisk 的新手。我的要求是当我接到电话时,我需要识别来电者 ID 并在接听电话时弹出该 ID。我对 AMI 和 AGI 有一定的了解。我想知道如何使用 php 脚本来做到这一点。

任何我可以用来执行此操作的示例或内容,请附在此处。

【问题讨论】:

    标签: php sockets asterisk amazon-ami agi


    【解决方案1】:

    这在很大程度上取决于您使用的 Asterisk 版本。我建议使用 Asterisk 13,因为它既是 LTS,又比其他版本具有更好的 AMI 事件。

    您可以在这里采取两种方法。第一种是使用 AMI,它将通过 TCP 套接字将事件溢出给您。第二种是使用 AGI,特别是 FastAGI,它将让您的远程应用程序控制一个通道。在该应用程序中,您可以自己提取来电显示。

    如果您选择使用 AMI,您通常应该监听两个事件:Newchannel - 在创建频道时引发 - 和 Newcallerid - 在频道的参与方标识更改时引发。这应该涵盖当事方标识更改的绝大多数时间,并且应该为您提供频道的呼叫者 ID 以及已连接线路信息,这是与该频道通话的一方的当事方标识。

    您不应该在 Bridge 事件中需要 Link 子事件(它在 13 中不存在,并被 BridgeEnter/BridgeLeave 事件取代) - 我认为 Arheops 指的是.仅当通道“链接”到网桥中的另一个通道时才产生链接,并且与呼叫者 ID 无关。在这种情况下,参与方标识可能会发生变化,但这会在 NewcallerId 事件中传达,因此监听它是没有意义的。

    或者,您可以使用FastAGI。如果你沿着这条路线走,你会希望在你的拨号计划中有一些调用你的 FastAGI 服务器的东西:

    exten => _X.,1,NoOp()
     same => n,AGI(agi://127.0.0.1)
     same => n,...
    

    在您的脚本中 - 考虑到可用的AGI libraries 的数量,您可以使用多种语言编写脚本 - 然后您可以使用get variable 命令和CALLERID 函数提取来电显示。下面是node.js中的一个例子:

    return agi.getFullVariable('${CALLERID(NUMBER)}').then(function (number) {
        callerId.number = number;
    
        return agi.getFullVariable('${CALLERID(NAME)}');
    }).then(function (name) {
        callerId.name = name;
    

    顺便说一句,这些都不是“专家”级别的星号操作。它只需要一些编程和对 Asterisk API 的基本了解。祝你好运!

    【讨论】:

    • 是的,但这需要更改拨号方案,这需要了解拨号方案的工作原理。此外,他的问题不是 callerid 而是弹出窗口,这需要在桥上调用宏或 AMI 事件,对不起。
    【解决方案2】:

    如果您是星号新手,您可以使用已经开发的软件,如 asternic fop/fop2。它允许在来电时使用 callerid 飞溅,我相信它会更简单。

    如果您仍想通过星号进行操作,则应注意“链接”事件。但是,该事件中不会有 callerid,因此您还需要查找“NewChannel”事件和带有 CALLERID(num)=something 的“set”扩展,这将改变 callerid。

    您可以使用通道 uniqueid 连接事件。

    这项任务并不简单,需要精通 php。

    您还可以更改星号拨号计划以使用您需要的呼叫应答信息触发 UserEvent 操作,之后只需收集 UserEvents。这需要星号拨号方案的高专业知识和低 php 的专业知识。

    【讨论】:

    • 如果我看不到对星号的理解,我支持使用已经开发的软件。
    【解决方案3】:

    如果浏览器上的弹出窗口对您来说没问题,我建议使用 websocket 来通知网页有关新呼叫(带有所有参数)。 您可以通过监听 AMI 事件并使用 nodejs 将数据发送到浏览器来做到这一点,这样您就可以避免轮询 Asterisk 服务器来检查呼叫是否得到应答。

    看看这段代码: https://www.backloop.biz/en/products/asterisk-call-notifier-en

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多