marayshi/pami

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

v2.0.7 2020-05-09 18:05 UTC

This package is auto-updated.

Last update: 2024-09-27 05:39:31 UTC


README

Gitter

Build Status Coverage Status Code Climate

分支!

注意,这是由 dkgroot 发布的官方版本的分支。

分支!

注意,这是由 Marcelo Gornstein 发布的官方版本的分支,一段时间没有维护(因此创建了分支)。

介绍

PAMI 表示 PHP Asterisk 管理接口。正如其名称所暗示的,它仅仅是一组允许您使用观察者-监听器模式向 AMI 发送命令和/或接收事件的 PHP 类。

背后的想法是,通过 SOA 或 AJAX,轻松实现操作员控制台、监控器等。

资源

PHP 版本

注意:PAMI 需要 PHP 5.6+。

安装

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

  "require": {
    "marayshi/pami": "*"
  }

快速入门

对于深入的教程: 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

《软件开发者期刊》的 3 月版 http://sdjournal.org/ 特载一篇关于使用 PAMI 和 PAGI 编写电话应用程序的完整文章。

当前支持的事件

随着时间的推移,将添加更多事件。我只能添加我能测试和使用的那些,因此您的贡献可能会有所不同! ;)

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

  • AgentCalled
  • AgentComplete
  • AgentConnect
  • AgentDump
  • Agentlogin
  • Agentlogoff
  • AgentRingNoAnswer
  • Agents
  • AGIExec
  • AGIExecEnd
  • AGIExecStart
  • Alarm
  • AlarmClear
  • 详情
  • 列表
  • 完整列表
  • 异步AGI
  • 异步AGI结束
  • 异步AGI执行
  • 异步AGI开始
  • 带听转移
  • 授权详情
  • 授权列表
  • 授权完整列表
  • 授权方法不允许
  • 盲转
  • 桥接
  • 创建桥接
  • 销毁桥接
  • 进入桥接
  • 桥接信息通道
  • 离开桥接
  • 桥接列表项
  • 桥接视频源更新
  • 电话接听
  • 呼叫转接
  • 呼叫记录
  • CEL
  • 挑战响应失败
  • 挑战已发送
  • 通道通话开始
  • 通道通话结束
  • 通道更新
  • 通道监听开始
  • 通道监听停止
  • 会议桥结束
  • 会议桥加入
  • 会议桥离开
  • 会议桥列表
  • 会议桥房间列表
  • 会议桥静音
  • 会议桥录音
  • 会议桥开始
  • 会议桥停止录音
  • 会议桥通话
  • 会议桥解除静音
  • 联系人列表
  • 联系人列表完成
  • 联系人状态
  • 联系人状态详情
  • 核心显示通道
  • DAHDI通道
  • 显示DAHDI通道
  • 数据库获取响应
  • 设备状态变化
  • 设备状态列表完成
  • 设备状态
  • 拨号
  • 拨号开始
  • 拨号结束
  • 拨号状态
  • 勿扰
  • 勿扰状态
  • 新CUSD串行设备
  • 新USSD串行设备
  • 新USSDBase64串行设备
  • 串行设备短信状态
  • 串行设备状态
  • 串行设备USSD状态
  • DTMF
  • DTMF开始
  • DTMF结束
  • 端点详情
  • 端点详情完成
  • 端点列表
  • 事件工厂实现.php
  • 事件消息.php
  • 扩展状态列表完成
  • 扩展状态
  • 工厂
  • 失败的ACL
  • 传真会话
  • 传真会话完成
  • 传真会话条目
  • 传真统计
  • 传真状态
  • 完全启动
  • 挂断
  • 挂断处理弹出
  • 挂断处理推送
  • 挂断处理运行
  • 挂断请求
  • 保持
  • 识别详情
  • 实现
  • 入站注册详情
  • 无效的账户ID
  • 无效的密码
  • 无效的传输
  • Jabber事件
  • 加入
  • 离开
  • 链接
  • 列出拨号计划
  • 加载
  • 加载平均限制
  • 本地桥接
  • 本地优化开始
  • 本地优化结束
  • 伪装
  • MCID
  • 会议结束
  • 会议加入
  • 会议离开
  • 会议静音
  • 会议通话
  • 会议通话请求
  • 内存限制
  • 消息等待
  • 迷你语音邮件
  • 监控开始
  • 监控停止
  • 保持音乐
  • 开始保持音乐
  • 停止保持音乐
  • 获取MWI
  • 获取MWI完成
  • 新账户代码
  • 新主叫ID
  • 新通道
  • 新连接线路
  • 新扩展
  • 新状态
  • 起源响应
  • 出站注册详情
  • 出站订阅详情
  • 停泊呼叫
  • 放弃停泊呼叫
  • 交换停泊呼叫
  • 停泊呼叫超时
  • 对等方状态
  • 拿起
  • 状态变化
  • 状态列表完成
  • 状态
  • 队列呼叫者放弃
  • 队列呼叫者加入
  • 队列呼叫者离开
  • 队列成员
  • 队列成员添加
  • 队列成员暂停
  • 队列成员暂停
  • 队列成员惩罚
  • 队列成员移除
  • 队列成员占用
  • 队列成员状态
  • 队列参数
  • 队列摘要
  • 接收传真
  • 注册
  • 重新加载
  • 重命名
  • 请求格式错误
  • 请求不允许
  • 请求不支持
  • 资源列表详情
  • 接收RTCP
  • RTCP接收器统计
  • 发送RTCP
  • RTP接收器统计
  • RTP发送器统计
  • SCCP会议结束
  • SCCP会议进入
  • SCCP会议离开
  • SCCP会议离开
  • SCCP会议锁定
  • SCCP会议参与者被踢出
  • SCCP会议参与者静音
  • SCCP会议参与者提升
  • SCCP会议开始
  • SCCP会议已开始
  • SCCP显示设备
  • SCCP显示线路
  • 发送传真
  • 会话限制
  • 会话超时
  • 关闭
  • SIP资格对等方完成
  • 软挂断请求
  • 跨度警报
  • 跨度警报清除
  • 状态
  • 成功
  • 成功授权
  • 表结束
  • 表开始
  • 转移
  • 传输详情
  • 意外的地址
  • 取消保持
  • 未知
  • 解除链接
  • 卸载
  • 未停泊呼叫
  • 用户事件
  • 变量设置
  • VgsmMeState
  • VgsmNetState
  • VgsmSmsRx

