Я создаю чат-бота с помощью 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. Если вам понадобится переформулировать этот вопрос, я быбудь рад!