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

Slack Bolt Python模态框已调用ack()仍无法关闭问题求助

Slack视图提交模态框不关闭问题排查与解决

我按照官方文档实现了Slack密码重置视图的提交处理函数,密码规则校验通过后立即调用ack(),用time模块检测整个前置逻辑耗时远低于3秒,但模态框始终不关闭,还弹出错误提示:

We had some trouble connecting. Try again?
奇怪的是,后续密码重置功能可以正常执行。代码如下:

@app.view("reset_jc_password_view")
def handle_password_submission(ack, body, client, view, logger):
    """
    Handle reset password submission
    """
    start = time()
    new_pass = view["state"]["values"]["jc_reset_password_field"]["jc_reset_password_action"]["value"]
    user_id = body["user"]["id"]
    user_email = body["user"]["username"]

    # Password criteria
    errors = {}
    if len(new_pass) < 12 or not re.search("[a-z]", new_pass) or not re.search("[A-Z]", new_pass) or not re.search("[0-9]", new_pass):
        errors["jc_reset_password_field"] = "Password must contain at least 12 characters, at least 1 uppercase letter, at least 1 lowercase letter, at least 1 number, at least 1 symbol"
    if len(errors) > 0:
        ack(response_action="errors", errors=errors)
        return
    
    ack()
    now = time()
    print(f"Execution time: {now - start}")

排查方向与解决方案

1. 确认ack()的响应发送优先级

Slack要求视图提交的ack()必须是第一个返回给Slack服务器的响应,且不能有任何前置的IO操作(比如print、日志写入)干扰响应发送。

  • 暂时把print语句移到ack()之前测试,或者直接注释掉所有非必要输出,看模态框是否正常关闭。
  • 确保ack()调用后没有阻塞性的代码(比如耗时的数据库操作、API调用),如果有,把这些逻辑放到ack()之后的异步任务里执行(比如用asyncio.create_task或者Celery)。

2. 检查异步/同步模式是否匹配

如果你的Bolt应用是用AsyncApp初始化的,处理函数必须是异步函数,且ack()需要用await调用:

@app.view("reset_jc_password_view")
async def handle_password_submission(ack, body, client, view, logger):
    # ... 原有逻辑 ...
    await ack()

如果是同步模式,确保应用初始化用的是App而非AsyncApp。

3. 验证视图字段ID一致性

检查模态框配置中的block_id和action_id是否和代码中的jc_reset_password_field、jc_reset_password_action完全一致。ID不匹配会导致Slack无法正确识别错误响应或确认响应。

4. 升级Slack Bolt版本

旧版本的Bolt Python可能存在响应发送的bug,执行以下命令升级到最新版:

pip install slack-bolt --upgrade

5. 排查网络延迟

虽然本地计时短,但服务器到Slack API的网络可能存在隐性延迟。可以:

  • 在ack()之后立即return,不执行后续逻辑,测试模态框是否关闭。
  • 检查服务器的网络连通性,确保能快速访问Slack的API端点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:25