Asterisk 管理接口 (AMI) 的 PHP 客户端,事件驱动,面向对象

v2.0.3 2020-02-28 11:04 UTC

This package is not auto-updated.

Last update: 2024-09-23 00:35:15 UTC


README

License Latest Stable Version Documentation Status

Build Status Coverage Status Code Climate Issue Count

![点击此处支持 PAMI 并在 pledgie.com 捐赠!](https://pledgie.com/campaigns/30944.png?skin_name=chrome' border='0')

简介

PAMI 意味着 PHP Asterisk 管理接口。正如其名所示,它仅仅是一组 php 类,可以让您向 ami 发送命令或接收事件,使用观察者-监听器模式。

背后的想法是,可以通过 SOA 或 Ajax 容易地实现操作员控制台、监控器等。

nodejs 的端口可在: http://marcelog.github.com/Nami 获取。erlang 的端口可在: https://github.com/marcelog/erlami 获取。

资源

PHP 版本

注意:PAMI 需要 PHP 5.3+。由于 5.3.9 中 stream_get_line() 引入的错误,PHP 版本 5.3.9 和 5.3.10 将无法工作。请使用 5.3.11+ 或 5.3.8(请参阅 README.PHP-5.3.9-and-5.3.10)。

安装

将此库添加到您的 Composer 配置。在 composer.json 中

  "require": {
    "marcelog/pami": "2.*"
  }

快速入门

对于深入教程: http://marcelog.github.com/articles/pami_introduction_tutorial_how_to_install.html

// Make sure you include the composer autoload.
require __DIR__ . '/vendor/autoload.php';

$options = array(
    'host' => '2.3.4.5',
    'scheme' => 'tcp://',
    'port' => 9999,
    'username' => 'asd',
    'secret' => 'asd',
    'connect_timeout' => 10,
    'read_timeout' => 10
);
$client = new \PAMI\Client\Impl\ClientImpl($options);

// Registering a closure
$client->registerEventListener(function ($event) {
});

// Register a specific method of an object for event listening
$client->registerEventListener(array($listener, 'handle'));

// Register an IEventListener:
$client->registerEventListener($listener);

使用谓词

在注册事件监听器时,可以使用第二个(可选)参数:一个闭包,该闭包将在调用回调之前进行评估。只有当此谓词返回 true 时,才会调用回调。

use PAMI\Message\Event\DialEvent;

$client->registerEventListener(
    array($listener, 'handleDialStart'),
    function ($event) {
        return $event instanceof DialEvent && $event->getSubEvent() == 'Begin';
    })
);

示例

请参阅 docs/examples/quickstart/example.php 以获取一个非常基本的示例。

AsterTrace 是一个完整的应用程序: https://github.com/marcelog/AsterTrace

此外,您可能还想查看这篇文章: http://marcelog.github.com/articles/php_asterisk_listener_example_using_pami_and_ding.html

有关使用 PAMI 进行异步 AGI 的示例,请参阅 docs/examples/asyncagi

软件开发期刊三月号》中有一篇完整的文章,介绍了使用 PAMI 和 PAGI 编写电话应用程序。

当前支持的事件

随着时间的推移,将添加更多事件。我只能添加我能测试和使用的那些,所以您的贡献可能会带来差异! ;)

未知(尚未实现)事件将被报告为 UnknownEvent,因此您仍然可以捕获它们。如果您捕获了其中一个,请报告它!

  • AgentsComplete
  • AgentConnect
  • Agentlogin
  • Agentlogoff
  • AGIExec
  • AsyncAGI
  • Bridge
  • BridgeInfoChannel
  • BridgeInfoComplete
  • CEL
  • ChannelUpdate
  • ConfbridgeEnd
  • ConfbridgeJoin
  • ConfbridgeLeave
  • ConfbridgeList
  • ConfbridgeListComplete
  • ConfbridgeMute
  • ConfbridgeStart
  • ConfbridgeTalking
  • ConfbridgeUnmute
  • CoreShowChannel
  • CoreShowChannelComplete
  • DAHDIShowChannel
  • DAHDIShowChannelsComplete
  • FullyBooted
  • DongleSMSStatus
  • USB Dongle USSD 状态
  • USB Dongle 新 USSD
  • USB Dongle 新 USSD Base64
  • USB Dongle 新 CUSD
  • USB Dongle 状态
  • USB Dongle 设备条目
  • USB Dongle 显示设备完成
  • 数据库获取响应
  • 拨号
  • DTMF
  • 分机
  • 挂断
  • 保持
  • Jabber 事件
  • 加入
  • 离开
  • 连接
  • 列出拨号计划
  • 伪装
  • 留言等待
  • 保持音乐
  • 新账户代码
  • 新主叫ID
  • 新通道
  • 新分机
  • 新状态
  • 发起响应
  • 停放呼叫
  • 停放呼叫完成
  • 对端条目
  • 对端列表完成
  • 对端状态
  • 队列成员
  • 队列成员添加
  • 队列成员移除
  • 队列成员暂停
  • 队列成员状态
  • 队列参数
  • 队列状态完成
  • 队列摘要完成
  • 注册完成
  • 注册表
  • 重命名
  • RTCP 接收
  • RTCP 接收器
  • RTCP 发送
  • RTP 接收器状态
  • RTP 发送器状态
  • 显示拨号计划完成
  • 状态
  • 状态完成
  • 转接
  • 取消连接
  • 取消停放呼叫
  • 用户事件
  • 变量设置
  • vgsm_me_state
  • vgsm_net_state
  • vgsm_sms_rx
  • 语音邮件用户条目
  • 语音邮件用户条目完成

