Botframework Microsoft Bot Framework:异常:数据已更改
我有一个具有以下对话场景的机器人:Botframework Microsoft Bot Framework:异常:数据已更改,botframework,azure-language-understanding,Botframework,Azure Language Understanding,我有一个具有以下对话场景的机器人: 给路易斯发短信 LUIS intent调用上下文。调用(…)启动对话框 此对话框终止,请在userData中保存一些信息: 私有静态异步任务storeBotData(IDialogContext上下文,BotData userData) { 活动活动=(活动)context.Activity; StateClient sc=activity.GetStateClient(); 等待sc.BotState.SetUserDataAsync(activity.Ch
上下文。调用(…)
启动对话框私有静态异步任务storeBotData(IDialogContext上下文,BotData userData)
{
活动活动=(活动)context.Activity;
StateClient sc=activity.GetStateClient();
等待sc.BotState.SetUserDataAsync(activity.ChannelId、activity.From.Id、userData);
}
然后调用另一个对话框,再次调用context.call(…)
`Exception: The data is changed [File of type 'text/plain']`...
这里发生了什么?我认为当一个对话框终止时,它会自动调用setUserData
,但我不明白为什么我不能在代码中的任何地方更新userData
我试图抓住这个例外,但什么也没抓住。。但我知道userData是更新的,因为当我试图检索它时,它会被更新
欢迎任何帮助:)
谢谢
Botframework
在每次活动后恢复/保存对话状态,因此在封面下,典型的流程如下所示:
[23:15:40] <- GET 200 getUserData
[23:15:47] <- GET 200 getConversationData
[23:15:47] <- GET 200 getPrivateConversationData
...
[23:16:42] <- POST 200 setConversationData
[23:16:42] <- POST 200 setUserData
[23:16:42] <- POST 200 setPrivateConversationData
它工作的原因是我们修改了UserData的对象,但允许botFramework自己“提交”它,因此没有冲突我同意@Artem(这也解决了我的问题,谢谢!)。我只想补充以下准则
使用
只要有IDialogContext对象可用,就可以让Bot框架提交更改
改用
StateClient sc = activity.GetStateClient();
await sc.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
当您没有IDialogContext对象时,例如在MessageController类中。您使用的是哪个版本的框架?谢谢@Artem,它工作得非常好。您的权利,最好将“提交”部分留给framewrok本身+1.
var data = context.UserData;
data.SetValue("field_name", false);
StateClient sc = activity.GetStateClient();
await sc.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);