Ejecuta en minutos un chatbot de IA totalmente funcional, personalizable y específico para tu negocio en WhatsApp. Ahora soporta GPT-4o (multimodal) y una carga de datos externos y llamadas a API remotas mejoradas (RAG)
Convierte tu número de WhatsApp en un potente chatbot de IA potenciado por ChatGPT en minutos con este tutorial, usando Node.js, ChatGPT (modelo GPT-4o) y Wassenger API.
Siguiendo este tutorial podrás tener un chatbot de IA completamente funcional similar a ChatGPT funcionando en minutos en tu equipo o servidor en la nube que actúe como un asistente virtual de atención al cliente para un propósito empresarial específico.
Puedes personalizar e instruir fácilmente al bot de IA para ajustar su comportamiento, rol, propósito y límites de conocimiento. Además, el bot de IA será consciente de la conversación basándose en el historial de mensajes previos con el usuario en WhatsApp, lo que permite respuestas más precisas y específicas al contexto.
El chatbot puede entender y responder en muchos idiomas y ha sido entrenado para comportarse como un asistente virtual de atención al cliente con fines empresariales.
Adicionalmente, puedes aumentar fácilmente el conocimiento específico del dominio sobre tu negocio en tiempo real usando acciones de función que permiten al bot de IA comunicarse arbitrariamente con las funciones de tu código o APIs remotas para recuperar y alimentar al modelo con información personalizada. Encuentra un ejemplo aquí.
El código de este tutorial está disponible en GitHub💻
🤩 🤖 Wassenger es una solución completa de API de WhatsApp. ¡Regístrate para una prueba gratuita de 7 días y comienza en minutos!
Conversación de demostración en WhatsApp impulsada por el chatbot ChatGPT usando este tutorial
Contenido
- Cómo funciona
- Características
- Comportamiento del bot
- Requisitos
- Estructura del proyecto
- Instalación
- Configuración
- Personalización
- Llamar datos externos y APIs (RAG)
- Ejecutar el bot
- Uso
- Preguntas
🤑 💰 Gana 30% de comisión refiriendo usuarios a Wassenger. Obtén tu enlace de referido ahora. Aplican términos.
Cómo funciona
1. Inicia un servicio web que se conecta automáticamente a la API de Wassenger y a tu número de WhatsApp
2. Crea un túnel usando Ngrok para poder recibir eventos de Webhook en tu equipo (o puedes usar una URL de Webhook dedicada si ejecutas el programa del bot en tu servidor en la nube).
3. Registra automáticamente el endpoint del webhook para recibir mensajes entrantes.
4. Procesa y responde a los mensajes recibidos usando un modelo de IA potenciado por ChatGPT entrenado con instrucciones personalizadas.
5. Puedes empezar a interactuar con el bot de IA enviando mensajes al número de WhatsApp conectado a Wassenger.
Características
Este tutorial proporciona una implementación completa de un chatbot de IA potenciado por ChatGPT en Node.js que:
- Proporciona un chatbot con todas las funciones en tu número de WhatsApp conectado a Wassenger
- Responde automáticamente a cualquier mensaje entrante de usuarios arbitrarios
- Puede entender cualquier texto en lenguaje natural y responder en más de 90 idiomas humanos
- Permite que cualquier usuario solicite hablar con un humano, en cuyo caso el chat será asignado a un agente y saldrá del flujo del bot
- El comportamiento del bot de IA puede ajustarse fácilmente en el archivo de configuración (abre config.js)
Comportamiento del bot
El bot de IA siempre responderá a los mensajes entrantes basándose en los siguientes criterios:
- El chat pertenece a un usuario (los chats grupales siempre se ignoran)
- 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 incluido en la lista negra (ver config.js)
- El chat o el contacto no ha sido archivado o bloqueado
- Si un chat se desasigna de un agente, el bot volverá a hacerse cargo y responderá automáticamente a nuevos mensajes entrantes
Requisitos
- Node.js >= v16 — Descárgalo aquí
- Número Personal o Business de WhatsApp
- Clave API de OpenAI — Regístrate gratis
- Clave API de Wassenger — Regístrate gratis
- Conecta tu número Personal o Business de WhatsApp a Wassenger
- Regístrate en Ngrok con una cuenta gratuita para crear un túnel de webhook (solo si ejecutas el programa en tu equipo local)
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)
|- store.js -> the bot source code in a single file
|- 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.
Así es como se ve el chat web cooperativo optimizado por el equipo de Wassenger. Regístrate gratis
🤑 💰 Gana 30% de comisión refiriendo usuarios a Wassenger. Obtén tu enlace de referido ahora. Aplican términos.
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.
Configura tu clave API de Wassenger
Introduce tu clave API de Wassenger
Puedes registrarte aquí gratis y luego obtener la clave API aquí:
// Required. Specify the Wassenger API key to be used // You can obtain it here: https://app.wassenger.com/apikeys apiKey: env.API_KEY || 'ENTER API KEY HERE',
Configura tu clave API de OpenAI
Introduce tu clave API de OpenAI
Regístrate en OpenAI gratis y luego obtén la clave API aquí:
// Required. Specify the OpenAI API key to be used // You can sign up for free here: https://platform.openai.com/signup // Obtain your API key here: https://platform.openai.com/account/api-keys openaiKey: env.OPENAI_API_KEY || 'ENTER OPENAI API KEY HERE',
Configura tu token de Ngrok (opcional)
Si necesitas ejecutar el programa en tu equipo 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 con una cuenta gratuita y luego obtén tu token de autenticación como se explica aquí.
Establece el token en `config.js` en la línea 90:
// Ngrok tunnel authentication token. // Required if webhook URL is not provided. // sign up for free and get one: https://ngrok.com/signup // Learn how to obtain the auth token: https://ngrok.com/docs/agent/#authtokens ngrokToken: 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, establece la URL de tu servidor en el campo `webhookUrl` de `config.js`.
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.
También puedes ajustar fácilmente el código para cumplir requisitos más específicos. ¡Las posibilidades son casi infinitas!
Para continuar con la personalización, abre config.js con tu editor de código preferido y establece las instrucciones del bot, el mensaje de bienvenida y el mensaje por defecto según tus preferencias:
// Default message when the user sends an unknown message. const unknownCommandMessage = `I'm sorry, I can only understand text. Can you please describe your query? If you would like to chat with a human, just reply with *human*.`
// Default welcome message. Change it as you need. const welcomeMessage = `Hey there 👋 Welcome to this ChatGPT-powered AI chatbot demo using *Wassenger API*! I can also speak many languages 😁`
// AI bot instructions to adjust its behaviour. Change it as you need. // Use concise and clear instructions. const botInstructions = `You are a smart virtual customer support assistant that works for Wassenger. You can identify yourself as Molly, the Wassenger chatbot assistant. You will be chatting with random customers who may contact you with general queries about the product. Wassenger is a cloud solution that offers WhatsApp API and multi-user live communication services designed for businesses and developers. Wassenger also enables customers to automate WhatsApp communication and build chatbots. You are an expert in customer support. Be polite, be gentle, be helpful and emphatic. Politely reject any queries that are not related to customer support or Wassenger itself. Strictly stick to your role as a customer support virtual assistant for Wassenger. If you can't help with something, ask the user to type *human* in order to talk with customer support.`
// Default help message. Change it as you need. const defaultMessage = `Don't be shy 😁 try asking anything to the AI chatbot, using natural language! Example queries: 1️⃣ Explain me what is Wassenger 2️⃣ Can I use Wassenger to send automatic messages? 3️⃣ Can I schedule messages using Wassenger? 4️⃣ Is there a free trial available? Type *human* to talk with a person. The chat will be assigned to an available member of the team. Give it a try! 😁`
Abre el archivo de configuración completo con todas las opciones disponibles
Llamar datos externos y APIs (RAG)
Con 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 funcionalidad OpenAI Tool Function Calling.
Cuando el modelo de IA necesita cierta información, 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 electrónico, nombre de usuario, dirección de envío, etc., y luego proporcionar esa información como texto o JSON al modelo de IA para generar una respuesta precisa y específica para el usuario.
Usar funciones de herramientas es potente y te permite construir casos de uso complejos y específicos de dominio para un bot agente de IA.
Aquí hay un ejemplo de implementación RAG con múltiples funciones de herramientas:
// 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 } },
// Sample function to verify the current date and time { name: 'verifyMeetingAvaiability', description: 'Verify if a given date and time is available for a meeting before booking it', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> verifyMeetingAvaiability call parameters:', parameters) // Example: you can make an API call to verify the date and time availability and return the confirmation or rejection message const date = new Date(parameters.date) if (date.getUTCDay() > 5) { return 'Not available on weekends' } if (date.getHours() < 9 || date.getHours() > 17) { return 'Not available outside business hours: 9 am to 5 pm' } return 'Available' } },
// Sample function to determine the current date and time { name: 'bookSalesMeeting', description: 'Book a sales or demo meeting with the customer on a specific date and time', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> bookSalesMeeting call parameters:', parameters) // Make an API call to book the meeting and return the confirmation or rejection message return 'Meeting booked successfully. You will receive a confirmation email shortly.' } },
// Sample function to determine the current date and time { name: 'currentDateAndTime', description: 'What is the current date and time', run: async ({ parameters, response, data, device, messages }) => { return new Date().toLocaleString() } } ]
Ejecuta el bot
Puedes ejecutar el programa del bot ahora mismo en tu navegador usando StackBlitz:
WhatsApp ChatGPT-powered Edit descriptio.npr.new
Uso
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 específico conectado a Wassenger:
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\` debe apuntar al propio programa del bot ejecutándose en tu servidor y debe ser accesible en red usando HTTPS para una conexión segura.
Preguntas
¿Puedo entrenar a la IA para que se comporte de una manera personalizada?
¡Sí! Puedes proporcionar instrucciones personalizadas a la IA para determinar el comportamiento del bot, 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 mantener su rol y rechazar educadamente temas que no estén relacionados 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, be gentle, be helpful and emphatic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as customer support virtual assistant for Wassenger.
¿Puedo personalizar la respuesta y el comportamiento del chatbot?
¡Por supuesto! 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 necesites.
¿Cómo evito que el bot responda a ciertos chats?
Simplemente asigna los chats específicos a cualquier agente desde el chat web de Wassenger o usando la API.
Alternativamente, puedes establecer etiquetas en la lista negra en `config.js` > `skipChatWithLabels` y luego añadir una de esas etiquetas al chat específico que quieras que el bot ignore. Puedes asignar etiquetas a los chats usando el chat web de Wassenger o usando la API.
¿Tengo que usar Ngrok?
No, no es necesario. Ngrok solo se utiliza para propósitos de desarrollo/prueba cuando se ejecuta el programa desde tu equipo local. Si ejecutas el programa en un servidor en la nube, probablemente no necesitarás Ngrok si tu servidor es accesible desde Internet mediante un dominio público (p. ej. bot.company.com) o una IP pública.
En ese caso, debes proporcionar la URL completa de tu servidor terminando con `/webhook` 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 en 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 necesarios para iniciarlo en el puerto 8080 en localhost.
¿Cómo evitar que ciertos chats sean respondidos por el bot?
Por defecto, el bot ignorará mensajes enviados en chats grupales, y chats/contactos bloqueados o archivados.
Además, puedes poner en la lista negra o en la lista blanca números de teléfono específicos y chats con etiquetas que serán manejados o ignorados por 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 de tu servidor accesible desde Internet como se explicó anteriormente.








