mirror of
https://github.com/cheveguerra/botLeiferAurik-Mod_2.0.git
synced 2026-04-17 19:36:17 +00:00
merge con BotGuna
This commit is contained in:
159
adapter/index.js
159
adapter/index.js
@@ -4,9 +4,7 @@ const { getDataIa } = require('./diaglogflow')
|
||||
// const stepsInitial = require('../flow/initial.json')
|
||||
const stepsReponse = require('../flow/response.json')
|
||||
const { isUndefined } = require('util');
|
||||
var msjsRecibidos = [];
|
||||
var ultimoStep; //MOD by CHV -
|
||||
// var pasoAnterior = []; //MOD by CHV - Para guardar el paso anterior de cada número. (MOD - global en app.js)
|
||||
var pasoRequerido; //MOD by CHV -
|
||||
var _vamosA = ""; //MOD by CHV -
|
||||
var VA = ""; //MOD by CHV -
|
||||
@@ -37,7 +35,6 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
elNum = num //MOD by CHV -
|
||||
if(siguientePaso.find(k => k.numero.includes(elNum))){
|
||||
console.log("siguientePaso="+siguientePaso.find(k => k.numero.includes(elNum))["numero"], siguientePaso.find(k => k.numero.includes(elNum))["va"])
|
||||
// ultimoStep = siguientePaso.find(k => k.numero.includes(elNum))["va"]
|
||||
pasoAnterior[elNum] = siguientePaso.find(k => k.numero.includes(elNum))["va"] //Asignamos pasoAnterior al número.
|
||||
siguientePaso.splice(siguientePaso.indexOf(elNum), 1)
|
||||
console.log("******************** "+siguientePaso.find(k => k.numero.includes(elNum)))
|
||||
@@ -45,14 +42,43 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
if(siguientePaso.length>1){console.log(siguientePaso[1]["numero"], siguientePaso[1]["va"])}
|
||||
|
||||
/**
|
||||
* Si no estas usando un gesto de base de datos
|
||||
* Si no estas usando una base de datos
|
||||
*/
|
||||
|
||||
if (process.env.DATABASE === 'none') {
|
||||
// console.log(message)
|
||||
var { key } = stepsInitial.find(k => k.keywords.includes(message)) || { key: null }
|
||||
// console.log(stepsInitial)
|
||||
// console.log("KEY="+key)
|
||||
//******************************************************************************** */
|
||||
var logKeysArray = false // Poner en verdadero para ver logs de esta seccion.
|
||||
//******************************************************************************** */
|
||||
key = null
|
||||
let q = 0;
|
||||
if(logKeysArray) console.log(stepsInitial.length)
|
||||
while (key == null && q < stepsInitial.length) {
|
||||
if(Array.isArray(stepsInitial[q].keywords)){
|
||||
let r = 0
|
||||
let rFound = false
|
||||
while(!rFound && r<stepsInitial[q].keywords.length){
|
||||
if(logKeysArray) console.log(q, "keyword=", stepsInitial[q].keywords[r], "msj=", message)
|
||||
if(logKeysArray) console.log(q, "req=", resps[stepsInitial[q].key.toString()].pasoRequerido, "ant=", pasoAnterior[elNum])
|
||||
if( message.toLowerCase() == stepsInitial[q].keywords[r].toLowerCase() && ( // Si el mensaje coincide con la palabra clave Y pasoRequerido es igual a pasoAnterior ...
|
||||
resps[stepsInitial[q].key.toString()].pasoRequerido == undefined ||
|
||||
resps[stepsInitial[q].key.toString()].pasoRequerido == pasoAnterior[elNum]
|
||||
)
|
||||
){
|
||||
key = stepsInitial[q].key
|
||||
if(logKeysArray) console.log(key, " SI COINCIDE")
|
||||
rFound = true
|
||||
}
|
||||
else
|
||||
{
|
||||
// key = null
|
||||
if(logKeysArray) console.log("No coincide")
|
||||
}
|
||||
r++
|
||||
}
|
||||
}
|
||||
q++
|
||||
}
|
||||
if(logKeysArray) console.log("KEY = ", key)
|
||||
// var { key } = stepsInitial.find(k => k.keywords.includes(message)) || { key: null }
|
||||
|
||||
/* ############################################### * REGEXP * ####################################################
|
||||
Si queremos usar RegExp, en los "keywords" de inital.json, en lugar de un arreglo usamos un string (quitamos los [])
|
||||
@@ -72,39 +98,34 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
var {keywords} = stepsInitial.find(k => k.key.includes(key)) || { keywords: null }
|
||||
if(!Array.isArray(keywords)){key=null;}//Si "keywords" no es arreglo entonces ponemos "key" en null y usamos REGEXP para buscar reglas.
|
||||
if(key == null && message.length > 0){
|
||||
//******************************************************************************** */
|
||||
var logRegEx = false
|
||||
//******************************************************************************** */
|
||||
console.log("======= KEY ES NULO, USAMOS REGEXP =======");
|
||||
for (i=0; i<stepsInitial.length;i++){
|
||||
if(!Array.isArray(stepsInitial[i].keywords)){// Si "Keywords" NO es arreglo entonces ...
|
||||
for (si=0; si<stepsInitial.length;si++){
|
||||
if(!Array.isArray(stepsInitial[si].keywords)){// Si "Keywords" NO es arreglo entonces ...
|
||||
var coincideKeyword = null;
|
||||
// console.log("KEY=|" + stepsInitial[i].key.toString() + "|" )
|
||||
// if(resps[stepsInitial[i].key.toString()].pasoRequerido != undefined){pr = resps[stepsInitial[i].key].pasoRequerido};
|
||||
// console.log(resps[stepsInitial[i].key.toString()].pasoRequerido== ultimoStep)
|
||||
if(logRegEx) console.log("*** PASO=" + stepsInitial[i].key.toString() + " - REQUERIDO=" + resps[stepsInitial[i].key.toString()].pasoRequerido + " - ANTERIOR=" + pasoAnterior[elNum])
|
||||
if(logRegEx) console.log("*** PASO=" + stepsInitial[si].key.toString() + " - REQUERIDO=" + resps[stepsInitial[si].key.toString()].pasoRequerido + " - ANTERIOR=" + pasoAnterior[elNum])
|
||||
//Si NO hay paso requerido, o el paso requerido es IGUAL al paso anterior, entonces ...
|
||||
if(resps[stepsInitial[i].key.toString()].pasoRequerido == undefined || resps[stepsInitial[i].key.toString()].pasoRequerido == pasoAnterior[elNum]){
|
||||
if(resps[stepsInitial[si].key.toString()].pasoRequerido == undefined || resps[stepsInitial[si].key.toString()].pasoRequerido == pasoAnterior[elNum]){
|
||||
var tempKeyword = "";
|
||||
if(logRegEx) console.log(" - El paso requerido COINCIDE con el anterior, o NO hay paso requerido.")
|
||||
if (stepsInitial[i].keywords == "%solo_correos%"){
|
||||
if (stepsInitial[si].keywords == "%solo_correos%"){
|
||||
if(logRegEx) console.log("solo_correos")
|
||||
tempKeyword = "[a-zA-Z0-9]+[_a-zA-Z0-9\.-]*[a-zA-Z0-9]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+[\.][a-zA-Z]{2,12})"}
|
||||
else {
|
||||
tempKeyword = stepsInitial[i].keywords.toString().replaceAll("*",".*")
|
||||
tempKeyword = stepsInitial[si].keywords.toString().replaceAll("*",".*")
|
||||
}
|
||||
coincideKeyword = message.match(tempKeyword); // Verdadero cuando el mensaje COINCIDE con la palabre clave.
|
||||
// console.log("Keywords="+stepsInitial[i].keywords + " - key=" + stepsInitial[i].key + " - pasoReq=" + resps[stepsInitial[i].key].pasoRequerido + " - PasoAnt=" + ultimoStep)
|
||||
// console.log("coincideKeyword:"+coincideKeyword+" - ultimoStep="+ultimoStep+" - pasoReq="+resps[stepsInitial[i].key].pasoRequerido);
|
||||
// console.log(resps[stepsInitial[i].key].replyMessage.toString())
|
||||
if (coincideKeyword != null){ //Si el mensaje COINCIDE con la palabra clave.
|
||||
if(logRegEx) console.log(" - - El mensaje COINCIDE con el keyword")
|
||||
key = stepsInitial[i].key;
|
||||
key = stepsInitial[si].key;
|
||||
//Si HAY paso requerido, y el paso requerido es DIFERENTE del paso anterior, entonces ...
|
||||
if(resps[stepsInitial[i].key].pasoRequerido != null && resps[stepsInitial[i].key].pasoRequerido != pasoAnterior[elNum]){
|
||||
if(resps[stepsInitial[si].key].pasoRequerido != null && resps[stepsInitial[si].key].pasoRequerido != pasoAnterior[elNum]){
|
||||
key=null
|
||||
if(logRegEx) console.log(" - - - Hay paso requerido y NO coincide con en paso anterior")
|
||||
if(logRegEx) console.log(" - - - Hay paso requerido y NO COINCIDE con en paso anterior")
|
||||
}
|
||||
// console.log("KEY="+key+" - coincideKeyword="+coincideKeyword);
|
||||
if(resps[stepsInitial[i].key].replyMessage.toString().search("/URL") > -1){
|
||||
if(resps[stepsInitial[si].key].replyMessage.toString().search("/URL") > -1){
|
||||
if(logRegEx) console.log("**************** HAY URL ****************")
|
||||
}
|
||||
break;
|
||||
@@ -115,11 +136,10 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
}
|
||||
else {
|
||||
if(logRegEx) console.log("--- NO CUMPLE PASO REQ");
|
||||
// console.log("pasoReq=" + resps[stepsInitial[i].key.toString()].pasoRequerido + " - PasoAnt=" + ultimoStep)
|
||||
}
|
||||
}
|
||||
}
|
||||
// console.log("<<<<<<<<< "+key);
|
||||
// console.log("<<<<<<<<< " + key);
|
||||
// cumplePasoRequerido(key)
|
||||
// ultimoPaso = pasoRequerido;
|
||||
// ultimoStep = key;
|
||||
@@ -129,17 +149,12 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
if(resps[key]!=undefined){VA = resps[key].goto}else{VA=null}
|
||||
cumplePasoRequerido(key);
|
||||
_vamosA = VA;
|
||||
console.log("cumplePasoPrevio[elNum]=", cumplePasoPrevio[elNum])
|
||||
|
||||
if(logRegEx) console.log("cumplePasoPrevio[elNum]=", cumplePasoPrevio[elNum], "_vamosA=", _vamosA)
|
||||
if(_vamosA != "" && _vamosA != undefined && cumplePasoPrevio[elNum] == true){
|
||||
console.log("ASIGNAMOS _VAMOSA = " + _vamosA);
|
||||
if(logRegEx) console.log("ASIGNAMOS _VAMOSA = " + _vamosA);
|
||||
pasoAnterior[elNum] = _vamosA;
|
||||
}
|
||||
// console.log("ULTIMOSTEP="+ultimoStep)
|
||||
_vamosA = "";
|
||||
// console.log("MESSAGE: "+message);
|
||||
// console.log("KEY: "+key);
|
||||
// console.log("RESPONSE: "+response);
|
||||
if(cumplePasoPrevio[elNum]) {resolve(response);}
|
||||
}
|
||||
|
||||
@@ -155,7 +170,7 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
|
||||
|
||||
const reply = (step) => new Promise((resolve, reject) => {
|
||||
/**
|
||||
* Si no estas usando un gesto de base de datos
|
||||
* Si no estas usando una base de datos
|
||||
*/
|
||||
if (process.env.DATABASE === 'none') {
|
||||
let resData = { replyMessage: '', media: null, trigger: null }
|
||||
@@ -207,7 +222,7 @@ const saveMessage = ( message, trigger, number, regla ) => new Promise( async (r
|
||||
resolve( await saveMessageMysql( message, trigger, number ) )
|
||||
break;
|
||||
case 'none':
|
||||
resolve( await saveMessageJson( message, trigger, number, regla) ) //MOD by CHV - Agregamos el paranetro "regla"
|
||||
resolve( await saveMessageJson( message, trigger, number, regla) ) //MOD by CHV - Agregamos el parametro "regla"
|
||||
// console.log("REGLA DESDE APP.JS="+regla)
|
||||
break;
|
||||
default:
|
||||
@@ -216,11 +231,12 @@ const saveMessage = ( message, trigger, number, regla ) => new Promise( async (r
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = { get, reply, getIA, saveMessage, remplazos, stepsInitial, vamosA } //MOD by CHV - Agregamos "remplazos" y "stepsInitial" para usarlos en "apps.js"
|
||||
module.exports = { get, reply, getIA, saveMessage, remplazos, stepsInitial, vamosA, traeUltimaVisita } //MOD by CHV - Agregamos "remplazos" y "stepsInitial" para usarlos en "apps.js"
|
||||
|
||||
/**
|
||||
* Asigna el valor especificado a la variable pasoAnterior.
|
||||
* Esta hace que el flujo se redirija al paso siguente al especificado.
|
||||
* Esta hace que el flujo se redirija al paso siguente al especificado.
|
||||
* NO EJECUTA EL PASO DADO, solo espfecifica cual es el paso anterior para cuando una regla tiene el parametro "pasoRequerido".
|
||||
* @param {elNum} string - El numero del remitente.
|
||||
* @param {elPaso} string - El paso al que se va redirigir el flujo.
|
||||
*/
|
||||
@@ -234,6 +250,7 @@ function vamosA (elNum, elPaso){
|
||||
*/
|
||||
function remplazos(elTexto, extraInfo){
|
||||
if(elTexto == null){elTexto = '';}
|
||||
const fs = require('fs');
|
||||
laLista = elTexto.toString().split(' ');
|
||||
// console.log(laLista);
|
||||
// console.log('============= remplazos ============');
|
||||
@@ -387,11 +404,16 @@ function remplazos(elTexto, extraInfo){
|
||||
cumplePasoPrevio[elNum] = true;
|
||||
}
|
||||
pasoAnterior[elNum] = step
|
||||
ultimoPaso = pasoRequerido;
|
||||
// ultimoPaso = pasoRequerido;
|
||||
}
|
||||
|
||||
const fs = require('fs');
|
||||
/**
|
||||
* Revisa que exista el archivo "chats/numero.json"
|
||||
* @param {*} theFile
|
||||
* @returns
|
||||
*/
|
||||
function chkFile(theFile){ //MOD by CHV - Agregamos para revisar que exista el archivo "chats/numero.json"
|
||||
const fs = require('fs');
|
||||
if (fs.existsSync(theFile)) {
|
||||
// console.log("Si existe el archivo "+ theFile);
|
||||
var h = true;
|
||||
@@ -401,4 +423,59 @@ function chkFile(theFile){ //MOD by CHV - Agregamos para revisar que exista el a
|
||||
var h = false;
|
||||
}
|
||||
return h;
|
||||
}
|
||||
|
||||
/**
|
||||
* Regresa el tiempo tanscurrido en (datepart) desde la ultima visita.\n
|
||||
* datepart: 'y', 'm', 'w', 'd', 'h', 'n', 's' (default = n)
|
||||
* @param {*} file
|
||||
* @param {*} datepart
|
||||
*/
|
||||
function traeUltimaVisita(file, datepart = 'n'){
|
||||
// Node.js program to demonstrate the
|
||||
// fs.futimes() method
|
||||
let thisLog = false
|
||||
const fs = require('fs');
|
||||
let theFile = `${__dirname}/../chats/`+file+".json"
|
||||
if(thisLog) console.log("chkFile=", chkFile(theFile), datepart)
|
||||
if(chkFile(theFile)){
|
||||
// Get the file descriptor of the file
|
||||
const fd = fs.openSync(theFile);
|
||||
// console.log("Details before changing time:");
|
||||
// Get the stats object of the file
|
||||
if(thisLog) console.log(new Date())
|
||||
prevStats = fs.statSync(theFile);
|
||||
// Access the modified and access time of the file
|
||||
if(thisLog) console.log("Modification Time:", prevStats.mtime);
|
||||
if(thisLog) console.log("Access Time:", prevStats.atime);
|
||||
// Get the current time to change the timestamps
|
||||
let changedModifiedTime = new Date();
|
||||
let changedAccessTime = new Date();
|
||||
// Use the futimes() function to assign
|
||||
// the new timestamps to the file descriptor
|
||||
fs.futimes(fd, changedAccessTime, changedModifiedTime, ()=>{})
|
||||
if(thisLog) console.log("dd=", dateDiff(datepart, prevStats.atime, changedAccessTime))
|
||||
if(thisLog) console.log(new Date())
|
||||
return dateDiff(datepart, prevStats.atime, changedAccessTime)
|
||||
}
|
||||
else { return 0 }
|
||||
}
|
||||
/**
|
||||
* Regresa el tiempo transcurrido en (datepart) entre las fechas dadas.
|
||||
* datepart: 'y', 'm', 'w', 'd', 'h', 'n', 's'
|
||||
* @param {*} datepart
|
||||
* @param {*} fromdate
|
||||
* @param {*} todate
|
||||
* @returns
|
||||
*/
|
||||
function dateDiff(datepart, fromdate, todate){
|
||||
datepart = datepart.toLowerCase();
|
||||
var diff = todate - fromdate;
|
||||
var divideBy = { w:604800000,
|
||||
d:86400000,
|
||||
h:3600000,
|
||||
n:60000,
|
||||
s:1000 };
|
||||
|
||||
return Math.floor( diff/divideBy[datepart]);
|
||||
}
|
||||
445
app.js
445
app.js
@@ -11,19 +11,19 @@ const axios = require('axios').default;//MOD by CHV - Agregamos para el get del
|
||||
const qrcode = require('qrcode-terminal');
|
||||
const { Client, LocalAuth, Buttons, List } = require('whatsapp-web.js');
|
||||
const mysqlConnection = require('./config/mysql')
|
||||
const { middlewareClient } = require('./middleware/client')
|
||||
// const { middlewareClient } = require('./middleware/client')
|
||||
const { generateImage, cleanNumber, checkEnvFile, createClient, isValidNumber } = require('./controllers/handle')
|
||||
const { connectionReady, connectionLost } = require('./controllers/connection')
|
||||
const { saveMedia, saveMediaToGoogleDrive } = require('./controllers/save')
|
||||
const { getMessages, responseMessages, bothResponse, waitFor } = require('./controllers/flows')
|
||||
const { sendMedia, sendMessage, lastTrigger, sendMessageButton, sendMessageList, readChat } = require('./controllers/send');
|
||||
const { remplazos, stepsInitial, vamosA } = require('./adapter/index');//MOD by CHV - Agregamos para utilizar remplazos y stepsInitial
|
||||
const { isUndefined } = require('util');
|
||||
const { isSet } = require('util/types');
|
||||
const { remplazos, stepsInitial, vamosA, traeUltimaVisita } = require('./adapter/index');//MOD by CHV - Agregamos para utilizar remplazos y stepsInitial
|
||||
// const { isUndefined } = require('util');
|
||||
// const { isSet } = require('util/types');
|
||||
const { Console } = require('console');
|
||||
const { ClientRequest } = require('http');
|
||||
// const { ClientRequest } = require('http');
|
||||
const { guardaXLSDatos, leeXLSDatos} = require('./Excel');
|
||||
const { ContextsClient } = require('@google-cloud/dialogflow');
|
||||
// const { ContextsClient } = require('@google-cloud/dialogflow');
|
||||
const { ingresarDatos, leerDatos } = require('./implementaciones/sheets')
|
||||
const app = express();
|
||||
app.use(cors())
|
||||
@@ -34,51 +34,53 @@ const port = process.env.PORT || 3000
|
||||
const delay = (ms) => new Promise((resolve) => setTimeout(resolve,ms))
|
||||
var client;
|
||||
var dialogflowFilter = false;
|
||||
var totalMsjs; //MOD by CHV -
|
||||
// var totalMsjs; //MOD by CHV -
|
||||
// var vamosA = ""; //MOD by CHV -
|
||||
var newBody; //MOD by CHV -
|
||||
var nuevaRespuesta; //MOD by CHV - Se agrego para los remplazos
|
||||
var vars = []
|
||||
app.use('/', require('./routes/web'))
|
||||
|
||||
/**
|
||||
* Escuchamos cuando entre un mensaje
|
||||
*/
|
||||
let blackList = ['34692936038', '34678310819', '34660962689', '34649145761','34630283553','34648827637','34630255646','14178973313']
|
||||
|
||||
/**
|
||||
* Escuchamos cuando entre un mensaje
|
||||
*/
|
||||
listenMessage = () => client.on('message', async msg => {
|
||||
const { from, body, hasMedia } = msg;
|
||||
if (vars[from] === undefined) vars[from] = []
|
||||
// console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||
console.log("+++++++++++++++++++++++++++++++++++++ INICIO +++++++++++++++++++++++++++++++++++++++");
|
||||
// console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||
client.theMsg = msg;
|
||||
// console.log("%%%%%%%%% userAgent = " + client?.options?.userAgent)
|
||||
console.log("HORA:"+new Date().toLocaleTimeString()+" FROM:"+from+", BODY:"+body+", HASMEDIA:"+hasMedia+", DEVICETYPE:"+client.theMsg?.deviceType);
|
||||
newBody = removeDiacritics(body) //MOD by CHV - Agregamos para quitar acentos
|
||||
// newBody = remplazos(newBody);
|
||||
// vamosA = "";
|
||||
|
||||
// const uv = traeUltimaVisita(from, 's')
|
||||
// console.log("ultVista=", uv)
|
||||
|
||||
if(!isValidNumber(from)){
|
||||
return
|
||||
}
|
||||
// Este bug lo reporto Lucas Aldeco Brescia para evitar que se publiquen estados
|
||||
if (from === 'status@broadcast') {
|
||||
return
|
||||
if (from === 'status@broadcast') { return }
|
||||
/**
|
||||
* Blacklist, los telefonos incluidos en este arreglo son ignorados por el bot.
|
||||
*/
|
||||
if (blackList.includes(from.replace("@c.us",""))) {
|
||||
console.log('BlackListed: ',blackList.includes(from.replace("@c.us","")))
|
||||
return
|
||||
}
|
||||
let blackList = ['34692936038', '34678310819', '34660962689', '34649145761','34630283553','34648827637','34630255646','14178973313']
|
||||
console.log('BlackListed: ',blackList.includes(from.replace("@c.us","")))
|
||||
if (blackList.includes(from.replace("@c.us",""))) return
|
||||
message = newBody.toLowerCase();
|
||||
const number = cleanNumber(from)
|
||||
client.theMsg['numero'] = number
|
||||
|
||||
|
||||
// Guardamos el mensaje en Google Sheets
|
||||
ingresarDatos(from, body)
|
||||
|
||||
|
||||
// console.log(stepsInitial)
|
||||
// console.log(stepsInitial)
|
||||
var { key } = stepsInitial.find(k => k.keywords.includes(message)) || { key: null }//MOD by CHV - Se agrega para obtener KEY
|
||||
await readChat(number, message, null , key) //MOD by CHV - Agregamos key/regla para guardarla en "chats/numero.json"
|
||||
client.theMsg['key'] = key
|
||||
|
||||
|
||||
/**
|
||||
* Guardamos el archivo multimedia que envia
|
||||
*/
|
||||
@@ -90,7 +92,6 @@ listenMessage = () => client.on('message', async msg => {
|
||||
/**
|
||||
* Si estas usando dialogflow solo manejamos una funcion todo es IA
|
||||
*/
|
||||
|
||||
if (process.env.DATABASE === 'dialogflow') {
|
||||
if (process.env.DIALOGFLOW_MEDIA_FOR_SLOT_FILLING === 'true' && dialogflowFilter) {
|
||||
waitFor(_ => hasMedia, 30000)
|
||||
@@ -119,6 +120,7 @@ listenMessage = () => client.on('message', async msg => {
|
||||
}
|
||||
|
||||
if(body=='/listas'){
|
||||
// Asi se manda directamente con el ciente de whatsapp-web.js "client.sendMessage(from, productList)"
|
||||
const productList = new List(
|
||||
"Here's our list of products at 50% off",
|
||||
"View all products",
|
||||
@@ -135,96 +137,118 @@ listenMessage = () => client.on('message', async msg => {
|
||||
"Please select a product"
|
||||
);
|
||||
console.log('##################################################################################################')
|
||||
// console.log(from, lista)
|
||||
// let sections = [{title:'sectionTitle',rows:[{id:'ListItem1', title: 'title1'},{id:'ListItem2', title:'title2'}]}];
|
||||
// let lista = new List('List body','btnText',sections,'Title','footer');
|
||||
console.log("****************** productList ******************")
|
||||
console.log(productList)
|
||||
client.sendMessage(from, productList); //cliente.sendMessage recibe el arreglo SIN nombres (solo las secciones los necesitan)
|
||||
// client.sendMessage('5215527049036@c.us', productList);
|
||||
// client.sendMessage('5215554192439@c.us', productList);
|
||||
// await sendMessageList(client, '5215545815654@c.us', null, lista); //sendMessageList recibe el arreglo CON nombres, como viene del response.json
|
||||
// await sendMessageList(client, '5215527049036@c.us', null, lista);
|
||||
// await sendMessageList(client, '5215554192439@c.us', null, lista);
|
||||
// client.sendMessage(from, lista);
|
||||
client.sendMessage(from, productList);
|
||||
// Asi se manda directamente con la funcion del bot. "sendMessageList(client, from, null, lista)"
|
||||
// let sections = [
|
||||
// { title:'sectionTitle',
|
||||
// rows:[
|
||||
// {id:'ListItem1', title: 'title1'},
|
||||
// {id:'ListItem2', title:'title2'}
|
||||
// ]
|
||||
// }
|
||||
// ];
|
||||
// let lista = new List('List body','btnText',sections,'Title','footer');
|
||||
await sendMessageList(client, from, null, productList); //sendMessageList recibe el arreglo CON nombres, tal cual se usa en "response.json"
|
||||
}
|
||||
|
||||
/**
|
||||
* PRUEBA BOTONES NUEVOS
|
||||
*/
|
||||
// if(body=="579"){
|
||||
// const buttons_reply = new Buttons("Por favor vuelve a intentar, mandando *SOLO* la palabra *gallina* con una diagonal al principio 👇🏽 \n\n */gallina*\n ", [{body: "/gallina", id: 'errorGallina'}], 'Error', 'O haz clic en el siguiente botón') // Reply button
|
||||
// for (const component of [buttons_reply]) await client.sendMessage(from, component);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Ver si viene de un paso anterior
|
||||
* Aqui podemos ir agregando más pasos
|
||||
* a tu gusto!
|
||||
*/
|
||||
|
||||
const lastStep = await lastTrigger(from) || null;
|
||||
client.theMsg['lastStep'] = lastStep
|
||||
// console.log("LAST STEP="+lastStep+", FROM:"+from);
|
||||
if (lastStep) {
|
||||
const response = await responseMessages(lastStep)
|
||||
client.theMsg['trigger'] = response.trigger
|
||||
console.log("CLIENT="+client+", FROM:"+from+", REPLYMESSAGE:"+response.replyMessage);
|
||||
// await sendMessage(client, from, response.replyMessage, lastStep); // Mod by CHV - Para mandar varios mensajes en el mismo response, se cambio esta linea por el forEach de abajo.
|
||||
response.replyMessage.forEach( async messages => {
|
||||
var thisMsg = messages.mensaje
|
||||
if(Array.isArray(messages.mensaje)){thisMsg = messages.mensaje.join('\n')}
|
||||
await sendMessage(client, from, remplazos(thisMsg, client), response.trigger);
|
||||
})
|
||||
}
|
||||
// const lastStep = await lastTrigger(from) || null;
|
||||
// client.theMsg['lastStep'] = lastStep
|
||||
// // console.log("LAST STEP="+lastStep+", FROM:"+from);
|
||||
// if (lastStep) {
|
||||
// const response = await responseMessages(lastStep)
|
||||
// client.theMsg['trigger'] = response.trigger
|
||||
// console.log("CLIENT="+client+", FROM:"+from+", REPLYMESSAGE:"+response.replyMessage);
|
||||
// // await sendMessage(client, from, response.replyMessage, lastStep); // Mod by CHV - Para mandar varios mensajes en el mismo response, se cambio esta linea por el forEach de abajo.
|
||||
// response.replyMessage.forEach( async messages => {
|
||||
// var thisMsg = messages.mensaje
|
||||
// if(Array.isArray(messages.mensaje)){thisMsg = messages.mensaje.join('\n')}
|
||||
// await sendMessage(client, from, remplazos(thisMsg, client), response.trigger);
|
||||
// })
|
||||
// }
|
||||
|
||||
/**
|
||||
* Respondemos al primero paso si encuentra palabras clave
|
||||
*/
|
||||
// const step = await getMessages(message, );
|
||||
// console.log("STEP - "+step+"|"+message);
|
||||
// console.log("****** STEP="+step);
|
||||
// console.log("****** MESSAGE:"+message);
|
||||
const step = await getMessages(message, from);
|
||||
client.theMsg['step'] = step
|
||||
if (step) {
|
||||
const response = await responseMessages(step);
|
||||
client.theMsg['trigger'] = response.trigger
|
||||
var resps = require('./flow/response.json');
|
||||
nuevaRespuesta = remplazos(resps[step].replyMessage.join(''), client);
|
||||
client.theMsg['replyMessage'] = nuevaRespuesta
|
||||
var pasoRequerido = resps[step].pasoRequerido;
|
||||
// console.log('NUEVA RESPUESTA=', nuevaRespuesta)
|
||||
|
||||
if(nuevaRespuesta.search("/URL")>-1){
|
||||
// Necesita instalado axios version 0.27.2 (npm i axios@0.27.2), si se instala una version mas nueva manda error de "GET no definido" o algo asi.
|
||||
// console.log(theUrl);
|
||||
console.log("========== GET URL ============");
|
||||
/*
|
||||
============================================================================
|
||||
======================== DESBLOQUEO DE USUARIOS ==========================
|
||||
============================================================================
|
||||
*/
|
||||
console.log('PASOREQUERIDO=', pasoRequerido)
|
||||
if(pasoRequerido=="soporte"){
|
||||
// var theUrl=nuevaRespuesta.substring(5).replace("XXPARAM1XX",newBody);
|
||||
// const RES = await axios.get(theUrl).then(function (response) {
|
||||
// const { AffectedRows } = response.data['respuesta'][0]
|
||||
// console.log('AFFECTED_ROWS = ', AffectedRows)
|
||||
// if(response.data['respuesta'][0]['AffectedRows']=="1"){
|
||||
// sendMessage(client, from, "Listo, usuario *"+response.data['params']['par1']+"* desbloqueado, por favor *cerrar navegadores* y reingresar.", response.trigger, step);
|
||||
// }
|
||||
// else{
|
||||
// sendMessage(client, from, "El usuario *"+response.data['params']['par1']+"* no *existe* o esta dado de *baja*, por favor revisarlo y volver a intentar.", response.trigger, step);
|
||||
// }
|
||||
// return response
|
||||
// // console.log('AXIOS RES=', response)
|
||||
// }).catch(function (error) {
|
||||
// console.log(error);
|
||||
// return error
|
||||
// });
|
||||
// console.log('RES=', RES)
|
||||
const step = await getMessages(message, from);
|
||||
client.theMsg['step'] = step
|
||||
if (step) {
|
||||
// console.log("Entramos a STEP")
|
||||
const response = await responseMessages(step);
|
||||
client.theMsg['trigger'] = response.trigger
|
||||
var resps = require('./flow/response.json');
|
||||
nuevaRespuesta = remplazos(resps[step].replyMessage.join(''), client);
|
||||
client.theMsg['replyMessage'] = nuevaRespuesta
|
||||
// var pasoRequerido = resps[step].pasoRequerido;
|
||||
if(body=='traeXLS'){
|
||||
const rows = await leeXLSDatos('x')
|
||||
console.log("RESULTADOS:")
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
async function retardo() {
|
||||
for (sp=1;sp<rows.length;sp++) {
|
||||
// console.log(masivo[sp].numero+"@c.us");
|
||||
var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos.
|
||||
if(sp % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} //
|
||||
console.log(`============= Mandamos el mensaje ${sp} ==============`);
|
||||
var elTextoDelMensaje = `%saludo% ${rows[sp].prefijo} *${rows[sp].nombre}* con CARNET *${rows[sp].carnet}*, le saludamos de _CORPORACION AZUL_ le escribimos para recordarle que tiene un pago *pendiente* que se vence el *02/02/2023*`;
|
||||
await sleep(500);
|
||||
// let elNumero = '51968016860@c.us'
|
||||
let elNumero = '5215554192439@c.us'
|
||||
client.sendMessage(elNumero, remplazos(elTextoDelMensaje, client));
|
||||
console.log(`Esperamos ${rnd} segundos...`);
|
||||
await sleep(rnd*1000);
|
||||
}
|
||||
console.log('Terminamos');
|
||||
}
|
||||
retardo();
|
||||
}
|
||||
|
||||
/*
|
||||
============================================================================
|
||||
========================== ENVIO MASIVO TEST ===========================
|
||||
============================================================================
|
||||
*/
|
||||
if(message=='/spam'){
|
||||
const masivo = require('./spam.json')
|
||||
var saludo;
|
||||
var caritas;
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
async function retardo() {
|
||||
for (sp=0;sp<masivo.length;sp++) {
|
||||
console.log(masivo[sp].numero+"@c.us");
|
||||
var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos.
|
||||
if(rnd==1||rnd==4){saludo = "Hola ";}
|
||||
else if(rnd==2||rnd==5){saludo = "Saludos ";}
|
||||
else {saludo = "%saludo% ";}
|
||||
if(rnd==1){caritas = "👨🏻🦰👩🏻🦰";}
|
||||
else if(rnd==2){caritas = "👩🏻🦰👨🏻🦰";}
|
||||
else if(rnd==3){caritas = "🧔🏽👧🏽";}
|
||||
else if(rnd==4){caritas = "👧🏽🧔🏽";}
|
||||
else if(rnd==5){caritas = "👩🏻🦰🧔🏽";}
|
||||
else if(rnd==6){caritas = "🧔🏽👩🏻🦰";}
|
||||
if(sp % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} //
|
||||
console.log(`============= Mandamos el mensaje ${sp} ==============`);
|
||||
var elTextoDelMensaje = caritas + " *" + saludo + "amigo tendero* ❗❗👋🏻\n🕊️ *GUNA* trae para ti dinámicas digitales, con las que podrás participar para ganar increíbles premios. 🏆💸💰\nSigue los siguientes pasos: 😃\n*1.* 📲Sigue la página de Yo Soy Guna en Facebook en la siguiente liga ➡️ https://www.facebook.com/yosoyguna\n*2.* 👉🏻Es importante des click en el botón Me Gusta 👍\n*3.* 🧐Sigue la dinámica que publicaremos , subiendo tu foto 📸 con los siguientes #yosoyguna #gunatenderos #gunachampions\n*4.* 🥳🎉En esta misma página , podrás ver publicados los ganadores🏅 y el tiempo en que serán elegidos. 💲 Además de tener acceso a increíbles promociones 🤑";
|
||||
sendMedia(client, masivo[sp].numero+"@c.us", "envioMasivoGuna.jpg");
|
||||
await sleep(500);
|
||||
client.sendMessage(masivo[sp].numero+"@c.us", remplazos(elTextoDelMensaje, client));
|
||||
// client.sendMessage(masivo[i].numero+"@c.us", "Este es un mensaje de prueba para *"+masivo[i].numero+"*, HORA:*"+new Date().toLocaleTimeString()+"*");
|
||||
console.log(`Esperamos ${rnd} segundos...`);
|
||||
await sleep(rnd*1000);
|
||||
}
|
||||
console.log('Done');
|
||||
}
|
||||
retardo();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -455,7 +479,6 @@ listenMessage = () => client.on('message', async msg => {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Llama el API para desbloquear un usuario.
|
||||
* @param {*} ctx El objeto del mensaje.
|
||||
@@ -478,6 +501,36 @@ listenMessage = () => client.on('message', async msg => {
|
||||
return error
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Llama el API para desbloquear el usuario.
|
||||
*
|
||||
* @param {*} theURL El URL para llamar al API
|
||||
* @param {*} step
|
||||
*/
|
||||
async function desbloqueaUsuario2(theUrl, step) {
|
||||
// const {from} = client.theMsg
|
||||
// const RES = await axios.get(theUrl).then(function (response) {
|
||||
// const { AffectedRows } = response.data['respuesta'][0]
|
||||
// console.log('AFFECTED_ROWS = ', AffectedRows)
|
||||
// if(response.data['respuesta'][0]['AffectedRows']=="1"){
|
||||
// sendMessage(client, from, "Listo, usuario *"+response.data['params']['par1']+"* desbloqueado, por favor *cerrar navegadores* y reingresar.", response.trigger, step);
|
||||
// }
|
||||
// else{
|
||||
// sendMessage(client, from, "El usuario *"+response.data['params']['par1']+"* no *existe* o esta dado de *baja*, por favor revisarlo y volver a intentar.", response.trigger, step);
|
||||
// }
|
||||
// return response
|
||||
// }).catch(function (error) {
|
||||
// console.log(error);
|
||||
// return error
|
||||
// });
|
||||
}
|
||||
|
||||
// ####################################################################################################################
|
||||
// ############################## INICIAN FUNCIONES PARA MANEJO DE PARAMETROS #####################################
|
||||
// ############################## EN EL RESPONSE.JSON #####################################
|
||||
// ####################################################################################################################
|
||||
|
||||
/*
|
||||
* Si quieres ejecutar una función.
|
||||
*/
|
||||
@@ -487,25 +540,25 @@ listenMessage = () => client.on('message', async msg => {
|
||||
eval(laFuncion)
|
||||
// return
|
||||
}
|
||||
if(response.hasOwnProperty('urlXXXXXXX') && response.hasOwnProperty('values')){
|
||||
let theURL = response.url;
|
||||
let url0 = theURL
|
||||
let vals = response.values // Traemos los valores desde el response.json
|
||||
let j = theURL.split('j=')[1] // Traemos el JSON del URL.
|
||||
let j2 = JSON.parse(j)
|
||||
let cont = 0
|
||||
const { params } = j2 // Traemos los parametros del JSON.
|
||||
console.log('PARAMS=', params, params['par1'], Object.keys(params).length)
|
||||
let url2
|
||||
for (const par in params) { // Remplazamos los valores en lo parametros.
|
||||
console.log(`${par}: ${params[par]}, ${cont}: ${remplazos(vals[cont], client)}`);
|
||||
if(cont==0){url2=url0.replace(params[par], remplazos(vals[cont], client));}
|
||||
else {url2=url2.replace(params[par], remplazos(vals[cont], client));}
|
||||
cont++
|
||||
}
|
||||
// console.log('THE_URL=', url2)
|
||||
desbloqueaUsuario2(url2, step) //Llamamos al API para desbloquear el usuario.
|
||||
return
|
||||
if(response.hasOwnProperty('url') && response.hasOwnProperty('values')){
|
||||
// let theURL = response.url;
|
||||
// let url0 = theURL
|
||||
// let vals = response.values // Traemos los valores desde el response.json
|
||||
// let j = theURL.split('j=')[1] // Traemos el JSON del URL.
|
||||
// let j2 = JSON.parse(j)
|
||||
// let cont = 0
|
||||
// const { params } = j2 // Traemos los parametros del JSON.
|
||||
// console.log('PARAMS=', params, params['par1'], Object.keys(params).length)
|
||||
// let url2
|
||||
// for (const par in params) { // Remplazamos los valores en lo parametros.
|
||||
// console.log(`${par}: ${params[par]}, ${cont}: ${remplazos(vals[cont], client)}`);
|
||||
// if(cont==0){url2=url0.replace(params[par], remplazos(vals[cont], client));}
|
||||
// else {url2=url2.replace(params[par], remplazos(vals[cont], client));}
|
||||
// cont++
|
||||
// }
|
||||
// // console.log('THE_URL=', url2)
|
||||
// desbloqueaUsuario2(url2, step) //Llamamos al API para desbloquear el usuario.
|
||||
// return
|
||||
}
|
||||
/**
|
||||
* Si quieres enviar imagen.
|
||||
@@ -551,98 +604,24 @@ listenMessage = () => client.on('message', async msg => {
|
||||
/**
|
||||
* Si quieres enviar botones o listas
|
||||
*/
|
||||
if(response.hasOwnProperty('actions')){
|
||||
const { actions } = response;
|
||||
// console.log("++++++++++++++++++++++++++++ SEND MESG BUTTON/LIST +++++++++++++++++++++++++++++++++++");
|
||||
if(actions['sections'] === undefined){ //Botones
|
||||
console.log("Botones")
|
||||
await sendMessageButton(client, from, null, actions);
|
||||
if(response.hasOwnProperty('actions')){
|
||||
const { actions } = response;
|
||||
// console.log("++++++++++++++++++++++++++++ SEND MESG BUTTON/LIST +++++++++++++++++++++++++++++++++++");
|
||||
if(actions['sections'] === undefined){ //Botones
|
||||
// console.log("Botones")
|
||||
await sendMessageButton(client, from, null, actions);
|
||||
}
|
||||
else { //Listas
|
||||
console.log("Listas")
|
||||
// console.log(actions)
|
||||
// console.log("Listas")
|
||||
await sendMessageList(client, from, null, actions);
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if(body=='trae'){
|
||||
const rows = await leeXLSDatos('x')
|
||||
console.log("RESULTADOS:")
|
||||
// d.forEach(row => async function() {
|
||||
// console.log(row.nombre, row.edad, row.sexo)
|
||||
// client.sendMessage(from, `Hola ${row.nombre}, recuerda que tienes un adeudo pendiente`)
|
||||
// })
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
async function retardo() {
|
||||
for (sp=1;sp<rows.length;sp++) {
|
||||
// console.log(masivo[sp].numero+"@c.us");
|
||||
var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos.
|
||||
if(sp % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} //
|
||||
console.log(`============= Mandamos el mensaje ${sp} ==============`);
|
||||
var elTextoDelMensaje = `%saludo% ${rows[sp].prefijo} *${rows[sp].nombre}* con CARNET *${rows[sp].carnet}*, le saludamos de _CORPORACION AZUL_ le escribimos para recordarle que tiene un pago *pendiente* que se vence el *02/02/2023*`;
|
||||
await sleep(500);
|
||||
// let elNumero = '51968016860@c.us'
|
||||
let elNumero = '5215554192439@c.us'
|
||||
client.sendMessage(elNumero, remplazos(elTextoDelMensaje, client));
|
||||
console.log(`Esperamos ${rnd} segundos...`);
|
||||
await sleep(rnd*1000);
|
||||
}
|
||||
console.log('Terminamos');
|
||||
}
|
||||
retardo();
|
||||
}
|
||||
|
||||
/*
|
||||
============================================================================
|
||||
========================== ENVIO MASIVO TEST ===========================
|
||||
============================================================================
|
||||
*/
|
||||
if(message=='/spam'){
|
||||
const masivo = require('./spam.json')
|
||||
var saludo;
|
||||
var caritas;
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
async function retardo() {
|
||||
for (sp=0;sp<masivo.length;sp++) {
|
||||
console.log(masivo[sp].numero+"@c.us");
|
||||
var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos.
|
||||
if(rnd==1||rnd==4){saludo = "Hola ";}
|
||||
else if(rnd==2||rnd==5){saludo = "Saludos ";}
|
||||
else {saludo = "%saludo% ";}
|
||||
if(rnd==1){caritas = "👨🏻🦰👩🏻🦰";}
|
||||
else if(rnd==2){caritas = "👩🏻🦰👨🏻🦰";}
|
||||
else if(rnd==3){caritas = "🧔🏽👧🏽";}
|
||||
else if(rnd==4){caritas = "👧🏽🧔🏽";}
|
||||
else if(rnd==5){caritas = "👩🏻🦰🧔🏽";}
|
||||
else if(rnd==6){caritas = "🧔🏽👩🏻🦰";}
|
||||
if(sp % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} //
|
||||
console.log(`============= Mandamos el mensaje ${sp} ==============`);
|
||||
var elTextoDelMensaje = caritas + " *" + saludo + "amigo tendero* ❗❗👋🏻\n🕊️ *GUNA* trae para ti dinámicas digitales, con las que podrás participar para ganar increíbles premios. 🏆💸💰\nSigue los siguientes pasos: 😃\n*1.* 📲Sigue la página de Yo Soy Guna en Facebook en la siguiente liga ➡️ https://www.facebook.com/yosoyguna\n*2.* 👉🏻Es importante des click en el botón Me Gusta 👍\n*3.* 🧐Sigue la dinámica que publicaremos , subiendo tu foto 📸 con los siguientes #yosoyguna #gunatenderos #gunachampions\n*4.* 🥳🎉En esta misma página , podrás ver publicados los ganadores🏅 y el tiempo en que serán elegidos. 💲 Además de tener acceso a increíbles promociones 🤑";
|
||||
sendMedia(client, masivo[sp].numero+"@c.us", "envioMasivoGuna.jpg");
|
||||
await sleep(500);
|
||||
client.sendMessage(masivo[sp].numero+"@c.us", remplazos(elTextoDelMensaje, client));
|
||||
// client.sendMessage(masivo[i].numero+"@c.us", "Este es un mensaje de prueba para *"+masivo[i].numero+"*, HORA:*"+new Date().toLocaleTimeString()+"*");
|
||||
console.log(`Esperamos ${rnd} segundos...`);
|
||||
await sleep(rnd*1000);
|
||||
}
|
||||
console.log('Done');
|
||||
}
|
||||
retardo();
|
||||
}
|
||||
|
||||
function getRandomInt(min, max) {
|
||||
min = Math.ceil(min);
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive
|
||||
}
|
||||
|
||||
//Si quieres tener un mensaje por defecto
|
||||
/**
|
||||
* Si quieres tener un mensaje por defecto
|
||||
*/
|
||||
if (process.env.DEFAULT_MESSAGE === 'true') {
|
||||
const response = await responseMessages('DEFAULT')
|
||||
// await sendMessage(client, from, response.replyMessage, response.trigger); // Mod by CHV - Para mandar varios mensajes en el mismo response, se cambio esta linea por el forEach de abajo.
|
||||
@@ -669,6 +648,7 @@ if(message=='/spam'){
|
||||
return
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Este evento es necesario para el filtro de Dialogflow
|
||||
*/
|
||||
@@ -689,6 +669,11 @@ const listenMessageFromBot = () => client.on('message_create', async botMsg => {
|
||||
}
|
||||
});
|
||||
|
||||
// ####################################################################################################################
|
||||
// ############################## INICIAN FUNCIONES PARA LA CREACION DEL CLIENTE ####################################
|
||||
// ############################## DE WHATSAPP-WEB.JS ####################################
|
||||
// ####################################################################################################################
|
||||
|
||||
client = new Client({
|
||||
authStrategy: new LocalAuth(),
|
||||
puppeteer: { headless: true, args: ['--no-sandbox','--disable-setuid-sandbox'] }
|
||||
@@ -729,40 +714,32 @@ client.initialize();
|
||||
server.listen(port, () => {
|
||||
console.log(`El server esta listo en el puerto ${port}`);
|
||||
})
|
||||
|
||||
checkEnvFile();
|
||||
|
||||
/**
|
||||
* Llama el API para desbloquear el usuario.
|
||||
*
|
||||
* @param {*} theURL El URL para llamar al API
|
||||
* @param {*} step
|
||||
// ####################################################################################################################
|
||||
// ############################## INICIAN FUNCIONES VARIAS ####################################
|
||||
// ####################################################################################################################
|
||||
|
||||
/**
|
||||
* Regresa un número random entre los parametros min y max dados.
|
||||
* @param {*} min
|
||||
* @param {*} max
|
||||
* @returns
|
||||
*/
|
||||
async function desbloqueaUsuario2(theUrl, step) {
|
||||
const {from} = client.theMsg
|
||||
const RES = await axios.get(theUrl).then(function (response) {
|
||||
const { AffectedRows } = response.data['respuesta'][0]
|
||||
console.log('AFFECTED_ROWS = ', AffectedRows)
|
||||
if(response.data['respuesta'][0]['AffectedRows']=="1"){
|
||||
sendMessage(client, from, "Listo, usuario *"+response.data['params']['par1']+"* desbloqueado, por favor *cerrar navegadores* y reingresar.", response.trigger, step);
|
||||
}
|
||||
else{
|
||||
sendMessage(client, from, "El usuario *"+response.data['params']['par1']+"* no *existe* o esta dado de *baja*, por favor revisarlo y volver a intentar.", response.trigger, step);
|
||||
}
|
||||
return response
|
||||
}).catch(function (error) {
|
||||
console.log(error);
|
||||
return error
|
||||
});
|
||||
// const r = await axios.get(theUrl).then(function (response) {
|
||||
// console.log('AXIOS RES=', response)
|
||||
// }).catch(function (error) {
|
||||
// console.log(error);
|
||||
// return error
|
||||
// })
|
||||
// return Promise.resolve(r)
|
||||
function getRandomInt(min, max) {
|
||||
min = Math.ceil(min);
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Revisa que exista el archivo "chats/numero.json"
|
||||
* @param {*} theFile
|
||||
* @returns
|
||||
*/
|
||||
function chkFile(theFile){ //MOD by CHV - Agregamos para revisar que exista el archivo "chats/numero.json"
|
||||
const fs = require('fs');
|
||||
if (fs.existsSync(theFile)) {
|
||||
// console.log("Si existe el archivo "+ theFile);
|
||||
var h = true;
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
"trigger":null
|
||||
},
|
||||
"opcion1":{
|
||||
"keywords": "1",
|
||||
"keywords": ["1"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":[
|
||||
@@ -68,7 +68,7 @@
|
||||
"goto":"menu"
|
||||
},
|
||||
"opcion2":{
|
||||
"keywords": "2",
|
||||
"keywords": ["2"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":[
|
||||
@@ -86,12 +86,12 @@
|
||||
"goto":"menu"
|
||||
},
|
||||
"opcion3":{
|
||||
"keywords": "3",
|
||||
"keywords": ["3"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":[
|
||||
"Seleccionaste la *opción 3*\n",
|
||||
"Por favor dame tu nombre.\n",
|
||||
"*Por favor dame tu nombre.*\n",
|
||||
"Aquí vamos a aceptar *cualquier* texto, porque en el *initial.json* tenemos keywords : \"*\" (un asterisco en expresiones regulares quiere decir *\"cualquier cosa\"*)",
|
||||
"Y en *response.json* en la opción correspondiente tenemos \"pasoRequerido\" : \"menu\", que quiere decir que SOLO se va a disparar cuando el paso anterior sea \"menu\"."
|
||||
]
|
||||
@@ -180,7 +180,7 @@
|
||||
}
|
||||
},
|
||||
"lista":{
|
||||
"keywords": "4",
|
||||
"keywords": ["4"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":["*%saludo%*, este es un ejemplo de listas"]
|
||||
@@ -207,7 +207,7 @@
|
||||
"goto":"menu"
|
||||
},
|
||||
"botones":{
|
||||
"keywords": "5",
|
||||
"keywords": ["5"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":["*%saludo%*, este es un ejemplo de botones"]
|
||||
@@ -306,7 +306,7 @@
|
||||
"goto":"menu"
|
||||
},
|
||||
"botonespaq3":{
|
||||
"keywords": "6",
|
||||
"keywords": ["6"],
|
||||
"replyMessage":[
|
||||
{
|
||||
"mensaje":["*%saludo%*, este es un ejemplo de botones y regExp"]
|
||||
|
||||
Reference in New Issue
Block a user