gpt4 book ai didi

node.js - 从 JSON 文件以编程方式创建对话框

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:19 25 4
gpt4 key购买 nike

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

{
"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 ,以及 goodbyegoodbye 的输入。

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

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

什么似乎导致了这里的问题?

最佳答案

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

问题类似

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

根本原因是 var 是函数作用域,而 let 是 block 作用域。您可以引用https://www.typescriptlang.org/docs/handbook/variable-declarations.html了解详情。

关于node.js - 从 JSON 文件以编程方式创建对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com