如何在消息控制器之类的对话框之外访问Bot Framework ConversationData?
在我的机器人的对话框中,我在ConversationData中存储一个标志值,如下所示:
context.ConversationData.SetValue("SomeFlag", true);
稍后, 在将消息分派到对话框之前 ,我需要在MessagesController中检查该标志。 根据上一个问题,我尝试通过StateClient检索ConversationData,如下所示:
public async Task Post([FromBody] Activity incomingMessage) { StateClient stateClient = incomingMessage.GetStateClient(); BotData userData = await stateClient.BotState.GetConversationDataAsync(message.ChannelId, message.Conversation.Id); bool finishedQuote = userData.GetProperty("SomeFlag"); //... // do conditional logic, then dispatch to a dialog as normal }
但是,在运行时, userData
变量包含一个BotData对象,其中userData.Data
为null,并且我无法通过GetProperty
检索任何存储的标志。 我没有在相关文档中看到任何有助于阐明这个问题的内容 – 我可能在这里做错了什么? 有什么我误解的吗?
以下内容适合您的需求:
if (activity.Type == ActivityTypes.Message) { var message = activity as IMessageActivity; using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) { var botDataStore = scope.Resolve>(); var key = Address.FromActivity(message); ConversationReference r = new ConversationReference(); var userData = await botDataStore.LoadAsync(key, BotStoreType.BotUserData, CancellationToken.None); //you can get/set UserData, ConversationData, or PrivateConversationData like below //set state data userData.SetProperty("key 1", "value1"); userData.SetProperty("key 2", "value2"); //get state data userData.GetProperty("key 1"); userData.GetProperty ("key 2"); await botDataStore.SaveAsync(key, BotStoreType.BotUserData, userData, CancellationToken.None); await botDataStore.FlushAsync(key, CancellationToken.None); } await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); }
使用StateClient初始化BotState对象,如下所示。 请尝试以下代码
public static T GetStateData(Activity activity, string key) { BotState botState = new BotState(activity.GetStateClient()); BotData botData = botState.GetConversationData(activity.ChannelId, activity.Conversation.Id); return botData.GetProperty (key); }
- 从消息控制器c#访问对话数据
- 有没有办法接受文件作为机器人框架中的附件?
- 将模型和订阅密钥传递给LuisDialog而不是通过属性
- Messenger bot中出现PromptDialog错误
- 当用户向我的机器人发送消息时,他会收到欢迎消息。 但是当用户响应时,bot会再次发送欢迎消息。 我怎样才能解决这个问题?
- 带有Facebook Messenger按钮的Microsoft Bot Framework消息
- 我们可以让聊天机器人先说问候,而不仅仅是作为一种反应
- 团队通道1:1上的botframework集成了身份validationAAD
- 如何使用提示unit testingMicrosoft bot对话框