mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
Save messages in Mysql or Json
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
const { getData, getReply } = require('./mysql')
|
||||
const { getData, getReply, saveMessageMysql } = require('./mysql')
|
||||
const { saveMessageJson } = require('./jsonDb')
|
||||
const { getDataIa } = require('./diaglogflow')
|
||||
const stepsInitial = require('../flow/initial.json')
|
||||
const stepsReponse = require('../flow/response.json')
|
||||
@@ -64,4 +65,24 @@ const getIA = (message) => new Promise((resolve, reject) => {
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = { get, reply, getIA }
|
||||
const saveMessage = ( message, date, trigger, number ) => new Promise( async (resolve, reject) => {
|
||||
switch ( process.env.DATABASEMESSAGES ) {
|
||||
case 'mysql':
|
||||
resolve( await saveMessageMysql( message, date, trigger, number ) )
|
||||
break;
|
||||
case 'json':
|
||||
resolve( await saveMessageJson( message, date, trigger, number ) )
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// if (process.env.DATABASE === 'dialogflow') {
|
||||
// let resData = { replyMessage: '', media: null, trigger: null }
|
||||
// getDataIa(message,(dt) => {
|
||||
// resData = { ...resData, ...dt }
|
||||
// resolve(resData)
|
||||
// })
|
||||
// }
|
||||
})
|
||||
|
||||
module.exports = { get, reply, getIA, saveMessage }
|
||||
20
adapter/jsonDb.js
Normal file
20
adapter/jsonDb.js
Normal file
@@ -0,0 +1,20 @@
|
||||
const Path = require('path')
|
||||
const StormDB = require("stormdb");
|
||||
|
||||
const saveMessageJson = (message, date, trigger, number) => new Promise( async(resolve,reject) =>{
|
||||
try {
|
||||
const engine = new StormDB.localFileEngine( Path.join(__dirname, `/../chats/${number}.json`) );
|
||||
const db = new StormDB(engine);
|
||||
// set default db value if db is empty
|
||||
db.default({ messages: [] });
|
||||
// add new users entry
|
||||
db.get("messages").push({ message, date, trigger });
|
||||
db.save();
|
||||
resolve('Saved')
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = { saveMessageJson }
|
||||
@@ -25,4 +25,47 @@ getReply = (option_key = '', callback) => connection.query(
|
||||
callback(value)
|
||||
});
|
||||
|
||||
module.exports = {getData, getReply}
|
||||
getMessages = ( number ) => new Promise((resolve,reejct) => {
|
||||
try {
|
||||
connection.query(
|
||||
`SELECT * FROM ${DATABASE_NAME}.response WHERE number = '${number}'`, (error, results) => {
|
||||
if(error) {
|
||||
console.log(error)
|
||||
}
|
||||
const [response] = results;
|
||||
console.log(response)
|
||||
const value = {
|
||||
replyMessage:response?.replyMessage || '',
|
||||
trigger:response?.trigger || '',
|
||||
media:response?.media || ''
|
||||
}
|
||||
resolve(value)
|
||||
})
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
saveMessageMysql = ( message, date, trigger, number ) => new Promise((resolve,reejct) => {
|
||||
try {
|
||||
connection.query(
|
||||
`INSERT INTO ${DATABASE_NAME}.messages `+"( `message`, `date`, `trigger`, `number`)"+` VALUES ('${message}','${date}','${trigger}', '${number}')` , (error, results) => {
|
||||
if(error) {
|
||||
if( error.code === 'ER_NO_SUCH_TABLE' ){
|
||||
connection.query( `CREATE TABLE ${DATABASE_NAME}.messages `+"( `date` DATE NOT NULL , `message` VARCHAR(450) NOT NULL , `trigger` VARCHAR(450) NOT NULL , `number` VARCHAR(50) NOT NULL ) ENGINE = InnoDB", async (error, results) => {
|
||||
setTimeout( async () => {
|
||||
return resolve( await this.saveMessageMysql( message, date, trigger, number ) )
|
||||
}, 150)
|
||||
})
|
||||
}
|
||||
}
|
||||
console.log('Saved')
|
||||
console.log( results )
|
||||
resolve(results)
|
||||
})
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = {getData, getReply, saveMessageMysql}
|
||||
@@ -2,7 +2,7 @@ const mysql = require('mysql');
|
||||
const connection = mysql.createConnection({
|
||||
host : process.env.SQL_HOST || 'localhost',
|
||||
user : process.env.SQL_USER || 'me',
|
||||
password : process.env.SQL_PASS || 'secret',
|
||||
password : process.env.SQL_PASS || '',
|
||||
database : process.env.SQL_DATABASE || 'my_db'
|
||||
});
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@ const { MessageMedia, Buttons } = require('whatsapp-web.js');
|
||||
const { cleanNumber } = require('./handle')
|
||||
const DELAY_TIME = 170; //ms
|
||||
const DIR_MEDIA = `${__dirname}/../mediaSend`;
|
||||
|
||||
// import { Low, JSONFile } from 'lowdb'
|
||||
// import { join } from 'path'
|
||||
const { saveMessage } = require('../adapter')
|
||||
/**
|
||||
* Enviamos archivos multimedia a nuestro cliente
|
||||
* @param {*} number
|
||||
@@ -92,49 +94,11 @@ const lastTrigger = (number) => new Promise((resolve, reject) => {
|
||||
* @param {*} message
|
||||
*/
|
||||
const readChat = async (number, message, trigger = null) => {
|
||||
setTimeout(() => {
|
||||
setTimeout( async () => {
|
||||
number = cleanNumber(number)
|
||||
const pathExcel = `${__dirname}/../chats/${number}.xlsx`;
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
const today = moment().format('DD-MM-YYYY hh:mm')
|
||||
|
||||
if (fs.existsSync(pathExcel)) {
|
||||
/**
|
||||
* Si existe el archivo de conversacion lo actualizamos
|
||||
*/
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
workbook.xlsx.readFile(pathExcel)
|
||||
.then(() => {
|
||||
const worksheet = workbook.getWorksheet(1);
|
||||
const lastRow = worksheet.lastRow;
|
||||
var getRowInsert = worksheet.getRow(++(lastRow.number));
|
||||
getRowInsert.getCell('A').value = today;
|
||||
getRowInsert.getCell('B').value = message;
|
||||
getRowInsert.getCell('C').value = trigger;
|
||||
getRowInsert.commit();
|
||||
workbook.xlsx.writeFile(pathExcel);
|
||||
});
|
||||
|
||||
} else {
|
||||
/**
|
||||
* NO existe el archivo de conversacion lo creamos
|
||||
*/
|
||||
const worksheet = workbook.addWorksheet('Chats');
|
||||
worksheet.columns = [
|
||||
{ header: 'Fecha', key: 'number_customer' },
|
||||
{ header: 'Mensajes', key: 'message' },
|
||||
{ header: 'Disparador', key: 'trigger' }
|
||||
];
|
||||
worksheet.addRow([today, message, trigger]);
|
||||
workbook.xlsx.writeFile(pathExcel)
|
||||
.then(() => {
|
||||
|
||||
console.log("saved");
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("err", err);
|
||||
});
|
||||
}
|
||||
const today = moment().toISOString()
|
||||
await saveMessage( message, today, trigger, number )
|
||||
console.log('Saved')
|
||||
}, 150)
|
||||
}
|
||||
|
||||
|
||||
0
middleware/db.js
Normal file
0
middleware/db.js
Normal file
4625
package-lock.json
generated
4625
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,7 @@
|
||||
"qr-image": "^3.2.0",
|
||||
"qrcode-terminal": "^0.12.0",
|
||||
"socket.io": "^4.4.1",
|
||||
"stormdb": "^0.5.2",
|
||||
"whatsapp-web.js": "^1.16.4",
|
||||
"xlsx": "^0.16.9"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user