Prompts.text - 处理图像/附件响应

时间:2018-04-08 10:09:50

标签: node.js botframework

我有一个机器人对话框,要求用户输入订单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流量 我希望能够对待"拇指向上"图像作为肯定的答案 根据我的问题和控制对话流程。

1 个答案:

答案 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);
}])