如何自定义提示选择(Microsoft Botbuilder SDK)

时间:2018-02-20 20:34:25

标签: node.js botframework

注意

我正在使用ES6 babel在node.js中使用Microsoft Botbuilder SDK。

问题

基于这个有用的StackOverflow帖子https://stackoverflow.com/a/45597651/3304185,我试图以相同的方式修改builder.Prompts.choice 的行为,以更好地控制重试提示违反了#34;我不明白。"但是,当我尝试遵循此实现模式并将其应用于builder.Prompts.choice时,我只能选择机器人发送的undefined ,如下所示:

Screenshot of Undefined Choices

代码

// snippet showing how I call the choice function, where
// welcome_subtitle is a string, and menuOptions is an array of strings
builder.Prompts.choice(session, welcome_subtitle, menuOptions, {
    listStyle: builder.ListStyle.button
});

builder.Prompts.choice = (session, prompt, choices, options) => {
    let args = options || {};
    args.prompt = prompt || args.prompt;
    args.choices = choices || args.choices;

    args.retryPrompt = args.retryPrompt || args.prompt;
    session.beginDialog('BotBuilder:prompt-choice', args);
}

期望的行为

如果我只是简单地将args.choice初始化为choices || args.choices,我本来期望会出现这些选择,但这似乎并非一切都是必要的。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

在这种情况下,传入strings数组将无效,因为看起来提示符需要IChoice列表。

builder.Prompts.choice = (session, prompt, choices, options) => {
    let args = options || {};
    args.prompt = prompt || args.prompt;
    args.choices = choices || args.choices;

    args.retryPrompt = args.retryPrompt || args.prompt;
    console.log(args);
    session.beginDialog('BotBuilder:prompt-choice', args);
}

bot.dialog('/', [
    (session, args) => {
        welcome_subtitle = 'Hello Stack Overflow!';
        menuOptions = [{value: '1st Choice'}, {value: '2nd Choice'}, '3rd Choice', '4th Choice'];
        builder.Prompts.choice(session, welcome_subtitle, menuOptions, {
            listStyle: builder.ListStyle.button
        });
    },
    (session, results) => {
        session.endDialog();
    }
]);

这里是console.log(args)builder.Prompts.choice的屏幕截图,模拟器正确显示前两个选项,但不是最后两个:

enter image description here