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
Flujo de citas con estados en WhatsApp
Resumen
Construir un bot de WhatsApp que agende citas requiere algo más que enviar mensajes: necesitas manejar estados conversacionales para recordar qué te respondió el usuario en cada paso. Aquí aprenderás a estructurar ese flujo paso a paso usando un MessageHandler en JavaScript, ideal si estás desarrollando asistentes virtuales con la API de WhatsApp.
Por qué necesitas un manejo de estados en tu bot
Cuando un usuario inicia una conversación, el bot debe saber en qué punto del flujo se encuentra para responder correctamente. Sin estados, cada mensaje sería tratado de forma aislada y perderías el contexto.
La solución es agregar un constructor dentro de la clase MessageHandler que inicialice un objeto appointmentState vacío [00:39]. Ese objeto irá guardando la información del usuario conforme avanza la conversación: nombre, mascota, tipo y motivo de la consulta.
¿Qué es el appointmentState en un bot? Es un objeto que almacena temporalmente las respuestas del usuario durante el flujo de agendamiento, asociado a su número, para mantener el contexto entre mensajes.
Cómo estructurar el flujo handleAppointmentFlow
El método handleAppointmentFlow recibe dos parámetros: el identificador del usuario (to) y el message que envió. Dentro, se accede al estado actual con this.appointmentState[to] y se declara una variable response que cambiará según el paso [01:48].
La lógica central es un switch que evalúa state.step para decidir qué pregunta hacer a continuación. Los pasos definidos en la clase son:
- name: guarda el nombre del usuario y pregunta por el nombre de la mascota.
- petName: registra el nombre de la mascota y consulta el tipo (perro, gato, hurón).
- petType: almacena el tipo y solicita el motivo de la consulta.
- reason: guarda el motivo y responde con el mensaje de confirmación.
Cada caso actualiza el estado, cambia el step al siguiente valor y prepara la respuesta correspondiente. Por ejemplo, cuando el step es name, el código asigna state.name = message, actualiza state.step = 'petName' y devuelve un saludo solicitando el nombre de la mascota [03:05].
Cómo se dispara el flujo desde el menú
El flujo se activa desde handleMenuOption cuando el usuario elige la opción de agendar. En ese momento se inicializa this.appointmentState[to] = { step: 'name' } y se envía el primer mensaje: Por favor, ingresa tu nombre [05:32].
Desde ahí, cada respuesta del usuario entra al handleAppointmentFlow, que usa el WhatsAppService.sendMessage para devolver la siguiente pregunta hasta completar los cuatro pasos.
Qué hacer cuando el bot crashea por un error de variable
Durante la prueba en vivo apareció un error que detuvo la aplicación: step is not defined en la línea 118 [08:13]. El motivo fue intentar asignar step.petName cuando lo correcto era state.petName.
¿Por qué aparece el error step is not defined? Porque se hizo referencia a una variable inexistente. Solo
stateestá declarado en el scope;stepsolo existe como propiedad dentro destate.
Este tipo de fallos son habituales y forman parte del trabajo diario de un desarrollador. Leer el stack trace, identificar la línea y entender el mensaje suele apuntar directamente a la solución. Aquí los errores funcionan como guía, no como obstáculo.
Cómo se ve el flujo completo en producción
Una vez corregido el error y reiniciado el servidor, la conversación fluye así:
- El usuario escribe Hola y recibe el mensaje de bienvenida con el menú.
- Selecciona la opción agendar y el bot pide su nombre.
- Responde con su nombre (por ejemplo, Óscar) y el bot pregunta por la mascota.
- Indica el nombre (Mickey) y luego el tipo (gato).
- Escribe el motivo (revisión mensual) y recibe la confirmación: Gracias por agendar tu cita.
El resultado es un flujo conversacional cerrado donde toda la información queda almacenada en appointmentState, lista para enviarse a una base de datos, un calendario o un CRM.
Qué habilidades técnicas se ponen en práctica
Este ejercicio entrena varias competencias clave del desarrollo backend con Node.js:
- Manejo de estado en clases: usar
thisy un constructor para mantener datos entre llamadas. - Control de flujo con switch: ramificar la lógica según el paso actual de la conversación.
- Integración con APIs externas: invocar
WhatsAppService.sendMessagede forma asíncrona conawait. - Depuración de errores: interpretar mensajes como is not defined para localizar referencias incorrectas.
Ahora que tienes la información del usuario almacenada, ¿qué piensas hacer con ella? ¿Conectarla a Google Calendar, guardarla en una base de datos o enviar una confirmación por correo? Cuéntame en los comentarios qué elementos crees que faltan para completar una cita real.