【问题标题】:Inconsistent state after trying to save object in Bot Framework State Service尝试在 Bot Framework 状态服务中保存对象后状态不一致
【发布时间】: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


    【解决方案1】:

    当状态被破坏时,您可以向机器人发送 " /deleteProfile" 消息,机器人将清除该用户的状态。

    不建议将默认状态客户端用于生产机器人。请查看此博文https://blog.botframework.com/2017/07/18/saving-state-azure-extensions/

    activity.GetStateClient() 是默认的状态客户端。您应该使用 IDialogContext 方法与状态交互。你提到“它没有保存任何东西”。为什么不呢?

    可以将空属性保存到状态中。这不应该是一个问题。您看到的关于 state 中的 null 属性的错误是一个已修复的错误。

    【讨论】:

    • 感谢您的回答埃里克。不幸的是,我忘了提到我尝试以多种方式删除状态,以编程方式使用 SDK,并且如您所述,向机器人发送 /deleteProfile。并且 IDialogContext 方法只保存在 PriveUserConversationData 上,并且只持续一条消息(下一条消息的状态为空)。
    • 我在 bot 框架文档上读到它不打算在产品中使用,但我只是在做一个简单的测试。很棒的博文!
    • 请再次尝试使用 IDialogContext 方法。如果遇到问题,请在 StackOverflow 上发布问题,或者如果您认为自己发现了错误,请在 github 存储库中发布:github.com/Microsoft/BotBuilder
    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多