Как начать диалог для определенного намерения LUIS? - PullRequest
0 голосов
/ 30 сентября 2019

Вот мой код:

 async dispatchToTopIntentAsync(context, intent, recognizerResult) {
         console.log(context);
         switch (intent) {
             case 'INeedInsurance':{ 
                 const bookingDetails={};
                  bookingDetails.type="Auto"; 
                return await context.beginDialog(ConfirmAuto)

             }

             default:
                 console.log(`Dispatch unrecognized intent: ${ intent }.`);
                 await context.sendActivity(`Dispatch unrecognized intent: ${ intent }.`);
                 // await next();
                 break;
         } 
     }

Мне нужно нажать диалоговое окно с водопадом в соответствии с результатом намерения LUIS? Не могли бы вы помочь мне, ребята?

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Вы пытались просто удалить return? Он должен работать. Ниже приведен пример одного из моих ботов, отлично работает. Вам также не нужно использовать {} в кейсе, хотя я не уверен, что это вызывает вашу проблему.

Я также заметил, что вы не создаете отдельный контекст диалога. Честно говоря, я не знаю, требуется ли это, я взял это из примера. Поэтому, когда я передаю контекст в dispatchToTopIntentAsync, я создаю контекст диалога через const dc = await this.dialogs.createContext(context);, прежде чем попасть в оператор case. Но я также использую старую версию шаблона Dispatch Bot. Независимо от того, я начинаю диалог следующим образом должен быть одинаковым в любом случае.

switch (intent) {
    case VIEW_ORDER_INTENT:
        await dc.beginDialog(VIEW_ORDER_DIALOG,recognizerResult);
        break;
    default:
        var processResult = await this.qnaDialog.processAsync(userDialog.qnaState, 
        context.activity);
        userDialog.qnaState = processResult[0];
        await this.userDialogStateAccessor.set(context,userDialog);
        var output = processResult[1];
        var result = processResult[2];
        await dc.context.sendActivity(output);      
        break;
}

Еще одно замечание: похоже, вы определяете bookingDetails только в функции рассылки. Это не будет доступно вашему диалоговому окну, и объект не будет обновлен после его завершения. Вы можете передать объект как второй параметр в beginDialog, и у вас может быть диалог, возвращающий результат. Вы должны быть в состоянии сделать это через bookingDetails = await context.beginDialog(ConfirmAuto,bookingDetails);. Обратите внимание, что вы ожидаете только «beginDialog», так что переменная будет в ожидании, пока диалог не завершится.

0 голосов
/ 02 октября 2019
Import {DialogSet} from 'bot-builder-dialogs'; 
const { ConfirmHome } = require("../dialogs/confirmHome");

    //clear old dialog stack 
     const dialogs = new DialogSet(this.dialogState); 
        const dc = await dialogs.createContext(context); 
        await dc.endDialog(); 
    //end  

    //run() dialog context 
       const home = new ConfirmHome(); 
              await home.run(
                context,
                this.dialogState
              );
0 голосов
/ 30 сентября 2019

Попробуйте использовать session.replaceDialog вместо context.beginDialog и не нужно возвращать await, просто следуйте примеру в ссылке:

https://docs.microsoft.com/en-us/azure/bot-service/nodejs/bot-builder-nodejs-dialog-replace?view=azure-bot-service-3.0

Редактировать:

Можете ли вы также проверить

https://docs.microsoft.com/en-us/azure/bot-service/nodejs/bot-builder-nodejs-recognize-intent-luis?view=azure-bot-service-3.0

о том, как реагировать на намерения LUIS? Точнее на

// Make sure you add code to validate these fields
var luisAppId = process.env.LuisAppId;
var luisAPIKey = process.env.LuisAPIKey;
var luisAPIHostName = process.env.LuisAPIHostName || 'westus.api.cognitive.microsoft.com';

const LuisModelUrl = 'https://' + luisAPIHostName + '/luis/v2.0/apps/' + luisAppId + '?subscription-key=' + luisAPIKey;

// Create a recognizer that gets intents from LUIS, and add it to the bot
var recognizer = new builder.LuisRecognizer(LuisModelUrl);
bot.recognizer(recognizer);

// Add a dialog for each intent that the LUIS app recognizes.
// See https://docs.microsoft.com/bot-framework/nodejs/bot-builder-nodejs-recognize-intent-luis 
bot.dialog('GreetingDialog',
    (session) => {
        session.send('You reached the Greeting intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Greeting'
})

bot.dialog('HelpDialog',
    (session) => {
        session.send('You reached the Help intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Help'
})

bot.dialog('CancelDialog',
    (session) => {
        session.send('You reached the Cancel intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Cancel'
}) 
...