如何使用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
相关产品推荐
相关产品推荐

