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

Slack Bolt API:提交操作时更新模态视图遭遇'not_found'错误

解决Slack模态视图view_submission中update失败的问题

我之前也碰到过一模一样的问题,核心原因是在view_submission事件里,你不能先调用空的ack()再单独执行client.views.update——当你执行await ack()却不带任何参数时,Slack会默认判定你要关闭当前模态视图,此时原视图的view_id会立即失效,后续再调用views.update自然会返回not_found错误。而在app.actions()里处理模态内按钮点击时,视图还处于活跃状态,所以直接调用views.update能正常生效。

正确解决方案:通过ack()参数直接返回更新指令

在view_submission事件中,Slack支持你通过ack()的参数直接指定response_action来更新当前视图,这样就能在确认提交请求的同时完成视图替换,完全不需要单独调用client.views.update。

修改你的代码如下:

app.view('callback_period', async ({ ack, body, view, client }) => {
  try {
    // 在ack中直接携带更新动作和新视图配置
    await ack({
      response_action: "update",
      view: views_payroll_prefill_shift
    });
    console.log("视图更新成功");
  } catch (error) {
    console.error("视图更新失败:", error);
  }
});

为什么这种方式可行?

当你在ack()里传入response_action: "update"和新视图对象时,Slack会以原子性的方式处理:先确认提交请求,同时直接用新视图替换当前模态视图,整个过程中视图的状态是连续的,不会出现原视图ID失效的问题。

额外注意点

  • 如果需要先处理用户输入(比如表单验证、调用外部接口)再更新视图,要确保整个处理流程在3秒内完成(Slack要求的响应超时时间)。如果处理时间超过3秒,你需要先调用空的ack()确认请求,之后用client.views.push打开新的模态视图(因为此时原视图已经被关闭,无法再执行update操作)。
  • 要确认views_payroll_prefill_shift的结构完全符合Slack模态视图的规范,没有语法或格式错误,否则也可能导致更新失败。

内容的提问来源于stack exchange,提问作者Mike Budgell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:52:44