marayshi / pami
Asterisk 管理接口 (AMI) 的 PHP 客户端,基于事件驱动,面向对象(分支)
Requires
- php: >=5.6.0
- psr/log: >= 1.0.0
Requires (Dev)
- codeclimate/php-test-reporter: >=0.3.2
- evert/phpdoc-md: ^0.2.0
- marcelog/pagi: *
- phing/phing: *
- php-coveralls/php-coveralls: >=1.0.2
- phploc/phploc: *
- phpmd/phpmd: >=2.5.0
- phpunit/phpunit: >=5.7.27
- sebastian/phpcpd: >=3.0.1
- squizlabs/php_codesniffer: >=3.4.0
- theseer/phpdox: 0.11.*
Replaces
- dkgroot/pami: >=2.0.1
This package is auto-updated.
Last update: 2024-09-27 05:39:31 UTC
README
分支!
注意,这是由 dkgroot 发布的官方版本的分支。
分支!
注意,这是由 Marcelo Gornstein 发布的官方版本的分支,一段时间没有维护(因此创建了分支)。
介绍
PAMI 表示 PHP Asterisk 管理接口。正如其名称所暗示的,它仅仅是一组允许您使用观察者-监听器模式向 AMI 发送命令和/或接收事件的 PHP 类。
背后的想法是,通过 SOA 或 AJAX,轻松实现操作员控制台、监控器等。
- nodejs 的端口可在以下位置找到: http://marcelog.github.com/Nami
- erlang 的端口可在以下位置找到: https://github.com/marcelog/erlami
资源
- API 以 Markdown 格式
- API 以 html 格式
- 示例 集合
- 阿根廷 2013 年 PHP 会议的 PAGI/PAMI 完整演讲。请查看幻灯片备注以获取完整文本 :)
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。当前任务包括
- test:运行PHPUnit。
- cs:运行CodeSniffer。
- doc:运行PhpDocumentor。
- md:运行PHPMD。
- build:这是默认任务,将运行所有其他任务。
运行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。
-
@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。