Whatsapp ChatBot - Guia Inicial

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

📜

Whatsapp ChatBot - Youtube


1. Primeros pasos
Introducción

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:

1. Entender los Fundamentos: Adquirir un sólido entendimiento de NodeJS y las tecnologías


asociadas necesarias para el desarrollo de chatbots.

2. Desarrollo Práctico: Aprender a construir un chatbot de WhatsApp desde cero, utilizando


prácticas de programación efectivas y eficientes.

3. Personalización y Funcionalidades Avanzadas: Dominar cómo personalizar tu chatbot para


satisfacer necesidades específicas, incluyendo el manejo de mensajes entrantes/salientes,
integración con APIs externas como ChatGPT, y manejo de archivos multimedia.

4. Implementación y Pruebas: Conocer las mejores prácticas para testear tu chatbot y


desplegarlo en un entorno de nube, garantizando su óptimo funcionamiento.

Whatsapp ChatBot - Youtube 1


5. Aprovechamiento de Recursos: Utilizar plantillas y ejemplos de código proporcionados para
acelerar el desarrollo y mejorar la comprensión de los conceptos.

Cómo Usar la Guía

Para aprovechar al máximo esta guía, te recomendamos seguir estas pautas:

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

2. Beneficios del chatbot


¿Cuál es la propuesta de valor de un chatbot?
Los chatbots ofrecen una gama impresionante de beneficios, facilitando la interacción entre
empresas y usuarios. Te dejamos algunos puntos clave que destacan su propuesta de valor:

Whatsapp ChatBot - Youtube 2


Disponibilidad constante: Están listos para responder preguntas en cualquier momento del
día, los 365 días del año, sin necesidad de descanso.

Capacidad de interpretar audios: Pueden entender y procesar comandos de voz, haciendo la


interacción más natural para el usuario.

Envío de imágenes y enlaces: Enriquecen la conversación enviando material visual o links


relevantes para ofrecer una respuesta más completa.

Delegación efectiva: Si el chatbot no puede resolver una consulta, puede transferir al usuario
a un asesor humano sin interrupciones.

Gestión de múltiples usuarios: Manejan varias conversaciones al mismo tiempo, aumentando


la eficiencia en la atención al cliente.

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.

¿Cuál es el alcance de este chatbot?


Gracias a la flexibilidad que ofrece NodeJS, el alcance de este chatbot es prácticamente ilimitado.
Puede integrarse con una amplia variedad de servicios y APIs para ampliar sus funcionalidades.
Aquí algunos ejemplos:

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.

¿Cuáles son las limitaciones del chatbot?

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.

Limitaciones de WhatsApp: Utilizar proveedores gratuitos puede exponerte a riesgos de


seguridad, como la posibilidad de que WhatsApp considere tu actividad como spam y bloquee
el número. Es crucial mantener una buena gestión de contactos para evitar estos
inconvenientes. Agendar nuevos clientes y solicitar que los clientes te agenden es esencial
para evitar este problema.

Whatsapp ChatBot - Youtube 3


Seleccionar el proveedor adecuado y estar consciente de estas limitaciones es esencial para
asegurar el éxito y la eficiencia de tu chatbot en WhatsApp. No te preocupes, en el capitulo
siguiente esta la explicación mas en detalle de que es un provider y que opciones hay disponibles.

3. Teoría Chatbot WhatsApp


¿Qué es este chatbot?
Imagínate tener un ayudante virtual que trabaja para ti en WhatsApp, respondiendo preguntas y
enviando mensajes a cualquier hora del día. Este chatbot es exactamente eso: un programa que
vive en tu computadora o en la nube y actúa como un puente entre tú y tus contactos de
WhatsApp. Cuando escaneas un código QR con tu teléfono, es como darle la llave de tu WhatsApp
a este programa para que pueda manejar los mensajes por ti. Es una forma genial de automatizar
tareas, responder consultas y estar siempre disponible para quien te necesite, sin tener que estar
pegado al teléfono. Una vez loguado, en caso de usar un proveedor gratis, vas a poder ver desde
tu teléfono los mensajes que envía y recibe el bot

¿Cuáles son los elementos mas importantes?


Para que este chatbot funcione correctamente, se apoya en tres pilares fundamentales:

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:

💻 Conviértete en un Programador Backend aprendiendo todo de Cloud y Nodejs


Crear chatbot WhatsApp en minutos — Servicio de chatbot para whatspp gratis proyecto
OpenSource

https://bot-whatsapp.netlify.app/docs/essential/

Whatsapp ChatBot - Youtube 4


