18 Commits

Author SHA1 Message Date
5916ba6615 fix: posible problema en envio masivo 2023-01-25 21:26:55 -06:00
4b5aabf09a Update Dockerfile 2023-01-15 20:47:13 -06:00
487ba83f7c Merge branch 'master' of https://github.com/cheveguerra/botLeiferAurik-Mod_2.0 2023-01-15 20:45:28 -06:00
7591feb598 dockerfile 2023-01-15 20:45:23 -06:00
554d9b2f4f Update package.json 2023-01-15 20:32:31 -06:00
ee4c00cb46 Update package.json 2023-01-15 20:29:21 -06:00
c31fc1d201 Update package.json 2023-01-15 20:27:57 -06:00
dfd2c7d97d Update package.json 2023-01-15 20:26:00 -06:00
44921e7b78 Update package.json 2023-01-15 20:18:12 -06:00
55012a9d88 docs: mods 2023-01-15 15:30:44 -06:00
1660cf46c3 docs: error en texto 2023-01-15 15:25:33 -06:00
ef9917e954 docs: explicación de submenus mas completa 2023-01-15 15:21:09 -06:00
7febd90e56 feat:se agrego el envio de varios msjs juntos 2023-01-15 14:44:13 -06:00
e8847800f6 agregamos .env 2023-01-07 23:46:57 -06:00
ee79cd9dab cambio en gitignore para conservar .env 2023-01-07 23:46:07 -06:00
b8bf6d1107 cambios en response.json 2023-01-07 16:20:19 -06:00
4cc92a1d80 Merge branch 'master' of https://github.com/cheveguerra/botLeiferAurik-Mod_2.0 2023-01-07 15:46:22 -06:00
828030e424 changed whatsapp-web.js branch to mine! 2023-01-07 15:45:33 -06:00
11 changed files with 278 additions and 91 deletions

15
.env Normal file
View File

@@ -0,0 +1,15 @@
######DATABASE: none, mysql, dialogflow
DEFAULT_MESSAGE=true
SAVE_MEDIA=true
PORT=3005
DATABASE=none
LANGUAGE=es
SQL_HOST=
SQL_USER=
SQL_PASS=
SQL_DATABASE=
KEEP_DIALOG_FLOW=false
MULTI_DEVICE=true
DIALOGFLOW_MEDIA_FOR_SLOT_FILLING=false
GDRIVE_FOLDER_ID=

1
.gitignore vendored
View File

