我有一个机器人对话框,要求用户输入订单ID:
bot.dialog("orderId", [
(session, args, next) => {
return builder.Prompts.text(session, "Please provide order id");
},
(session, results, next) => {
const matched = results.response.match(/\d{3}-?\d{7}/g);
if (matched) {
// ...
session.endDialogWithResult(matched);
} else {
// ...
}
}
]);
当用户输入有效的订单ID并进行验证时,这可以正常工作 代码被省略。
我面临的问题是用户不时上传截图 触发默认操作的order id,只是用系统提示重新提示。
我知道如果retryPrompt
界面我可以使用IPromptOptions
属性,但这不能解决我的问题。
我希望能够开始另一个对话或结束对话 任何想法我应该如何使这项工作?
修改
在另一种情况下,而不是说"是"或者任何其他正面短语,用户使用" Thumbs Up"回复Prompts.text
。来自Facebook Messenger的图片。这也将打破Prompts.text
流量
我希望能够对待"拇指向上"图像作为肯定的答案
根据我的问题和控制对话流程。
答案 0 :(得分:0)
由于内置提示会创建一个单独的对话框,Prompts.text()
将严格验证用户输入仅限于string
类型,当您将图像文件上传到bot时,将无法通过Prompts.text()
对话框,这会引发您的问题。
您可以考虑为用户添加一个步骤来选择一个approch来验证代码(通过输入代码字符串或上传代码图片)。
var bot = new builder.UniversalBot(connector, [
(session) => {
const choices = ['code', 'image'];
var msg = new builder.Message(session)
.text("Which will you prefer to provide your code?")
.suggestedActions(
builder.SuggestedActions.create(
session, [
builder.CardAction.imBack(session, "code", "By Code"),
builder.CardAction.imBack(session, "image", "By Image")
]
)
);
builder.Prompts.choice(session, msg, choices);
}, (session, args, next) => {
const type = args.response.entity;
session.send(`Your choice is ${type}`);
if (type == 'code') {
session.replaceDialog('verifyCode')
} else {
session.replaceDialog('verifyAttachmenet')
}
}
]);
bot.dialog('verifyCode', [(session) => {
builder.Prompts.text(session, 'Input your code');
}, (session, args, next) => {
session.send(args.response);
session.endDialog();
}])
bot.dialog('verifyAttachmenet', [(session) => {
builder.Prompts.attachment(session, 'update your image');
}, (session, args, next) => {
session.send(`You upload ${args.response.length} images`);
session.endDialogWithResult(args.response);
}])