如何在Bolt for Java的Slack模态框中调用chatPostMessage()发送内容到频道?
实现模态框提交内容发送到启动频道的方案
要实现将模态框提交的内容发送到其启动的频道,需按以下两步操作:
1. 启动模态框时保存频道ID
当用户通过/launchModal命令打开模态框时,把当前频道ID存入模态框的privateMetadata字段,确保后续提交事件能获取到目标频道。示例代码如下:
app.command("/launchModal", (req, ctx) -> { ctx.client().viewsOpen(r -> r .triggerId(ctx.getTriggerId()) .view(v -> v .callbackId("case-handoff") .privateMetadata(ctx.getChannelId()) // 存储启动模态框的频道ID // 以下为模态框布局示例,可根据需求调整 .blocks(Arrays.asList( InputBlock.builder() .blockId("firstName") .element(PlainTextInputElement.builder().actionId("agenda-action1").build()) .label(PlainTextObject.builder().text("姓名").build()) .build() )) ) ); return ctx.ack(""); });
2. 模态框提交时发送消息
在viewSubmission处理逻辑中,从privateMetadata取出频道ID,调用chatPostMessage方法将用户输入内容发送到目标频道,同时修正原代码中的变量名错误:
// 用户点击模态框“提交”按钮时触发 app.viewSubmission("case-handoff", (req, ctx) -> { // 获取启动模态框的频道ID String channelId = req.getPayload().getView().getPrivateMetadata(); Map<String, Map<String, ViewState.Value>> stateValues = req.getPayload().getView().getState().getValues(); String firstName = stateValues.get("firstName").get("agenda-action1").getValue(); Map<String, String> errors = new HashMap<>(); // 修正原代码变量名错误,将caseName改为firstName if (firstName.length() <= 10) { errors.put("firstName", "输入内容需要超过10个字符。"); } if (!errors.isEmpty()) { return ctx.ack(r -> r.responseAction("errors").errors(errors)); } else { // 调用chatPostMessage发送内容到目标频道 ctx.client().chatPostMessage(r -> r .channel(channelId) .text(firstName) ); return ctx.ack(""); } });
效果验证
当用户在模态框输入John Smith并提交后,启动模态框的频道会显示:
John Smith
内容的提问来源于stack exchange,提问作者newbieJ
相关产品推荐
相关产品推荐

