andreyrafah / pami
PHP Asterisk Manager Interface (AMI) 客户端,事件驱动,面向对象
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-20 22:23:08 UTC
README
简介
PAMI意为PHP Asterisk Manager Interface。正如其名所示,它只是一套PHP类,允许您通过观察者-监听器模式向AMI发送命令或接收事件。
背后的想法是,通过SOA或ajax轻松实现操作员控制台、监控器等。
nodejs的端口可在以下位置找到: http://marcelog.github.com/Nami erlang的端口可在以下位置找到: https://github.com/marcelog/erlami
资源
- API
- 阿根廷PHP会议2013的完整PAGI/PAMI演讲。请检查幻灯片注释以获取完整文本:)
PHP版本
注意:PAMI需要PHP 5.3+。由于5.3.9中stream_get_line()引入的bug,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
《软件开发期刊》的3月版 》 拥有一篇关于使用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
- DongleUSSDStatus
- DongleNewUSSD
- DongleNewUSSDBase64
- DongleNewCUSD
- DongleStatus
- DongleDeviceEntry
- DongleShowDevicesComplete
- DBGetResponse
- Dial
- DTMF
- Extension
- Hangup
- Hold
- JabberEvent
- Join
- Leave
- Link
- ListDialplan
- Masquerade
- MessageWaiting
- MusicOnHold
- NewAccountCode
- NewCallerid
- Newchannel
- Newexten
- Newstate
- OriginateResponse
- ParkedCall
- ParkedCallsComplete
- PeerEntry
- PeerlistComplete
- PeerStatus
- QueueMember
- QueueMemberAdded
- QueueMemberRemoved
- QueueMemberPause
- QueueMemberStatus
- QueueParams
- QueueStatusComplete
- QueueSummaryComplete
- RegistrationsComplete
- Registry
- Rename
- RTCPReceived
- RTCPReceiver
- RTCPSent
- RTPReceiverStat
- RTPSenderStat
- ShowDialPlanComplete
- Status
- StatusComplete
- Transfer
- Unlink
- UnParkedCall
- UserEvent
- VarSet
- vgsm_me_state
- vgsm_net_state
- vgsm_sms_rx
- VoicemailUserEntry
- VoicemailUserEntryComplete
目前支持的操作
- 绝对超时
- AGI
- Agents
- AgentLogoff
- Atxfer (asterisk 1.8?)
- Bridge
- BridgeInfo
- ChangeMonitor
- Command
- ConfbridgeList
- ConfbridgeMute
- ConfbridgeUnmute
- CoreSettings
- CoreShowChannels
- CoreStatus
- DAHDIDialOffHookAction
- DAHDIHangup
- DAHDIRestart
- DAHDIShowChannels
- DAHDIDNDOn
- DAHDIDNDOff
- DBGet
- DBPut
- DBDel
- DBDelTree
- DongleSendSMS
- DongleSendUSSD
- DongleSendPDU
- DongleReload
- DongleStop
- DongleStart
- DongleRestart
- DongleReset
- DongleShowDevices
- ExtensionState
- CreateConfig
- GetConfig
- GetConfigJSON
- GetVar
- Hangup
- JabberSend
- LocalOptimizeAway
- Login
- Logoff
- ListCategories
- ListCommands
- MailboxCount
- MailboxStatus
- MeetmeList
- MeetmeMute
- MeetmeUnmute
- MixMonitor
- ModuleCheck
- ModuleLoad (split in ModuleLoad, ModuleUnload, and ModuleReload)
- Monitor
- Originate
- ParkedCalls
- PauseMonitor
- Ping
- PlayDTMF
- Queues
- QueueAdd
- Queue
- QueueLog
- QueuePause
- QueuePenalty
- QueueReload
- QueueRemove
- QueueReset
- QueueRule
- QueueSummary
- QueueStatus
- QueueUnpause
- Redirect
- Reload
- SendText
- SetVar
- ShowDialPlan
- Sipnotify
- Sippeers
- Sipqualifypeer
- Sipshowpeer
- Sipshowregistry
- Status
- StopMixMonitor
- StopMonitor
- UnpauseMonitor
- VGSM_SMS_TX
- VoicemailUsersList
调试、记录
您可以设置一个与 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事件。