Slack交互按钮点击后响应仅出现在最后一条消息下如何解决
操作步骤:请依次点击「Approve」和「Yes」按钮:
问题成因
- 你当前的代码没有为响应消息指定所属的原始消息关联标识,Slack默认会将同源交互的异步响应统一追加到最新的相关消息下方。你的两个按钮复用了同一个
action_id,且响应时没有明确绑定触发交互的原始消息ID,Slack无法区分响应要关联到哪条消息,所以所有返回都只会出现在最后一条消息下方。
实现方案
调整响应参数,明确指定响应要绑定的原始消息标识即可,修改后的代码如下:
app.blockAction("button-action", (req, ctx) -> { // 3秒内必须返回ack确认收到请求,否则Slack会判定交互超时 ctx.ack(); String value = req.getPayload().getActions().get(0).getValue(); if (req.getPayload().getResponseUrl() != null) { ctx.respond(res -> res // 可根据需求调整:ephemeral仅点击用户可见,in_channel为频道全可见 .responseType("ephemeral") .text("You " + value + " it") // 核心配置:绑定当前触发交互的原始消息,确保响应出现在对应消息下方 .threadTs(req.getPayload().getMessage().getTs()) ); } return ctx.ack(); });
- 核心修改说明:
- 通过
req.getPayload().getMessage().getTs()获取被点击按钮所属原始消息的唯一标识ts,赋值给threadTs参数,明确告知Slack响应的关联目标。
- 通过
内容的提问来源于stack exchange,提问作者Mike_111
相关产品推荐
相关产品推荐

