You need to enable JavaScript to run this app. Python开发Slack Bot提交Dialog时出现连接报错的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Slack Bot提交Dialog时出现连接报错的问题咨询

报错产生核心原因
  • 缺少Dialog提交请求的处理逻辑。当前代码仅实现了Dialog唤起的能力,Slack在用户点击Dialog的提交按钮后,会将表单提交事件以独立POST请求发送到预先配置的交互回调地址,现有代码未对该类请求做识别和合规响应,直接触发连接异常提示。
  • 接口响应不符合Slack交互规范。Slack对所有交互类回调接口有明确约束:需在3秒内返回200状态码,超时、状态码非200、响应格式错误都会弹出同款连接报错。
  • 服务网络不通。本地调试阶段如果没有配置公网可访问的内网穿透地址,Slack的官方服务器无法正常请求到你的本地服务接口,会判定为连接失败。
  • 未通过请求安全校验。未实现Slack请求签名校验逻辑时,Slack会将对应请求判定为非法回调,直接拦截并返回连接错误提示。
修复方案
  • 在现有Flask路由中增加Dialog提交事件的识别规则,通过请求体的type字段区分「Dialog唤起请求」和「Dialog表单提交请求」
  • 针对Dialog提交请求完成对应业务处理,处理后及时返回200状态码,避免超时
  • 调试阶段确认服务具备公网可访问性,Slack应用后台配置的交互回调地址与代码注册的路由路径完全匹配
  • 为所有Slack交互请求增加签名校验逻辑,符合Slack的安全访问要求

修复后参考代码

from flask import request, make_response
import json

@app.route("/test", methods=["POST"])
def message_actions():
    data = request.form
    request_type = data.get("type")

    # 处理Dialog表单提交请求
    if request_type == "dialog_submission":
        submission = json.loads(data.get("submission"))
        selected_drink = submission.get("meal_preferences")
        submit_user_id = json.loads(data.get("user"))["id"]

        # 执行核心业务逻辑:向用户发送订单确认消息
        client.chat_postMessage(
            channel=submit_user_id,
            text=f"已收到你的{selected_drink}咖啡订单"
        )
        # 按Slack规范返回200响应
        return make_response("", 200)

    # 原有Dialog唤起逻辑
    user_id = data.get("user_id")
    client.api_call(
        api_method="dialog.open",
        json={
            "trigger_id": data.get("trigger_id"),
            "dialog": {
                "title": "Request a coffee",
                "submit_label": "Submit",
                "callback_id": user_id + "coffee_order_form",
                "elements": [
                    {
                        "label": "Coffee Type",
                        "type": "select",
                        "name": "meal_preferences",
                        "placeholder": "Select a drink",
                        "options": [
                            {"label": "Cappuccino", "value": "cappuccino"},
                            {"label": "Latte", "value": "latte"},
                            {"label": "Pour Over", "value": "pour_over"},
                            {"label": "Cold Brew", "value": "cold_brew"}
                        ]
                    }
                ]
            }
        }
    )
    return make_response("", 200)

注意:如果Dialog提交后的业务逻辑耗时较长(如数据库查询、第三方接口调用),需要先返回200响应给Slack,再通过异步任务处理后续流程,避免请求超时触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 04:15:02