From 1f92c0802a5ea73a4e676f9ef436a20f4c9d9333 Mon Sep 17 00:00:00 2001 From: cheveguerra Date: Fri, 6 Jan 2023 00:39:46 -0600 Subject: [PATCH] se agregaron ejemplos de regExp --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- adapter/index.js | 2 +- flow/initial.json | 8 ++++++++ flow/response.json | 43 +++++++++++++++++++++++++++++++++++-------- 4 files changed, 80 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4dce4f7..508b4d3 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,51 @@ ## Chatbot Whatsapp (OpenSource) #### Actualizado Diciembre 2022 -Este proyecto es un fork del de [Leifer Mendez](https://github.com/leifermendez/bot-whatsapp), y tiene las siguientes modificaciones: +Este proyecto es un clon del de [Leifer Mendez](https://github.com/leifermendez/bot-whatsapp) y tiene las siguientes modificaciones: - Permite menus y submenus + - Los submenus se logran agregando el parametro "pasoRequerido" en el **response.json**. + ```json + "menu":{ + "replyMessage":[ + "%saludo%\nHoy es %dia_semana%.\n" + ], + "media":null, + "trigger":null + }, + "submenu":{ + "replyMessage":[ + "Este submenu solo se dispara si **ANTES** se disparó la regla 'menu'" + ], + "media":null, + "trigger":null, + "pasoRequerido":"menu" + } + ``` - Permite expresiones regulares en las palabras predefinidas en el initial.json. + - Si queremos usar RegExp, en los "keywords" de **inital.json**, en lugar de un arreglo usamos un string (quitamos los []) + y en él usamos "*" para significar cualquier texto y "|" para significar "OR", esto nos permite ser mas flexibles + con los "keywords", por ejemplo, si queremos que el mensaje pueda decir: + + "Hola quiero info del paquete" o "Requiero mas informacion" + + ponemos ```*info*``` y la regla se va a disparar porque los dos contienen "info", o si queremos que se dispare con: + "Quiero info del paquete numero 3" o "Me gusto el paquete de Angular" + ponemos ```*paquete*3*|*paquete*angular*``` y la regla se dispara porque contiene "paquete" Y "3" -O- "paquete" Y "angular". + ```json + { + "keywords": "*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*", + "key": "paq3" + } + ``` - Permite remplazos en el texto de los mensajes por ejemplo: - __%saludo%__ para que aparezca "Buenos días, tardes o noches" dependiendo de la hora. - __%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%. - etc, etc, se pueden agregar mas remplazos en la funcion "remplazos" en el archivo "adapter\index.js". - 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_x%__ 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. - - Tiene los ultimos parches de DialogFlow (27-dic-2022) (When Dialogflow asks for an Image, then Upload it to Google Drive a then generate Shared Link) + - 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) ## INICIA DOCUMENTACION DEL PROYECTO ORIGINAL diff --git a/adapter/index.js b/adapter/index.js index 97168b6..895de4e 100644 --- a/adapter/index.js +++ b/adapter/index.js @@ -41,7 +41,7 @@ const get = (message, num) => new Promise((resolve, reject) => { //MOD by CHV - "Hola quiero info del paquete" o "Requiero mas informacion" - ponemos "info" y la regla se va a disparar porque los dos contienen "info", o si queremos que se dispare con: + ponemos "*info*" y la regla se va a disparar porque los dos contienen "info", o si queremos que se dispare con: "Quiero info del paquete numero 3" o "Me gusto el paquete de Angular" diff --git a/flow/initial.json b/flow/initial.json index 50e346b..a14132d 100644 --- a/flow/initial.json +++ b/flow/initial.json @@ -51,6 +51,10 @@ "keywords": ["5"], "key": "botones" }, + { + "keywords": ["6"], + "key": "botonespaq3" + }, { "keywords": ["cursos"], "key": "cursos" @@ -74,5 +78,9 @@ { "keywords": ["platano"], "key": "platano" + }, + { + "keywords": "*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*", + "key": "paq3" } ] \ No newline at end of file diff --git a/flow/response.json b/flow/response.json index 9147ab3..279547d 100644 --- a/flow/response.json +++ b/flow/response.json @@ -17,8 +17,9 @@ "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.\n", - "Pon *5* para un ejemplo de botones.\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" ], "media":null, "trigger":null @@ -118,14 +119,15 @@ "media":null, "trigger":null, "actions":{ - "body":"Hola *%primer_nombre%*, aqui está nuestra lista de productos al 50% de descuento,\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 todos los productos", + "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":"Lista de productos", + {"title":"Selecciona un mensaje:", "rows":[ - {"id": "manzana", "title": "manzana"}, - {"id": "mango", "title": "mango"}, - {"id": "platano", "title": "platano"} + {"id": "paq3", "title": "Me gusta el paquete 3"}, + {"id": "paqA", "title": "Por favor mas info del paquete de Angular"}, + {"id": "pakA", "title": "Me gustó el pak de Angular"}, + {"id": "pak3", "title": "Estoy interesado en el pak 3"} ] } ], @@ -188,5 +190,30 @@ "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*."], + "trigger":null, + "pasoRequerido":"menu", + "goto":"menu" + }, + "botonespaq3":{ + "replyMessage":[ + "*%saludo%*, este es un ejemplo de botones y regExp" + ], + "media":null, + "trigger":null, + "actions":{ + "title":"Hola %primer_nombre%, escoge un mensaje:", + "message":"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\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*.", + "buttons":[ + {"body":"Me gusta el paquete 3"}, + {"body":"Mas info del paquete de Angular"}, + {"body":"Quiero mas información del pak 3"} + ] + }, + "pasoRequerido":"menu", + "goto":"menu" } } \ No newline at end of file