当前支持的操作

  • 绝对超时
  • AGI
  • 代理
  • 代理注销
  • Atxfer (asterisk 1.8?)
  • Bridge
  • 桥接信息
  • 更改监控
  • 命令
  • ConfbridgeList
  • ConfbridgeMute
  • ConfbridgeUnmute
  • 核心设置
  • 核心显示通道
  • 核心状态
  • DAHDIDialOffHookAction
  • DAHDIHangup
  • DAHDIRestart
  • DAHDIShowChannels
  • DAHDIDNDOn
  • DAHDIDNDOff
  • DBGet
  • DBPut
  • DBDel
  • DBDelTree
  • USB Dongle 发送短信
  • USB Dongle 发送 USSD
  • USB Dongle 发送 PDU
  • USB Dongle 重新加载
  • USB Dongle 停止
  • USB Dongle 启动
  • USB Dongle 重新启动
  • USB Dongle 重置
  • USB Dongle 显示设备
  • 扩展状态
  • 创建配置
  • 获取配置
  • 获取配置 JSON
  • 获取变量
  • 挂断
  • Jabber 发送
  • 本地优化移除
  • 登录
  • 注销
  • 列出类别
  • 列出命令
  • 邮箱计数
  • 邮箱状态
  • Meetme 列表
  • Meetme 静音
  • Meetme 取消静音
  • MixMonitor
  • 模块检查
  • 模块加载(拆分为 ModuleLoad、ModuleUnload 和 ModuleReload)
  • 监控
  • 发起
  • 停放呼叫
  • 暂停监控
  • Ping
  • 播放 DTMF
  • 队列
  • 队列添加
  • 队列
  • 队列日志
  • 队列暂停
  • 队列处罚
  • 队列重新加载
  • 队列移除
  • 队列重置
  • 队列规则
  • 队列摘要
  • 队列状态
  • 队列取消暂停
  • 重定向
  • 重新加载
  • 发送文本
  • 设置变量
  • 显示拨号计划
  • Sipnotify
  • Sippeers
  • Sipqualifypeer
  • Sipshowpeer
  • Sipshowregistry
  • 状态
  • 停止 MixMonitor
  • 停止监控
  • 取消暂停监控
  • VGSM_SMS_TX
  • 语音邮件用户列表

调试、日志记录

您可以选择设置一个兼容 PSR-3 的记录器

$pami->setLogger($logger);

默认情况下,客户端将使用 NullLogger

开发者

此项目使用 phing。当前任务包括

运行 phing 任务

要运行任务,只需做

vendor/bin/phing build

贡献

要贡献

  • 确保您打开一个 简洁的简短的 pull request。
  • 添加任何需要的单元测试以适应新的代码或涉及的变化。
  • 运行 phing 并确保在提交拉取请求之前一切正常(使phpmd和CodeSniffer满意,同时确保phpDocumentor不发出任何警告,因为所有文档都是自动生成的)。
  • 您的代码必须遵守PSR-2规范,CodeSniffer负责处理。

许可协议

版权所有 2016 Marcelo Gornstein marcelog@gmail.com

根据Apache License,版本2.0(以下简称“协议”);除非适用法律要求或书面同意,否则不得使用此文件,除非遵守协议。您可以在以下地址获取协议副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非法律要求或书面同意,否则在协议下分发的软件按“原样”基础分发,不提供任何类型的保证或条件,无论明示还是暗示。有关协议中规定的具体语言权限和限制,请参阅协议。

感谢以下人员

  • Jason Blank 在队列功能调试和某些其他ami不一致性方面提供帮助。

  • Francesco Usseglio Gaudi,在调试Originate动作方面提供帮助。

  • Matías Barletta,为vgms支持提供帮助。

  • Eli Hunter,帮助引入tls兼容性。

  • Freddy dafredmail at googlemail,为他提供帮助和测试环境以添加dongle支持。

  • Joshua Elson 在尝试和调试负载中的asterisk服务器方面提供帮助。

  • Jacob Kiers 在引入和测试异步AGI功能和CEL事件支持方面提供帮助。

  • Richard Baar 注意到从套接字读取时缺乏eof支持,以及在JabberEvent和JabberAction中的ScreenName。

  • Scot Opell 在5.3.9和5.3.10中帮助调试stream_get_line()。

  • Brian (wormling) 在尝试和修复asyncagi上的错误。

  • Henning Bragge 在newstate事件和队列方面提供帮助。

  • mbonneau 为ParkedCall和UnParkedCall事件提供帮助。