当前支持的操作

  • 绝对超时
  • 操作
  • 操作消息.php
  • 代理注销
  • Agents
  • AGI
  • 带听转移
  • Atxfer
  • 盲转
  • 桥接
  • 销毁桥接
  • 桥接信息
  • 桥接踢出
  • 桥接列表
  • 桥接技术列表
  • 桥接技术挂起
  • 桥接技术取消挂起
  • 取消Atxfer
  • 挑战
  • 更改监控
  • 命令
  • ConfbridgeKick
  • 会议桥列表
  • 会议桥房间列表
  • ConfbridgeLock
  • 会议桥静音
  • ConfbridgeSetSingleVideoSrc
  • ConfbridgeStartRecord
  • 会议桥停止录音
  • ConfbridgeUnlock
  • 会议桥解除静音
  • 控制回放
  • 核心设置
  • 核心显示通道
  • 核心状态
  • 创建配置
  • DAHDIDialOffHook
  • DAHDIDNDOff
  • DAHDIDNDOn
  • DAHDI挂断
  • DAHDIRestart
  • 显示DAHDI通道
  • DAHDITransfer
  • DBDel
  • DBDelTree
  • DBGet
  • DBPut
  • 设备状态列表
  • DialplanExtensionAdd
  • DialplanExtensionRemove
  • DongleReload
  • DongleReset
  • DongleRestart
  • DongleSendPDU
  • DongleSendSMS
  • DongleSendUSSD
  • DongleShowDevices
  • DongleStart
  • DongleStop
  • 事件
  • 扩展状态
  • 扩展状态列表
  • 传真会话
  • FAX会话
  • 传真统计
  • 过滤器
  • 获取配置
  • 获取配置JSON
  • 获取变量
  • 挂断
  • IAXnetstats
  • IAXpeerlist
  • IAXpeers
  • IAXregistry
  • JabberSend
  • 列出分类
  • 列出命令
  • 本地优化移除
  • 日志轮转
  • 登录
  • 注销
  • 邮箱计数
  • 邮箱状态
  • Meetme列表
  • Meetme列表房间
  • 会议静音
  • Meetme取消静音
  • MixMonitor
  • MixMonitorMute
  • 模块检查
  • 模块加载
  • 模块重新加载
  • 模块卸载
  • 监控
  • 静音音频
  • MWIDelete
  • 获取MWI
  • MWIUpdate
  • 发起
  • 停车
  • 停泊呼叫
  • 停车场
  • 暂停监控
  • Ping
  • PJSIPNotify
  • PJSIPQualify
  • PJSIPRegister
  • PJSIPShowAors
  • PJSIPShowAuths
  • PJSIPShowContacts
  • PJSIPShowEndpoint
  • PJSIPShowEndpoints
  • PJSIPShowRegistrationInboundContactStatuses
  • PJSIPShowRegistrationsInbound
  • PJSIPShowRegistrationsOutbound
  • PJSIPShowResourceLists
  • PJSIPShowSubscriptionsInbound
  • PJSIPShowSubscriptionsOutbound
  • PJSIPUnregister
  • 播放DTMF
  • 存在状态
  • 存在状态列表
  • PRIDebugFileSet
  • PRIDebugFileUnset
  • PRIDebugSet
  • PRIShowSpans
  • 队列添加
  • 队列更改优先级呼叫者
  • 队列日志
  • 队列成员响铃使用中
  • 队列成员响铃使用中.php
  • 队列暂停
  • 队列惩罚
  • 队列重新加载
  • 队列删除
  • 队列重置
  • 队列规则
  • 队列
  • 队列状态
  • 队列摘要
  • 队列取消暂停
  • 重定向
  • 重新加载
  • SCCPAnswerCall
  • SCCPConference
  • SCCPConfigMetaData
  • SCCPDeviceAddLine
  • SCCPDeviceRestart
  • SCCPDeviceSetDND
  • SCCPDeviceUpdate
  • SCCPDndDevice
  • SCCPHangupCall
  • SCCPHoldCall
  • SCCPLineForwardUpdate
  • SCCPMessageDevice
  • SCCPMessageDevices
  • SCCPMicrophone
  • SCCPShowChannels
  • SCCPShowConference
  • SCCPShowConferences
  • SCCP显示设备
  • SCCPShowDevices
  • SCCPShowGlobals
  • SCCPShowHintLineStates
  • SCCPShowHintSubscriptions
  • SCCP显示线路
  • SCCPShowLines
  • SCCPShowMWISubscriptions
  • SCCPShowSessions
  • SCCPShowSoftkeySets
  • SCCPStartCall
  • SCCPSystemMessage
  • SCCPTokenAck
  • 发送文本
  • 设置变量
  • 显示拨号计划
  • SIPNotify
  • SIPPeers
  • SIPpeerstatus
  • SIPQualifyPeer
  • SIPShowPeer
  • SIPShowRegistry
  • SKINNY设备
  • SKINNY线路
  • SKINNY显示设备
  • SKINNY显示线路
  • SorceryMemoryCacheExpire
  • SorceryMemoryCacheExpireObject
  • SorceryMemoryCachePopulate
  • SorceryMemoryCacheStale
  • SorceryMemoryCacheStaleObject
  • 状态
  • 停止MixMonitor
  • 停止监控
  • 取消监控暂停
  • 更新配置
  • 用户事件
  • VGSMSMSTx
  • 语音邮件刷新
  • 语音邮件用户列表
  • 语音邮件用户状态
  • 等待事件

