Bot Framework:ConversationState能否存储全用户ConversationReference及范围咨询
Bot Framework 主动消息存储问题解答
核心结论
Bot Framework 的 ConversationState 对象是针对单个对话(用户与机器人的会话实例)的,并非全局通用。它的存储分区和加载逻辑都绑定到当前对话的 ConversationId,没办法直接用来存储所有用户的 ConversationReferences 集合。
具体原因
ConversationState 的数据存储键由当前对话上下文生成,每次调用时只会加载对应单个对话的状态数据。如果尝试把所有用户的 ConversationReferences 存入某个对话的 ConversationState,这些数据只会属于该对话,其他对话的状态中不会包含,后续 Notify Controller 遍历发送时根本无法获取全量的用户会话引用。
解决方案
不能依赖 ConversationState 管理全局的用户会话引用集合,需要单独维护一个全局存储:
- 利用你已配置的 CosmosDB,新建一个独立的容器(例如命名为
ConversationReferences),专门存储所有用户的ConversationReference数据 - 当用户首次与机器人交互时,从对话上下文中提取
ConversationReference,写入这个全局容器 - Notify Controller 主动从该全局容器中加载所有有效的
ConversationReference,逐个发起主动消息发送 - 额外处理:定期清理过期或无效的会话引用(比如用户已删除对话的情况),发送时捕获异常避免影响批量发送
内容的提问来源于stack exchange,提问作者punjabi
相关产品推荐
相关产品推荐

