slack-php / slack-socket-mode
提供slack-php Socket Mode实现
0.2.0
2021-07-09 18:36 UTC
Requires
- amphp/websocket-client: ^1.0
- slack-php/slack-app-framework: >=0.5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^0.12.90
README
本包提供了slack-php AppServer
实现,允许为Slack App Framework for PHP编写的应用程序在Socket Mode下运行。Socket Mode使用WebSocket协议与Slack通信,允许您在没有通过公共HTTP端点暴露应用程序的情况下运行应用程序(甚至本地)。这对于在不违反大多数工作相关的防火墙限制的情况下测试Slack应用程序非常有用。
本包仅用于测试,不适合生产使用。
此Socket Mode实现使用了来自Amp的
amphp/websocket-client
包,Amp是一组出色的PHP包,使得在PHP中进行异步和事件循环风格编程成为可能。请尝试了解一下。
安装
- 需要PHP 7.4+
- 使用Composer安装:
composer require slack-php/slack-socket-mode
用法
在使用Socket Mode时,没有Web服务器为您提供服务。当运行配置为Socket Mode的应用程序时,它会作为WebSocket客户端连接到Slack。它保持该连接以监听Slack事件,直到明确终止(例如,通过CTRL+C
)、在应用程序配置中禁用Socket Mode或发生不可恢复的错误。这与许多人不习惯的PHP运行方式不同,所以请特别注意。
当在Slack Mode中运行应用程序时,您需要一个“应用程序令牌”而不是典型的“签名密钥”。应用程序令牌专门用于建立WebSocket连接。您可以在Slack文档中阅读有关Socket Mode的更多信息,了解如何获取应用程序令牌。
示例
此小型应用程序响应/cool
斜杠命令。
假设
- 您已要求Composer自动加载器以启用框架文件的自动加载。
- 您已将
SLACK_APP_TOKEN
设置在环境变量中(例如,putenv("SLACK_APP_TOKEN=foo");
)
<?php use Psr\Log\LogLevel; use SlackPhp\Framework\{App, Context, StderrLogger}; use SlackPhp\SocketMode\SocketServer; App::new() ->command('cool', function (Context $ctx) { $ctx->ack(':thumbsup: That is so cool!'); }) ->withLogger(new StderrLogger(LogLevel::DEBUG)) ->run(new SocketServer());
切换服务器
应用程序和服务器之间的关系也可以颠倒,如果引导脚本在Socket和HTTP服务器之间切换,这可能很有帮助。
<?php use Psr\Log\LogLevel; use SlackPhp\Framework\{App, Context, StderrLogger}; use SlackPhp\Framework\Http\HttpServer; use SlackPhp\SocketMode\SocketServer; $app = App::new() ->command('cool', function (Context $ctx) { $ctx->ack(':thumbsup: That is so cool!'); }); if (getenv('SOCKET_MODE')) { $server = SocketServer::new()->withLogger(new StderrLogger(LogLevel::DEBUG)); } else { $server = HttpServer::new()->withLogger(new StderrLogger(LogLevel::NOTICE)); } $server->withApp($app)->start();