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

v2.0.10 2021-11-27 12:53 UTC

This package is auto-updated.

Last update: 2024-09-27 19:39:36 UTC


README

Gitter

Build Status Coverage Status Code Climate

分支!

注意,这是对Marcelo Gornstein(https://github.com/marcelog/PAMI)官方发布的分支,该分支已有一段时间未维护(因此进行了分支)。

介绍

PAMI代表PHP Asterisk Manager Interface。正如其名所示,它仅仅是一组php类,可以让你通过观察者-监听器模式向AMI发送命令或接收事件。

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

资源

PHP 版本

注意:PAMI 需要 PHP 5.6+。

安装

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

  "require": {
    "chan-sccp/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。

《软件开发者杂志》(http://sdjournal.org/)的3月版包含一篇关于使用PAMI和PAGI编写电话应用程序的完整文章。

当前支持的事件

随着时间的推移,将添加更多事件。我只能添加我可以测试和使用的那些,所以您的贡献可能会产生差异! ;)

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

  • AgentCalled
  • AgentComplete
  • AgentConnect
  • AgentDump
  • Agentlogin
  • Agentlogoff
  • AgentRingNoAnswer
  • Agents
  • AGIExec
  • AGIExecEnd
  • AGIExecStart
  • Alarm
  • AlarmClear
  • AorDetail
  • AorList
  • AorListComplete
  • AsyncAGI
  • AsyncAGIEnd
  • AsyncAGIExec
  • AsyncAGIStart
  • AttendedTransfer
  • AuthDetail
  • AuthList
  • AuthListComplete
  • AuthMethodNotAllowed
  • BlindTransfer
  • Bridge
  • BridgeCreate
  • BridgeDestroy
  • BridgeEnter
  • BridgeInfoChannel
  • BridgeLeave
  • BridgeListItem
  • BridgeVideoSourceUpdate
  • CallAnswered
  • CallForward
  • Cdr
  • CEL
  • ChallengeResponseFailed
  • ChallengeSent
  • ChannelTalkingStart
  • ChannelTalkingStop
  • ChannelUpdate
  • ChanSpyStart
  • ChanSpyStop
  • ConfbridgeEnd
  • ConfbridgeJoin
  • ConfbridgeLeave
  • ConfbridgeList
  • ConfbridgeListRooms
  • ConfbridgeMute
  • ConfbridgeRecord
  • ConfbridgeStart
  • ConfbridgeStopRecord
  • ConfbridgeTalking
  • ConfbridgeUnmute
  • ContactList
  • ContactListComplete
  • ContactStatus
  • ContactStatusDetail
  • CoreShowChannel
  • DAHDIChannel
  • DAHDIShowChannels
  • DBGetResponse
  • DeviceStateChange
  • DeviceStateListComplete
  • DeviceStatus
  • Dial
  • DialBegin
  • DialEnd
  • DialState
  • DND
  • DNDState
  • DongleNewCUSD
  • DongleNewUSSD
  • DongleNewUSSDBase64
  • DongleSMSStatus
  • DongleStatus
  • DongleUSSDStatus
  • DTMF
  • DTMFBegin
  • DTMFEnd
  • EndpointDetail
  • EndpointDetailComplete
  • EndpointList
  • EventFactoryImpl.php
  • EventMessage.php
  • ExtensionStateListComplete
  • ExtensionStatus
  • Factory
  • FailedACL
  • FAXSession
  • FAXSessionsComplete
  • FAXSessionsEntry
  • FAXStats
  • FAXStatus
  • FullyBooted
  • Hangup
  • HangupHandlerPop
  • HangupHandlerPush
  • HangupHandlerRun
  • HangupRequest
  • Hold
  • IdentifyDetail
  • Impl
  • InboundRegistrationDetail
  • InvalidAccountID
  • InvalidPassword
  • InvalidTransport
  • JabberEvent
  • Join
  • Leave
  • Link
  • ListDialplan
  • Load
  • LoadAverageLimit
  • LocalBridge
  • LocalOptimizationBegin
  • LocalOptimizationEnd
  • Masquerade
  • MCID
  • MeetmeEnd
  • MeetmeJoin
  • MeetmeLeave
  • MeetmeMute
  • MeetmeTalking
  • MeetmeTalkRequest
  • MemoryLimit
  • MessageWaiting
  • MiniVoiceMail
  • MonitorStart
  • MonitorStop
  • MusicOnHold
  • MusicOnHoldStart
  • MusicOnHoldStop
  • MWIGet
  • MWIGetComplete
  • NewAccountCode
  • NewCallerid
  • Newchannel
  • NewConnectedLine
  • Newexten
  • Newstate
  • OriginateResponse
  • OutboundRegistrationDetail
  • OutboundSubscriptionDetail
  • ParkedCall
  • ParkedCallGiveUp
  • ParkedCallSwap
  • ParkedCallTimeOut
  • PeerStatus
  • Pickup
  • PresenceStateChange
  • PresenceStateListComplete
  • PresenceStatus
  • QueueCallerAbandon
  • QueueCallerJoin
  • QueueCallerLeave
  • QueueMember
  • QueueMemberAdded
  • QueueMemberPause
  • QueueMemberPaused
  • QueueMemberPenalty
  • QueueMemberRemoved
  • QueueMemberRinginuse
  • QueueMemberStatus
  • QueueParams
  • QueueSummary
  • ReceiveFAX
  • Registry
  • Reload
  • Rename
  • RequestBadFormat
  • RequestNotAllowed
  • RequestNotSupported
  • ResourceListDetail
  • RTCPReceived
  • RTCPReceiverStat
  • RTCPSent
  • RTPReceiverStat
  • RTPSenderStat
  • SCCPConfEnd
  • SCCPConfEntered
  • SCCPConfLeave
  • SCCPConfLeft
  • SCCPConfLock
  • SCCPConfParticipantKicked
  • SCCPConfParticipantMute
  • SCCPConfParticipantPromotion
  • SCCPConfStart
  • SCCPConfStarted
  • SCCPShowDevice
  • SCCPShowLine
  • SendFAX
  • SessionLimit
  • SessionTimeout
  • Shutdown
  • SIPQualifyPeerDone
  • SoftHangupRequest
  • SpanAlarm
  • SpanAlarmClear
  • Status
  • Success
  • SuccessfulAuth
  • TableEnd
  • TableStart
  • Transfer
  • TransportDetail
  • UnexpectedAddress
  • Unhold
  • Unknown
  • Unlink
  • Unload
  • UnParkedCall
  • UserEvent
  • VarSet
  • VgsmMeState
  • VgsmNetState
  • VgsmSmsRx

当前支持的操作

  • AbsoluteTimeout
  • 操作
  • ActionMessage.php
  • AgentLogoff
  • Agents
  • AGI
  • AttendedTransfer
  • Atxfer
  • BlindTransfer
  • Bridge
  • BridgeDestroy
  • BridgeInfo
  • BridgeKick
  • BridgeList
  • BridgeTechnologyList
  • BridgeTechnologySuspend
  • BridgeTechnologyUnsuspend
  • CancelAtxfer
  • Challenge
  • ChangeMonitor
  • Command
  • ConfbridgeKick
  • ConfbridgeList
  • ConfbridgeListRooms
  • ConfbridgeLock
  • ConfbridgeMute
  • ConfbridgeSetSingleVideoSrc
  • ConfbridgeStartRecord
  • ConfbridgeStopRecord
  • ConfbridgeUnlock
  • ConfbridgeUnmute
  • ControlPlayback
  • CoreSettings
  • CoreShowChannels
  • CoreStatus
  • CreateConfig
  • DAHDIDialOffHook
  • DAHDIDNDOff
  • DAHDIDNDOn
  • DAHDIHangup
  • DAHDIRestart
  • DAHDIShowChannels
  • DAHDITransfer
  • DBDel
  • DBDelTree
  • DBGet
  • DBPut
  • DeviceStateList
  • DialplanExtensionAdd
  • DialplanExtensionRemove
  • DongleReload
  • DongleReset
  • DongleRestart
  • DongleSendPDU
  • DongleSendSMS
  • DongleSendUSSD
  • DongleShowDevices
  • DongleStart
  • DongleStop
  • Events
  • ExtensionState
  • ExtensionStateList
  • FAXSession
  • FAXSessions
  • FAXStats
  • Filter
  • GetConfig
  • GetConfigJSON
  • GetVar
  • Hangup
  • IAXnetstats
  • IAXpeerlist
  • IAXpeers
  • IAXregistry
  • JabberSend
  • ListCategories
  • ListCommands
  • LocalOptimizeAway
  • LoggerRotate
  • Login
  • Logoff
  • MailboxCount
  • MailboxStatus
  • MeetmeList
  • MeetmeListRooms
  • MeetmeMute
  • MeetmeUnmute
  • MixMonitor
  • MixMonitorMute
  • ModuleCheck
  • ModuleLoad
  • ModuleReload
  • ModuleUnload
  • Monitor
  • MuteAudio
  • MWIDelete
  • MWIGet
  • MWIUpdate
  • Originate
  • Park
  • ParkedCalls
  • Parkinglots
  • PauseMonitor
  • Ping
  • PJSIPNotify
  • PJSIPQualify
  • PJSIPRegister
  • PJSIPShowAors
  • PJSIPShowAuths
  • PJSIPShowContacts
  • PJSIPShowEndpoint
  • PJSIPShowEndpoints
  • PJSIPShowRegistrationInboundContactStatuses
  • PJSIPShowRegistrationsInbound
  • PJSIPShowRegistrationsOutbound
  • PJSIPShowResourceLists
  • PJSIPShowSubscriptionsInbound
  • PJSIPShowSubscriptionsOutbound
  • PJSIPUnregister
  • PlayDTMF
  • PresenceState
  • PresenceStateList
  • PRIDebugFileSet
  • PRIDebugFileUnset
  • PRIDebugSet
  • PRIShowSpans
  • QueueAdd
  • QueueChangePriorityCaller
  • QueueLog
  • QueueMemberRingInUse
  • QueueMemberRingInUse.php
  • QueuePause
  • QueuePenalty
  • QueueReload
  • QueueRemove
  • QueueReset
  • QueueRule
  • Queues
  • QueueStatus
  • QueueSummary
  • QueueUnpause
  • Redirect
  • Reload
  • SCCPAnswerCall
  • SCCPConference
  • SCCPConfigMetaData
  • SCCPDeviceAddLine
  • SCCPDeviceRestart
  • SCCPDeviceSetDND
  • SCCPDeviceUpdate
  • SCCPDndDevice
  • SCCPHangupCall
  • SCCPHoldCall
  • SCCPLineForwardUpdate
  • SCCPMessageDevice
  • SCCPMessageDevices
  • SCCPMicrophone
  • SCCPShowChannels
  • SCCPShowConference
  • SCCPShowConferences
  • SCCPShowDevice
  • SCCPShowDevices
  • SCCPShowGlobals
  • SCCPShowHintLineStates
  • SCCPShowHintSubscriptions
  • SCCPShowLine
  • SCCPShowLines
  • SCCPShowMWISubscriptions
  • SCCPShowSessions
  • SCCPShowSoftkeySets
  • SCCPStartCall
  • SCCPSystemMessage
  • SCCPTokenAck
  • SendText
  • SetVar
  • ShowDialPlan
  • SIPNotify
  • SIPPeers
  • SIPpeerstatus
  • SIPQualifyPeer
  • SIPShowPeer
  • SIPShowRegistry
  • SKINNYdevices
  • SKINNYlines
  • SKINNYshowdevice
  • SKINNYshowline
  • SorceryMemoryCacheExpire
  • SorceryMemoryCacheExpireObject
  • SorceryMemoryCachePopulate
  • SorceryMemoryCacheStale
  • SorceryMemoryCacheStaleObject
  • Status
  • StopMixMonitor
  • StopMonitor
  • UnpauseMonitor
  • UpdateConfig
  • UserEvent
  • VGSMSMSTx
  • VoicemailRefresh
  • VoicemailUsersList
  • VoicemailUserStatus
  • WaitEvent

调试、日志记录

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

$pami->setLogger($logger);

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

开发者

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

运行 phing 任务

要运行一个任务,只需这样做

vendor/bin/phing build

贡献

要贡献

  • 确保你打开一个 简洁简短 的拉取请求。
  • 添加任何必要的单元测试,以适应新代码或涉及到的更改。
  • 运行 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

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

此分支的维护者

  • Diederik de Groot ddegroot@talon.nl

  • 添加了 SCCP 消息实现。

  • 对于从 ActionMessages 返回的 ReponseEvents(返回多个/复杂的结果)进行 ResponseHandling Orig PR:73

  • 注意:在 ResponseHandling 方面得到了 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 在添加拨号线支持方面的帮助和测试环境。

  • 感谢 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) 在异步agi中尝试和修复错误。

  • 感谢 Henning Bragge 在 newstate 事件和队列方面提供帮助。

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

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

  • @NikolayRevin:添加动作 QueueMemberRingInUse,并更新 QueueMemberEvent 和 QueueParamsEvent。见:Orig PR:177

  • @alexmnv:向 ClientImpl 类添加了 getSocket() 方法。见:Orig PR:169

  • @edigomes:添加了 Options-XXXXXX。见:Orig PR:162

  • @amir200xven:添加了 CDR EVent。见:Orig PR:159

  • @wizzle:添加了 PJSIPShowEndpoints 等。见:Orig PR:158Orig 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