Node.js 如何自定义提示选择(Microsoft Botbuilder SDK) 注

Node.js 如何自定义提示选择(Microsoft Botbuilder SDK) 注,node.js,botframework,Node.js,Botframework,我正在使用ES6 babel在node.js中使用Microsoft Botbuilder SDK 问题 基于这篇有帮助的StackOverflow文章,我试图以同样的方式修改builder.Prompts.choice的行为,以更好地控制重试提示,而不是默认为“我不明白”。然而,当我尝试遵循此实现模式并将其应用于builder.Prompts.choice时,我刚刚收到bot发送的未定义的选项,如下所示: 代码 期望行为 如果我只是将args.choice初始化为choices | | ar

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

问题 基于这篇有帮助的StackOverflow文章,我试图以同样的方式修改builder.Prompts.choice的行为,以更好地控制重试提示,而不是默认为“我不明白”。然而,当我尝试遵循此实现模式并将其应用于builder.Prompts.choice时,我刚刚收到bot发送的
未定义的
选项,如下所示:

代码 期望行为 如果我只是将
args.choice
初始化为
choices | | args.choices
,我会期望选项出现,但这似乎并不是所有必要的


感谢您提供的任何帮助。

在这种情况下,传入
字符串数组将不起作用,因为提示似乎需要一个字符串列表

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


向我们展示您如何调用
选项
函数-它看起来像
提示符
选项
选项
都是
未定义的
。当然可以。我已经修改了我原来的帖子。我已经记录了每个args属性,它们都已定义(包括args.choices)。这非常好用!非常感谢你的帮助。出于学习目的,有一个问题:您如何知道此提示符预期的是一个IPrompt,而不是文档中的字符串、对象或字符串[]?我只是检查了提示符文件以查找方法的接口:该方法引用了IChoice,然后在Prompts类的实际实现中,发现它有更多的代码涉及到将数据转换为预期格式(IChoice):
// 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);
}
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();
    }
]);