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秒,支持配置延长),适合中等耗时场景:
- 将自适应卡片的操作按钮改为
Action.OpenUrl或配置Action.Submit触发Task Module; - 在Task Module中加载页面或Bot对话处理耗时操作,完成后返回结果并关闭模块。
关键提示
- Teams自适应卡片的15秒超时是客户端硬限制,无法通过SDK修改,只能通过异步处理或组件替换规避;
- 异步处理时需确保Bot会话上下文正确保存,避免任务完成后无法定位原对话更新卡片。
内容的提问来源于stack exchange,提问作者sagar
相关产品推荐
相关产品推荐