4. Instalar chatbot WhatsApp
Introducción al capítulo
En el capítulo anterior, exploramos la teoría detrás de la creación de un bot de WhatsApp. Ahora
que tenemos una base sólida, es momento de poner manos a la obra. Vamos a programar y
configurar nuestro propio bot. A continuación, te guiaré a través de una serie de pasos prácticos
para hacerlo.

¿Cómo comenzar?
Para comenzar hay que correr el siguiente mensaje en la terminal

npm create bot-whatsapp@latest

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

Whatsapp ChatBot - Youtube 5


¿Como vincular Whatsapp?
Una vez instaladas las dependencias, es hora de correr el bot y vincular nuestro Whatsapp con
esa instancia. Para iniciarlo corremos:

npm start

Nos debería salir el siguiente mensaje

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

2. Configuración → Dispositivos vinculados → Vincular dispositivo

3. Escanear el archivo QR.png (Se resetea cada 60 segundos).

Si te lograste conectar correctamente debería aparecer un cartel de “proveedor conectado y listo”.


Ahora podes escribirle a ese numero un simple “Hola” y ver que responda correctamente.

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.

Plantillas para comenzar

bot-whatsapp/starters/apps at main · codigoencasa/bot-whatsapp


🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource
(Typescript Version Pronto) - codigoencasa/bot-whatsapp

https://github.com/codigoencasa/bot-whatsapp/tree/main/starters/apps

Whatsapp ChatBot - Youtube 6


5. Mensajes
En nuestro chatbot, la interacción comienza con la configuración de cómo debe responder a
ciertos mensajes. Este proceso utiliza dos métodos fundamentales de nuestra librería: addKeyword y
addAnswer . A continuación, explicaremos qué hace cada uno de estos métodos y cómo funcionan
en conjunto para manejar las conversaciones.

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:

const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])


.addAnswer('Buanas como estas?')

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.

Whatsapp ChatBot - Youtube 7


Importación de Eventos desde la Librería

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:

1. EVENTS.WELCOME: Este evento se activa cuando el chatbot recibe un mensaje que no


coincide con ninguna de las palabras clave configuradas. Es útil para dar una respuesta inicial
o de bienvenida a los usuarios que comienzan la interacción sin un comando específico.

const flowWelcome = addKeyword(EVENTS.WELCOME)


.addAnswer("Este es el flujo Welcome");

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.

const flowMedia = addKeyword(EVENTS.MEDIA)


.addAnswer("Este es el flujo Media");

3. EVENTS.LOCATION: Se dispara cuando el usuario envía una ubicación. Esto es especialmente


útil para aplicaciones que necesitan procesar o responder basadas en la ubicación del usuario.

const flowLocation = addKeyword(EVENTS.LOCATION)


.addAnswer("Este es el flujo Location");

4. EVENTS.DOCUMENT: Utilizado cuando se recibe un documento, como un PDF o Word. El


chatbot puede responder de manera adecuada, tal vez procesando o almacenando el
documento.

const flowDocument = addKeyword(EVENTS.DOCUMENT)


.addAnswer("Este es el flujo Document");

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.

Whatsapp ChatBot - Youtube 8


const flowVoice = addKeyword(EVENTS.VOICE_NOTE)
.addAnswer("Este es el flujo Voice Note");

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.

const flowAction = addKeyword(EVENTS.ACTION)


.addAnswer("Este es el flujo Action");

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.

const menu = "Este es el menu de opciones, elegi opciones 1,2,3,4,5 o 0"


const menuFlow = addKeyword(EVENTS.ACTION).addAnswer(
menu,
{ capture: true },
async (ctx, { gotoFlow, fallBack, flowDynamic }) => {
if (!["1", "2", "3", "4", "5", "0"].includes(ctx.body)) {
return fallBack(
"Respuesta no válida, por favor selecciona una de las opciones."
);
}
switch (ctx.body) {
case "1":
return await gotoFlow("menu1");
case "2":
return await gotoFlow("menu2");
case "3":
return await gotoFlow("menu3");
case "4":
return await gotoFlow("menu4");
case "5":
return await gotoFlow("menu5");
case "0":
return await flowDynamic(
"Saliendo... Puedes volver a acceder a este menú escribiendo '*Menu
);

Whatsapp ChatBot - Youtube 9


}
}
);

Descripción del Código

1. Configuración del Flujo:

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

Personalización del Menú:

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.

Whatsapp ChatBot - Youtube 10


Este ejemplo ilustra cómo puedes construir un sistema de menú robusto y fácil de navegar para
tus usuarios, mejorando significativamente la interactividad y la funcionalidad de tu chatbot.

Trae el mensaje “Menu” desde un archivo txt


