geraintp/slack-client

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

v1.2.1 2020-10-17 12:59 UTC

This package is auto-updated.

Last update: 2024-09-17 21:49:08 UTC


README

Build Version License Code Coverage Code Quality Downloads

这是一个用于 PHP 客户端的 Slack API 客户端,支持通过 WebSockets 使用实时消息 API (RTM API)。

概述

此库最初是为 Slackyboy 创建的,但它已分支到自己的代码库,以便也可以在其他项目中使用。我创建此客户端是因为现有的客户端要么太复杂,要么有错误,要么不完整。这也是我所知第一个支持 Slack 的 RTM API 的 PHP 客户端。

安装

显然,使用 Composer 安装

$ composer require mpociot/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, 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 Attachment('Some Fields', 'fields', null, '#BADA55', [
        new AttachmentField('Title1', 'Text', false),
        new AttachmentField('Title2', 'Some other text', true)
    ]))
    ->create();

$client->postMessage($message);

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

异步请求和承诺

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

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

实时消息 API

您还可以使用 实时消息 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文件。