如何使用Azure数据存储和MS Bot Framework使用(获取和设置)用户数据?

时间:2018-04-09 14:03:36

标签: c# azure azure-storage botframework

我在MS Bot Framework项目中使用Azure存储。 我已经在this article中了解了机器人内部服务的配置,我已经正确地将其应用于我的项目。我知道有这些原语用于访问和使用会话/用户/ ...数据(描述here)。问题是最后一页描述的方法都是过时的和无用的。我想知道是否有办法将这些旧方法也用于azure存储,或者有类似的方法来使用它,或者我被迫使用原始的Azure存储方法来访问这些数据(如this) ,因为在MS文档中我只发现了如何配置存储而不是如何使用它。

1 个答案:

答案 0 :(得分:1)

您可以使用3 databags来存储州数据。它们位于context对象中。它们是UserDataConversationDataPrivateConversationData

至于如何访问它们(获取/设置),这取决于您尝试从哪里获取数据。如果您在消息控制器中(无法访问上下文对象),则必须执行以下操作:

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);
}

在对话框中或当您有权访问上下文对象时,它就像

一样简单
context.UserData.SetValue("KEY ONE", "value1");
context.UserData.GetValue<string>("KEY ONE");