Я настраиваю чат-бота Dialogflow, который подключается к локальной базе данных MySQL, и он выполняет оператор, который должен видеть пользователь, прежде чем он извлечет информацию, необходимую для его заполнения, и я не уверен, как решить эту проблему.
Я попытался создать цикл, который бы принудительно выполнял операторы извлечения данных MySQL, но это не сработало.Я попытался просто выполнить компоненты agent.add () в компоненте MySQL, но по какой-то причине они не будут выполняться / отображаться в Dialogflow.Я пытался использовать асинхронные инструкции Node.JS, но мой код просто кирпич.
const express = require('express')
const { WebhookClient } = require('dialogflow-fulfillment')
const app = express()
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: '',
password: '',
database: '',
port: '3306'
});
var someVar;
app.get('/', (req, res) => res.send('online'))
app.post('/dialogflow', express.json(), (req, res) => {
const agent = new WebhookClient({ request: req, response: res })
function setValue(value) {
someVar = value;
console.log(someVar);
}
function database(mnumber) {
connection.query('SELECT name FROM data WHERE mnum = ' + connection.escape(mnumber), function(err, rows){
if(err) {
throw err;
} else {
setValue(rows[0].name);
console.log(String(someVar));
}
});
}
function welcome () {
agent.add('Welcome to my agent! Is it working?')
}
function userinfo () {
const mnumber = agent.parameters.mnumber;
database(mnumber);
var testVar = String(someVar);
agent.add("Hello " + testVar + "!");
console.log("Hello " + testVar + "!");
}
let intentMap = new Map()
intentMap.set('Default Welcome Intent', welcome)
intentMap.set('userInformation', userinfo)
agent.handleRequest(intentMap)
})
app.listen(process.env.PORT || 8080)
Ожидаемый результат будет:
Привет имя!
Но вна самом деле вывод:
Здравствуйте, undefined!
Я подтвердил, что он действительно получает информацию через консоль, когда я прошу его вывести имя в функцию чтения MySQL и подтверждает, что он читаетэто не последовательно, как будет показано:
Здравствуйте, undefined!имя имя
Вместо:
имя имя Привет, имя!