提示输入验证
上下文是节点上的MS Bot Framework。我需要自定义验证来自Prompt.text或Prompt.Number的输入。我一直在看一些例子和文档。我已经使用DialogAction.validatePrompt()
实现了一个快速示例,该工作正常,但是在验证失败的情况下,我不能(或者至少我不知道如何)自定义消息的问题。
验证可能由于多种原因而失败,能够根据失败原因选择响应消息会很棒。
此外,我已经看到了基础 - 自定义提示示例:()
,它使用和IntentDialog
来获得所需的行为。它还提到它是basics-validatedPrompt示例的替代品。
我的问题是:
- 建议使用哪一个,validatedPrompt或IntentDialog方法?
validatedPrompt()
会被弃用吗?validatedPrompt()
是否提供自定义消息的机制?
Microsoft Bot Framework版本4提示验证示例链接在下面指定:
https://github/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?`);
}