Ejecuta un chatbot específico para tu negocio en WhatsApp que puede entender mensajes de texto, imágenes y voz, y responder a los usuarios con mensajes de texto y de voz. Impulsado por GPT-4o, Node.js y la API de Wassenger.
Siguiendo este tutorial, puedes tener un chatbot AI completamente funcional, habilitado para voz, similar a ChatGPT ejecutándose en minutos en tu ordenador o servidor en la nube. El chatbot está diseñado para operar como un asistente virtual de atención al cliente adaptado a propósitos comerciales específicos, comunicándose con los usuarios mediante mensajes de texto y de voz en WhatsApp.
El chatbot puede entender texto, imágenes y mensajes de voz en muchos idiomas y responder con texto y mensajes de voz, entrenado como un asistente virtual de atención al cliente con instrucciones y conocimientos predefinidos.
Puedes personalizar, ampliar e instruir fácilmente al bot de IA para ajustar su comportamiento, rol, propósito y límites de conocimiento según tu caso de negocio. El bot de IA es consciente de la conversación basándose en el historial de mensajes previos de WhatsApp con el usuario, lo que permite respuestas más contextuales y precisas.
Además, puedes aumentar fácilmente el conocimiento específico del dominio de tu negocio y cliente en tiempo real usando funciones, permitiendo que el bot de IA recupere información externa de APIs remotas, bases de datos o archivos, y alimente a la IA con información detallada, específica por usuario o por contexto.
👉 👉 El código de este tutorial está disponible en GitHub 💻
👉 👉 Tutorial en vídeo disponible en Youtube
Contenido
- Características
- Cómo funciona
- Comportamiento del bot
- Requisitos
- Estructura del proyecto
- Instalación
- Configuración
- Personalización
- Llamar datos externos y APIs (RAG)
- Ejecutar el bot
- Uso
- Preguntas
- Programa de afiliados
🤩 🤖 Wassenger es una solución completa de Chat de equipo y API para WhatsApp. Regístrate para una prueba gratuita de 7 días y comienza en minutos!
Características
Este tutorial proporciona una implementación completa de un chatbot con voz habilitada, potenciado por ChatGPT en Node.js que:
- Proporciona un chatbot totalmente funcional con soporte de voz en tu número de WhatsApp conectado a Wassenger.
- Procesa automáticamente cualquier mensaje entrante del usuario (texto, imagen y voz) y responde con texto y voz.
- Entiende el lenguaje hablado en más de 90 idiomas humanos diferentes y responde en consecuencia basándose en instrucciones preentrenadas específicas.
- Permite a los usuarios solicitar hablar con un humano, en cuyo caso el chat se asignará a un agente del equipo y saldrá del flujo del bot.
- El comportamiento del chatbot se puede ajustar fácilmente en el archivo de configuración (ver
config.js).
Cómo funciona
- Inicia un servicio web que se conecta automáticamente a la API de Wassenger y a tu número de WhatsApp.
- Crea un túnel usando Ngrok para recibir eventos de Webhook en tu equipo (o puedes usar una URL de Webhook dedicada si ejecutas el bot en la nube).
- Registra el endpoint del webhook automáticamente para recibir mensajes entrantes.
- Procesa mensajes entrantes de texto, imagen y voz desde WhatsApp y responde con mensajes de voz utilizando un modelo GPT-4o (multimodal) preentrenado con instrucciones empresariales específicas.
- Asigna automáticamente chats a agentes disponibles cuando el usuario lo requiera o el chatbot no pueda ayudar.
Comportamiento del bot
El bot de IA responderá a los mensajes entrantes basado en los siguientes criterios:
- El chat no está asignado a ningún agente dentro de Wassenger.
- El chat no tiene ninguna de las etiquetas en la lista negra (ver
config.js). - El número del usuario del chat no ha sido puesto en la lista negra (ver
config.js). - El chat o contacto no ha sido archivado ni bloqueado.
- El chat no es un grupo ni un canal.
- Si un chat es desasignado de un agente, el bot lo retomará nuevamente y responderá automáticamente a nuevos mensajes entrantes.
Requisitos
- Node.js >= v16 — Descárgalo aquí
- Número de WhatsApp personal o Business
- Clave de API de OpenAI — Regístrate gratis
- Clave de API de Wassenger — Regístrate gratis
- Conecta tu número de WhatsApp a Wassenger (prueba gratuita)
- Cuenta en Ngrok (opcional) — Regístrate gratis
Estructura del proyecto
Explora los archivos fuente en GitHub
|– bot.js -> The bot source code in a single file
|– config.js -> Configuration file to customize credentials and bot behavior
|– actions.js -> Functions to perform actions through the Wassenger API
|– server.js -> Initializes the web server to process webhook events
|– main.js -> Initializes the bot server and creates the webhook tunnel(when applicable)
|– speech.js -> Handles voice message transcription and synthesis
|– package.json -> Node.js package manifest required to install dependencies
|– node_modules -> Where the project dependencies will be installed, managed by npm
Instalación
Si tienes Git instalado, ejecuta el siguiente comando desde la Terminal:
git clone https://github.com/wassengerhq/whatsapp-chatgpt-bot.git
Si no tienes git, descarga los archivos fuente del proyecto aquí y descomprímelos.
Configuración
Abre tu terminal favorito y cambia el directorio a la carpeta del proyecto donde se encuentra package.json:
cd whatsapp-chatgpt-bot/
Desde esa carpeta, instala las dependencias ejecutando:
npm install
Con tu editor de código preferido, abre el archivo config.js y sigue los pasos a continuación:
Establece tu clave de API de Wassenger
Introduce tu clave de API de Wassenger.
Puedes registrarte gratis aquí para obtener tu clave de API de Wassenger:
// Required.Specify the Wassenger API key to be used
const apiKey = process.env.API_KEY || 'ENTER API KEY HERE',
Establece tu clave de API de OpenAI
Introduce tu clave de API de OpenAI.
Regístrate en OpenAI gratis y luego obtén la clave de API aquí:
// Required.Specify the OpenAI API key to be used
const openaiKey = process.env.OPENAI_API_KEY || 'ENTER OPENAI API KEY HERE',
Establece tu token de Ngrok (opcional)
Si necesitas ejecutar el programa en tu ordenador local, el programa necesita crear un túnel usando Ngrok para procesar eventos de webhook de los mensajes entrantes de WhatsApp.
Regístrate en Ngrok para obtener una cuenta gratuita y luego obtén tu token de autenticación como se explica aquí.
Configura el token en config.js:
// Ngrok tunnel authentication token.
// Required if webhook URL is not provided.
const ngrokToken = process.env.NGROK_TOKEN || 'ENTER NGROK TOKEN HERE',
Si ejecutas el programa en un servidor en la nube que sea accesible públicamente desde Internet, no necesitas usar Ngrok. En su lugar, configura la URL de tu servidor en config.js > campo webhookUrl.
Habilita la función de entrada y salida de audio
En config.js, ve a la declaración features en la línea 67 y establece audioInput y audioOutput a true como se muestra a continuación:
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: false,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Habilitar modo de respuesta solo por audio
Si quieres que el chatbot responda exclusivamente usando mensajes de audio, establece audioOnly a true:
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: true,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Personalización
Puedes personalizar el comportamiento del chatbot definiendo un conjunto de instrucciones en lenguaje natural que la IA seguirá.
Lee los comentarios en el código para más instrucciones.
Además, puedes ajustar fácilmente el código para cubrir requisitos más específicos. ¡Las posibilidades son casi infinitas!
Para proceder con la personalización, abre config.js con tu editor de código preferido y configura las instrucciones del bot, mensajes de bienvenida y mensajes predeterminados según tus preferencias.
Llamar datos externos y APIs (RAG)
Con las llamadas a funciones, puedes alimentar fácilmente al modelo de IA con información contextual, en tiempo real y específica del usuario para generar respuestas mejores y más precisas usando técnicas de Retrieval-Augmented Generation (RAG). Detrás de escena, utiliza la función de OpenAI Tool Function Calling.
Cuando el modelo de IA requiere cierta información para generar una respuesta, indicará ejecutar una o varias funciones para recuperar información adicional. Por ejemplo, en una función puedes consultar una API externa de CRM o una base de datos para recuperar información específica del cliente con el que el agente de IA está chateando, como dirección de correo, nombre de usuario, dirección de envío, etc., y luego proporcionar esa información como texto o JSON al modelo de IA para la generación de una respuesta contextual y precisa específica del usuario.
Usar funciones como herramientas es muy flexible y te permite construir casos de uso complejos y específicos del dominio para un bot agente de IA.
Consulta el archivo [functions.js](https://github.com/wassengerhq/whatsapp-chatgpt-bot/blob/master/functions.js) para múltiples ejemplos de cómo usar y definir funciones herramienta para carga remota de datos para la IA (RAG):
// Tool functions to be consumed by the AI when needed.
// Edit as needed to cover your business use cases.
// Using it you can instruct the AI to inform you to execute arbitrary functions
// in your code based in order to augment information for a specific user query.
// For example, you can call an external CRM in order to retrieve, save or validate
// specific information about the customer, such as email, phone number, user ID, etc.
// Learn more here: https://platform.openai.com/docs/guides/function-calling
const functions = [
// Sample function to retrieve plan prices of the product
// Edit as needed to cover your business use cases
{
name: 'getPlanPrices',
description:
'Get available plans and prices information available in Wassenger',
parameters: { type: 'object', properties: {} },
// Function implementation that will be executed when the AI requires to call this function
// The function must return a string with the information to be sent back to the AI for the response generation
// You can also return a JSON or a prompt message instructing the AI how to respond to a user
// Functions may be synchronous or asynchronous.
//
// The bot will inject the following parameters:
// - parameters: function parameters provided by the AI when the function has parameters defined
// - response: AI generated response object, useful to evaluate the AI response and take actions
// - data: webhook event context, useful to access the last user message, chat and contact information
// - device: WhatsApp number device information provided the by Wassenger API
// - messages: an list of previous messages in the same user chat
run: async ({ parameters, response, data, device, messages }) => {
// console.log('=> data:', response)
// console.log('=> response:', response)
const reply = [
'*Send & Receive messages + API + Webhooks + Team Chat + Campaigns + CRM + Analytics*',
'',
'- Platform Professional: 30, 000 messages + unlimited inbound messages + 10 campaigns / month',
'- Platform Business: 60, 000 messages + unlimited inbound messages + 20 campaigns / month',
'- Platform Enterprise: unlimited messages + 30 campaigns',
'',
'Each plan is limited to one WhatsApp number.You can purchase multiple plans if you have multiple numbers.',
'',
'*Find more information about the different plan prices and features here:*',
'https://wassenger.com/#pricing'
].join('\n');
return reply;
}
},
// Sample function to load user information from a CRM
{
name: 'loadUserInformation',
description: 'Find user name and email from the CRM',
parameters: {
type: 'object',
properties: {}
},
run: async ({ parameters, response, data, device, messages }) => {
// You may call an remote API and run a database query
const reply =
'I am sorry, I am not able to access the CRM at the moment.Please try again later.';
return reply;
}
}
];
Ejecutar el bot
Ejecuta el programa del bot:
node main
Ejecuta el programa del bot en un puerto personalizado:
PORT=80 node main
Ejecuta el programa del bot para un dispositivo conectado a Wassenger específico:
DEVICE=WHATSAPP_DEVICE_ID node main
Ejecuta el programa del bot en modo producción:
NODE_ENV=production node main
Ejecuta el bot con un servidor webhook existente sin el túnel de Ngrok:
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Nota: `https://bot.company.com:8080` must point to the bot program itself running on your server and must be network reachable using HTTPS for a secure connection.
Preguntas
¿Puedo entrenar a la IA para que se comporte de forma personalizada?
¡Sí! Puedes proporcionar instrucciones personalizadas a la IA para determinar el comportamiento del bot, su identidad y más.
Para establecer tus instrucciones personalizadas, introduce el texto en config.js > botInstructions.
¿Puedo indicar a la IA que no responda sobre temas no relacionados?
¡Sí! Definiendo un conjunto de instrucciones claras y explícitas, puedes enseñar a la IA a ceñirse a su rol y rechazar educadamente preguntas que no estén relacionadas con el tema relevante.
Por ejemplo, puedes añadir lo siguiente en tus instrucciones:
You are a smart virtual customer support assistant who works for Wassenger.
Be polite, gentle, helpful, and empathetic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as a customer support virtual assistant for Wassenger.Copiar código
¿Puedo personalizar la respuesta y el comportamiento del chatbot?
¡Claro! El código está disponible de forma gratuita y puedes adaptarlo tanto como necesites.
Solo necesitas tener algunos conocimientos de JavaScript/Node.js, y siempre puedes pedirle ayuda a ChatGPT para escribir el código que necesitas.
¿Cómo evitar que el bot responda a ciertos chats?
Simplemente debes asignar los chats específicos a cualquier agente en el chat web de Wassenger o usando la API.
Alternativamente, puedes establecer etiquetas en la lista negra en config.js > campo skipChatWithLabels, y luego agregar una de esas etiquetas al chat específico que quieres que el bot ignore. Puedes asignar etiquetas a los chats usando el chat web de Wassenger o mediante la API.
¿Tengo que usar Ngrok?
No, no es obligatorio. Ngrok solo se usa para propósitos de desarrollo/pruebas cuando ejecutas el programa desde tu equipo local. Si ejecutas el programa en un servidor en la nube, lo más probable es que no necesites Ngrok si tu servidor es accesible desde Internet usando un dominio público (por ejemplo, bot.company.com) o una IP pública.
En ese caso, debes proporcionar la URL completa de tu servidor terminada en /webhook como se muestra al ejecutar el programa del bot:
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Nota: https://bot.company.com:8080 debe apuntar al propio programa del bot ejecutándose en tu servidor y debe ser accesible por la red usando HTTPS para una conexión segura.
¿Qué sucede si el programa falla?
Revisa el error en la terminal y asegúrate de que estás ejecutando el programa con los permisos suficientes para iniciarlo en el puerto 8080 en localhost.
¿Cómo evitar que chats específicos sean respondidos por el bot?
Por defecto, el bot ignorará los mensajes enviados en chats de grupo, y chats/contactos bloqueados o archivados.
Además de eso, puedes poner números y chats específicos en listas negras o blancas y usar etiquetas para controlar cómo los maneja el bot.
Consulta las opciones numbersBlacklist, numbersWhitelist y skipChatWithLabels en config.js para más información.
¿Puedo ejecutar este bot en mi servidor?
¡Absolutamente! Despliega o transfiere el código fuente del programa a tu servidor y ejecuta el comando de inicio desde allí.
Los requisitos son los mismos, sin importar dónde ejecutes el bot.
Además, recuerda definir la variable de entorno WEBHOOK_URL con la URL pública accesible por Internet de tu servidor como se explicó anteriormente.
Programa de afiliados
🤑 💰 Gana un 30% de comisión refiriendo usuarios a Wassenger. Obtén tu enlace de referencia ahora. Aplican términos.






