使用 BotFramework 实现主动消息传递时,我如何确保机器人状态不被覆盖

问题描述 投票:0回答:0

在c#中

当收到输入的消息时,机器人控制器会触发 _adapter.ProcessAsync(Request, Response, _bot) 中间件会在回合完成后保存当前的机器人状态,包括对话堆栈。

当接收到主动消息时,调用 _adapter.ContinueConversationAsync(_appId, conversationReference, BotCallback) 中间件的不同控制器将再次保存机器人状态,包括回合完成时的对话堆栈。

似乎存在竞争条件。机器人服务器代码可以为同一个对话/用户同时运行,因此保存的机器人状态 + 对话堆栈最终成为最后运行的胜利。

_adapter.ProcessAsync(请求,响应,_bot); --- 开始捕获机器人状态

主动消息恢复 ContinueConversationAsync ... --- 开始捕获机器人状态 --- 中断当前对话 --- 运行自适应对话框,提出问题
--- 结束保存其机器人状态版本

_adapter.ProcessAsync(请求,响应,_bot); --- 结束保存其机器人状态版本 --- 覆盖主动保存的机器人状态

这可以表现为 botframework 无法找到对话框 id 异常,因为在调用对话框继续时预期的对话框不在对话框堆栈中。

有没有一种方法可以确保为每个 conersationid / 用户顺序处理发送到 bot 服务器代码的消息?

botframework
© www.soinside.com 2019 - 2024. All rights reserved.