BotData 自定义属性值在 Bot 框架中变为 null,有什么问题吗?

BotData custome properties values becomes null in Bot framework, what can be wrong?

我正在开发 MS Bot,现在卡在一个点上,我有两个问题

1) How can I get conversation count in MessageController Post method?
2) The values of userData as mentioned in below code becomes null, when bot came back to messagecontroller for further conversation. My bot flow is as below.

MessageController class 调用 (Chain.From(() => new BotManager()) --> 在 BotManager() 中列出所有意图 --> 从 Intents 我跳转到特定表单,例如 SampleForm,其中我有 formbuilder。

StateClient sc = activity.GetStateClient();
BotData userData = sc.BotState.GetUserData(activity.ChannelId, activity.From.Id);
UserDetails usr = new UserDetails();
usr.EmailId = "test@gmail.com";
userData.SetProperty<string>("EmailId", usr.EmailId);
sc.BotState.SetUserData(activity.ChannelId, activity.From.Id, userData);

1) 我不知道你为什么要创建 UserDetails usr 对象,你用它来分配 EmailId 然后你不将它用于其他任何事情。

2) 要获得您通过 SetUserData 重新分配的内容,您应该使用:

userData.GetProperty<string>("EmailId");

在 RootDialog(实现)IDialog 中,您可以(并且可能是一个好习惯)对 IDialogContext 对象使用 UserData(more info) 属性在对话中为用户存储信息。

在下面的代码中,我尝试检索 ConversationCount 键,然后判断增量是否存在。然后我再次设置结果值(在内部将值存储在 BotState 中)。

context.UserData.TryGetValue("ConversationCount", out int count = 0);
//Increment the message received from the user.
count++;

//Increment when the bot send a message to the user.
count++;
context.UserData.SetValue("ConversationCount", count);

您可以对电子邮件 属性 执行相同的操作。