gbksoft / slack-client
支持RTM API的更好的Slack客户端
Requires
- php: >=5.5
- devristo/phpws: dev-master
- evenement/evenement: 2.0.*
- guzzlehttp/guzzle: ~6.0
- react/event-loop: ^0.4.1
- react/promise: ^2.2
Requires (Dev)
- apigen/apigen: ^4.1
- fzaninotto/faker: ~1.4
- phpunit/phpunit: ~4.6
README
这是用于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 文档 了解消息、附件和字段支持的所有方法和属性列表。
异步请求和承诺
所有客户端请求都是使用 React承诺 异步执行的。因此,大多数客户端方法都返回承诺。这使得您可以轻松地组合请求顺序,并按需处理它们。由于它使用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文件。