gpt4 book ai didi

node.js - Bot Framework 中下一个对话框 waterfall 步骤之前的数据验证

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:15 25 4
gpt4 key购买 nike

有简单的 waterfall 对话框:

SendMessageDialog = [
function (session) {
builder.Prompts.time(session, "Enter dates?");
},
function (session, results) {
session.conversationData.start = builder.EntityRecognizer.resolveTime([results.response]).toISOString();

if(typeof results.response.resolution.end != "undefined")
session.conversationData.end = results.response.resolution.end.toISOString();
}
];

机器人成功识别不同格式的时间,如果格式无效,则会默认提示用户建议重新输入数据,例如:

I didn't understand. Please choose an option from the list.

Prompts选项中,我只能更改此默认的retryPrompt消息。如果我需要额外的验证,例如:

  • 用户输入了日期,但由于业务原因该日期无效逻辑(过去不可用)
  • 用户输入位置,因此需要检查可用位置列表(可能来自 API 调用)
  • 检查 Prompts.number() 之后的数字范围
  • 等等

是否有一种简单的方法来添加额外的验证以重试相同的 waterfall 步骤并要求用户重新输入数据?如何实现? BotBuilder 3.9 有可行的代码吗?

some examples存在是为了使用 LUIS API 调用进行一些验证,但它们仅适用于下一个 waterfall 步骤。目标是在输入正确的数据之前不进入下一步 - 这可能吗?谢谢!

最佳答案

问题提出后,立即找到了操作方法 Create custom prompts to validate input :

结果代码:

[
function (session) {
// Call start/end time prompt dialog
session.beginDialog("DatePromptDialog");
},
...
]

DatePromptDialog = [
function (session, args) {
var options = { retryPrompt: "I didn’t recognize dates you entered. Please try again using format: start - end dates" };

if (args && args.reprompt && args.endTimeMissed) {
builder.Prompts.time(session, "Please specify both start - end times:", options);
} else if (args && args.reprompt && args.dateInPast){
builder.Prompts.time(session, "That date seems to be in the past! Please enter a valid date.", options);
} else {
builder.Prompts.time(session, "Enter dates?", options);
}
},
function (session, results) {
var args = {};
delete session.conversationData.start; // Clear previous values
delete session.conversationData.end;

// Get start time
session.conversationData.start = builder.EntityRecognizer.resolveTime([results.response]).toISOString();
// Get duration end time if available
if(typeof results.response.resolution.end != "undefined")
session.conversationData.end = results.response.resolution.end.toISOString();
else {
args.endTimeMissed = true;
args.reprompt = true;
}

// Convert dates from string
var currDate = new Date(); // Current date
var startDate = new Date(session.conversationData.start);
var endDate = new Date(session.conversationData.end);

if(startDate < currDate || endDate < currDate) {
args.dateInPast = true;
args.reprompt = true;
}

if (args.reprompt) {
// Repeat the dialog
session.replaceDialog('DatePromptDialog', args);
} else {
// Success
session.endDialog();
}
}
];

关于node.js - Bot Framework 中下一个对话框 waterfall 步骤之前的数据验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com