我正在通过模拟器使用MS Botframework V4(预览版)进行测试。我正在使用会话状态来维护一些配置。在startup.cs
中,我将状态声明为(用于本地测试)
options.Middleware.Add(new ConversationState<Dictionary<string, object>>(new MemoryStorage()));
当用户与我的聊天机器人交互时,例如在第4个掩盖步骤中,我将更新状态值,如下所示
var state = context.GetConversationState<Dictionary<string, object>>();
state["IsActiveDialog"] = false;
state.Remove("CurrentActiveDialog");
在接下来的对话步骤(例如步骤5)中,如果我检查状态,则对状态的更改不会受到影响。也就是说,state["IsActiveDialog"]
仍显示true
和CurrentActiveDialog
属性尚未删除
我不知道为什么会这样。
答案 0 :(得分:0)
V4是预览版,并且正在积极开发中,因此有很多营业额。如果您想在V4中的C#SDK的当前版本中实现此功能,有一个示例演示了这一点:
AspNetCore-EchoBot-AppInsights
相关行是:
CounterState = conversationState.CreateProperty<CounterState>(MyAppInsightsBotAccessors.CounterName),
从this file开始,在状态上创建属性。
和
// 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++;
从this file访问并利用状态。