Javascript I';我正在尝试使用Microsoft bot框架构建聊天机器人

Javascript I';我正在尝试使用Microsoft bot框架构建聊天机器人,javascript,node.js,botframework,botbuilder,Javascript,Node.js,Botframework,Botbuilder,我在这里定义了一本字典 var dict = {'English 101?': 'Room 205', 'English 102?': 'Room 309', 'Math 301': 'Room 705', 'Math 302': 'Room 704'}; 当用户询问“英语101在哪里”时,我希望机器人回答“在205房间” 我用以下方式硬编码: var builder = require('botbuilder'); var helloBot = new builder.TextBot()

我在这里定义了一本字典

var dict = {'English 101?': 'Room 205', 'English 102?': 'Room 309',
  'Math 301': 'Room 705', 'Math 302': 'Room 704'};
当用户询问“英语101在哪里”时,我希望机器人回答“在205房间”

我用以下方式硬编码:

var builder = require('botbuilder');
var helloBot = new builder.TextBot();
var dialog = new builder.CommandDialog();


dialog.matches('^Where is English 101?', builder.DialogAction.send('In     Room 205'));
dialog.matches('^Where is English 102?', builder.DialogAction.send('In     Room 309'));
dialog.matches('^Where is Math 301?', builder.DialogAction.send('In    Room 705'));
dialog.matches('^Where is Math 302?', builder.DialogAction.send('In     Room 704'));

dialog.onDefault(builder.DialogAction.send("I'm sorry. I didn't    understand."));

helloBot.listenStdin();
我不想对每个问题进行硬编码,而是想将一些正则表达式传递给dialog.matches()函数的第一个参数,并将其用作键,Bot应该能够从字典中获取值并发送回用户

我尝试了以下方法,但无效:

var str = ""
dialog.matches(str = ? , builder.DialogAction.send(dict[str.slice(9)]))

如何才能将标准输入传递到“str”并从字典中获取值?

根据文档,您只需在
匹配方法中使用Javascript正则表达式格式。

您想要使用意图或触发动作匹配

对于意图,首先,初始化您的意图:

var intents = new builder.IntentDialog();
然后将“意图”对话框传递给您的机器人:

bot.dialog('/', intents);
然后可以使用正则表达式构造匹配:

intents.matches(/English 101/i, (session) => {
    //
});
bot.dialog("/English", (sess, args, next) => {
        //Handle English 101
    }).triggerAction({
        matches: /English 101/i
});
您还需要确保能够处理没有匹配项的消息:

intents.onDefault([
    (session, args, next) => {
        //Do something by default
}]);
另一种方法是在对话框(也使用正则表达式)上使用
triggerAction

使用这两种方法,您都可以使用标准JavaScript正则表达式捕获用户数据,并提供适当的对话框

您还可以只查找
/where is/i
,然后使用
session.message.text
从会话中获取消息,然后解析该消息以获取目标

理想情况下,您的机器人非常适合使用LUIS。可以为类位置创建单个意图,为类创建单个实体。然后你可以用各种短语训练你的LUIS应用程序,同时用实体标记替换确切的类名。然后,当LUIS符合您的意图时,实体将可用,您可以使用它访问字典并获取位置。如果你感兴趣的话,我最近也在讨论这个问题


(注意:这是用TypeScript写的,但你知道要点。)

请更改你的文章标题,以反映你实际需要的帮助。