Menu Close

botLeiferAurik-Mod_2.0

Chatbot Whatsapp (OpenSource)

Actualizado Diciembre 2022

Este proyecto es un clon de la version 1 (legacy) de Leifer Mendez y tiene las siguientes modificaciones:

  • Permite submenus.

    • 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.

    "menu":{
        "replyMessage":[
            "%saludo%",
            "Escribe 1 para zapatos.",
            "Escribe 2 para bolsos."
        ],
        "media":null,
        "trigger":null
    },
    "zapatos":{
        "replyMessage":[
            "Esta es la lista de nuestros zapatos."
        ],
        "media":null,
        "trigger":null,
        "pasoRequerido":"menu"
    },
    "bolsos":{
        "replyMessage":[
            "Esta es la lista de nuestros bolsos."
        ],
        "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, debemos usar 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 más información"
      

      Ponemos *info* y la regla se va a disparar porque los dos contienen “info”.

      Si queremos que se dispare con:

       "Quiero info del paquete numero 3" o "Me gustó el paquete de Angular"
      

      Ponemos *paquete*3*|*paquete*angular* y la regla se va a disparar porque contiene “paquete” y “3” -O- “paquete” y “angular”.

    {
        "keywords": "*pak*3*|*pak*angular*|*paquete*3*|*paquete*angular*",
        "key": "paq3"
    }
  • Permite remplazos en el texto de los mensajes por ejemplo:

    • Ponemos %saludo% para que aparezca “Buenos días, tardes o noches” dependiendo de la hora.
    • Ponemos %primer_nombre% para que aparezca el nombre (hasta el primer espacio) del remitente.
    • Ponemos %dia_semana% para que aparezca “lunes, martes, miercoles, etc” dependiendo del día de la semana.
    • 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”.
  • 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, el lo solucionó aquí 🙌🏽 y yo solo lo adapté a mi repo!)

    Antes:

    {
       "ejemploViejo":{
           "replyMessage":["¿Hola como estas?"],
           "media":null,
           "trigger":null
       }
    }

    Ahora replyMessage debe de contener un arreglo con los mensajes que se van a enviar:

    {
       "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”.

  • 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

El siguiente proyecto se realizó con fines educativos para el canal de Youtube (Leifer Mendez) donde aprendemos a crear y implementar un chatbot increíble usando node.js además le agregamos inteligencia artificial gracias al servicio de dialogflow.

Video

ATENCION 🔴

💥💥 Si te aparece el Error Multi-device es porque tienes la cuenta de whatsapp afiliada al modo “BETA de Multi dispositivo” por el momento no se tiene soporte para esas personas si tu quieres hacer uso de este BOT debes de salir del modo BETA y intentarlo de la manera tradicional

El core de whatsapp esta en constante actualizaciones por lo cual siempre revisa la ultima fecha de la actualizacion
VER

Busco colaboradores

Hola amigos me gusta mucho este proyecto pero por cuestiones de tiempo se me dificulta mantener las actualizaciones si alguno quieres participar en el proyecto escribeme a leifer.contacto@gmail.com

Acceso rápido

Si tienes una cuenta en heroku puedes desplegar este proyecto con (1 click)

Deploy

Comprarme un cafe!

Comprar

Actualización

Feature Status
Dialogflow
MySQL
JSON File
QR Scan (route)
Easy deploy heroku
Buttons ℹ️ (No funciona en multi-device)
Send Voice Note
Add support ubuntu/linux

Requisitos

  • node v14 o superior
  • VSCode (Editor de codigo) Descargar
  • MySql (opcional) solo aplica si vas a usar el modo ‘mysql’ sql-bot.sql migración
  • Dialogflow (opcional) solo aplica si vas a usar el modo ‘dialogflow’

(Nuevo) Botones

btn

Implementar los botones solo necesitas hacer uso del metodo sendMessageButton que se encuentra dentro ./controllers/send dejo un ejemplo de como usarlo.
Ver implementación

const { sendMessageButton } = require('./controllers/send')

await sendMessageButton(
    {
        "title":"¿Que te interesa ver?",
        "message":"Recuerda todo este contenido es gratis y estaria genial que me siguas!",
        "footer":"Gracias",
        "buttons":[
            {"body":"😎 Cursos"},
            {"body":"👉 Youtube"},
            {"body":"😁 Telegram"}
        ]
    }
)

Notas de Voz

voice note

Se pueden enviar notas de voz con formato nativo para que no se vea como reenviado. En este ejemplo enviare el archivo PTT-20220223-WA0000.opus que se encuentra dentro de la carpeta de /mediaSend

const { sendMediaVoiceNote } = require('./controllers/send')

await sendMediaVoiceNote(client, from, 'PTT-20220223-WA0000.opus')

Instruciones

Descargar o Clonar repositorio

Usas ¿Ubuntu / Linux?

Asegurate de instalar los siguientes paquetes

sudo apt-get install -y libgbm-dev
sudo apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

Instalar dependencias (npm install)

Ubicate en le directorio que descargaste y via consola o terminal ejecuta el siguiente comando

npm install

Configurar .env

Con el editor de texto crea un archivo .env el cual debes de guiarte del archivo .env.example
Ver video explicando

######DATABASE: none, mysql, dialogflow

DEFAULT_MESSAGE=true
SAVE_MEDIA=true
PORT=3000
DATABASE=none
LANGUAGE=es
SQL_HOST=
SQL_USER=
SQL_PASS=
SQL_DATABASE=

Ejecutar el script

Ubicate en le directorio que descargaste y via consola o terminal ejecuta el siguiente comando
npm run start

Whatsapp en tu celular

Ahora abre la aplicación de Whatsapp en tu dispositivo y escanea el código QR

Visitar la pagina
`http://localhost:3000/qr`

Listo 😎

Cuando sale este mensaje tu BOT está listo para trabajar!

¿Quieres ver como se creó? 🤖

¿Como usarlo el chatbot de whatsapp?

Escribe un mensaje al whatsapp que vinculaste con tu BOT

Ahora deberías obtener un arespuesta por parte del BOT como la siguiente, ademas de esto tambien se crea un archivo excel
con el historial de conversación con el número de tu cliente


Preguntar al BOT

Puedes interactuar con el bot ejemplo escribele hola y el bot debe responderte!

View Source Code
Posted in Development