不更新 .onDefault 中的会话属性

Not updating session properties in .onDefault

我有一个代码显示在下面,问题是 userFailedC 道具没有增加。我可以设置 属性 但每次用户的意图不匹配时它的值都会重置,即每次执行 .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();
 })
);

会话数据未保存,因为代码缺少 next()session.endDialog()。还有另一种方法也可以保存会话数据,但这些是您在通过瀑布步骤或 switching/ending 对话框时最有可能使用的方法。

.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.userFailedCsession.conversationData.userFailedC 等,因为这将在对话结束后保留​​数据。