From 7febd90e567eb2a882893f13990b9b6f6864a083 Mon Sep 17 00:00:00 2001 From: cheveguerra Date: Sun, 15 Jan 2023 14:44:13 -0600 Subject: [PATCH] feat:se agrego el envio de varios msjs juntos --- adapter/index.js | 9 ++- app.js | 31 ++++++-- controllers/send.js | 1 + flow/initial.json | 4 + flow/response.json | 190 ++++++++++++++++++++++++++++++++------------ 5 files changed, 174 insertions(+), 61 deletions(-) diff --git a/adapter/index.js b/adapter/index.js index 895de4e..12bb7ff 100644 --- a/adapter/index.js +++ b/adapter/index.js @@ -83,7 +83,7 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV - else{x = null;} } else { 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) if(vamosA != "" && vamosA != undefined && cumplePasoPrevio == true){ - console.log("ASIGNAMOS VAMOSA = " + vamosA); + // console.log("ASIGNAMOS VAMOSA = " + vamosA); pasoAnterior[elNum] = vamosA; } // console.log("ULTIMOSTEP="+ultimoStep) @@ -131,8 +131,9 @@ const reply = (step) => new Promise((resolve, reject) => { const responseFind = stepsReponse[step] || {}; resData = { ...resData, - ...responseFind, - replyMessage:responseFind.replyMessage.join('')} + ...responseFind + // replyMessage:responseFind.replyMessage.join('') + } resolve(resData); return } diff --git a/app.js b/app.js index 4d49a57..157e366 100644 --- a/app.js +++ b/app.js @@ -157,7 +157,12 @@ const listenMessage = () => client.on('message', async msg => { if (lastStep) { const response = await responseMessages(lastStep) 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) } if (response.delay){ - // console.log("+++++++++++++++++++ SENDING MSG WITH DELAY ("+response.delay+") +++++++++++++++++"); - setTimeout(() => { - sendMessage(client, from, nuevaRespuesta, response.trigger, step); - // console.log(" ************* Msg with delay SENT ****************") + // 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); }, response.delay) } 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')){ const { actions } = response; @@ -276,7 +287,13 @@ const listenMessage = () => client.on('message', async msg => { //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); + // 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 */ diff --git a/controllers/send.js b/controllers/send.js index 3a757a5..1a1f0e2 100644 --- a/controllers/send.js +++ b/controllers/send.js @@ -63,6 +63,7 @@ const sendMessage = async (client, number = null, text = null, trigger = null, r number = cleanNumber(number) const message = text client.sendMessage(number, message); + console.log(number, message, regla) await readChat(number, message, trigger, regla) //MOD by CHV - Agregamos el parametro "regla" console.log(`⚡⚡⚡ Enviando mensajes....`); // console.log("********************* SEND MESSAGE **************************************"); diff --git a/flow/initial.json b/flow/initial.json index a14132d..a4dfb3e 100644 --- a/flow/initial.json +++ b/flow/initial.json @@ -55,6 +55,10 @@ "keywords": ["6"], "key": "botonespaq3" }, + { + "keywords": "7|*doble*mensaje*", + "key": "doblemensaje" + }, { "keywords": ["cursos"], "key": "cursos" diff --git a/flow/response.json b/flow/response.json index 979a300..8663c30 100644 --- a/flow/response.json +++ b/flow/response.json @@ -1,39 +1,63 @@ { "DEFAULT":{ "replyMessage":[ - "*Esta respuesta es un respuesta default* cuando no se consigue una palabra clave \n", - "la puedes desactivar en tu archivo .env DEFAULT_MESSAGE=false \n", - "tambien te quiero recordar que si presentas algun error pasarte por el repositorio \n", - "https://github.com/leifermendez/bot-whatsapp#chatbot-whatsapp-opensource \n", - "y recuerda tener la ultima versión del proyecto \n\n", - "Prueba escribiendo *hola* \n" + { "mensaje":[ + "*Esta es una respuesta por default* para cuando no se encuentra una palabra clave predefinida.", + "Se puede desactivar en el archivo .env DEFAULT_MESSAGE=false", + "tambien te quiero recordar que si presentas algun error pasarte por el repositorio", + "https://github.com/leifermendez/bot-whatsapp#chatbot-whatsapp-opensource", + "y recuerda tener la ultima versión del proyecto.", + "Prueba escribiendo */Menu*" + ] + } ], "media":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":{ "replyMessage":[ - "%saludo% %primer_nombre%, este es el menú, selecciona una opción: \n", - "Pon *1* para mensajes anteriores.\n", - "Pon *2* para ver remplazos.\n", - "Pon *3* para pedir nombre (RegExp).\n", - "Pon *4* para un ejemplo de listas y expresiones regulares.\n", - "Pon *5* para un ejemplo de botones.\n", - "Pon *6* para un ejemplo de botones y regExp.\n" - ], + { + "mensaje":[ + "%saludo% %primer_nombre%, este es el *menú*, selecciona una opción:", + "Pon *1* para ver mensajes anteriores.", + "Pon *2* para ver remplazos.", + "Pon *3* para pedir nombre (RegExp).", + "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, "trigger":null }, "opcion1":{ "replyMessage":[ - "Seleccionaste la opción 1\n", - "*Ultimo mensaje:*\n", - "%msjant_0%\n", - "*Penultimo mensaje:*\n", - "%msjant_1%\n", - "*Antepenultimo mensaje:*\n", - "%msjant_2% \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":[ + "Seleccionaste la *opción 1*", + "*Ultimo mensaje:*", + "%msjant_0%", + "*Penultimo mensaje:*", + "%msjant_1%", + "*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, "pasoRequerido":"menu", @@ -41,12 +65,16 @@ }, "opcion2":{ "replyMessage":[ - "Seleccionaste la opción 2\n", - "Remplazamos %saludo.% con *\"%saludo%\"*\n", - "Remplazamos %dia_semana.% con *\"%dia_semana%\"*\n", - "Remplazamos %hora24.%:%minutos.% con *\"%hora24%:%minutos%\"*\n", - "Remplazamos %.rnd_👍🏽,🤞🏼,🤪,🤔% con '%rnd_👍🏽,🤞🏼,🤪,🤔%'\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":[ + "Seleccionaste la *opción 2*", + "Remplazamos %saludo.% con *\"%saludo%\"*", + "Remplazamos %dia_semana.% con *\"%dia_semana%\"*", + "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, "pasoRequerido":"menu", @@ -54,18 +82,26 @@ }, "opcion3":{ "replyMessage":[ - "Seleccionaste la opción 3\n\n", - "Por favor dame tu nombre.\n\n", - "Aquí vamos a aceptar *cualquier* texto, porque en el *initial.json* tenemos keywords : \"***\" (un asterisco en expresiones regulares quiere decir *\"cualquier cosa\"*)\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\"." + { + "mensaje":[ + "Seleccionaste la *opción 3*\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\"." + ] + } ], "media":null, "pasoRequerido":"menu" }, "recibenombre":{ "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, "trigger":null, @@ -74,7 +110,11 @@ }, "gRevisaCliente":{ "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, "trigger":null, @@ -82,7 +122,11 @@ }, "gGuardainfo":{ "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, "trigger":null, @@ -90,14 +134,26 @@ }, "rnd":{ "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, "trigger":null }, "rnd2":{ "replyMessage":[ - "" + { + "mensaje":[""] + } ], "media":null, "trigger":null, @@ -114,12 +170,14 @@ }, "lista":{ "replyMessage":[ - "*%saludo%*, este es un ejemplo de listas" + { + "mensaje":["*%saludo%*, este es un ejemplo de listas"] + } ], "media":null, "trigger":null, "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", "sections": [ {"title":"Selecciona un mensaje:", @@ -138,14 +196,16 @@ }, "botones":{ "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", "trigger":null, "actions":{ "title":"¿Que te interesa ver %primer_nombre%?", "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":[ {"body":"Cursos"}, {"body":"Youtube"}, @@ -156,50 +216,80 @@ "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "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, "pasoRequerido":"menu", "goto":"menu" }, "botonespaq3":{ "replyMessage":[ - "*%saludo%*, este es un ejemplo de botones y regExp" + { + "mensaje":["*%saludo%*, este es un ejemplo de botones y regExp"] + } ], "media":null, "trigger":null,