fullduplexuk / pami
Asterisk 管理接口 (AMI) 的 PHP 客户端,事件驱动,面向对象
Requires
- php: >=5.3.3
- psr/log: >= 1.0.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- evert/phpdoc-md: ~0.1.1
- marcelog/pagi: 2.*
- monolog/monolog: 1.*
- phing/phing: 2.*
- phpdocumentor/phpdocumentor: 2.*
- phpmd/phpmd: 2.*
- phpunit/phpunit: 4.*
- satooshi/php-coveralls: 1.0.1
- sebastian/phpcpd: *
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2024-09-23 00:35:15 UTC
README
简介
PAMI 意味着 PHP Asterisk 管理接口。正如其名所示,它仅仅是一组 php 类,可以让您向 ami 发送命令或接收事件,使用观察者-监听器模式。
背后的想法是,可以通过 SOA 或 Ajax 容易地实现操作员控制台、监控器等。
nodejs 的端口可在: http://marcelog.github.com/Nami 获取。erlang 的端口可在: https://github.com/marcelog/erlami 获取。
资源
- API
- 2013 年阿根廷 PHP 会议的完整 PAGI/PAMI 演讲。请查看幻灯片备注以获取完整文本 :)
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。当前任务包括
- 测试:运行 PHPUnit。
- cs:运行 CodeSniffer。
- doc:运行 PhpDocumentor。
- md:运行 PHPMD。
- 构建:这是默认任务,将运行所有其他任务。
运行 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事件提供帮助。