slack-php/slack-socket-mode

提供slack-php Socket Mode实现

0.2.0 2021-07-09 18:36 UTC

This package is auto-updated.

Last update: 2024-09-08 23:12:49 UTC


README

本包提供了slack-php AppServer实现,允许为Slack App Framework for PHP编写的应用程序在Socket Mode下运行。Socket Mode使用WebSocket协议与Slack通信,允许您在没有通过公共HTTP端点暴露应用程序的情况下运行应用程序(甚至本地)。这对于在不违反大多数工作相关的防火墙限制的情况下测试Slack应用程序非常有用。

本包仅用于测试,不适合生产使用。

此Socket Mode实现使用了来自Ampamphp/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();