2016-05-07 7 views
1

ich hier ein WörterbuchIch versuche, ein Chat-Bot mit dem Microsoft bietet Rahmen habe

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

ich will „in Room 205“ antworten, die den Bot definiert zu bauen, wenn der Benutzer fragen „wo ist Englisch 101 ".

ich fest einprogrammiert es die folgende Art und Weise:

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(); 

Statt hartzucodieren jede Frage i() -Funktionen ersten Parameter und dessen Verwendung als Schlüssel des Bot etwas Regular Expression auf die dialog.matches passieren will, sollte sein Lage Wert aus dem Wörterbuch zu erhalten und zurück an den Benutzer

ich folgende probiert, aber es hat nicht funktioniert senden:

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

Wie konnte ich in der Lage zu pas s Standardeingabe in "str" ​​und den Wert aus dem Wörterbuch erhalten?

+1

bitte Ihre Post-Titel zu reflektieren ändern, was Sie tatsächlich mit Hilfe benötigen. –

Antwort

0

Gemäß der Dokumentation here sollten Sie einfach Javascript regulären Ausdruck Format in Ihrer Methode verwenden.

1

Sie möchten Absichten verwenden oder Aktionsabgleich auslösen.

Für Absichten zunächst initialisieren Ihre Absichten:

var intents = new builder.IntentDialog(); 

Dann die Absicht Dialog Bot übergeben:

bot.dialog('/', intents); 

Dann Sie Ihre Spiele mit regulären Ausdrücken konstruieren können:

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

Sie sollten sicherstellen, dass auch Nachrichten mit keine Übereinstimmungen haben:

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

andere Möglichkeit, ein triggerAction auf einem Dialog zu verwenden wäre (die reguläre Ausdrücke verwendet auch):

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

Bei beiden werden Sie Standard JavaScript reguläre Ausdrücke verwenden, um Benutzer zu erfassen Daten und bieten einen geeigneten Dialog.

Sie können auch nur nach /where is/i suchen, und dann erhalten Sie die Nachricht von der Sitzung mit session.message.text, und dann analysieren, um das Ziel zu erhalten.

Idealerweise ist Ihr Bot gut für die Verwendung von LUIS geeignet. Sie können eine einzelne Absicht für den Klassenstandort und eine einzelne Entität für die Klasse erstellen. Dann können Sie Ihre LUIS-App mit verschiedenen Phrasen trainieren, während Sie exakte Klassennamen durch das Entity-Token ersetzen. Dann, wenn LUIS Ihre Absicht erfüllt, wird die Entität verfügbar sein, mit der Sie auf Ihr Wörterbuch zugreifen und den Standort abrufen können. I wrote a post auf diese vor kurzem, wenn Sie interessiert sind.

. (Anmerkung: diese in Typoskript geschrieben, aber Sie erhalten den Kern)