Contenido del curso
Integración con la API de WhatsApp
Implementación de Servidor Express
Comunicación con la API de WhatsApp
Flujos de Interacción con la API de WhatsApp
Multimedia con WhatsApp API
Avances y Personalización
- 19

Integración de Google Sheets API para Guardar Datos del Bot
07:33 min - 20

Integración de Google Sheets con Node.js para Reservas Automáticas
18:34 min - 21

Conectar tu bot de WhatsApp con la API de OpenAI
08:50 min - 22

Integración de ChatGPT en Flujo de Mensajería con WhatsApp
10:40 min - 23

Enviar contacto de WhatsApp en emergencias
08:12 min - 24

Envío de ubicación con mapa en WhatsApp
09:54 min - 25

Refactor DRY en WhatsApp Service
11:03 min - 26

Despliegue de Bots de WhatsApp en Railway con Integración de GitHub
14:29 min - 27

Publicación y configuración de aplicaciones con API de WhatsApp
22:50 min - 28

Creación de Bots en WhatsApp: Domina la API y Optimiza Tu Negocio
02:52 min
Saludo personalizado con nombre en WhatsApp bot
Resumen
Personalizar el saludo de un bot de WhatsApp marca la diferencia entre una réplica fría y una conversación que se siente humana. Aquí aprendes cómo recibir al usuario por su nombre, validar saludos con un array de strings y disparar un mensaje de bienvenida usando una arquitectura de servicios reutilizable en Node.js. Es ideal si estás construyendo un bot conversacional para atención al cliente.
Cómo identifico al usuario que escribe al bot
Cuando llega un mensaje desde la API de WhatsApp, recibes un objeto con mucha información. Dentro de ese objeto vive un campo llamado contacts que trae dos datos clave: el ID del usuario (compuesto por la lada del país y el número de WhatsApp) y el nombre que la persona configuró en su perfil [02:15].
Para extraer esa información, dentro del controller creas una constante senderInfo que apunta a value.contacts[0]. Ese índice cero es donde se guarda el contacto que escribe.
js const senderInfo = value.contacts[0];
Luego pasas ese senderInfo como segundo argumento al messageHandler, junto con el mensaje. Así, la lógica de respuesta tiene acceso al nombre completo del usuario.
¿Qué es senderInfo en un bot de WhatsApp? Es el objeto que contiene los datos de quien envía el mensaje: número con lada y nombre de perfil. Lo extraes desde
contacts[0]en la respuesta del webhook.
Una nota práctica: WhatsApp devuelve el nombre tal como lo configuró el usuario, lo que incluye emojis o caracteres especiales. Puedes aplicar un regex para limpiarlo, pero ten presente que no toda configuración encaja en una regla única.
Cómo valido si un mensaje es un saludo en mi bot
Antes de responder, el bot necesita saber si el texto recibido es un disparador válido. Para eso creas una función llamada isGreeting dentro del message handler [05:40].
La función recibe un mensaje y compara contra un array de strings con los saludos posibles. Estos son los triggers que inicializan el flujo de bienvenida:
- hola.
- hello.
- hi.
- buenas tardes.
- buenos días.
- buenas noches.
js isGreeting(message) { const greetings = ["hola", "hello", "hi", "buenas tardes"]; return greetings.includes(message); }
El método includes retorna un booleano: true si el mensaje coincide con alguno de los saludos, false si no. Con eso decides si ejecutas el flujo de bienvenida o caes en otra lógica.
Por qué normalizo el texto a minúsculas y sin espacios
Los celulares suelen capitalizar la primera letra automáticamente, y a veces el usuario añade un espacio sin querer. Si filtras solo contra "hola" exacto, un "Hola " con mayúscula y espacio nunca pasaría el filtro.
La solución es normalizar el texto antes de validarlo:
js const incomingMessage = message.text.body.toLowerCase().trim();
Con toLowerCase fuerzas todo a minúsculas y con trim eliminas espacios al inicio y al final. Así, " Hola " se convierte en "hola" y pasa la validación sin problema [12:30].
¿Por qué usar toLowerCase y trim juntos? Porque garantizan que el filtro funcione sin importar cómo el usuario escriba el saludo. Sin esta normalización, perderías coincidencias por mayúsculas o espacios accidentales.
Cómo construyo y envío el mensaje de bienvenida
Con la validación lista, defines una función asíncrona sendWelcomeMessage que recibe dos parámetros: to (el ID del usuario) y messageId (el identificador del mensaje original) [09:10].
Dentro armas una constante welcomeMessage con el texto que quieres enviar. En el ejemplo de la veterinaria queda así:
js async sendWelcomeMessage(to, messageId) { const welcomeMessage = "Hola, bienvenido a nuestro servicio de veterinaria online. ¿En qué puedo ayudarte hoy?"; await whatsappService.sendMessage(to, welcomeMessage, messageId); }
Fíjate que llamas a whatsappService.sendMessage, el mismo servicio que ya construiste antes. Esa es la ventaja de la arquitectura por capas: reutilizas la lógica de envío sin copiar y pegar código cada vez que necesitas mandar un mensaje.
Cómo conecto la validación con el envío en handleIncomingMessage
Dentro de handleIncomingMessage, la estructura final queda con un if-else limpio:
js if (this.isGreeting(incomingMessage)) { await this.sendWelcomeMessage(message.from, message.id); } else { await whatsappService.sendMessage(message.from, message.text.body, message.id); } await whatsappService.markAsRead(message.id);
Si el mensaje es un saludo, dispara la bienvenida. Si no, replica el mensaje (la lógica anterior). Al final, marca el mensaje como leído para que aparezca el check azul en el chat del usuario.
Cómo configuro el comando start con nodemon
Antes de probar, ajusta el package.json para que la aplicación se reinicie sola cuando cambies código. Agregas un script nuevo:
"scripts": { "start": "nodemon src/app.js" }
También actualizas la ruta del main a src/app.js. Con eso, nodemon escucha los cambios en tiempo real y reinicia el servidor automáticamente [15:50].
Al probar en WhatsApp, los saludos como hola, hi o buenas tardes disparan el mensaje de bienvenida. Cualquier otro texto, como ayuda, cae en la lógica de réplica porque aún no hay flujo definido para esa palabra.
Ten en cuenta que puedes crear tantos flujos como necesites: uno para agendar citas, otro para consultas frecuentes, otro para emergencias. El bot se comporta distinto según el caso de uso que estés modelando.
¿Cómo mejorarías el saludo de una veterinaria conversacional? Déjalo en los comentarios.