从消息控制器c#访问对话数据
我一直在使用context.setvalue(); 和context.TryGetvalue(); 在Bot Framework中存储和接收数据到不同的存储。
我想知道如何从MessageController.cs访问这些值
已经尝试过创建一个New对象,它对我不起作用。
我在搜索我发布的另一个答案时找到了这篇文章。 我希望将来有人能够知道正确的方法。
StateClient stateClient = activity.GetStateClient();
获取仅在2018年3月31日之前弃用的默认状态客户端。它已被内存状态存储替换。 如果您已经实现了自己的状态客户端(即cosmosDB,Azure表存储,SQL等),那么在消息控制器中访问状态的正确方法就是这样:
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); //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()); }
要获取会话数据,您需要引用上下文或从活动中获取状态客户端。
在Dialog中你可以使用上下文: http : //robinosborne.co.uk/2016/08/08/persisting-data-within-a-conversation-with-botframeworks-dialogs/
在Dialog之外,您可以使用该活动获取州客户端:
StateClient stateClient = activity.GetStateClient(); BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); if (userData.GetProperty("SentGreeting")) // do something
https://docs.botframework.com/en-us/csharp/builder/sdkreference/stateapi.html
希望有所帮助!
- 团队通道1:1上的botframework集成了身份validationAAD
- 我们可以让聊天机器人先说问候,而不仅仅是作为一种反应
- 如何在Bot Framework中从RootDialog转发到LuisDialog
- Bot Framework无法使用AddKeyboardCard或使用ChannelData发送FacebookQuickReply
- Bot框架模拟器无法正常工作
- 在FormFlows – Bot Framework中为Quit添加另一个关键字
- BotFramework:’状态大小超出配置限制。’
- 如何在Microsoft Bot Framework中避免“抱歉,我的机器人代码有问题”
- 如何在Azure中检索已保存的对话数据(Tablelogger)