coderstephen/slack-client

此包已废弃,不再维护。没有建议的替代包。

更好的Slack客户端,支持RTM API

v0.3.0 2017-04-19 14:21 UTC

This package is not auto-updated.

Last update: 2020-01-20 03:38:03 UTC


README

Build Version License Code Coverage Code Quality Downloads

这是为PHP客户端提供的Slack API客户端,支持使用Web sockets的实时消息API (RTM API)。

项目状态

此项目基于一些过时且未维护的库,并且自身也未得到积极维护。

概述

这个库主要是为Slackyboy创建的,但后来从主分支分离出来,以便可以在其他项目中使用。我创建这个客户端是因为现有的客户端要么使用起来太复杂,要么有bug,要么不完整。这也是我所知第一个支持Slack RTM API的PHP客户端。

安装

显然,使用 Composer 进行安装

$ composer require coderstephen/slack-client

请注意,当前版本有不稳定依赖。

为了安装这些依赖,您可以在您的 composer.json 中设置 "minimum-stability",并建议您设置 "prefer-stable"

{
    "minimum-stability": "dev",
    "prefer-stable": true
}

用法

首先,您需要创建一个客户端对象以连接到Slack服务器。您首先需要从Slack获取您的应用API令牌,然后将令牌传递给客户端对象进行登录。由于此库使用React,您还必须传递一个事件循环对象

$loop = \React\EventLoop\Factory::create();

$client = new \Slack\ApiClient($loop);
$client->setToken('YOUR-TOKEN-HERE');
// ...
$loop->run();

假设您的令牌有效,您可以开始了!您现在可以使用包装方法来访问大部分 Slack API。以下是一个以登录用户身份向频道发送消息的示例

$client->getChannelById('C025YTX9D')->then(function (\Slack\Channel $channel) use ($client) {
    $client->send('Hello from PHP!', $channel);
});

高级消息

Slack支持比纯文本更丰富的消息,通过附件。创建自定义消息的最简单方法是使用MessageBuilder

use Slack\Message\{Attachment, AttachmentBuilder, AttachmentField};

$message = $client->getMessageBuilder()
    ->setText('Hello, all!')
    ->setChannel($someChannelObject)
    ->addAttachment(new Attachment('My Attachment', 'attachment text'))
    ->addAttachment(new Attachment('Build Status', 'Build failed! :/', 'build failed', 'danger'))
    ->addAttachment(new AttachmentBuilder()
        ->setTitle('Some Fields')
        ->setText('fields')
        ->setColor('#BADA55')
        ->addField(new AttachmentField('Title1', 'Text', false))
        ->addField(new AttachmentField('Title2', 'Some other text', true))
        ->create()
    ]))
    ->create();

$client->postMessage($message);

查看API文档,了解消息、附件和字段支持的所有方法和属性列表。

异步请求和Promise

所有客户端请求都使用React promises异步进行。因此,大多数客户端方法都返回Promise。这使您可以轻松地组合请求顺序,并根据需要处理它们。由于它使用React,请确保调用$loop->run(),否则不会发送任何请求。

React允许客户端在请求时表现良好,防止整个线程被阻塞。当编写实时应用程序(如Slack聊天机器人)时,这特别有用。

实时消息API

您还可以使用实时消息API(Real Time Messaging API)连接到Slack。这通常用于创建Slack机器人或消息客户端。实时客户端类似于常规客户端,但它可以启用实时接收事件。首先,您需要创建客户端

$client = new \Slack\RealTimeClient();
$client->setToken('YOUR-TOKEN-HERE');
$client->connect();

然后您可以使用客户端像平常一样工作;RealTimeClient扩展了ApiClient,并且具有相同的发送请求的API。您可以使用RealTimeClient::on()方法附加回调来处理接收到的Slack事件

$client->on('file_created', function($data) {
    echo 'A file was created called ' . $data['file']['name'] . '!\n';
});

下面是一个非常简单的完整示例

$loop = React\EventLoop\Factory::create();

$client = new Slack\RealTimeClient($loop);
$client->setToken('YOUR-TOKEN-HERE');

// disconnect after first message
$client->on('message', function ($data) use ($client) {
    echo "Someone typed a message: ".$data['text']."\n";
    $client->disconnect();
});

$client->connect()->then(function () {
    echo "Connected!\n";
});

$loop->run();

有关可能事件的列表,请参阅Slack API文档

文档

您可以在此处查看完整的API文档。

运行测试

安装依赖项后,您可以使用PHPUnit运行自动化单元测试。

$ vendor/bin/phpunit

获取帮助的地方

需要帮助?只需给我发邮件并提出您的问题。请确保在邮件主题行中添加“Slack客户端”,这样我知道如何帮助您。

许可证

此库采用MIT许可证。有关详细信息,请参阅LICENSE文件。