How can I access Bot Framework ConversationData outside of a dialog like in messages controller?

前端 未结 2 534
小鲜肉
小鲜肉 2020-12-17 03:11

In a dialog within my bot, I store a flag value in the ConversationData like so:

context.ConversationData.SetValue(\"SomeFlag\", true);

Lat

2条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-17 03:58

    The following should work for what you need:

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

提交回复
热议问题