【问题标题】:Store user state data in Microsoft Bot在 Microsoft Bot 中存储用户状态数据
【发布时间】:2019-02-03 04:34:20
【问题描述】:
  public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        if (activity.Type == ActivityTypes.Message)
        {
            Activity isTypingReply = activity.CreateReply();
            isTypingReply.Type = ActivityTypes.Typing;
            await connector.Conversations.ReplyToActivityAsync(isTypingReply);
            StateClient sc = activity.GetStateClient();
            BotData userData = await sc.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); // have to check on monday

            if (!userData.GetProperty<bool>("ChannelUserData"))
            { // fetch user details    

以上 sn-p 从 MS Bot SDK 1.x 应用程序更新状态中的用户数据。现在我正在尝试将旧机器人应用程序升级到 Microsoft Bot SDK 3.x。我正在使用 Cosmos Db 来存储状态值。

如何使用 channelId 和 From Id 存储或更新用户数据?获取用户详细信息后,我会将其更新为
await sc.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);

一年后,我重新打开了 Microsoft 应用程序并对其进行了很多更改。所以,我无法获取正确的文档。有人可以帮助/指导我使用 Cosmos DB 的状态存储过程吗?

遵循基本设置https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-state-azure-cosmosdb?view=azure-bot-service-3.0

【问题讨论】:

  • 看看this 可能会有帮助

标签: c# azure botframework azure-cosmosdb


【解决方案1】:

小心:activity.GetStateClient(); 正在返回已弃用的旧 StateClient。

要使用您的 CosmosDb,请按照您提到的文档 (https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-state-azure-cosmosdb?view=azure-bot-service-3.0#modify-your-bot-code) 将您的 CosmosDb 注册为 IBotDataStore&lt;BotData&gt;

然后当你想使用它时,例如获取一个属性:

using (ILifetimeScope scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
    var address = Address.FromActivity(activity);
    IBotDataStore<BotData> botDataStore = scope.Resolve<IBotDataStore<BotData>>();
    BotData botData = await botDataStore.LoadAsync(address, destination, CancellationToken.None);
    return botData.GetProperty<T>(propertyName);
}

这里Address.FromActivity(activity); 方法自动获取正确的键来指向正确的项目。

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2020-12-23
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多