@@ -8,7 +8,6 @@ media/*
mediaSend/* mediaSend/*
!mediaSend/.gitkeep !mediaSend/.gitkeep
!mediaSend/nota-de-voz.mp3 !mediaSend/nota-de-voz.mp3
.env
.wwebjs_auth .wwebjs_auth
backup backup
backup/* backup/*

23
Dockerfile Normal file
View File

@@ -0,0 +1,23 @@
FROM node:18-alpine as node
# Installs latest Chromium (92) package.
RUN apk add --no-cache \
chromium \
nss \
freetype \
harfbuzz \
ca-certificates \
ttf-freefont \
nodejs \
yarn
# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
# Puppeteer v10.0.0 works with Chromium 92.
COPY . .
RUN npm install puppeteer@10.0.0
RUN npm install
CMD ["npm", "start"]

View File

@@ -4,19 +4,29 @@
Este proyecto es un clon de la **version 1** (legacy) de [Leifer Mendez](https://github.com/leifermendez/bot-whatsapp) y tiene las siguientes modificaciones: Este proyecto es un clon de la **version 1** (legacy) de [Leifer Mendez](https://github.com/leifermendez/bot-whatsapp) y tiene las siguientes modificaciones:
- Permite **submenus**. - Permite **submenus**.
- Un submenú es una regla que **sólo se dispara** cuando la regla anterior es la especificada, los submenus se definen agregando el parametro "```pasoRequerido```" en el **response.json**. - Un submenú es un paso que **sólo se dispara** cuando el paso anterior es el especificado, los submenus se definen agregando el parametro "```pasoRequerido```" en el **response.json**, entonces si queremos que el paso **zapatos** solo se muestre cuando antes pasamos por el **menú inicial**, agregamos el parámetro "pasoRequerido" a la regla "zapatos", de esta forma si alguien pone el número **1** sin estar en el menú principal, **no** los va a mandar a **zapatos**.
```json ```json
"menu":{ "menu":{
"replyMessage":[ "replyMessage":[
"%saludo%\nHoy es %dia_semana%.\n" "%saludo%",
"Escribe 1 para zapatos.",
"Escribe 2 para bolsos."
], ],
"media":null, "media":null,
"trigger":null "trigger":null
}, },
"submenu":{ "zapatos":{
"replyMessage":[ "replyMessage":[
"Este submenu solo se dispara si **ANTES** se disparó la regla 'menu'" "Esta es la lista de nuestros zapatos."
],
"media":null,
"trigger":null,
"pasoRequerido":"menu"
},
"bolsos":{
"replyMessage":[
"Esta es la lista de nuestros bolsos."
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
@@ -47,11 +57,38 @@ Este proyecto es un clon de la **version 1** (legacy) de [Leifer Mendez](https:/
} }
``` ```
- Permite **remplazos** en el texto de los mensajes por ejemplo: - Permite **remplazos** en el texto de los mensajes por ejemplo:
- __%saludo%__ para que aparezca "Buenos días, tardes o noches" dependiendo de la hora. - Ponemos __%saludo%__ para que aparezca "Buenos días, tardes o noches" dependiendo de la hora.
- __%primer_nombre%__ para que aparezca el nombre (hasta el primer espacio) del remitente. - Ponemos __%primer_nombre%__ para que aparezca el nombre (hasta el primer espacio) del remitente.
- __%dia_semana%__ para que aparezca "lunes, martes, miercoles, etc" dependiendo del día de la semana. - Ponemos __%dia_semana%__ para que aparezca "lunes, martes, miercoles, etc" dependiendo del día de la semana.
- __%msjant_XX%__ para que aparezca el mensaje xx anterior, es decir, si quieres mostrar el texto de 2 mensajes anteriores se pone %msjant_2%. - Ponemos __%msjant_XX%__ para que aparezca el mensaje xx anterior, es decir, si quieres mostrar el texto de 2 mensajes anteriores se pone %msjant_2%.
- etc, etc, se pueden agregar mas remplazos en la funcion "remplazos" en el archivo "adapter\index.js". - etc, etc, se pueden agregar mas remplazos en la funcion "remplazos" en el archivo "adapter\index.js".
- Permite el envío de **multiples mensajes** definidos en la **misma respuesta** del **response.json**. (Esta modificación se la robe por completo a [KJoaquin](https://github.com/KJoaquin), el lo solucionó [aquí](https://github.com/codigoencasa/bot-whatsapp/issues/111#issuecomment-1353504575) 🙌🏽 y yo solo lo adapté a mi repo!)
Antes:
```json
{
"ejemploViejo":{
"replyMessage":["¿Hola como estas?"],
"media":null,
"trigger":null
}
}
```
Ahora **replyMessage** debe de contener un arreglo con los mensajes que se van a enviar:
```json
{
"ejemploNuevo":{
"replyMessage":[
{ "mensaje":["¿Hola como estas?"]},
{ "mensaje":["Este es el *segundo* mensaje.","Contiene dos lineas 🤪"]},
{ "mensaje":["Este es el *tercer* mensaje"]}
],
"media":null,
"trigger":null
}
}
```
- Las modificaciones están enfocadas al uso de los archivos __initial.json__ y __response.json__, yo no uso MySQL o DialogFlow, así que no sé si las modificaciones funcionen con esos modulos, en particular el __remplazo %msjant_XX%__ depende de los archivos __JSON__ que se crean en el directorio "chats". - Las modificaciones están enfocadas al uso de los archivos __initial.json__ y __response.json__, yo no uso MySQL o DialogFlow, así que no sé si las modificaciones funcionen con esos modulos, en particular el __remplazo %msjant_XX%__ depende de los archivos __JSON__ que se crean en el directorio "chats".
- Tiene agregado el parche de **botones y listas**, así que funcionan sin problema (las listas no funcionan si el bot esta ligado a un número que use **Whatsapp Business**). - Tiene agregado el parche de **botones y listas**, así que funcionan sin problema (las listas no funcionan si el bot esta ligado a un número que use **Whatsapp Business**).
- Tiene los ultimos parches de **DialogFlow** (27-dic-2022) (When Dialogflow asks for an Image, then **Upload it to Google Drive** and then generate Shared Link) - Tiene los ultimos parches de **DialogFlow** (27-dic-2022) (When Dialogflow asks for an Image, then **Upload it to Google Drive** and then generate Shared Link)

View File

@@ -83,7 +83,7 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
else{x = null;} else{x = null;}
} else } else
{ console.log("NO CUMPLE PASO REQ"); { console.log("NO CUMPLE PASO REQ");
// console.log("pasoReq=" + resps[stepsInitial[i].key.toString()].pasoRequerido + " - PasoAnt=" + ultimoStep) console.log("pasoReq=" + resps[stepsInitial[i].key.toString()].pasoRequerido + " - PasoAnt=" + ultimoStep)
} }
} }
} }
@@ -100,7 +100,7 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV -
// console.log(elNum) // console.log(elNum)
if(vamosA != "" && vamosA != undefined && cumplePasoPrevio == true){ if(vamosA != "" && vamosA != undefined && cumplePasoPrevio == true){
console.log("ASIGNAMOS VAMOSA = " + vamosA); // console.log("ASIGNAMOS VAMOSA = " + vamosA);
pasoAnterior[elNum] = vamosA; pasoAnterior[elNum] = vamosA;
} }
// console.log("ULTIMOSTEP="+ultimoStep) // console.log("ULTIMOSTEP="+ultimoStep)
@@ -131,8 +131,9 @@ const reply = (step) => new Promise((resolve, reject) => {
const responseFind = stepsReponse[step] || {}; const responseFind = stepsReponse[step] || {};
resData = { resData = {
...resData, ...resData,
...responseFind, ...responseFind
replyMessage:responseFind.replyMessage.join('')} // replyMessage:responseFind.replyMessage.join('')
}
resolve(resData); resolve(resData);
return return
} }

43
app.js
View File

@@ -157,7 +157,12 @@ const listenMessage = () => client.on('message', async msg => {
if (lastStep) { if (lastStep) {
const response = await responseMessages(lastStep) const response = await responseMessages(lastStep)
console.log("CLIENT="+client+", FROM:"+from+", REPLYMESSAGE:"+response.replyMessage); console.log("CLIENT="+client+", FROM:"+from+", REPLYMESSAGE:"+response.replyMessage);
await sendMessage(client, from, response.replyMessage, lastStep); // 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);
})
} }
/** /**
@@ -193,14 +198,20 @@ const listenMessage = () => client.on('message', async msg => {
}, response.delay) }, response.delay)
} }
if (response.delay){ if (response.delay){
// console.log("+++++++++++++++++++ SENDING MSG WITH DELAY ("+response.delay+") +++++++++++++++++"); // await sendMessage(client, from, nuevaRespuesta, response.trigger, step); // Mod by CHV - Para mandar varios mensajes en el mismo response, se cambio esta linea por el forEach de abajo.
setTimeout(() => { response.replyMessage.forEach( async messages => {
sendMessage(client, from, nuevaRespuesta, response.trigger, step); var thisMsg = messages.mensaje
// console.log(" ************* Msg with delay SENT ****************") if(Array.isArray(messages.mensaje)){thisMsg = messages.mensaje.join('\n')}
await sendMessage(client, from, remplazos(thisMsg, client), response.trigger);
}, response.delay) }, response.delay)
} }
else{ else{
await sendMessage(client, from, nuevaRespuesta, response.trigger, step); // await sendMessage(client, from, nuevaRespuesta, response.trigger, step); // 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);
})
} }
if(response.hasOwnProperty('actions')){ if(response.hasOwnProperty('actions')){
const { actions } = response; const { actions } = response;
@@ -240,8 +251,8 @@ const listenMessage = () => client.on('message', async msg => {
return new Promise(resolve => setTimeout(resolve, ms)); return new Promise(resolve => setTimeout(resolve, ms));
} }
async function retardo() { async function retardo() {
for (i=0;i<masivo.length;i++) { for (sp=0;sp<masivo.length;sp++) {
console.log(masivo[i].numero+"@c.us"); console.log(masivo[sp].numero+"@c.us");
var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos. var rnd = getRandomInt(1,7); // Random entre 1 y 6 segundos.
if(rnd==1||rnd==4){saludo = "Hola ";} if(rnd==1||rnd==4){saludo = "Hola ";}
else if(rnd==2||rnd==5){saludo = "Saludos ";} else if(rnd==2||rnd==5){saludo = "Saludos ";}
@@ -252,12 +263,12 @@ const listenMessage = () => client.on('message', async msg => {
else if(rnd==4){caritas = "👧🏽🧔🏽";} else if(rnd==4){caritas = "👧🏽🧔🏽";}
else if(rnd==5){caritas = "👩🏻‍🦰🧔🏽";} else if(rnd==5){caritas = "👩🏻‍🦰🧔🏽";}
else if(rnd==6){caritas = "🧔🏽👩🏻‍🦰";} else if(rnd==6){caritas = "🧔🏽👩🏻‍🦰";}
if(i % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} // if(sp % 15 === 0){console.log("******** VAN 15, HACEMOS PAUSA DE 10 SEGUNDOS ********"); await sleep(10000);} //
console.log(`============= Mandamos el mensaje ${i} ==============`); 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 🤑"; 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[i].numero+"@c.us", "envioMasivoGuna.jpg"); sendMedia(client, masivo[sp].numero+"@c.us", "envioMasivoGuna.jpg");
await sleep(500); await sleep(500);
client.sendMessage(masivo[i].numero+"@c.us", remplazos(elTextoDelMensaje, client)); 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()+"*"); // 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...`); console.log(`Esperamos ${rnd} segundos...`);
await sleep(rnd*1000); await sleep(rnd*1000);
@@ -276,7 +287,13 @@ const listenMessage = () => client.on('message', async msg => {
//Si quieres tener un mensaje por defecto //Si quieres tener un mensaje por defecto
if (process.env.DEFAULT_MESSAGE === 'true') { if (process.env.DEFAULT_MESSAGE === 'true') {
const response = await responseMessages('DEFAULT') const response = await responseMessages('DEFAULT')
await sendMessage(client, from, response.replyMessage, response.trigger); // 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.
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);
})
/** /**
* Si quieres enviar botones * Si quieres enviar botones
*/ */

