我有一个机器人对话框,它向用户询问订单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并具有省略的验证代码时,此操作将如预期的那样工作。
我面临的问题是,用户不时上传订单id的屏幕截图,这会触发默认操作,即使用系统提示重新提示。
我知道如果使用retryPrompt接口,我可以使用IPromptOptions属性,但这并不能解决我的问题。
我希望能够开始另一个对话或结束对话。
我该怎么做呢?
编辑:
在另一种情况下,用户没有说“是”或任何其他积极的短语,而是用来自Facebook的“拇指向上”图片回复Prompts.text。这也会破坏Prompts.text流。
我希望能够把“竖起大拇指”的形象作为对我的问题的正面回答,并据此控制会话流程。
发布于 2018-04-09 06:04:44
因为内置Prompts将创建一个单独的对话框,并且Prompts.text()只在将图像文件上传到bot时严格地验证用户输入的string类型,这将不会被Prompts.text()对话框验证,这将引发您的问题。
您可以考虑为用户添加一个步骤,以选择一种方法来验证代码(通过输入代码字符串或上传代码图片)。
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);
}])https://stackoverflow.com/questions/49716742
复制相似问题