feat:se agrego el envio de varios msjs juntos

This commit is contained in:
2023-01-15 14:44:13 -06:00
parent e8847800f6
commit 7febd90e56
5 changed files with 174 additions and 61 deletions

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

31
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;
@@ -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,50 +216,80 @@
"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,