Para manejar archivos y datos externos en un proyecto Node.js, es común utilizar el módulo path

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.

Uso del Módulo path

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 / ).

Código para Traer una Variable de Texto

Aquí tienes un ejemplo de cómo puedes cargar el contenido de un archivo de texto en tu


aplicación Node.js:

// Importa el módulo 'path' para manejar rutas de archivo


const path = require('path');

// Construye la ruta al archivo que deseas leer


const pathMenu = path.join(__dirname, 'mensajes', "menu.txt");

// Importa el módulo 'fs' para operaciones de archivo


const fs = require('fs');

// Lee el contenido del archivo de manera síncrona


const menuText = fs.readFileSync(pathMenu, 'utf8');

// Utiliza 'menuText' como la variable de texto que contiene el contenido


del archivo
console.log(menuText);

Explicación del Código

1. Importar Módulos Necesarios:

path : Necesario para manejar rutas de archivo de manera segura.

fs : Módulo de sistema de archivos de Node.js que permite leer y escribir en archivos.

2. Construir la Ruta del Archivo:

__dirname : Una variable global en Node.js que contiene la ruta del directorio del archivo
actual.

Whatsapp ChatBot - Youtube 11


path.join() : Método para unir varios segmentos de una ruta de manera que resulte en una
ruta bien formada. Previene errores comunes como duplicación de separadores.

3. Leer el Contenido del Archivo:

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.

Configuración del Archivo .env

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í

Utilizar variables de entorno ayuda a mantener tu código seguro, especialmente si compartes el


código en repositorios públicos o trabajas en entornos de equipo.

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:

npm install openai

Crear el Archivo chatgpt.js


Crea un archivo llamado chatgpt.js en tu proyecto para manejar las interacciones con la API de
ChatGPT. En este archivo, implementa la función para enviar peticiones a la API:

Whatsapp ChatBot - Youtube 12


const { Configuration, OpenAIApi } = require("openai");

const chat = async (prompt, text) => {


try {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{ role: "system", content: prompt },
{ role: "user", content: text },
],
});
return completion.data.choices[0].message;
} catch (err) {
console.error("Error al conectar con OpenAI:", err);
return "ERROR";
}
};

module.exports = chat;

Importación y Uso en app.js


Importa y utiliza la función chat directamente en tu archivo app.js . Aquí te muestro cómo
implementar la solicitud a la API sin encapsularla en una función adicional:

const chatGPT = require('./chatgpt');

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.

Whatsapp ChatBot - Youtube 13


9. Whisper voice2text
Este tutorial se dirige a desarrolladores que buscan implementar una funcionalidad en sus
chatbots de WhatsApp para convertir notas de voz a texto usando la API de OpenAI,
específicamente el modelo Whisper. A continuación, se describe cómo configurar el entorno y el
código necesario para esta tarea.

Configuración del Entorno y Preparación del Código


Antes de comenzar a escribir el código, es crucial preparar el entorno de desarrollo realizando las
siguientes acciones:

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

para la conexión con WhatsApp.

Configuración de Variables de Entorno: Asegurarse de que el archivo .env está creado y


contiene la clave API de OpenAI ( OPENAI_API_KEY ).

Creación de Directorio Temporal: Establecer una carpeta tmp en el directorio del proyecto
para almacenar temporalmente los archivos de audio.

Actualización de Dependencias: Modificar el archivo package.json para asegurar que la versión


de openai sea ^3.3.0 .

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")

const flowVoice = addKeyword(EVENTS.VOICE_NOTE).addAction(


async (ctx, ctxFn) => {
const text = await handlerAI(ctx);
console.log(text);
}
);

Script para Convertir Voz a Texto


El script voice2text.js es el corazón de la operación de conversión. Incluye todo el código
necesario para descargar la nota de voz, convertirla de formato OGG a MP3, y finalmente usar
Whisper para transcribir el contenido de audio a texto.

const { downloadMediaMessage } = require("@adiwajshing/baileys");


const { Configuration, OpenAIApi } = require("openai");
const ffmpegPath = require("@ffmpeg-installer/ffmpeg").path;
const ffmpeg = require("fluent-ffmpeg");
const fs = require("fs");
ffmpeg.setFfmpegPath(ffmpegPath);

Whatsapp ChatBot - Youtube 14


const voiceToText = async (path) => {
if (!fs.existsSync(path)) {
throw new Error("No se encuentra el archivo");
}
try {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const resp = await openai.createTranscription(
fs.createReadStream(path),
"whisper-1"
);
return resp.data.text;
} catch (err) {
console.log(err.response);
return "ERROR";
}
};

