2016-05-07 8 views
1

Я определил словарь здесьЯ пытаюсь построить чат бота с помощью рамки бота Microsoft

var dict = {'English 101?': 'Room 205', 'English 102?': 'Room 309', 
    'Math 301': 'Room 705', 'Math 302': 'Room 704'}; 

Я хочу бота ответить «в номере 205», когда пользователь спросить «где английский 101 ».

Я жёстко это следующим образом:

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)])) 

Как я мог быть в состоянии па s стандартный ввод на «str» и получить значение из словаря?

+1

измените свое почтовое название, чтобы отразить то, что вы на самом деле нужны помощь. –

ответ

0

В соответствии с документацией here вы должны просто использовать формат регулярных выражений Javascript в вашем методе matches.

1

Вы хотите использовать намерения или согласовать действие запуска.

Для намерений, во-первых, инициализировать намерения:

var intents = new builder.IntentDialog(); 

Затем передать пристальный диалог бота:

bot.dialog('/', intents); 

Тогда вы можете построить свои матчи с помощью регулярных выражений:

intents.matches(/English 101/i, (session) => { 
    // 
}); 

Вы хотите, чтобы у вас было что-то для обработки сообщений без совпадений:

intents.onDefault([ 
    (session, args, next) => { 
     //Do something by default 
}]); 

Другим способом было бы использовать triggerAction в диалоге (который также использует регулярные выражения):

bot.dialog("/English", (sess, args, next) => { 
     //Handle English 101 
    }).triggerAction({ 
     matches: /English 101/i 
}); 

С либо, вы будете иметь возможность использовать стандартные JavaScript регулярные выражения для захвата пользователя данных и предоставить соответствующий диалог.

Вы также можете найти только /where is/i, а затем получить сообщение из сеанса с session.message.text, а затем разобрать, чтобы получить цель.

В идеале ваш бот хорошо подходит для использования LUIS. Вы можете создать единое намерение для местоположения класса и одного объекта для класса. Затем вы можете обучить свое приложение LUIS различными фразами, заменяя точные имена классов маркером сущности. Затем, когда LUIS достигнет вашего намерения, объект будет доступен, который вы можете использовать для доступа к вашему словарю и получения местоположения. I wrote a post об этом недавно, если вам интересно.

. (Примечание: это написано в машинописном, но вы получите суть)

 Смежные вопросы

  • Нет связанных вопросов^_^