Contenido del curso

Avances y Personalización

Cómo cerrar y guardar datos de una cita en un chatbot

Resumen

Construir un chatbot que agende citas no termina cuando el usuario responde la última pregunta. El paso clave está en cerrar el flujo de manera ordenada, liberar memoria y devolver una confirmación clara al usuario. Aquí te muestro cómo implementar esa lógica de cierre dentro de un bot conversacional en Node.js.

¿Cómo cerrar un flujo de agendamiento en un chatbot?

Cuando el usuario ya respondió nombre, mascota, tipo y motivo de la consulta, necesitas una función que tome esos datos, los procese y libere el espacio que ocupaban. Esa función la llamamos completeAppointment y recibe como parámetro al usuario que interactúa con el bot.

Dentro de ella ocurren tres cosas:

  • Se hace una copia del estado actual del appointment asociado a ese usuario.
  • Se elimina la entrada original con delete para liberar memoria.
  • Se construye un objeto userData con toda la información lista para guardar.

¿Por qué hacer una copia del appointment antes de borrarlo? Porque necesitas seguir usando los datos para mostrarlos y guardarlos, pero el estado original ya cumplió su función dentro del constructor y debe liberarse para no acumular memoria innecesaria.

¿Qué información debe contener el objeto userData?

El objeto que vas a almacenar reúne todo lo capturado durante la conversación más una marca de tiempo. Estos son los campos:

  • phone: el número con ID y lada del usuario.
  • name: nombre tomado de appointment.name.
  • petName: nombre de la mascota desde appointment.petName.
  • petType: tipo de mascota desde appointment.petType.
  • reason: motivo de la consulta desde appointment.reason.
  • date: fecha generada con new Date().toISOString() para tener un formato legible y estándar.

El uso de toISOString() te da una fecha universal y fácil de leer, ideal si más adelante quieres ordenar citas o filtrarlas por rango.

¿Cómo mostrar la información en consola y al usuario?

Una vez armado userData, haces un console.log(userData) para verificar desde el servidor que todo se capturó bien. Es tu primer punto de validación antes de pensar en una base de datos.

Luego, construyes la respuesta al usuario usando template literals, que te permiten armar un mensaje multilínea con variables incrustadas sin concatenar strings a mano.

El mensaje final tiene esta estructura:

  • Un saludo: "Gracias por agendar tu cita".
  • Un resumen con nombre, nombre de la mascota, tipo de mascota y motivo.
  • Un cierre: "Nos pondremos en contacto contigo pronto para confirmar la fecha y hora de tu cita".

Así, la persona ve reflejado lo que escribió y gana certeza de que el bot capturó todo correctamente.

¿Cómo conectar completeAppointment con el flujo principal?

De nada sirve la función si no se dispara en el momento correcto. Antes, el bot solo agradecía sin confirmar datos. Ahora reemplazas ese mensaje genérico por una llamada directa: this.completeAppointment(user), pasando al usuario como identificador.

Con ese cambio, el flujo queda así de extremo a extremo:

  1. El bot da la bienvenida y muestra el menú.
  2. El usuario elige agendar una cita e ingresa su nombre.
  3. Responde el nombre de la mascota.
  4. Indica el tipo de mascota.
  5. Escribe el motivo de la consulta.
  6. El bot devuelve el resumen completo y confirma el seguimiento.

¿Qué hace exactamente el operador delete en este flujo? Elimina la propiedad del usuario dentro del estado del appointment en memoria, evitando que datos viejos queden ocupando espacio una vez que la cita ya fue procesada.

¿Por qué usar template literals en lugar de concatenación?

Los template literals usan acentos graves y permiten insertar variables con ${variable} directamente en el texto. Ganas legibilidad, soporte nativo para saltos de línea y un mensaje más robusto sin perderte entre comillas y signos de suma.

Esto es especialmente útil cuando armas resúmenes con varios campos, como en el caso de la cita veterinaria.

¿Qué sigue después de capturar los datos de la cita?

Tener userData en consola es el primer paso, pero la información necesita un destino real. Puedes pensar en almacenarla en una base de datos relacional, una NoSQL como MongoDB, una hoja de cálculo conectada por API o incluso un archivo JSON local para pruebas.

La elección depende de cuántas citas esperas, si necesitas consultas complejas y qué tan integrado está tu bot con otros sistemas. Cuéntame en los comentarios dónde almacenarías tú esta información y por qué crees que ese servicio es el más intuitivo para este caso.