wit.ai + история с 2 или более диалогами для получения сущностей

Пробую разные истории в wit.ai. Вот один сценарий, когда я хочу сообщить о потерянной кредитной карте. Когда пользователь говорит, что потерял кредитную карту, бот должен запросить его SSN, а затем имя матери/девицы в 2 шага, а затем он должен заблокировать карту. Вот ссылка на приложение: https://wit.ai/Nayana-Manchi/CreditCardApp/stories/f7d77d9e-e993-428f-a75e-2e86f0e73cb3

Вопросы:

  1. В списке сущностей я обнаружил, что он принимает только второй ввод (т.е. имя матери в данном случае, SSN равен нулю) в списке сущностей, когда он вызывает действие. Я поместил несколько журналов в код JavaScript, чтобы найти список сущностей. Нужно ли мне следовать подходу, основанному на слотах, и для этих сценариев?

  2. Подход на основе слотов здесь не подходит, так как пользователь не знает, что такое контрольные вопросы.

  3. На вкладке действий только в том случае, если (есть/нет) есть опции. Пожалуйста, объясните его использование. Если я устанавливаю там необходимые объекты (в данном случае: SSN и имя матери), бот постоянно запрашивает SSN, как в цикле.

Код аналогичен образцу быстрого запуска с некоторыми изменениями для чтения сущностей.Результат в терминале node-wit с зарегистрированными сообщениями, добавленными в javascript


person Nayana M    schedule 16.09.2016    source источник


Ответы (1)


Вы должны сохранить объекты, принадлежащие к тому же сеансу, в отправить действие.

send(request, response) {
        const {sessionId, context, entities} = request;
        const {text, quickreplies} = response;
        const motherName = userSession[sessionId].fbid;
        const motherName = firstEntityValue(entities, 'mother_name');
        const SSN = firstEntityValue(entities, 'SSN');

        // set context in user sessions to used in actions
        // act as merge operation of old wit.ai api
        if (motherName && SSN) {
            sessions[sessionId].context.motherName = firstEntityValue(entities, 'mother_name');
            sessions[sessionId].context.SSN = firstEntityValue(entities, 'SSN');
        }

        return new Promise(function (resolve, reject) {
            console.log("Sending.. " ,text);
            resolve();
        });
    },
To use it in custom actions

//to use saved entities from customAction

        findCreditCard({sessionId, context, text, entities}) {
        
        const SSN = sessions[sessionId].context.SSN;
        const motherName = sessions[sessionId].context.motherName;

        return new Promise(function (resolve, reject) {
            // custom action code
//if everything gets completed then set context.done=true
if(completed) context.done=true
            resolve(context);
        });
    });

Чтобы он больше не запускал ваши действия, удалите conext

wit.runActions(
    sessionId,
    text, // the user's message
    sessions[sessionId].context // the user's current session state
).then((context) => {
    console.log('Wit Bot haS completed its action', context);
// this will clear the session data 
    if (context['done']) {
        console.log("clearing session data");
        delete sessions[sessionId];
    }
    else {
        console.log("updating session data");
        // Updating the user's current session state
        sessions[sessionId].context = context;
    }
}).catch((err) => {
        console.log('Oops! Got an error from Wit: ', err.stack || err);
});

person Ashes Vats    schedule 26.09.2016
comment
Большое спасибо за твою помощь. Я попробую, как объяснили. - person Nayana M; 27.09.2016
comment
Это мне очень помогло. Я сохранил объекты в сеансе и успешно их извлек. Большое спасибо за помощь во времени .. :) - person Nayana M; 04.10.2016
comment
Добро пожаловать... Я использую Redis в производственной среде для хранения сеанса. Если это поможет вам, пожалуйста, оцените его. - person Ashes Vats; 05.10.2016