调试、日志

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

$pami->setLogger($logger);

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

开发者

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

运行phing任务

要运行任务,只需执行

vendor/bin/phing build

贡献

要贡献

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

授权协议

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

遵循Apache License,版本2.0(“许可协议”);除非您遵守许可协议,否则不得使用此文件。您可以在以下位置获取许可证的副本:

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

除非适用法律要求或书面同意,否则根据许可协议分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可协议中规定的特定语言的权限和限制,请参阅许可协议。

此分支的维护者

  • Diederik de Groot ddegroot@talon.nl

  • 添加了SCCP消息实现。

  • 对从ActionMessages返回的多个/复杂结果的ResponseEvents进行响应处理 Orig PR:73

  • 注意:在响应处理方面得到了Jacob Kiers的帮助。

感谢

  • 首先感谢Marcelo Gornstein,他是本模块的原始设计和开发者。更多信息请见:https://github.com/marcelog/PAMI

  • 感谢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在读取socket时注意到的eof支持不足、JabberEvent和JabberAction中的ScreenName的问题。

  • 感谢Scot Opell在调试5.3.9和5.3.10中的stream_get_line()方面的帮助。

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

  • 感谢Henning Bragge在新state事件和队列方面的帮助。

  • 感谢mbonneau在ParkedCall和UnParkedCall事件方面的帮助。

  • @brenard:ConfBridge的更新。请见:Orig PR:179

  • @NikolayRevin: 添加了 QueueMemberRingInUse 操作,并更新了 QueueMemberEvent 和 QueueParamsEvent。参见:原始 PR:177

  • @alexmnv: 在 ClientImpl 类中添加了 getSocket() 方法。参见:原始 PR:169

  • @edigomes: 添加了 Options-XXXXXX。参见:原始 PR:162

  • @amir200xven: 添加了 CDR 事件。参见:原始 PR:159

  • @wizzle: 添加了 PJSIPShowEndpoints 等。参见:原始 PR:158原始 PR:157

  • @syco: 扩展了 MonitorAction。参见:原始 PR:149

  • @ilgiz-badamshin: 扩展了 AsyncAgi 实现。参见:原始 PR:143

  • @Adrian0350: 添加了 DAHDIChannelEvent。参见:原始 PR:138

  • @Bloodoff: 添加了 DeviceStateChange/VarSet。参见:原始 PR:126

  • @thomasvargiu: 修复了 getMessages。参见:原始 PR:122

  • @sctt: 添加了事件过滤器。参见:原始 PR:107

  • @alesf: 添加了 QueueEntry。参见:原始 PR:98

  • @parhamdoustdar: ConfBridge 等。参见:原始 PR:80