提示输入验证

时间:2017-02-02 15:23:12

标签: node.js validation botframework

上下文是Node上的MS Bot Framework。我需要自定义验证来自Prompt.text或Prompt.Number的输入。我一直在看一些例子和文档。我已经使用DialogAction.validatePrompt()实现了一个快速示例,该示例正常但但是在验证失败的情况下我遇到了(或者至少我不知道如何)自定义消息的问题。

验证可能由于多种原因而失败,能够根据失败原因选择响应消息会很棒。

此外,我在(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-customPrompt)中看到了基本的自定义提示示例,它使用和IntentDialog来获得所需的行为。它还提到它是basics-validatedPrompt示例的替代。

我的问题是:

  • 建议使用哪一个,validatedPrompt或IntentDialog 方法
  • validatedPrompt()是否会被弃用?
  • validatedPrompt()是否提供自定义消息的机制?

1 个答案:

答案 0 :(得分:1)

在下面指定

Microsoft Bot Framework版本4提示验证示例链接:

  

https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/javascript_nodejs/10.prompt-validations

对于正确的文本提示验证,是您创建执行验证任务的单独文件 代码: namePrompt / index.js

const { TextPrompt } = require('botbuilder-dialogs');

module.exports.NamePrompt = class NamePrompt extends TextPrompt {
    constructor(dialogId) {
        super(dialogId, async (prompt) => {
            if (!prompt.recognized.succeeded) {
                await prompt.context.sendActivity('Please tell me your name.');
                return false;
            } else {
                const value = prompt.recognized.value;
                if (value.length < 1) {
                    await prompt.context.sendActivity('Your name has to include at least one character.');
                    return false;
                } else if (value.length > 50) {
                    await prompt.context.sendActivity(`Sorry, but I can only handle names of up to 50 characters. Yours was ${ value.length }.`);
                    return false;
                } else {
                    return true;
                }
            }
        });
    }
};

现在在当前对话框中,您可以导入以上文件:

const { NamePrompt } = require('../../prompts/namePrompt');
const GET_NAME_PROMPT = 'namePrompt';
this.addDialog(new NamePrompt(GET_NAME_PROMPT));

在对话框步骤中,您可以这样提示:

async promptForName(step) {
           return await step.prompt(GET_NAME_PROMPT, `What is your name, human?`);

}