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

Teams中Bot Framework Python SDK自适应卡片超时报错求助

问题描述

我在Teams渠道中使用Bot Framework SDK(Python版本)时遇到一个问题:即使后台流程已成功完成且能正常返回响应,自适应卡片的操作按钮仍会显示“无法连接应用,请重试”的错误。我查阅了微软相关官方文档,但未找到针对Python的具体解决方案,希望获得以下任一方向的解决办法:

  • 能否禁用操作按钮的10/15秒超时限制?
  • 是否有其他方法延长该15秒超时时间?
  • 能否让操作按钮等待响应完成,而非直接抛出错误信息?
解决方案

首先明确核心限制:Teams客户端对自适应卡片的操作提交有默认15秒的硬超时限制,这个限制是客户端层面的,无法通过Bot Framework SDK直接禁用或延长。只能通过业务逻辑改造来规避超时问题,以下是Python SDK的具体实现方案:

方法1:异步处理+即时响应+卡片更新(官方推荐)

核心思路是先给Teams客户端返回即时响应避免触发超时,再后台异步处理长耗时任务,完成后更新原卡片内容。

步骤与代码示例

from botbuilder.core import TurnContext, ActivityHandler
import asyncio

class LongTaskBot(ActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        # 识别自适应卡片的操作提交请求
        if turn_context.activity.value:
            # 1. 立即返回响应,更新卡片为"处理中"状态,避免超时
            await turn_context.update_activity({
                "type": "message",
                "attachments": [
                    {
                        "contentType": "application/vnd.microsoft.card.adaptive",
                        "content": {
                            "type": "AdaptiveCard",
                            "version": "1.0",
                            "body": [{"type": "TextBlock", "text": "正在处理,请稍候..."}]
                        }
                    }
                ],
                "id": turn_context.activity.reply_to_id
            })

            # 2. 启动异步任务处理耗时操作
            asyncio.create_task(self._handle_long_task(turn_context))
            return

        # 普通消息处理逻辑
        await turn_context.send_activity(f"收到消息: {turn_context.activity.text}")

    async def _handle_long_task(self, turn_context: TurnContext):
        # 模拟长耗时操作(如API调用、数据库查询等)
        await asyncio.sleep(20)

        # 3. 任务完成后更新卡片为结果状态
        await turn_context.update_activity({
            "type": "message",
            "attachments": [
                {
                    "contentType": "application/vnd.microsoft.card.adaptive",
                    "content": {
                        "type": "AdaptiveCard",
                        "version": "1.0",
                        "body": [{"type": "TextBlock", "text": "处理完成!结果:示例数据"}]
                    }
                }
            ],
            "id": turn_context.activity.reply_to_id
        })

方法2:用Task Module替代自适应卡片操作按钮

如果需要用户等待处理结果,可改用Teams的Task Module,它的超时限制更长(默认30秒,支持配置延长),适合中等耗时场景:

  1. 将自适应卡片的操作按钮改为Action.OpenUrl或配置Action.Submit触发Task Module;
  2. 在Task Module中加载页面或Bot对话处理耗时操作,完成后返回结果并关闭模块。
关键提示
  • Teams自适应卡片的15秒超时是客户端硬限制,无法通过SDK修改,只能通过异步处理或组件替换规避;
  • 异步处理时需确保Bot会话上下文正确保存,避免任务完成后无法定位原对话更新卡片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:55:08