Как передать управление в начало предыдущего диалога в Botbuilder NodeJS? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть диалоговое окно, которое подключается к MongoDB и получает результаты.В случае отсутствия результатов управление передается в другое диалоговое окно для получения действительного номера заказа.Когда диалог завершен, управление идентификатором заказа должно быть передано обратно в предыдущее диалоговое окно, но вверху диалогового окна.Как мне этого добиться?

ИЛИ Есть ли лучший способ сделать то, что я пытаюсь сделать

Диалог вызова:

bot.dialog('Get_order_id', [
function (session, args) {
    if (args && args.reprompt) {
        builder.Prompts.text(session, "Enter a valid order number number ")
    } else {
        builder.Prompts.text(session, "What's your order number?");
    }
},
function (session, results) {
    var m1 = new RegExp(/5-7-[0-9]{1,12}/);
    var m2 = new RegExp(/1-[0-9]{1,12}/);
    var matched1 = results.response.match(m1)
    var matched2 = results.response.match(m2)
    if (matched1 || matched2) {
        session.conversationData.order_id_prospect=session.message.text;
        session.endDialogWithResult({ response: session.message.text });
    } else {
        session.replaceDialog('Get_order_id', { reprompt: true });
    }
}]);

Получить код заказа:

bot.dialog('get_order_details',[
function(session){
    session.conversationData.order_id_prospect=session.conversationData.order_id_prospect.replace(/ /g,'');
    var order_obj1=mongoose.model('order_mod', order_schema);

    order_obj1.find({ 'ORDER_NUM': session.conversationData.order_id_prospect }, 'ORDER_NUM CREATED LAST_UPD COMPLETION_DATE APPOINTED ORDER_STATUS LINE_ITEM_STATUS KCI1_Sent KCI2_Sent KCI3_Sent CUSTOMER_REQUIRED_DATE CUSTOMER_COMMITTED_DATE ACTUAL_CCD',
     function (err, athletes) {
        if (err) return handleError(err);
        if (!athletes.length){
            // 'athletes' contains the list of athletes that match the criteria.
            delete session.conversationData.order;
            session.send("Order details not found. Restarting Order Status Workflow. Type Cancel to exit to MainMenu.  ")
            session.beginDialog('Get_order_id');
        }else{
        session.send('Order id: **_%s_** was last updated on **_%s_**. <br/> KCI1 Sent Date: **_%s_**',athletes[0].ORDER_NUM,athletes[0].LAST_UPD,athletes[0].KCI1_Sent);    



        session.endDialogWithResult({response:'order details'});

        }
      }).lean()
}])

enter code here

1 Ответ

0 голосов
/ 12 июня 2018

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

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

var bot = new builder.UniversalBot(connector, [(session) => {
    session.replaceDialog('get_order_details');
}])

bot.dialog('Get_order_id', [
    (session, args) => {
        if (args && args.reprompt) {
            builder.Prompts.text(session, "Enter a valid order number number ")
        } else {
            builder.Prompts.text(session, "What's your order number?");
        }
    },
    (session, results) => {
        var m1 = new RegExp(/5-7-[0-9]{1,12}/);
        var m2 = new RegExp(/1-[0-9]{1,12}/);
        var matched1 = results.response.match(m1)
        var matched2 = results.response.match(m2)
        if (matched1 || matched2) {
            session.conversationData.order_id_prospect = session.message.text;
            session.endDialogWithResult({
                response: session.message.text
            });
        } else {
            session.replaceDialog('Get_order_id', {
                reprompt: true
            });
        }
    }
])

bot.dialog('get_order_details', [
    (session, args, next) => {
        console.log(session.conversationData.order_id_prospect)
        if (!session.conversationData.order_id_prospect || args.get_order) {
            session.beginDialog('Get_order_id')
        } else {
            next();
        }

    },(session,args,next)=>{
        Promise.resolve(true).then(() => {
            const n = Math.round(Math.random());
            if (n) {
                session.endDialog(`${n}`);
            } else {
                session.replaceDialog('get_order_details',{get_order:true})
            }
        })
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...