Botpress - 如何将数据库值引入聊天窗口?

时间:2018-04-19 04:35:59

标签: node.js bots

我正在尝试使用Botpress构建聊天机器人。我是初学者,寻求你的帮助。其中一个要求是查询数据库以回答问题。这是我到目前为止所尝试的:

dbconnect.js

var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');

var db = function dbCall(sql, values) {
    return new Promise(function(resolve, reject){
        oracledb.getConnection(
            {
                user          : dbConfig.user,
                password      : dbConfig.password,
                connectString : dbConfig.connectString
            },
            function(err, connection) {
                if (err) {
                    reject(err);
                    return;
                }
                connection.execute(
                    sql,
                    values,
                    {
                        maxRows: 1
                    },
                    function(err, result) {
                        if (err) {
                            console.error(err.message);
                            return;
                        }
                        resolve(result);
                        doRelease(connection);
                    }
                );
            });
    });
}

// Note: connections should always be released when not needed
function doRelease(connection) {
    connection.close(
        function (err) {
            if (err) {
                console.error(err.message);
            }
        });
}

module.exports = db;

select.js



var dbConnect = require('../oracledb/dbconnect');

dbConnect('select code from table1' +
    ' where id=:id', {id:'value1'}).then(function (response) {
    console.info(response.rows);
}).catch(function(error) {
    console.info(error);
});



 如果我运行select.js,那么上面的一切都很棒。我如何将响应带入botpress聊天窗口?我尝试将select.js代码放在index.js event.reply中,它不起作用。

谢谢,

巴布。

1 个答案:

答案 0 :(得分:0)

我已经通过在行动中直接使用承诺解决了这个问题。

return dbConnect('<SQL here>=:id', { id: Id })
        .then(function(response) {
            var res = response.rows
            console.info(res);
            const newState = { ...state, status: res}

            return newState
        })
        .catch(function(error) {
            console.info(error)
        })

请注意,响应具有结果集。