Beralih antara Dialog di Microsoft Bot Framework (Node.js)

Saya diberi kode bot di Microsoft Bot Framework. Saya telah menggunakan model bahasa LUIS. Di bawah ini adalah potongan kode saya:

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
    }

}])

Ini kode untuk QuickReply saya

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

Saya bisa mendapatkan balasan cepat dan mengkliknya tidak terjadi apa-apa. Saya melihat yang berikut di konsol saya:

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

Sebaliknya, saya ingin pesan ini dikirim ke LUIS saya atau setidaknya menampilkan pesan pengakuan seperti yang tertulis dalam fungsi panggilan balik. Bagaimana saya bisa melakukannya?


person CTD    schedule 28.11.2017    source sumber


Jawaban (1)


Karena fungsi quickReply() Anda tidak membuat dialog baru, maka endDialog() akan menghentikan dialog saat ini dan karena Anda tidak memiliki dialog induk, yang tidak dapat kembali untuk melanjutkannya.

Anda dapat memanfaatkan bagian tengah next untuk meneruskan nilainya, ubah kode Anda sebagai:

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

Balasan cepat

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
Hai Gary. Saya mencoba tetapi tidak berfungsi dengan benar. Bisakah Anda mengisi kode untuk mendapatkan pilihan pengguna? Saya merasa saya melakukannya dengan benar. - person CTD; 07.12.2017
comment
tambahkan beberapa cuplikan kode, agar lebih jelas. pada dasarnya, bot Anda akan menerima pesan pengguna di air terjun berikutnya. - person Gary Liu; 08.12.2017