【发布时间】:2020-02-07 12:47:14
【问题描述】:
Bot Framework 最新版本,
我想将所有用户对话存储在节点mysql后端
如何完成这个任务?
【问题讨论】:
-
你想用对话实时还是批量更新mysql?
-
使用node api更新MySQL数据库的实时对话
标签: mysql node.js azure botframework bots
Bot Framework 最新版本,
我想将所有用户对话存储在节点mysql后端
如何完成这个任务?
【问题讨论】:
标签: mysql node.js azure botframework bots
考虑到您需要实时更新,有两种解决方案:
通过 CosmosDB
article 解释了如何在 CosmosDB 中设置对话存储。
var docDbClient = new azure.DocumentDbClient(documentDbOptions);
var tableStorage = new azure.AzureBotStorage({ gzipData: false }, docDbClient);
一旦您将数据存储在那里,您可以执行一个基于 cron 导出到 MySQL 的批处理作业,或者使用change feed。因此,对于 CosmosDB 中的每个条目,您将使用 Azure 函数在 MySQL 中执行 INSERT。
通过中间件
在您的消息传递端点应用程序中,使用中间件拦截所有传入和传出消息。更多详情请看article。
server.post('/api/messages', connector.listen());
var bot = new builder.UniversalBot(connector);
bot.use({
botbuilder: function (session, next) {
myMiddleware.saveIncomingMessage(session, next);
},
send: function (event, next) {
myMiddleware.saveOutgoingMessage(event, next);
}
})
然后对每条消息进行 INSERT:
module.exports = {
saveIncomingMessage: function (session, next) {
// INSERT session.message.text
next();
},
saveOutgoingMessage: function (event, next) {
// INSERT event.text;
next();
}
}
我更喜欢通过中间件,因为它的活动部件较少。
【讨论】:
您应该能够将位于here 的 MySQL npm pacakge 合并到您的项目中。配置并建立连接后,只需从活动中传递所需的数据即可。
您可能希望构建一个中间件层,以便通过每个活动。然后,在中间件中,您将解析活动并将其保存到您的 MySQL 数据库中。您可以在 BotFramework docs 中阅读有关中间件的更多信息。文档末尾有几个链接指向中间件示例,供参考。
代码的最基本形式如下所示:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
希望有帮助!
【讨论】: