c# - 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
属性没有被移除
我不知道为什么会这样。
解决方案
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++;
从这个文件访问和使用状态。
推荐阅读
- node.js - 如何从 EC2 连接到 VPN 上的数据库?
- php - 动态路由未正确链接到 CSS 和 JS 文件
- reactjs - React Redux:更新时组件内部内容之间的延迟
- sql - 将前 5 个结果连接在一列中
- jquery - 如何使用 jQuery 通过 DropdownList 传递两个或多个参数?
- spring - 通过字段 jdbcTemplate 表示的不满足的依赖关系
- kubernetes - 是否有 kubernetes cronjob 类型允许单个容器映像的多个计划?
- javascript - Bootstrap contact_me.php 验证复选框是否已选中?
- php - 用户会话与另一个用户混合
- javascript - 在nodejs中使用表单结果做mysql请求