View File

@@ -63,6 +63,7 @@ const sendMessage = async (client, number = null, text = null, trigger = null, r
number = cleanNumber(number) number = cleanNumber(number)
const message = text const message = text
client.sendMessage(number, message); client.sendMessage(number, message);
console.log(number, message, regla)
await readChat(number, message, trigger, regla) //MOD by CHV - Agregamos el parametro "regla" await readChat(number, message, trigger, regla) //MOD by CHV - Agregamos el parametro "regla"
console.log(`⚡⚡⚡ Enviando mensajes....`); console.log(`⚡⚡⚡ Enviando mensajes....`);
// console.log("********************* SEND MESSAGE **************************************"); // console.log("********************* SEND MESSAGE **************************************");

View File

@@ -55,6 +55,10 @@
"keywords": ["6"], "keywords": ["6"],
"key": "botonespaq3" "key": "botonespaq3"
}, },
{
"keywords": "7|*doble*mensaje*",
"key": "doblemensaje"
},
{ {
"keywords": ["cursos"], "keywords": ["cursos"],
"key": "cursos" "key": "cursos"

View File

@@ -1,39 +1,63 @@
{ {
"DEFAULT":{ "DEFAULT":{
"replyMessage":[ "replyMessage":[
"*Esta respuesta es un respuesta default* cuando no se consigue una palabra clave \n", { "mensaje":[
"la puedes desactivar en tu archivo .env DEFAULT_MESSAGE=false \n", "*Esta es una respuesta por default* para cuando no se encuentra una palabra clave predefinida.",
"tambien te quiero recordar que si presentas algun error pasarte por el repositorio \n", "Se puede desactivar en el archivo .env DEFAULT_MESSAGE=false",
"https://github.com/leifermendez/bot-whatsapp#chatbot-whatsapp-opensource \n", "tambien te quiero recordar que si presentas algun error pasarte por el repositorio",
"y recuerda tener la ultima versión del proyecto \n\n", "https://github.com/leifermendez/bot-whatsapp#chatbot-whatsapp-opensource",
"Prueba escribiendo *hola* \n" "y recuerda tener la ultima versión del proyecto.",
"Prueba escribiendo */Menu*"
]
}
], ],
"media":null, "media":null,
"trigger":null "trigger":null
}, },
"doblemensaje":{
"replyMessage":[
{"mensaje":["Este es un ejemplo del envío de *varios* mensajes con la *misma regla* en el *response.json*"]},
{
"mensaje":["Este es el *segundo* mensaje.","Contiene dos lineas 🤪"]
},
{"mensaje":["Este es el *tercer* mensaje, los *tres* van definidos en la *misma regla* del *response.json*"]}
],
"media":null,
"trigger":null,
"goto":"menu"
},
"menu":{ "menu":{
"replyMessage":[ "replyMessage":[
"%saludo% %primer_nombre%, este es el menú, selecciona una opción: \n", {
"Pon *1* para mensajes anteriores.\n", "mensaje":[
"Pon *2* para ver remplazos.\n", "%saludo% %primer_nombre%, este es el *menú*, selecciona una opción:",
"Pon *3* para pedir nombre (RegExp).\n", "Pon *1* para ver mensajes anteriores.",
"Pon *4* para un ejemplo de listas y expresiones regulares.\n", "Pon *2* para ver remplazos.",
"Pon *5* para un ejemplo de botones.\n", "Pon *3* para pedir nombre (RegExp).",
"Pon *6* para un ejemplo de botones y regExp.\n" "Pon *4* para un ejemplo de listas y expresiones regulares.",
], "Pon *5* para un ejemplo de botones.",
"Pon *6* para un ejemplo de botones y regExp.",
"Pon *7* para un ejemplo de envío de *tres* mensajes en una *misma* regla."
]
}
] ,
"media":null, "media":null,
"trigger":null "trigger":null
}, },
"opcion1":{ "opcion1":{
"replyMessage":[ "replyMessage":[
"Seleccionaste la opción 1\n", {
"*Ultimo mensaje:*\n", "mensaje":[
"%msjant_0%\n", "Seleccionaste la *opción 1*",
"*Penultimo mensaje:*\n", "*Ultimo mensaje:*",
"%msjant_1%\n", "%msjant_0%",
"*Antepenultimo mensaje:*\n", "*Penultimo mensaje:*",
"%msjant_2% \n\n", "%msjant_1%",
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 3 sin necesidad de volver a iniciar con */menu*." "*Antepenultimo mensaje:*",
"%msjant_2% \n",
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."
]
}
], ],
"media":null, "media":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
@@ -41,12 +65,16 @@
}, },
"opcion2":{ "opcion2":{
"replyMessage":[ "replyMessage":[
"Seleccionaste la opción 2\n", {
"Remplazamos %saludo.% con *\"%saludo%\"*\n", "mensaje":[
"Remplazamos %dia_semana.% con *\"%dia_semana%\"*\n", "Seleccionaste la *opción 2*",
"Remplazamos %hora24.%:%minutos.% con *\"%hora24%:%minutos%\"*\n", "Remplazamos %saludo.% con *\"%saludo%\"*",
"Remplazamos %.rnd_👍🏽,🤞🏼,🤪,🤔% con '%rnd_👍🏽,🤞🏼,🤪,🤔%'\n\n", "Remplazamos %dia_semana.% con *\"%dia_semana%\"*",
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 3 sin necesidad de volver a iniciar con */menu*." "Remplazamos %hora24.%:%minutos.% con *\"%hora24%:%minutos%\"*",
"Remplazamos %.rnd_👍🏽,🤞🏼,🤪,🤔% con '%rnd_👍🏽,🤞🏼,🤪,🤔%'\n",
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."
]
}
], ],
"media":null, "media":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
@@ -54,18 +82,26 @@
}, },
"opcion3":{ "opcion3":{
"replyMessage":[ "replyMessage":[
"Seleccionaste la opción 3\n\n", {
"Por favor dame tu nombre.\n\n", "mensaje":[
"Aquí vamos a aceptar *cualquier* texto, porque en el *initial.json* tenemos keywords : \"***\" (un asterisco en expresiones regulares quiere decir *\"cualquier cosa\"*)\n", "Seleccionaste la *opción 3*\n",
"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\"." "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\"."
]
}
], ],
"media":null, "media":null,
"pasoRequerido":"menu" "pasoRequerido":"menu"
}, },
"recibenombre":{ "recibenombre":{
"replyMessage":[ "replyMessage":[
"Gracias por tu nombre *%msjant_0%*.\n\n", {
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 3 sin necesidad de volver a iniciar con */menu*." "mensaje":[
"Gracias por tu nombre *%msjant_0%*.\n",
"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."
]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
@@ -74,7 +110,11 @@
}, },
"gRevisaCliente":{ "gRevisaCliente":{
"replyMessage":[ "replyMessage":[
"/URL=http://localhost:8888/dbrquery?j={\"query\":\"select_revisacliente_GUNA\",\"exec\":\"ExecuteQuery\",\"params\":{\"par1\":\"XXPARAM1XX\"}}" {
"mensaje":[
"/URL=http://localhost:8888/dbrquery?j={\"query\":\"select_revisacliente_GUNA\",\"exec\":\"ExecuteQuery\",\"params\":{\"par1\":\"XXPARAM1XX\"}}"
]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
@@ -82,7 +122,11 @@
}, },
"gGuardainfo":{ "gGuardainfo":{
"replyMessage":[ "replyMessage":[
"/URL=http://localhost:8888/dbrquery?j={\"query\":\"insert_registroGallina_GUNA\",\"exec\":\"ExecuteCommand\",\"params\":{\"par1\":\"XXPARAM1XX\", \"par2\":\"XXPARAM2XX\", \"par3\":\"XXPARAM3XX\", \"par4\":\"XXPARAM4XX\"}}" {
"mensaje":[
"/URL=http://localhost:8888/dbrquery?j={\"query\":\"insert_registroGallina_GUNA\",\"exec\":\"ExecuteCommand\",\"params\":{\"par1\":\"XXPARAM1XX\", \"par2\":\"XXPARAM2XX\", \"par3\":\"XXPARAM3XX\", \"par4\":\"XXPARAM4XX\"}}"
]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
@@ -90,14 +134,26 @@
}, },
"rnd":{ "rnd":{
"replyMessage":[ "replyMessage":[
"%saludo%\nHoy es %dia_semana%.\nSon las %hora24%:%minutos% hrs.\nSon las %hora12%:%minutos% %ampm%\n*Palabra random:* %rnd_arbol,burro,cabra,dinosaurio,elefante,fuego,gorila%\n*Emoji random:* %rnd_👍🏽,😁,🤣,🤔,🤦🏽‍♂️,🙄,😎%\n*Número random:* %rnd_1,2,3,4,5,6,7%\n" {
"mensaje":[
"%saludo%",
"Hoy es %dia_semana%.",
"Son las %hora24%:%minutos% hrs.",
"Son las %hora12%:%minutos% %ampm%",
"*Palabra random:* %rnd_arbol,burro,cabra,dinosaurio,elefante,fuego,gorila%",
"*Emoji random:* %rnd_👍🏽,😁,🤣,🤔,🤦🏽‍♂️,🙄,😎%",
"*Número random:* %rnd_1,2,3,4,5,6,7%\n"
]
}
], ],
"media":null, "media":null,
"trigger":null "trigger":null
}, },
"rnd2":{ "rnd2":{
"replyMessage":[ "replyMessage":[
"" {
"mensaje":[""]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
@@ -114,12 +170,14 @@
}, },
"lista":{ "lista":{
"replyMessage":[ "replyMessage":[
"*%saludo%*, este es un ejemplo de listas" {
"mensaje":["*%saludo%*, este es un ejemplo de listas"]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
"actions":{ "actions":{
"body":"Hola *%primer_nombre%*, estos son ejemplos del uso de expresiones regulares, todas las opciones de la lista disparan la misma regla:\n\n'*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*'\n\nAutomáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*.", "body":"Hola *%primer_nombre%*, estos son ejemplos del uso de expresiones regulares, *todas* las opciones de la *lista* disparan la misma regla:\n\n'*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*'\n\nAutomáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*.",
"buttonText":"Ver los ejemplos de RegEx", "buttonText":"Ver los ejemplos de RegEx",
"sections": [ "sections": [
{"title":"Selecciona un mensaje:", {"title":"Selecciona un mensaje:",
@@ -138,14 +196,16 @@
}, },
"botones":{ "botones":{
"replyMessage":[ "replyMessage":[
"*%saludo%*, este es un ejemplo de botones" {
"mensaje":["*%saludo%*, este es un ejemplo de botones"]
}
], ],
"media":"https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif", "media":"https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif",
"trigger":null, "trigger":null,
"actions":{ "actions":{
"title":"¿Que te interesa ver %primer_nombre%?", "title":"¿Que te interesa ver %primer_nombre%?",
"message":"Recuerda todo este contenido es gratis y estaria genial que me sigas!", "message":"Recuerda todo este contenido es gratis y estaria genial que me sigas!",
"footer":"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*.", "footer":"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*.",
"buttons":[ "buttons":[
{"body":"Cursos"}, {"body":"Cursos"},
{"body":"Youtube"}, {"body":"Youtube"},
@@ -156,56 +216,86 @@
"goto":"menu" "goto":"menu"
}, },
"cursos":{ "cursos":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *Cursos*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *Cursos*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"youtube":{ "youtube":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *YouTube*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *YouTube*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"telegram":{ "telegram":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *Telegram*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *Telegram*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"manzana":{ "manzana":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *manzana*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *manzana*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"mango":{ "mango":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *mango*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *mango*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"platano":{ "platano":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste *platano*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste *platano*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"paq3":{ "paq3":{
"replyMessage":["*%saludo% %primer_nombre%*, seleccionaste el *paquete 3 de Angular*\n\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*."], "replyMessage":[
{
"mensaje":["*%saludo% %primer_nombre%*, seleccionaste el *paquete 3 de Angular*\n","Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 7 sin necesidad de volver a iniciar con */menu*."]
}
],
"trigger":null, "trigger":null,
"pasoRequerido":"menu", "pasoRequerido":"menu",
"goto":"menu" "goto":"menu"
}, },
"botonespaq3":{ "botonespaq3":{
"replyMessage":[ "replyMessage":[
"*%saludo%*, este es un ejemplo de botones y regExp" {
"mensaje":["*%saludo%*, este es un ejemplo de botones y regExp"]
}
], ],
"media":null, "media":null,
"trigger":null, "trigger":null,
"actions":{ "actions":{
"title":"Hola %primer_nombre%, escoge un mensaje:", "title":"Hola %primer_nombre%, escoge un mensaje:",
"message":"Estos son ejemplos del uso de expresiones regulares, todos los botones disparan la misma regla:\n\n'*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*'\n\n", "message":"Estos son ejemplos del uso de expresiones regulares, *todos* los botones disparan la misma regla:\n\n'*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*'\n\n",
"footer":"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*.", "footer":"Automáticamente el flujo se regresa al *menú*, asi que puedes poner nuevamente un número del 1 al 5 sin necesidad de volver a iniciar con */menu*.",
"buttons":[ "buttons":[
{"body":"Me gusta el paquete 3"}, {"body":"Me gusta el paquete 3"},

22
package-lock.json generated
View File

@@ -25,7 +25,7 @@
"qrcode-terminal": "^0.12.0", "qrcode-terminal": "^0.12.0",
"socket.io": "^4.5.1", "socket.io": "^4.5.1",
"stormdb": "^0.6.0", "stormdb": "^0.6.0",
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js#fix-buttons-list", "whatsapp-web.js": "github:cheveguerra/whatsapp-web.js#WaWJS",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
@@ -1526,9 +1526,9 @@
} }
}, },
"node_modules/engine.io-parser": { "node_modules/engine.io-parser": {
"version": "5.0.4", "version": "5.0.5",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.5.tgz",
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "integrity": "sha512-mjEyaa4zhuuRhaSLOdjEb57X0XPP9JEsnXI4E+ivhwT0GgzUogARx4MqoY1jQyB+4Bkz3BUOmzL7t9RMKmlG3g==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
} }
@@ -2142,9 +2142,9 @@
} }
}, },
"node_modules/gcp-metadata": { "node_modules/gcp-metadata": {
"version": "5.1.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.1.0.tgz", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz",
"integrity": "sha512-QVjouEXvNVG/nde6VZDXXFTB02xQdztaumkWCHUff58qsdCS05/8OPh68fQ2QnArfAzZTwfEc979FHSHsU8EWg==", "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==",
"dependencies": { "dependencies": {
"gaxios": "^5.0.0", "gaxios": "^5.0.0",
"json-bigint": "^1.0.0" "json-bigint": "^1.0.0"
@@ -4774,9 +4774,9 @@
} }
}, },
"node_modules/systeminformation": { "node_modules/systeminformation": {
"version": "5.16.9", "version": "5.17.1",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.16.9.tgz", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.17.1.tgz",
"integrity": "sha512-QTlv3GGSromPeLVW3pzM6uxU8RbkacW9e0+ZX23GAXaX+XE0UToSygAxCJDHSty6RB9lAFHCHg+FfiXFChi/+w==", "integrity": "sha512-NX/EjbKznOTgt2pfCzZb5bPj5YJOO9mCUrRXquGMtmlfs+BowVaMsJSUUCvqOm9wexx4/F+ng4JQp6I4sG+SyA==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"os": [ "os": [
@@ -5121,7 +5121,7 @@
}, },
"node_modules/whatsapp-web.js": { "node_modules/whatsapp-web.js": {
"version": "1.18.4", "version": "1.18.4",
"resolved": "git+ssh://git@github.com/pedroslopez/whatsapp-web.js.git#d1b2df9051bcfca3a1eb0c4b73f45f3ef6be784b", "resolved": "git+ssh://git@github.com/cheveguerra/whatsapp-web.js.git#b3e5d99f521c6d594fd2e204f12d3fd8ae4eba3b",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@pedroslopez/moduleraid": "^5.0.2", "@pedroslopez/moduleraid": "^5.0.2",

View File

@@ -1,6 +1,6 @@
{ {
"name": "test-ws-bot", "name": "chv-wweb-bot",
"version": "1.0.0", "version": "1.0.1",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
"scripts": { "scripts": {
@@ -27,7 +27,7 @@
"qrcode-terminal": "^0.12.0", "qrcode-terminal": "^0.12.0",
"socket.io": "^4.5.1", "socket.io": "^4.5.1",
"stormdb": "^0.6.0", "stormdb": "^0.6.0",
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js#fix-buttons-list", "whatsapp-web.js": "github:cheveguerra/whatsapp-web.js#WaWJS2",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {