首页 > 解决方案 > Botframework(V4 预览版)更新的对话状态值未在对话中保留

问题描述

我正在通过模拟器使用 MS Botframework V4(预览版)测试。我正在使用会话状态来维护一些配置。startup.cs在我已将状态声明为(用于本地测试)

  options.Middleware.Add(new ConversationState<Dictionary<string, object>>(new MemoryStorage()));

当用户与我的聊天机器人交互时,例如在第四个覆盖步骤中,我正在更新状态值,如下所示

var state = context.GetConversationState<Dictionary<string, object>>();
state["IsActiveDialog"] = false;
state.Remove("CurrentActiveDialog");

在接下来的对话步骤(比如步骤 5)中,如果我检查状态,我对状态的更改不会受到影响。即仍然state["IsActiveDialog"]显示true并且CurrentActiveDialog属性没有被移除

我不知道为什么会这样。

标签: c#botframework

解决方案


V4 是预览版,正在积极开发中,所以有很多周转。如果您想在 V4 中的 C# SDK 的当前版本中实现这一点,那么有一个示例可以演示这一点:

AspNetCore-EchoBot-AppInsights

相关行是这样的:

CounterState = conversationState.CreateProperty<CounterState>(MyAppInsightsBotAccessors.CounterName),

从此文件中创建状态属性。

// Get the conversation state from the turn context that holds a simple counter
var state = await _stateAccessors.CounterState.GetAsync(turnContext, () => new CounterState());

// Bump the turn count. 
state.TurnCount++;

这个文件访问和使用状态。


推荐阅读