Javascript 重复的ChoicePrompt清除用户状态
我用Microsoft bot框架实现了一个机器人。为了收集用户数据,我使用ChoicePrompts。当用户没有选择其中一个建议的选项时,ChoicePrompt将重复,直到用户输入有效的选项(这是prompt方法的默认行为) 不幸的是,在没有选择一个有效的选项之后,用户状态将被刷新。这意味着在此之前,我将丢失所有收集的用户数据Javascript 重复的ChoicePrompt清除用户状态,javascript,botframework,prompt,Javascript,Botframework,Prompt,我用Microsoft bot框架实现了一个机器人。为了收集用户数据,我使用ChoicePrompts。当用户没有选择其中一个建议的选项时,ChoicePrompt将重复,直到用户输入有效的选项(这是prompt方法的默认行为) 不幸的是,在没有选择一个有效的选项之后,用户状态将被刷新。这意味着在此之前,我将丢失所有收集的用户数据 这种行为是有意的还是有办法防止这种情况发生?您提供的链接上的代码存在一些问题。由于我看不到您的完整代码,我对某些部分进行了猜测 仔细检查userState和userD
这种行为是有意的还是有办法防止这种情况发生?您提供的链接上的代码存在一些问题。由于我看不到您的完整代码,我对某些部分进行了猜测
const DIALOG_STATE_属性='dialogState';
const USER_PROFILE_属性='USER';
const EDUCATION_PROMPT='EDUCATION_PROMPT';
常量主提示='主提示';
构造函数(会话状态、用户状态){
this.conversationState=会话状态;
this.userState=userState;
this.dialogState=this.conversationState.createProperty(DIALOG\u STATE\u属性);
this.userData=this.userState.createProperty(用户配置文件属性);
this.dialogs=新的DialogSet(this.dialogState);
//添加将由主对话框使用的提示。
这是对话
.add(新文本提示(名称提示))
.add(新文本提示(年龄提示))
.add(新文本提示(性别提示))
.add(新选项提示(教育提示))
.添加(新选项提示(主要提示));
//创建用于提示用户输入配置文件数据的对话框
this.dialogs.add(新建WaterWallDialog(启动)对话框[
this.promptForName.bind(this),
这个.提示.绑定(这个),
这个。提示者。绑定(这个),
这个。促进教育。约束(这个),
本协议主要约束(本协议),
this.returnUser.bind(this)
]));
本专业=[‘英语’、‘历史’、‘计算机科学’];
}
.add(新文本提示(性别提示))
.add(新选项提示(教育提示))
...
如果(!user.gender){
user.gender=step.result;
//将用户对象返回给UserState存储
等待这个.userData.set(step.context,user);
console.log(用户);
}
this.majors=[“英语”、“历史”、“计算机科学”];
...
如果(!user.major){
//复制专业列表并添加“其他”条目
设majorsOther=this.majors.slice(0,this.majors.length);
majorsOther.push('Einen anderen Studiengang');
//返回等待步骤.prompt(MAJOR\u prompt,this.userData.MAJOR,majorsOther);
返回等待步骤。提示符(专业提示,'专业列表:',专业其他);
}
//保存对用户状态的更改。
等待this.userState.saveChanges(turnContext);
//通过保存对对话状态的更改来结束本回合。
等待这个.conversationState.saveChanges(turnContext);
如果实现了上述功能,则应设置。我能够在没有问题和状态损失的情况下运行。此外,在最终提供适当的响应之前,反复不回答ChoicePrompt并没有破坏状态
希望有帮助 当选择有效选项时,不应清除UserState。请分享你正在使用的ChoicePrompt代码。正如@EricDahlvang提到的,如果你能发布你的代码,那将非常有帮助。您还可以验证用户状态在刷新之前是否已保存?您好,谢谢您的回复@EricDahlvang用户状态仅在选择无效选项时清除。您可以在此处找到我的代码: