marcelog/pami

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

v2.0.2 2017-10-10 18:59 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 管理接口。正如其名称所暗示的,它仅仅是一组允许您使用观察者-监听器模式向 AMI 发送命令并/或接收事件的 PHP 类。

背后的想法是,通过 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
  • 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

Currently Supported Actions

  • AbsoluteTimeout
  • 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。当前任务包括

运行phing任务

要运行任务,只需做

vendor/bin/phing build

贡献

贡献

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

授权协议

版权所有 2016 马塞洛·戈恩斯坦 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 在googlemail,为他提供的帮助和测试环境添加了对dongle的支持。

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

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

  • Richard Baar,在从socket读取时注意到eof支持不足,以及在JabberAction中的JabberEvent和ScreenName中。

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

  • Brian (wormling),在尝试和修复asyncagi中的bug方面做出了贡献。

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

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