lisennk / laravel-slack-events-api
Laravel 5, 6, 7和8的Slack Events API
Requires
- illuminate/http: ^5.4||^6.2||^7.2||^8.0
- illuminate/routing: ^5.4||^6.2||^7.2||^8.0
- illuminate/support: ^5.4||^6.2||^7.2||^8.0
Requires (Dev)
- orchestra/testbench: ~3.0||^4.0||^5.1
- phpunit/phpunit: ^4.7||^5.0||^8.0||^9.0
This package is not auto-updated.
Last update: 2024-09-16 12:14:10 UTC
README
与Laravel 7事件和事件监听器一样容易地使用Slack Events API。
🔗 使用此包的理由,请参阅Slack Events API
- 基于原生Laravel事件
- 支持所有Slack事件类型(包括新工作空间应用的!)
- 支持令牌验证
- 支持URL验证和"challenge"请求
- PSR兼容的代码
- 完整的文档
- 几乎100%的测试覆盖率
- 文档中有许多表情符号(甚至有猫!🐱)
🌎 安装
1) 使用Composer安装包
composer require lisennk/laravel-slack-events-api
2) 如果你使用的是Laravel 5.5或更高版本,SlackEventsServiceProvider将自动发现。快速开始!
3) 如果你使用的是低于5.5的Laravel版本,你仍需手动注册服务提供商。打开config/app.php
,将\Lisennk\LaravelSlackEvents\SlackEventsServiceProvider::class
添加到providers[]
数组中。
例如
// ... 'providers' => [ // ... // A whole bunch of providers // ... \Lisennk\LaravelSlackEvents\SlackEventsServiceProvider::class, ], // ...
如果你使用的是Laravel 5.3或更高版本,你将在config/app.php
中找到一个注释,其中包含类似/* Package Service Providers... */
的文本,这可以帮助你找到正确的位置。
4) 发布配置文件
php artisan vendor:publish
选择服务提供商的选项,或者在底部的Tag:
列表中找到slack-events
。
接下来我们将配置一些设置以使用Slack API。
5) 创建一个应用或打开现有的应用如果你想要使用Slack的新工作空间应用,请阅读开发者预览中的信息,并创建一个新的工作空间令牌应用以开始。
如果你不使用工作空间应用,请打开Slack应用页面并创建一个新的用户令牌应用。
如果你想要修改现有的应用以使用Slack-Events,你可以在你的应用页面找到工作空间令牌应用和用户令牌应用。
6) 创建或打开你的应用后,你应该会看到基本信息页面。滚动到"应用凭证"部分,并复制底部的验证令牌。
打开.env
,并在'SLACK_EVENT_TOKEN'
键下粘贴你的验证令牌
SLACK_EVENT_TOKEN=your-token
7) 现在打开"事件订阅"页面。在这里你必须启用事件,添加你想要监听的事件,并设置请求URL。请求URL是你的config/slackEvents.php
文件中的'route'
键
return [ /* |------------------------------------------------------------- | Your validation token from "App Credentials" |------------------------------------------------------------- */ 'token' => env('SLACK_EVENT_TOKEN', 'your-validation-token-here'), /* |------------------------------------------------------------- | Events Request URL — path, where events will be served |------------------------------------------------------------- */ 'route' => '/api/slack/event/fire', // <===== THIS IS YOUR REQUEST URL ];
'route'
就像内置的Laravel路由一样工作,所以如果你的网站URL是https://example.com
,你的'route'
是/api/slack/event/fire
,那么你的完整请求URL是https://example.com/api/slack/event/fire
。你可以保留它不变,或者设置自己的路由而不是默认的/api/slack/event/fire
。
此包将为你执行所有验证和"challenge"工作,所以你只需要设置请求URL——默认情况下它是
https://[your-site-url]/api/slack/event/fire
🍴 使用
另请参阅:快速示例.
得益于这个包,使用 Slack 事件 与使用 Laravel 事件 相同。因此,如果您还没有阅读 Laravel 事件文档 或 Slack 事件 API 文档,强烈建议在开始之前阅读它们。
此包为每个有 Slack 事件 API 支持的 Slack 事件 提供一个独立的 Laravel 事件类。例如,reaction_added
事件实现是 Lisennk\LaravelSlackEvents\Events\ReactionAdded
类。
另请参阅:支持的事件及其类的完整列表。
每个事件类都有表示实际 Slack 事件请求的公共字段。
例如,如果您想从 reaction_added 事件中获取反应名称,您可以通过以下方式从 ReactionAdded
事件类中获取它
$reactionAdded->event['reaction']; // reaction name, something like :thumbsup:
因此,假设我们想创建一个 reaction_added
Slack 事件监听器。我们需要做什么?
示例
1) 打开 App/Listeners
目录(如果不存在,则创建它)。现在创建一个新文件,并命名为 ReactionAddedListener.php
。粘贴以下代码
<?php namespace App\Listeners; use \Lisennk\LaravelSlackEvents\Events\ReactionAdded; use Illuminate\Support\Facades\Log; use Illuminate\Contracts\Queue\ShouldQueue; class ReactionAddedListener implements ShouldQueue { /** * Create the event listener. * * @return void */ public function __construct() { // Here you can setup something } /** * Handle the event. * * @param ReactionAdded $event * @return void */ public function handle(ReactionAdded $reactionAdded) { // Do some magic with event data Log::info('New reaction added, reaction name is: ' . $reactionAdded->event['reaction']); } }
如你所见,它是一个普通的事件监听器。你可能注意到了监听器 implements ShouldQueue
— 这很有用,因为我们的应用程序必须遵守 Slack 事件 API 条款,在 三秒内响应用户请求。如果您想在事件监听器中做一些长时间运行的操作,您需要配置一个 队列。
2) 现在我们将此监听器添加到 /App/Providers/EventServiceProvider.php
中,就像其他任何事件监听器一样
// ... protected $listen = [ // ... \Lisennk\LaravelSlackEvents\Events\ReactionAdded::class => [ \App\Listeners\ReactionAddedListener::class ] ]; // ...
3) 大功告成!您已经准备就绪。
🍒 支持的事件及其类的完整列表
🌺 贡献
您可以随意关注此存储库,创建拉取请求或问题,并报告错别字。
📚 参考
- 阅读 Slack 事件 API 官方文档
- 阅读 Laravel 事件文档
- 为了调用 Slack Web API,我们推荐使用 Laravel Slack API 包