Merge pull request #24 from rrruuuyyy/main

into dev branch
This commit is contained in:
Leifer Mendez
2022-03-15 10:06:11 +01:00
committed by GitHub
8 changed files with 124 additions and 4644 deletions

View File

@@ -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
View 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 }

View File

@@ -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}

View File

@@ -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'
});

View File

@@ -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
View File

4625
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -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"
},