【发布时间】:2017-09-22 05:55:22
【问题描述】:
我正在构建一个机器人,我想在其中保存和检索 Bot 状态服务中的某些状态(使用 .NET Bot Builder SDK)。由于在 IDialogContext 的 PrivateConversationData 或 UserData 属性中保存不起作用(它没有保存任何内容),我所做的是在对话框中编写一段类似于以下内容的代码:
List<Value> valuesToStore = GetSomeValuesToStore();
StateClient stateClient = ((Activity)context.Activity).GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(context.Activity.ChannelId, context.Activity.Conversation.Id);
if (userData != null && userData.GetProperty<List<Value>>(VALUES_NAME) != null)
{
DoSomethingWithUserData(userData);
}
else
{
//save values in state
userData.SetProperty(VALUES_NAME, valuesToStore);
await stateClient.BotState.SetUserDataAsync(context.Activity.ChannelId, context.Activity.Conversation.Id, userData);
}
在该代码仅执行一次之后,每当有新消息到达我的机器人时,我就会开始收到以下异常:
"Settings must be of the form \"name=value"\."
这似乎与 Azure 存储连接有关(我猜是 Bot Framework 用来存储状态的东西)。不知何故,我让机器人处于不一致的状态,为此我找到的唯一解决方案是在 Bot Framework Developer Portal 中创建一个新机器人,并自行保存状态。
而前段时间,一个类似的我也得到了类似的错误:
"Null properties cannot be encrypted. Please assign a default value to the property if you wish to encrypt it.";
这显然是因为我试图存储的对象包含具有空值的属性。但同样的事情,我无法让机器人恢复正常状态;我必须创建一个新消息,因为每当机器人尝试检索状态时,每条新消息都会导致异常。
对此有什么想法吗?
谢谢!
【问题讨论】:
标签: botframework azure-table-storage