我有一个代码显示在下面,问题是userFailedC prop没有增加。我可以设置属性,但每次用户的意图不匹配时,它的值都会重置,即每次执行.onDefault。 难道我做错了什么? 另外,我尝试使用userData和privateConversationData,所以我敢打赌,我误解了一些东西。 谢谢!
bot.dialog('/', new builder.IntentDialog()
.matches(/(hi|hello|hey)/i, function(session, args, next) {
session.send(rm.get('Hi!');
session.beginDialog('/showMainMenu');
})
.onDefault(function(session, args, next) {
if ( session.dialogData.userFailedC === undefined ) {
session.dialogData.userFailedC = 1;
} else {
session.dialogData.userFailedC++;
}
if (session.dialogData.userFailedC % 2 == 0) {
session.send('Please say hi to me!');
}
})
.onBegin(function(session, args, next) {
next();
})
);
答案 0 :(得分:1)
会话数据未被保存,因为代码缺少next()
或session.endDialog()
。还有另一种方法可以保存会话数据,但这些方法是您在移动瀑布步骤或切换/结束对话框时最有可能使用的方法。
.onDefault(function(session, args, next) {
if ( session.dialogData.userFailedC === undefined ) {
session.dialogData.userFailedC = 1;
} else {
session.dialogData.userFailedC++;
}
if (session.dialogData.userFailedC % 2 == 0) {
session.send('Please say hi to me!');
// next() or session.endDialog()
}
// next() or session.endDialog()
})
关于存储session.dialogData.userFailedC
,您要使用session.userData.userFailedC
或session.conversationData.userFailedC
等,因为这会在对话结束后保持数据的持久性。