You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Slack API Java SDK响应Slash命令并发送消息?

如何用Slack Java SDK响应Slash命令

1. 即时同步响应Slash命令

收到Slash命令的HTTP请求时,无需调用chatPostMessage这类方法,直接返回符合Slack规范的JSON响应即可。SDK提供SlashCommandResponse类来快速构建响应内容:

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.composition.BlockCompositions;
import com.slack.api.model.block.element.BlockElements;
import com.slack.api.slash_command.response.SlashCommandResponse;

// 构建响应内容
SlashCommandResponse response = SlashCommandResponse.builder()
    .text("这是Slash命令的即时响应")
    // 可添加富文本块增强展示
    .blocks(Blocks.asBlocks(
        Blocks.section(block -> block
            .text(BlockCompositions.markdownText("*欢迎使用Slash命令*"))
            .accessory(BlockElements.button(btn -> btn
                .text(BlockCompositions.plainText("点击测试"))
                .actionId("test_button")))
        )
    ))
    .build();

// 根据Web框架返回JSON(比如Spring Boot直接返回该对象即可)
return response;

这种方式是Slash命令的标准即时响应,无需依赖response_url。

2. 用SDK通过response_url发送延迟/后续消息

如果需要处理异步逻辑后再发消息,SDK虽未在chatPost*方法中支持response_url,但提供了ResponseUrlSender工具类专门处理这类请求:

import com.slack.api.Slack;
import com.slack.api.webhook.WebhookResponse;
import com.slack.api.model.message.Message;

// 从Slash命令请求中提取response_url
String responseUrl = slashCommandRequest.getResponseUrl();

// 构建要发送的消息内容
Message message = Message.builder()
    .text("这是通过response_url发送的延迟消息")
    .build();

// 使用SDK工具类发送请求
WebhookResponse webhookResponse = Slack.getInstance().sendResponseUrl(responseUrl, message);

// 校验发送结果
if (webhookResponse.isOk()) {
    // 发送成功的后续逻辑
} else {
    System.err.println("消息发送失败: " + webhookResponse.getError());
}

该工具类已封装HTTP请求逻辑,无需自行编写底层HTTP客户端代码,完全符合SDK使用规范。

3. 关键注意事项

  • 即时响应必须在3秒内返回,否则Slack会向用户提示请求超时,此时需用response_url发送后续消息。
  • response_url有效期为30分钟,最多可发送5条消息。
  • 若要发送仅命令发起者可见的临时消息,可构建EphemeralMessage对象传入sendResponseUrl:
import com.slack.api.model.message.EphemeralMessage;

EphemeralMessage ephemeralMsg = EphemeralMessage.builder()
    .text("这条消息只有你能看到")
    .user(slashCommandRequest.getUserId()) // 指定接收用户ID
    .build();

Slack.getInstance().sendResponseUrl(responseUrl, ephemeralMsg);

内容的提问来源于stack exchange,提问作者Thomas Einwaller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:53:15