【问题标题】:Can I store a counter across conversation in Inline Fulfillment Dialogflow editor?我可以在 Inline Fulfillment Dialogflow 编辑器中跨对话存储计数器吗?
【发布时间】:2019-10-17 08:02:47
【问题描述】:

我正在使用内联编辑器在对话流中进行多人测验。目前,我已经完成了第 1 轮和第 2 轮的工作,但还没有计分。

所以也许这很愚蠢,但我想'哦,我会制作一个 var 并在其中存储一个计数。每当一个函数处于一个好的答案时,de count 都会做 ++ 等等。”

我做了一个包含 2 个问题的 sn-p,以便您了解我的问题。我读过很多关于哦,你必须将它存储在用户存储中,但我不明白如何。已经阅读了 dialogflow 的文档,但我的技术含量不是很高,所以很难。

  var pointsp1 = 0;
  var pointsp2 = 0;

//round 2 player 1

  function vraag1triva(agent) {  
  const goed = agent.parameters.goed;
  const fout = agent.parameters.any;


    if (goed=='tv tas') {
     pointsp1++;
      agent.add("<speak><audio src=\"https://actions.google.com/sounds/v1/transportation/ship_bell.ogg\"></audio>uit welk land komt de avocado?</speak>");
    } else if (fout) {
        agent.add("Je antwoord is fout, het juiste antwoord was tv-tas,uit welk land komt de avocado?");
    }
  }
  //round 2 player 2
  function vraag2triva(agent) {  
    const goed = agent.parameters.goed;
    const fout = agent.parameters.any;
      if (goed=='mexico') {
        pointsp2++;
          agent.add("Goedzo, Mexico is het juiste antwoord. Van wie is het nummer Don't worry, be happy?");
      } else if (fout) {
          agent.add("Je antwoord is fout, het juiste antwoord was mexico, Van wie is het nummer Don't worry, be happy?");
      }
  }
 //score
  function totalscore(agent) {  
    if (pointsp1>pointsp2) {
      agent.add("Player 1 wins"); 
    }else if (pointsp1<pointsp2)
      agent.add("Player 2 wins");
  }

我希望当我调用函数“总分”时。它会根据最佳答案显示哪个玩家赢得了回合。

编辑,尝试用户存储:

let conv = agent.conv(); // create an instance
    conv.data.pointspt1 = 0;
    conv.data.pointsp2 = 0;

   //score
  function totalscore(agent) {  
    if (conv.data.pointsp1>conv.data.pointsp2) {
      agent.add("Player 1 wins round 2"); 
    }else if (conv.data.pointsp1<conv.data.pointsp2)
      agent.add("Player 2 wins round2");
  }


//round 2 player 1

  function vraag1triva(agent) {  
  const goed = agent.parameters.goed;
  const fout = agent.parameters.any;

    if (goed=='tv tas') {
    //save score
      agent.add("<speak><audio src=\"https://actions.google.com/sounds/v1/transportation/ship_bell.ogg\"></audio>uit welk land komt de avocado?</speak>");
      conv.user.storage.pointspt1++; 
    } else if (fout) {
        agent.add("Je antwoord is fout, het juiste antwoord was tv-tas,uit welk land komt de avocado?");
    }
  }

【问题讨论】:

标签: javascript node.js count dialogflow-es fulfillment


【解决方案1】:

您可以在内联编辑器中存储计数。存储数据有两个选项,您可以根据是要在对话中还是跨对话保存数据来选择。如果它在对话中(您当前会话的游戏得分),请使用conversationToken。示例:

let conv = agent.conv(); // create an instance
conv.data.pointspt1 = 0;
conv.data.pointsp2 = 1;
const total = conv.data.pointspt1 + conv.data.pointspt2;
agent.add(`Your total score is ${total}`);
// If you want to save data across conversations
conv.user.storage.pointspt1 = 0; // This works only for verified users

更多信息请参考以下链接:Save data in conversation

【讨论】:

  • 谢谢!听起来合乎逻辑我没有从链接中得到那么明智。但我想它会是这样的:(参见上面帖子中的编辑)
  • 不,不幸的是,上面编辑中的代码并非如此 :(
  • 在上面的代码中,两个值都为零(相等),并且您的代码正在检查是否更小或更大。您正在增加与 conv.data 不同的 conv.user.storage
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2012-12-13
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多