const convertOggMp3 = async (inputStream, outStream) => {


return new Promise((resolve, reject) => {
ffmpeg(inputStream)
.audioQuality(96)
.toFormat("mp3")
.save(outStream)
.on("progress", (p) => null)
.on("end", () => {
resolve(true);
});
});
};

const handlerAI = async (ctx) => {


const buffer = await downloadMediaMessage(ctx, "buffer");
const pathTmpOgg = `${process.cwd()}/tmp/voice-note-${Date.now()}.ogg`;
const pathTmpMp3 = `${process.cwd()}/tmp/voice-note-${Date.now()}.mp3`;
await fs.writeFileSync(pathTmpOgg, buffer);
await convertOggMp3(pathTmpOgg, pathTmpMp3);
const text = await voiceToText(pathTmpMp3);
fs.unlink(pathTmpMp3, (error) => {
if (error) throw error;
});
fs.unlink(pathTmpOgg, (error) => {
if (error) throw error;
});
return text;

Whatsapp ChatBot - Youtube 15


};

module.exports = { handlerAI };

¿Cómo optimizar el consumo de la API?

La implementación eficiente de ChatGPT en un chatbot de WhatsApp puede significar un balance


entre costo y efectividad. Es crucial optimizar el uso de la API no solo para mantener los costos
controlados, sino también para garantizar una experiencia de usuario fluida y eficiente. Aquí se
detallan algunas estrategias para optimizar el consumo de la API de ChatGPT.

Uso de Respuestas Estáticas vs. Dinámicas


Muchas interacciones dentro de un chatbot no requieren el procesamiento avanzado de lenguaje
que proporciona ChatGPT. Por ejemplo, respuestas a preguntas frecuentes, saludos iniciales, o
confirmaciones pueden ser manejadas eficientemente mediante respuestas estáticas codificadas
directamente en el chatbot. Esto no solo reduce los costos evitando llamadas innecesarias a la
API, sino que también disminuye la latencia, mejorando la respuesta del bot.
Implementación Práctica:

Definir un mapeo de respuestas: Crea un diccionario o una base de datos de respuestas


estáticas para las preguntas más comunes o los comandos más frecuentes.

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.

Selección de Modelos: ChatGPT-3.5 vs. ChatGPT-4

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.

Whatsapp ChatBot - Youtube 16


Precarga de FAQs: Si el chatbot maneja muchas FAQs, considera enviar tanto la pregunta
como la respuesta predefinida a ChatGPT-3.5 para reformular la respuesta de manera más
natural, manteniendo bajo el costo.

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.

10. Errores comunes


Desarrollar chatbots de WhatsApp utilizando NodeJS es una tarea que implica varios desafíos
técnicos, especialmente para los desarrolladores menos experimentados. A continuación,
exploraremos los errores más comunes que puedes enfrentar, cómo evitarlos y qué hacer si te
encuentras atascado en un problema complicado.

¿Cuáles son los errores que puedo tener?


Al desarrollar un chatbot de WhatsApp, puedes encontrarte con una serie de errores comunes,
que incluyen:

1. No instalar las dependencias necesarias: Un error frecuente es omitir la instalación de


paquetes necesarios que tu proyecto requiere para funcionar. Esto puede llevar a errores de
módulo no encontrado y otros problemas relacionados al inicio de la aplicación.

2. Conflictos de versiones: Usar versiones incompatibles de NodeJS o de paquetes npm puede


causar incompatibilidades y fallos. Es crucial asegurarse de que todas las dependencias estén
en versiones que funcionen bien juntas y sean compatibles con tu versión de NodeJS.

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.

¿Cómo puedo evitar errores?


Para minimizar y manejar efectivamente los errores en el desarrollo de tu chatbot, considera las
siguientes prácticas:

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:

Whatsapp ChatBot - Youtube 17


try {
// Código que puede fallar
let response = await flowDynamic("¿Cómo puedo ayudarte?");
} catch (error) {
console.error("Error enviando mensaje:", error);
// Opcional: enviar mensaje de error al usuario
await flowDynamic("Lo siento, ocurrió un error. Intenta nuevamente.");
}

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:

Vende Tu Chatbot de Whatsapp


Este curso intensivo está diseñado para transformar a desarrolladores sin experiencia o con conocimientos básicos en
expertos capaces de diseñar, implementar y vender su primer chatbot de WhatsApp. Este curso esta diseñado con un
enfoque práctico y estructurado, vas a aprender los fundamentos de NodeJS, las bases de los chatbots, manejo de bases de
https://dub.sh/bot-wpp

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

Whatsapp ChatBot - Youtube 18

También podría gustarte