【发布时间】:2019-06-21 23:18:44
【问题描述】:
我正在设置一个连接到本地 MySQL 数据库的 Dialogflow 聊天机器人,它会执行用户应该看到的语句,然后再提取填充它所需的信息,我不知道如何解决这个问题。
我试图创建一个循环来强制执行 MySQL 数据检索语句,但没有成功。我试图只在 MySQL 组件中执行 agent.add() 组件,但由于某种原因不会在 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)
预期的输出是:
你好名字!
但实际上输出是:
你好未定义!
我确认它实际上是通过控制台获取信息,因为我要求它在 MySQL 读取函数中输入名称,并确认它以非顺序读取它,因为它会显示:
你好未定义! 姓名 名字
而不是:
名称 姓名 你好名字!
【问题讨论】:
标签: javascript mysql node.js dialogflow-es