【发布时间】:2018-05-11 01:55:29
【问题描述】:
我一直在使用 context.setvalue();和 context.TryGetvalue();将数据存储和接收到 Bot Framework 中的不同存储。
我想知道我们如何从 MessageController.cs 访问这些值
已经尝试创建一个新对象,它对我不起作用。
【问题讨论】:
标签: c# botframework
我一直在使用 context.setvalue();和 context.TryGetvalue();将数据存储和接收到 Bot Framework 中的不同存储。
我想知道我们如何从 MessageController.cs 访问这些值
已经尝试创建一个新对象,它对我不起作用。
【问题讨论】:
标签: c# botframework
我在搜索我发布的另一个答案时发现了这篇文章。我希望将来来到这里的任何人都知道正确的方法。
StateClient stateClient = activity.GetStateClient(); 仅获取 Default 状态客户端,该客户端已于 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<IBotDataStore<BotData>>();
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<string>("key 1");
userData.GetProperty<string>("key 2");
await botDataStore.SaveAsync(key, BotStoreType.BotUserData, userData, CancellationToken.None);
await botDataStore.FlushAsync(key, CancellationToken.None);
}
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
}
【讨论】:
System.MissingMethodException: Method not found: 'Autofac.IContainer Microsoft.Bot.Builder.Dialogs.Conversation.get_Container()'. 异常。使用 Microsoft.Bot.Builder 3.15。反编译 DLL (JetBrains dotPeek),令我惊恐的是,Conversation 类不见了!还有人得到这个吗? @AlokRajasukumaran ?
要获取对话数据,您需要对上下文的引用或从活动中获取状态客户端。
在对话框中你可以使用上下文: http://robinosborne.co.uk/2016/08/08/persisting-data-within-a-conversation-with-botframeworks-dialogs/
在对话框之外,您可以使用活动来获取状态客户端:
StateClient stateClient = activity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
if (userData.GetProperty<bool>("SentGreeting"))
// do something
https://docs.botframework.com/en-us/csharp/builder/sdkreference/stateapi.html
希望有帮助!
【讨论】: