Переключение между диалоговыми окнами в Microsoft Bot Framework (Node.js)

Я написал бота на Microsoft Bot Framework. Я использовал языковую модель LUIS. Ниже мой кусок кода:

bot.use(builder.Middleware.dialogVersion({ version: 1.0, resetCommand: /^reset/i }));
bot.dialog('/', intents);

intents.matches('GoogleHome', [

    function (session, args) {
    if(builder.EntityRecognizer.findEntity(args.entities, 'cookingtips'))
    {
            quickReply(session, args)
    }
    if(builder.EntityRecognizer.findEntity(args.entities, 'wakingtips'))
    {
            //My rest of the code
    }

}])

Вот код моего быстрого ответа

function quickreply(session, args){

    var msg = new builder.Message(session)
                .text("Let me know the date and time you are comfortable with..")
                .suggestedActions(
                    builder.SuggestedActions.create(
                        session,[
                            builder.CardAction.imBack(session, "CookingTips", "CookingTips"),
                            builder.CardAction.imBack(session, "WalkingTips", "WalkingTips")

                        ]
                    )
                );
            builder.Prompts.choice(session, msg, ["CookingTips", "WalkingTips"]), function(session,results) {
             console.log(results);
            session.send('So I understand you want a cooking tip ' +  results + ' right now');
            session.endDialog();
        }}

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

.BotBuilder:prompt-choice - Prompt.returning([object Object])
.BotBuilder:prompt-choice - Session.endDialogWithResult()
/ - Session.endDialogWithResult()

Вместо этого я хочу, чтобы это сообщение было отправлено в мой LUIS или, по крайней мере, отображало сообщение подтверждения, как написано в функции обратного вызова. Как мне это сделать?


person CTD    schedule 28.11.2017    source источник


Ответы (1)


Поскольку ваша функция quickReply() не создает новый диалог, поэтому endDialog() завершит текущий диалог, и поскольку у вас нет родительского диалога, который не может вернуться, чтобы возобновить его.

Вы можете использовать середину next для передачи значения, измените свой код как:

intents.matches('GoogleHome', [

    function (session, args, next) {
    if(builder.EntityRecognizer.findEntity(args.entities, 'cookingtips'))
    {
            quickReply(session, args, next)
    }
    if(builder.EntityRecognizer.findEntity(args.entities, 'wakingtips'))
    {
            //My rest of the code
    }

},(session,result)=>{
//get the user choice here
    console.log(result);
    session.send(JSON.stringify(result));
}])

Быстрый ответ

function quickRelpy(session, args, next) {
    var msg = new builder.Message(session)
        .text("Let me know the date and time you are comfortable with..")
        .suggestedActions(
            builder.SuggestedActions.create(
                session, [
                    builder.CardAction.imBack(session, "CookingTips", "CookingTips"),
                    builder.CardAction.imBack(session, "WalkingTips", "WalkingTips")

                ]
            )
        );
    builder.Prompts.choice(session, msg, ["CookingTips", "WalkingTips"]);
}
person Gary Liu    schedule 29.11.2017
comment
Привет Гэри. Я пытался, но это не сработало должным образом. Можете ли вы заполнить код для получения выбора пользователя? Я чувствую, что делаю это правильно. - person CTD; 07.12.2017
comment
добавьте фрагмент кода, чтобы сделать его более понятным. по сути, ваш бот получит сообщение пользователя в следующем водопаде. - person Gary Liu; 08.12.2017