Flujo Completo para Agendar Citas en un Bot de Mensajería

Clase 17 de 28Curso de ChatBot con WhatsApp API

Resumen

¿Cómo crear un flujo de agenda de citas en un bot?

La creación de un flujo de agenda de citas en un bot puede ser una tarea compleja, pero siguiendo una serie de pasos lógicos y bien estructurados, podemos facilitar este proceso. En este ejercicio, vamos a programar un flujo que solicite información al usuario, como el nombre de la mascota, tipo de mascota y la razón de la consulta, y la almacene para confirmar la cita. El flujo se controlará a través de un constructor en la clase MessageHandler. A continuación, detallaremos los pasos clave para lograrlo.

¿Qué es un constructor y para qué se utiliza en este flujo?

El constructor es una función que inicializa los objetos creados a partir de una clase. En este caso, inicializamos un estado que contendrá los pasos del flujo de agendar la cita, permitiéndonos mantener el control en cada etapa del proceso.

Este constructor, dentro de la clase MessageHandler, manejará el estado de la reserva. Asignamos un objeto vacío a this.appointmentState, que se llenará conforme el flujo avance por medio de preguntas al usuario:

constructor() {
  this.appointmentState = {};
}

¿Cómo manejamos el estado del flujo con un switch?

Utilizamos una estructura de control switch para manejar cada paso del flujo. Según el estado actual (state.step), ejecutamos un caso específico que realiza acciones como preguntar o almacenar datos.

  1. Solicitar el nombre de la mascota:

    case 'name':
      state.name = message;
      state.step = 'petName';
      response = 'Gracias, ¿cuál es el nombre de tu mascota?';
      break;
    
  2. Pedir el tipo de mascota:

    case 'petName':
      state.petName = message;
      state.step = 'petType';
      response = '¿Qué tipo de mascota es? (ej. perro, gato, etc.)';
      break;
    
  3. Motivo de la consulta:

    case 'petType':
      state.petType = message;
      state.step = 'reason';
      response = '¿Cuál es el motivo de la consulta?';
      break;
    
  4. Confirmación de la cita:

    case 'reason':
      state.reason = message;
      response = 'Gracias por agendar tu cita.';
      // Opcional: lógica para guardar la cita en el sistema
      break;
    

¿Cómo inicializar el flujo y enviar mensajes?

Tras definir el flujo con el switch, necesitamos inicializarlo adecuadamente cuando el usuario selecciona la opción correspondiente en el menú de acciones del bot. Esto se hace dentro del método handleMenuOptions.

  • Inicializar el estado:

    this.appointmentState[user] = { step: 'name' };
    
  • Enviar el mensaje inicial:

    await sendMessage(user, 'Por favor, ingresa tu nombre.');
    

¿Qué errores comunes podemos encontrar y cómo solucionarlos?

A menudo, durante el desarrollo, encontramos errores que pueden detener el flujo del programa. Por ejemplo:

  • Errores de referencia: Un error común es intentar usar una variable no definida como step en lugar de state.step. Verificar correctamente las asignaciones dentro de los casos del switch puede resolver el problema.

  • Validación y pruebas: Probar continuamente cada cambio asegura que el flujo funcione correctamente y ayuda a identificar errores incipientes. Por ejemplo, verificar que después de cada caso, el flujo avance correctamente al siguiente paso.

¿Cómo probar el flujo completo?

Para asegurarse de que todo funciona adecuadamente, iniciaremos el bot y simularemos el proceso de agendar una cita desde el principio:

  1. Iniciar el bot y decir "Hola" para recibir el menú de bienvenida.
  2. Seleccionar la opción de agendar cita.
  3. Responder progresivamente a cada pregunta con datos ficticios como "Oscar" para el dueño y "Mickey" para el nombre de la mascota.
  4. Comprobar que el flujo avanza correctamente y que las respuestas se recogen y procesan como esperamos.

Este proceso iterativo de codificar, probar y corregir nos ayuda a asegurar un funcionamiento fluido del bot.

Aprender a manejar estados y flujos te permitirá desarrollar sistemas más complejos y eficientes en el futuro. No olvides compartir tus experiencias y preguntas en foros o comunidades, ¡así seguimos aprendiendo juntos!