【发布时间】: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 响应hello、asdf 和goodbye 的输入。但是,控制台显示正确的对话框在它们应该调用的时候被调用。即使我使用session.beginDialog('hello'); 调用hello 对话框,机器人也会返回goodbye。
这里的问题似乎是什么原因造成的?
【问题讨论】:
标签: node.js azure botframework