上下文是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()
是否会被弃用?validatedPrompt()
是否提供自定义消息的机制?答案 0 :(得分:1)
Microsoft Bot Framework版本4提示验证示例链接:
对于正确的文本提示验证,是您创建执行验证任务的单独文件 代码: 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?`);
}