Whatsapp ChatBot - Guia Inicial
Whatsapp ChatBot - Guia Inicial
Whatsapp ChatBot - Guia Inicial
Bienvenido a la guía para crear tu propio chatbot de WhatsApp utilizando NodeJS. Esta guía está
diseñada con un propósito muy claro: proporcionarte un camino claro y estructurado para
adentrarte en el mundo de estos chatbots, desde la concepción inicial hasta la implementación de
tu proyecto.
Si estás aquí, probablemente ya sabes que los chatbots han revolucionado la forma en que las
empresas interactúan con sus clientes, automatizando las comunicaciones y proporcionando
respuestas instantáneas a preguntas frecuentes, entre muchas otras funcionalidades. La
capacidad de crear soluciones personalizadas en este ámbito representa una habilidad
tremendamente valiosa en el mercado actual.
Está dirigida tanto a principiantes que están dando sus primeros pasos en el mundo de la
programación como a desarrolladores más experimentados que buscan expandir sus habilidades
en el desarrollo de chatbots de WhatsApp. A través de explicaciones detalladas, ejemplos
prácticos y consejos estratégicos para la comercialización de tus chatbots, te proporcionaré todas
las herramientas necesarias para tener éxito en este campo.
Ya sea que tu objetivo sea mejorar la operación de tu negocio actual, ofrecer servicios de
desarrollo de chatbots como freelancer, o incluso iniciar tu propia empresa en este nicho, esta
guía está diseñada para ayudarte a lograrlo. Estoy emocionado de acompañarte en este viaje,
compartiendo con vos todo lo que aprendí y ayudándote a evitar los obstáculos con los que me
encontré en el camino.
Sin mas, comencemos con esta guía. Espero que te sirva!
Objetivos de la Guía
El principal objetivo de esta guía es brindarte una comprensión completa y detallada de cómo
desarrollar y desplegar chatbots de WhatsApp utilizando NodeJS. Para asegurar que obtengas el
máximo beneficio de este recurso, hemos establecido los siguientes objetivos específicos:
Lee Secuencialmente: Aunque cada sección está diseñada para aportar valor por sí misma, te
recomendamos seguir el orden propuesto para construir una comprensión integral paso a
paso.
Practica con los Ejemplos: Acompañamos conceptos teóricos con plantillas y ejemplos de
código. Te animamos a probar estos ejemplos por tu cuenta, modificándolos y experimentando
con ellos para ver cómo afectan al comportamiento de tu chatbot.
Entiende Cada Línea de Código: Mientras trabajas con los ejemplos y plantillas, toma un
momento para entender qué hace cada línea de código. Esto enriquecerá tu aprendizaje y te
proporcionará una base más sólida para la resolución de problemas y la innovación.
Utiliza ChatGPT4: Si tienes acceso a ChatGPT4, considera subir esta guía en formato PDF y
utiliza la herramienta para hacer preguntas específicas o solicitar ayuda para construir partes
del código. ChatGPT4 puede ser un recurso invaluable para clarificar dudas y proporcionar
ejemplos de código personalizados.
Aplica lo Aprendido: Intenta aplicar los conceptos aprendidos en proyectos reales o ejercicios
prácticos. La mejor manera de consolidar tu conocimiento es a través de la práctica en
situaciones del mundo real.
Recuerda, el objetivo de esta guía no es solo enseñarte a construir un chatbot, sino también a
entender profundamente cómo funciona y cómo puede ser adaptado y mejorado. Al final de este
camino, tendrás no solo las habilidades técnicas, sino también la confianza para emprender
proyectos de chatbot de WhatsApp por tu cuenta o para clientes, y llevar tus ideas innovadoras al
mercado.
1. Primeros pasos
2. Beneficios del chatbot
3. Teoría Chatbot WhatsApp
4. Instalar chatbot WhatsApp
5. Mensajes
6. Eventos
7. Menu de opciones
8. ChatGPT
9. Whisper voice2text
10. Errores comunes
Links y referencias
Delegación efectiva: Si el chatbot no puede resolver una consulta, puede transferir al usuario
a un asesor humano sin interrupciones.
Estas características hacen de los chatbots una herramienta invaluable para mejorar la experiencia
de usuario, optimizando procesos y brindando un servicio de atención al cliente sin igual.
Integración con Google Calendar: Permite crear y gestionar eventos directamente desde el
chat.
Uso de Zapier: Facilita la conexión con cientos de aplicaciones para acciones como enviar
correos electrónicos o recibir notificaciones.
Conexión con bases de datos de productos: Ofrece información actualizada sobre el stock
disponible.
En esencia, el límite de lo que el chatbot puede hacer está dado solo por tu creatividad y las
necesidades específicas que busques cubrir.
Las limitaciones de un chatbot dependen en gran medida del proveedor de servicios que elijas.
Aquí algunos puntos a considerar:
Proveedores gratuitos como Baileys: Aunque suelen ser eficientes, pueden presentar
dificultades al momento de implementar ciertas funcionalidades, como el uso de botones, y en
ocasiones pueden enfrentar problemas aislados.
Proveedores oficiales como Meta y Twilio: Ofrecen soluciones robustas ideales para entornos
de producción, pero pueden implicar costos adicionales. Ideales para manejar un volumen alto
de conversaciones y suelen requerir una configuración un poco más compleja.
1. Flow (Flujo): Este es el camino de la conversación, donde decidís cómo queres que tu chatbot
converse. Imagina programarlo para que cuando alguien diga "hola", él responda con un
amigable "¡Hola! ¿En qué puedo ayudarte hoy?". Acá es donde se definen esas interacciones.
Los flujos hacen referencia al hecho de construir un flujo de conversación. Esto es un flow
podemos observar que están presentes dos métodos importantes addKeyword y addAnswer.
2. Provider (Proveedor): Piensa en esto como el mensajero. Es el que lleva y trae los mensajes
entre tu chatbot y WhatsApp. Dependiendo de con quién quieras que hable tu bot (como
WhatsApp, Twilio, o incluso la API oficial de WhatsApp), puedes cambiar este proveedor sin
tener que alterar el resto de tu configuración.
3. Database (Base de Datos): Es como el diario de vida de tu chatbot, donde guarda toda la
información importante para recordar conversaciones pasadas. Esto le permite a tu bot ser
más inteligente y personalizado en sus respuestas, ya que puede recordar con quién está
hablando y qué se ha dicho antes. Esta base de datos es muy simple de implementar ya que
esta pre configrada en la librería. Sin embargo, no vas a poder modificar lo que se guarda en la
base de datos. Eso lo vamos a explicar mas adelante. A diferencia de JSON y MOCK (Memoria
local), Mongo necesita unas configuraciones adicionales, te dejo un ejemplo de como se
debería ver:
Referencia:
https://bot-whatsapp.netlify.app/docs/essential/
¿Cómo comenzar?
Para comenzar hay que correr el siguiente mensaje en la terminal
Luego de correr este mensaje, en la terminal nos va a salir una serie de preguntas. Para una
primera prueba podes seguir la siguiente configuración:
Una vez instalado hay que seguir las instrucciones que nos figuran ahi en la terminal
cd base-baileys-memory
npm install
npm start
Ahora desde el teléfono que quieras que sea el Host de este bot, osea al numero que hay que
escribirle para que conteste nuestro bot, tenemos que seguir los siguientes pasos:
1. Abrir Whatsapp
Felicidades! Ya pudiste correr tu primer bot. Te voy a dejar algunas plantillas básicas con distintas
configuraciones de provider y databases para que puedas elegir la que te guste y usarlo de punto
de partida. En el próximo capitulo te vamos a enseñar como editar los flujos y poder activar estos
flujos de distintas maneras.
https://github.com/codigoencasa/bot-whatsapp/tree/main/starters/apps
Método addKeyword
El método addKeyword es esencial para definir cómo el chatbot identifica los mensajes que
requieren una respuesta. Este método espera una lista de "palabras clave" que, cuando son
detectadas en un mensaje entrante, activan el chatbot para responder. Las palabras clave son
señales para el chatbot, indicándole que preste atención y se prepare para actuar. Por ejemplo, si
configuras addKeyword con las palabras ['hola', 'ole', 'alo'] , cualquier mensaje entrante que
contenga alguna de estas palabras activará el flujo asociado a este método.
Método addAnswer
Una vez que se activa un flujo mediante addKeyword , el siguiente paso es determinar qué debería
responder el chatbot. Aquí es donde entra en juego el método addAnswer . Este método simplemente
toma un texto que será enviado como respuesta al mensaje que activó el chatbot. La respuesta no
necesita ser compleja; es simplemente lo que quieres que tu chatbot diga una vez que reconoce
una de las palabras clave.
Ejemplo Práctico
Consideremos un ejemplo para ilustrar cómo se utilizan estos dos métodos en la práctica:
En este ejemplo, el flowPrincipal es configurado inicialmente con el método addKeyword , donde las
palabras clave son ['hola', 'ole', 'alo'] . Esto significa que si un mensaje entrante contiene
cualquiera de estas palabras, el flujo se activará. Inmediatamente después, utilizamos el método
addAnswer para definir la respuesta del chatbot: 'Buenas, ¿cómo estás?'.
Así, cuando el chatbot recibe un mensaje que dice "hola", "ole" o "alo", automáticamente
responderá con "Buenas, ¿cómo estás?". Este mecanismo simple pero poderoso permite que el
chatbot interactúe de manera relevante y oportuna con los usuarios, proporcionando una
experiencia de conversación fluida y natural.
6. Eventos
En la programación, un evento es una acción o suceso, como un clic del usuario, una entrada de
texto, o un mensaje recibido, que puede ser detectado y manejado por el software. Los eventos
son fundamentales para crear aplicaciones interactivas, como chatbots, porque permiten al
software responder dinámicamente a lo que está ocurriendo en el entorno de ejecución.
En el contexto de un chatbot, los eventos pueden incluir recibir un mensaje, recibir un tipo
específico de archivo, o incluso acciones específicas definidas por el programador. La capacidad
de manejar estos eventos de manera efectiva es clave para diseñar chatbots que sean
responsivos y útiles.
Para manejar eventos en nuestro chatbot que utiliza la librería @bot-whatsapp/bot , necesitamos
primero importar los eventos disponibles. Esto se hace de la siguiente manera:
const {
createBot,
createProvider,
createFlow,
addKeyword,
EVENTS,
} = require("@bot-whatsapp/bot");
Aquí, EVENTS es un objeto que contiene varios tipos de eventos que nuestro chatbot puede
manejar.
Plantillas de Eventos
La librería define varios eventos estándar que podemos utilizar para activar diferentes flujos en
nuestro chatbot. Vamos a describir algunos de ellos y cómo se utilizan:
2. EVENTS.MEDIA: Activado cuando se recibe un archivo multimedia, como una imagen o video.
Este evento permite al chatbot responder específicamente a entradas multimedia.
5. EVENTS.VOICE_NOTE: Este evento es para notas de voz. El chatbot podría iniciar un flujo para
transcribir la nota de voz o simplemente reconocer que se recibió y pedir más información.
6. EVENTS.ACTION: Este evento es especial porque no se activa por una acción directa del
usuario, sino que debe ser llamado explícitamente desde otra función dentro del código. Es útil
para realizar acciones internas complejas.
Cada uno de estos eventos permite al chatbot manejar diferentes tipos de interacciones de
manera específica, lo que hace que el bot sea más interactivo y útil para el usuario. Configurar
correctamente estos eventos es crucial para aprovechar al máximo las capacidades del chatbot.
7. Menu de opciones
Ahora que comprendes cómo funcionan los métodos básicos como addKeyword y addAction ,
podemos pasar a un ejemplo más avanzado que ilustra cómo crear un menú de opciones
interactivo en un chatbot. Este tipo de funcionalidad es esencial para guiar a los usuarios a través
de diferentes funcionalidades que tu chatbot puede ofrecer.
Utilizamos addKeyword(EVENTS.ACTION) para iniciar este flujo mediante una acción programada.
Este tipo de evento se activa no por una entrada directa del usuario, sino por una llamada
de función desde otra parte del código, ideal para menús que se presentan en respuesta a
comandos específicos.
2. Definición de la Respuesta:
El método addAnswer se configura con un parámetro de capture: true . Esto indica que el flujo
debe "capturar" la próxima entrada del usuario, que se espera sea su selección del menú.
Se proporciona una función asincrónica como callback, que procesa la entrada del usuario
una vez recibida.
3. Validación de la Entrada:
Dentro de la función, primero se verifica si el mensaje ( ctx.body ) está entre las opciones
válidas ( ["1", "2", "3", "4", "5", "0"] ). Si no es así, se utiliza fallBack para enviar un
mensaje de error y pedir al usuario que elija una opción válida.
4. Procesamiento de la Elección:
Utilizamos una declaración switch para manejar las diferentes opciones. Según el número
que el usuario envíe, se llama a gotoFlow con el flujo correspondiente ( menu1 , menu2 , etc.).
Esto redirige al usuario al flujo asociado con la opción elegida.
Si el usuario selecciona "0" (generalmente usado para salir), se utiliza flowDynamic para
enviar un mensaje de despedida y terminar la interacción actual.
Consideraciones Adicionales
El menu en addAnswer(menu, ...) debería ser una variable o constante que contenga el texto
del menú que se mostrará al usuario. Asegúrate de definirlo con todas las opciones
disponibles listadas claramente.
Extensibilidad:
Este método hace fácil añadir más opciones al menú simplemente extendiendo los casos
en la declaración switch y añadiendo los flujos correspondientes.
Mantenimiento:
Gracias a la modularidad y la clara separación de las lógicas de flujo, este código es fácil
de mantener y actualizar. Los flujos individuales ( menu1 , menu2 , etc.) pueden modificarse
independientemente sin afectar la lógica del menú principal.
que proporciona utilidades para trabajar con rutas de archivos y directorios. Aquí, te explico cómo
puedes traer una variable de texto desde un archivo externo de manera eficiente y segura
utilizando este módulo.
El módulo path ayuda a construir rutas de archivo que son compatibles con cualquier sistema
operativo donde se ejecute Node.js. Esto es particularmente útil para evitar problemas con los
separadores de ruta que difieren entre sistemas (por ejemplo, Windows usa \ mientras que UNIX
usa / ).
__dirname : Una variable global en Node.js que contiene la ruta del directorio del archivo
actual.
fs.readFileSync() : Método para leer archivos de manera síncrona. Bloquea el hilo de Node.js
hasta que el archivo es leído completamente. Esto es útil para configuraciones o datos que
necesitan cargarse al inicio del script.
'utf8' : Especifica que el contenido del archivo se debe interpretar como texto UTF-8.
Este método para cargar una variable de texto desde un archivo es especialmente útil para
configuraciones, menús interactivos, o cualquier otro dato que preferirías mantener fuera del
código principal por razones de organización o facilidad de mantenimiento. Al almacenar este tipo
de datos en archivos externos, facilitas la actualización y la gestión del contenido sin necesidad de
modificar y re-deployar el código de la aplicación.
8. ChatGPT
¿Cómo vincular la API de ChatGPT?
Para integrar la API de ChatGPT de OpenAI en tu aplicación Node.js, primero deberás registrar y
obtener una API key de OpenAI. Visita OpenAI, crea una cuenta, navega al panel de control de API,
y genera una nueva clave API. Guarda esta clave de manera segura.
Crear un archivo .env en el directorio raíz de tu proyecto Node.js para manejar configuraciones
sensibles como tu clave API. Dentro de este archivo, añade tu clave API de la siguiente manera:
OPENAI_API_KEY=tu_clave_api_aquí
Instalación de Dependencias
Necesitarás instalar el paquete de OpenAI para Node.js. Abre tu terminal y ejecuta el siguiente
comando en el directorio de tu proyecto:
module.exports = chat;
const prompt = "El sistema debería ser capaz de responder preguntas acerca
de Node.js.";
const question = "¿Qué es Node.js?";
chatGPT(prompt, question)
.then(response => console.log("Respuesta de ChatGPT:", response))
.catch(error => console.error("Error al obtener respuesta:", error));
Con estos ajustes, tu aplicación Node.js está configurada para comunicarse con la API de
ChatGPT de OpenAI, permitiéndote enviar preguntas y recibir respuestas generadas por
inteligencia artificial. Esta configuración es segura, modular y fácil de mantener, ideal para
aplicaciones que requieren capacidades avanzadas de procesamiento de lenguaje natural.
Instalación de Dependencias: Utilizar npm para instalar los módulos necesarios: fs para
operaciones de archivos, openai para interactuar con la API de OpenAI, y @adiwajshing/baileys
Creación de Directorio Temporal: Establecer una carpeta tmp en el directorio del proyecto
para almacenar temporalmente los archivos de audio.
En el archivo app.js , es necesario configurar la ejecución del script para procesar las notas de voz
recibidas:
require("dotenv").config();
const { handlerAI } = require("./voice2text")
module.exports = { handlerAI };
Evaluación de la consulta: Antes de hacer una llamada a la API, evalúa si la pregunta del
usuario puede ser respondida con una respuesta predefinida.
Dadas las diferencias de costos entre las versiones de los modelos ChatGPT, es prudente
seleccionar el modelo basado en la necesidad específica de precisión y detalle en la respuesta:
ChatGPT-3.5: Este modelo es significativamente más barato y sigue siendo altamente efectivo
para una amplia gama de tareas, especialmente para generar respuestas donde la precisión
extrema no es crítica. Es ideal para responder preguntas basadas en un FAQ, donde las
respuestas ya están bien definidas y solo necesitan ser formuladas correctamente.
ChatGPT-4: Aunque más costoso, ChatGPT-4 es más adecuado para tareas que requieren una
mayor comprensión del contexto o la generación de respuestas complejas y detalladas. Debe
utilizarse para las interacciones más importantes, como las respuestas finales a los clientes
que requieren alta calidad y precisión, o cuando la consulta involucra un entendimiento
profundo y una generación de contenido novedoso.
Implementación Práctica:
Segmentación de uso: Decide cuál modelo utilizar en función del tipo de pregunta. Si la
consulta es directa o forma parte de un FAQ, utiliza ChatGPT-3.5. Para consultas que requieren
creatividad, detalles específicos del contexto o calidad premium en la comunicación, opta por
ChatGPT-4.
Optimizar el uso de la API de ChatGPT para un chatbot de WhatsApp implica una planificación
cuidadosa del tipo de respuestas y la selección del modelo apropiado para cada tipo de consulta.
Implementar respuestas estáticas para las preguntas frecuentes y segmentar el uso de los
modelos de ChatGPT según la complejidad y la importancia de las preguntas no solo reduce
costos, sino que también mejora la eficiencia y la experiencia del usuario.
3. Poco manejo de errores: No manejar adecuadamente los errores que pueden surgir durante la
ejecución de tu chatbot puede llevar a fallos inesperados y a una mala experiencia del usuario.
Es fundamental implementar un manejo de errores robusto para anticiparse y responder
adecuadamente a posibles problemas.
4. Pruebas insuficientes: Cada vez que agregas una sección de código nuevo, es esencial
probar todas las formas posibles en las que este código puede fallar. Muchos desarrolladores
avanzan demasiado rápido sin dedicar tiempo suficiente a probar adecuadamente, lo cual
puede resultar en errores no detectados que afectan a los usuarios finales.
Uso de Bloques Try/Catch: Una técnica esencial en cualquier aplicación de NodeJS es el uso
de bloques try/catch para capturar errores en tiempo de ejecución. Esto no solo previene que
tu aplicación se rompa, sino que también permite responder de manera controlada. Por
ejemplo:
En este ejemplo, si el método sendMessage falla por alguna razón, el error es capturado y manejado
sin detener la ejecución de la aplicación, y se informa al usuario adecuadamente.
Links y referencias
[email protected]
Curso completo:
AIPaths
Si eres un entusiasta de la programación, un desarrollador en ciernes o
simplemente alguien con curiosidad por la tecnología, este es tu lugar. Aquí
encontrarás tutoriales de programación relacionados a Inteligencia artificial y
https://www.youtube.com/channel/UCkk1guGQ6C6I4_XJ2Pa3SiA
AI Paths (@Ai_paths23) on X
Estamos para ayudar a nuestra comunidad a crecer y entender mas sobre la
Inteligencia Artificial
https://twitter.com/Ai_paths23
GonzaSab - Overview
GonzaSab has 9 repositories available. Follow their code on GitHub.
https://github.com/GonzaSab