Bot Framework Scope beginDialogAction - PullRequest
0 голосов
/ 17 мая 2018

У меня возникли проблемы с методом beginDialogAction для управления потоком разговоров, и я хотел бы получить несколько советов.Я довольно плохо знаком с JavaScript.

Что я хотел бы сделать, так это настроить соответствие ключевого слова контексту моего основного диалога.Насколько я понимаю, метод beginDialogAction - лучший способ сделать это.Моя проблема в том, что, как только мой диалог был запущен с beginDialogAction, новый диалог добавляется в стек, и beginDialogAction продолжает прослушивать другое совпадение.Это означает, что если мой пользователь совпадет с моим триггерным словом, находящимся дальше в потоке, это изменит тему разговора.

Я хочу очистить стек диалога перед запуском нового диалогового окна, указанного вbeginDialogAction, но я не смог понять, как далеко.Буду признателен за любой совет!

Код:

var bot = new builder.UniversalBot(connector, function (session) {
    session.send("Hi, good to meet you! I'm here to help you request services. \n\n Please select an action from below.");
    session.beginDialog('main');
});
bot.dialog('main', [
    function(session){
    var msg = new builder.Message(session);
    msg.attachmentLayout(builder.AttachmentLayout.carousel)
    msg.attachments([
        new builder.HeroCard(session)
            .title("Request Design Services")
            .subtitle("I can send out a request for any design services you need, right from here!")
            .buttons([
                builder.CardAction.imBack(session, "I'd like to request design services.", "New Request")
            ]),
        new builder.HeroCard(session)
            .title("Project Finacials Request")
            .subtitle("I can pull finance information from any project within your organization.")
            .buttons([
                builder.CardAction.imBack(session, "I'd like to request financials.", "New Request")
            ])
    ]);
    session.send(msg)
}]).beginDialogAction('begindesign', 'design',{ matches: /design/i }).beginDialogAction('beginfinance', 'finance',{ matches: /financials/i });

bot.dialog('design', [
...
]);

bot.dialog('finance', [
...
]);

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете использовать onSelectAction недвижимость по вашему требованию. Вы можете обратиться к исходному коду для описания:

/ ** * (Необязательно) пользовательский обработчик, который вызывается при каждом запуске действия. Это позволяет вам * настроить поведение действия. Например, вы могли бы очистить стек диалогов до * новый диалог запускается, изменяя поведение по умолчанию, которое состоит в том, чтобы просто нажать новый * диалог в конец стека. * * Важно отметить, что это не водопад, и вы должны позвонить next(), если вы * хотел бы, чтобы действия по умолчанию выполнялись. * /

И, пожалуйста, рассмотрите следующий фрагмент кода:

bot.dialog('mainMenu', [
    (session, args, next) => {
        builder.Prompts.text(session, 'Hi there! What can I do for you today?', {
            retryPrompt: 'Hi there! What can I do for you today?'
        });
    },
    (session, results) => {
        session.endConversation('Goodbye!');
    }
])
.beginDialogAction('sportsAction', 'Sports', {
    matches: /^sports$/i,
})
.beginDialogAction('cookingAction', 'Cooking', {
    matches: /^cooking$/i,
    onSelectAction: (session, args, next) => {
        session.clearDialogStack();
        next();
    }
})
bot.dialog('Sports', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Sports here');
    }
]);
bot.dialog('Cooking', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Cooking here');
    }
])
...