Я пытаюсь создать бота, который имеет набор известных «команд», которые, если они точно совпадают, запустит конкретное диалоговое окно. Если команда не распознана, она передает ее LUIS для обработки естественного языка.Необязательно вызывать LUIS из бота NodeJS, созданного с помощью Botframework
Я пробовал этот подход, который, казалось, работал частично, но при запуске подсказок не удалось активировать второй шаг водопада.
import builder = require('botbuilder');
let restify = require('restify');
let luisUrl = "MY_LUIS_URL_HERE";
let server = restify.createServer();
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
let bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());
let recognizer = new builder.LuisRecognizer(luisUrl);
let intentsDialog = new builder.IntentDialog({ recognizers: [recognizer] });
let mainLoopDlg = [
(session, results) => {
let input = session.message.text.trim();
if (input === "#mycmd") {
// Is a command
session.beginDialog('/mycmd');
} else {
// Else assume is a natural language utterance
// Have tried all of the following
// Need a way to open a dialog and forward on the original message ...
intentsDialog.replyReceived(session);
//session.beginDialog('/intents');
//session.beginDialog('/intents', { message: session.message });
//session.beginDialog('/intents', session.dialogData.args);
}
}
];
let commandDlg = [
(session, results) => {
session.send("Command launched ...");
}
];
let intentDlg = [
(session) => {
builder.Prompts.confirm(session, "hi");
},
(session, result) => {
// THIS IS NEVER REACHED ...
session.send("Hi" + result.response);
}
];
bot.dialog('/', mainLoopDlg);
bot.dialog('/mycmd', commandDlg);
bot.dialog('/intents', intentDialog);
intentsDialog.matches('Greeting', intentDlg);
// Grab some secret data from the deploy environment
server.listen(process.env.port || process.env.PORT || 3978,() => {
console.log("%s listening to %s", server.name, server.url);
});