不在.onDefault中更新会话属性

时间:2017-05-04 14:26:56

标签: node.js botframework

我有一个代码显示在下面,问题是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();
 })
);

1 个答案:

答案 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.userFailedCsession.conversationData.userFailedC等,因为这会在对话结束后保持数据的持久性。