Используя Microsoft Bot Framework, можно ли объединить несколько водопадов в функцию? - PullRequest
1 голос
/ 16 января 2020

Я разработал служебную функцию для получения пользовательской информации (чтобы проверить, вошел ли пользователь), которая использует три функции в водопаде. Первая функция ( promptUserId ) молча отправляет сообщение в пользовательский интерфейс и ожидает ответ. Вторая функция сохраняет ответ ( saveUserId ) из пользовательского интерфейса, а третья функция (** processUserId **) обрабатывает ответ из пользовательского интерфейса и возвращает значение. Можно ли объединить эти 3 функции в одну функцию, чтобы эту утилиту можно было использовать как однострочный вызов, куда бы я ни захотел?

userUtil. js - реализованная утилита, а file1. js - файл, использующий userUtil. js

Ниже приведен userUtil. js

const promptUserId= (session, args, next) => {
        builder.Prompts.text(session, 'Ask UserId');
        next();
};

const saveUserId= (session, results, next) => {
    if (results.response){  
        session.dialogData.loginUserId = results.response;
    }else{
    session.dialogData.loginUserId ='XYZ12333333333';
    }
    next();
};


const processUserId = (userId) => {
    let userInfo,userObject;
    //process the received userId to get 'userObject' and assign it to userInfo 
   //userObject = result from api where input is userId and output is userObject    
    userInfo=userId;
    return userInfo;
};

module.exports = {
    promptUserId,
    saveUserId,
    processUserId
};


Вот файл. js

const userUtil = require('../util/userUtil');

module.exports = [
    (session, args, next) => {
        userUtil.promptUserId(session, args, next);
    },

    (session, results, next) => {
        user.saveUserId(session, results, next);
    },

    async (session, args, next) => {
        session.dialogData.userInfo = await user.processUserId(session.dialogData.loginUserId);
        // user is logged in save consent and connect to agent
        if (session.dialogData.userData) {
            return session.dialogData.userData;
        }

    }
];

Есть ли способ обработки запросов на сборку в одном водопад или реализовать функцию, которая возвращает return session.dialogData.userData ??

1 Ответ

1 голос
/ 16 января 2020

Вы можете объединить их в диалог, похожий на этот пример .

При этом, если это новый бот, Я настоятельно рекомендую не собирать его в v3. Вместо этого используйте Bot Framework v4 . Даже если это не более новый бот, я рекомендую перейти на v4 . Одним из основных преимуществ, которое вы получите, является использование Waterfall Dialogs , которое может легко выполнить sh то, что вы хотите.

...