Prompts.text - обработка ответа на изображение/вложение

avatar
Alexander
8 апреля 2018 в 10:09
72
1
0

У меня есть диалоговое окно бота, которое запрашивает у пользователя идентификатор заказа:

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 {
           // ...
        }
    }
]);

Это работает, как и ожидалось, когда пользователь вводит действительный идентификатор заказа и имеет подтверждение код, который опущен.

Проблема, с которой я столкнулся, заключается в том, что пользователи время от времени загружают скриншоты идентификатора заказа, который запускает действие по умолчанию, которое заключается в повторном запросе системной подсказки.

Я знаю, что могу использовать свойство retryPrompt, если IPromptOptions, но это не решает мою проблему.<47076566>

Я хочу иметь возможность начать другой диалог или завершить разговор.
Любые идеи, как мне заставить это работать?

Изменить:

В другом случае вместо того, чтобы сказать «Да» или любую другую положительную фразу, пользователь отвечает на Prompts.text изображением «палец вверх» из Facebook Messenger. что также нарушит поток Prompts.text.
Я хочу иметь возможность рассматривать изображение "Большой палец вверх" как положительный ответ на мой вопрос и управлять ходом разговора в соответствии с этим.

Источник

Ответы (1)

avatar
Gary Liu
9 апреля 2018 в 06:04
0

Поскольку встроенные подсказки создадут отдельный диалог, а Prompts.text() проверит ввод пользователя строго для типа 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);
}])
Alexander
9 апреля 2018 в 09:33
0

Хотя этот обходной путь может решить текущую проблему, он неприемлем в различных других ситуациях, таких как: Вместо того, чтобы сказать «Да», пользователь отвечает на Prompts.text изображением «Большой палец вверх» из Facebook Messenger. что также нарушит поток Prompts.text.