使用Teams Bot发送主动消息时偶现“Conversation not found”错误
问题分析与修复建议
会话ID可能更新的场景
- 用户清除Teams客户端缓存并重新登录,本地会话关联被清除,重新建立Bot一对一聊天时会生成新的会话ID。
- Teams客户端版本升级或后台服务更新,触发会话上下文重建,导致会话ID变更。
- 用户在新设备上首次打开与Bot的一对一聊天(此前未在该设备上打开过),可能生成新的会话ID。
- Bot服务重启或应用重新部署,若会话状态未正确持久化,服务器端会话关联丢失,需重新建立会话生成新ID。
“Conversation not found”错误的核心原因
你当前的实现依赖首次对话时获取并长期固定存储的会话ID,但一对一聊天的会话ID并非永久不变,当上述场景发生时,旧的会话ID会失效,导致发送卡片时找不到对应会话,从而触发无规律的错误。
修复建议
1. 动态获取有效会话ID,替代固定存储
- 收到外部POST请求后,通过Microsoft Graph API的
/users/{accountId}/chats接口,过滤出与你的Bot对应的一对一聊天会话(过滤条件可设为chatType为oneOnOne且members包含Bot的ID),获取最新的会话ID。 - 或使用Bot Framework的
CreateConversationAPI,传入用户AAD Object ID和Bot的身份信息,该API会自动查找现有会话或创建新会话,确保拿到的是有效会话ID。
2. 增加会话ID验证与刷新机制
- 在发送Adaptive Cards前,先调用Bot Framework的
GetConversationMembers接口验证存储的会话ID是否有效。若返回“Conversation not found”错误,立即触发刷新流程,重新获取会话ID并更新存储。 - 记录会话ID的最后使用时间,定期(如每周)自动执行一次会话ID刷新,避免长期未使用导致会话失效。
3. 优化Tab应用的会话ID获取逻辑
- 不要仅在首次对话时获取会话ID,每次用户打开Tab应用时,都重新获取当前的会话ID并更新存储,确保存储的是最新的有效ID。
4. 异常捕获与重试机制
- 在发送卡片的代码中捕获“Conversation not found”异常,当触发该异常时,自动执行会话ID刷新流程,重新获取ID后再次尝试发送。若连续多次失败(如3次),再返回错误给外部请求。
内容的提问来源于stack exchange,提问作者Yuji Naito
相关产品推荐
相关产品推荐

