Как мне сохранить и обновить контекст в моем боте? - PullRequest
0 голосов
/ 28 июня 2019

Я создаю чат-бота с помощью Google Dialogflow NLP.В node.js я импортирую диалоговые библиотеки и библиотеки выполнения диалоговых потоков, чтобы позаботиться о пользовательской логике в функции Lambda.Это вызывается через webhook, который вызывается, когда Dialogflow обнаруживает намерение, предоставленное пользователем.

В настоящее время я пытаюсь повторно предложить пользователю ввести значения, если переменные toLoc и fromLoc не заполнены.Я считаю, что должен использовать контексты, но я не уверен, как конкретно это сделать.Итак, в целом мой вопрос заключается в том, как мне продолжать создавать диалоговый поток, требующий от пользователя ввода пропущенных значений параметров до тех пор, пока все значения не будут выполнены, и сохранения этих значений только для определенного сеанса.

const serverless = require('serverless-http');
const bodyParser = require('body-parser');
const express = require('express');
const dialogflow = require('dialogflow');
const app = express();
app.use(bodyParser.json({ strict: false}));
const { WebhookClient, Payload, Image, Card, Suggestion } = require('dialogflow-fulfillment');
const req = require('request');

//const contextsClient = new dialogflow.createContext(dialogflow.contexts.create)
//const sessionClient = new dialogflow.cli

app.use(function(err, req, res, next){
    res.status(500);
    res.send(err);
});

app.post('/', function (req, res) {
    //Instantiate agent
    const agent = new WebhookClient({ request: req, response: res });

    let intentMap = new Map();

    function shuttle(agent){
        try{
                var toLoc = agent.parameters.to_loc;
                var fromLoc = agent.parameters.from_loc;

                console.log("From Location: ${fromLoc} To Location ${toLoc}" + fromLoc + "To Location: " + toLoc);
                if (toLoc === '' || fromLoc === '') {
                    if (fromLoc === 'Harvard') {
                        toLoc = '784';
                        agent.response_(`You're going from ${fromLoc} to ${toLoc}`);

                    } else if (fromLoc === 'Central') {
                        toLoc = '784';
                        agent.add(`You're going from ${fromLoc} to ${toLoc}`);
                    } else if (fromLoc === '784'){
                        agent.addResponse('Where do you want to go? (Harvard, Central)');
                    } else if (toLoc === 'Harvard') {
                        fromLoc = '784';
                        agent.add(`You're going from ${fromLoc} to ${toLoc}`);
                    } else if (toLoc === 'Central') {
                        fromLoc = '784'
                        agent.add(`You're going from ${fromLoc} to ${toLoc}`);
                    } else if (toLoc === '784'){
                        agent.response(`Where are you coming from? (Harvard, Central)`);
                    }
                } else {
                    agent.add(`Shuttle from ${fromLoc} to ${toLoc} is arriving...`);
                }
        }catch(error){
            console.log(error);
        }
    }
    intentMap.set('shuttle', shuttle);
    agent.handleRequest(intentMap);

});
module.exports.server = serverless(app);

В блоке else if при сопоставлении fromLoc с 784 я хочу переспросить пользователя, чтобы спросить, куда он хочет перейти, сохраняя при этом переменную fromLoc. Если вам понадобится переформулировать этот вопрос, я быбудь рад!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...