【问题标题】:Creating dialogs programmatically from JSON file从 JSON 文件以编程方式创建对话框
【发布时间】:2018-11-29 22:55:59
【问题描述】:

我正在使用带有 Node.js 的 Microsoft Bot Framework。我有一个如下所示的配置文件。

{
  "server": {
    "port": 3978
  },
  "dialogs": {
    "default": {
      "text": "This is some sample text.",
      "actions": [
        {
          "title": "Button 1",
          "value": "Action 1"
        },
        {
          "title": "Button 2",
          "value": "Action 2"
        }
      ]
    },
    "hello": {
      "text": "hello",
      "matches": "^hello$"
    },
    "asdf": {
      "text": "asdf",
      "matches": "^asdf$"
    },
    "goodbye": {
      "text": "goodbye",
      "matches": "^goodbye$"
    }
  }
}

我想使用 for 循环来阅读对话框并创建它们,以便它们以 text 值响应并具有 matches 值的触发操作。

例如,机器人对hello的输入响应hello,对asdf的输入响应asdf,对goodbye的输入响应goodbye

我为解决这个问题而编写的函数如下所示。

var create = function(bot, _config) {
  var config = JSON.parse(JSON.stringify(_config));

  // Create dialogs from config
  var keys = Object.keys(config.dialogs);
  for(var i = 0; i < keys.length; i++) {
    var dialogName = keys[i];
    var dialog = config.dialogs[dialogName];
    // Skip over default dialog
    if(dialogName == "default") continue;
    // Create other dialogs
    bot.dialog(dialogName, function(session) {
      var text = dialog.text;
      session.endDialog(text);
    }).triggerAction({
      matches: new RegExp(dialog.matches, "i")
    });
  } 
}

当我运行它时,机器人会以goodbye 响应helloasdfgoodbye 的输入。但是,控制台显示正确的对话框在它们应该调用的时候被调用。即使我使用session.beginDialog('hello'); 调用hello 对话框,机器人也会返回goodbye

这里的问题似乎是什么原因造成的?

【问题讨论】:

    标签: node.js azure botframework


    【解决方案1】:

    这是 javascript 中var 的常见“陷阱”。将 var 替换为 let 应该可以解决您的问题。

    类似的问题

    for (var i = 0; i < 10; i++) {
        setTimeout(function() { console.log(i); }, 100 * i);
    }

    根本原因是var 是函数作用域,let 是块作用域。详情可以参考https://www.typescriptlang.org/docs/handbook/variable-declarations.html

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2019-01-31
      • 1970-01-01
      • 2016-12-25
      • 2011-02-26
      • 2011-01-18
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多