feat: Extraer flujos de conversación a formato JSON

Se han extraído los flujos de conversación de los handlers de  y  a archivos JSON dedicados dentro del nuevo directorio .

Este cambio tiene como objetivo:

1.  **Centralizar y desacoplar la lógica de conversación**: Al separar las preguntas y los estados del código de Python, se facilita la visualización, edición y mantenimiento de los flujos sin necesidad de modificar la lógica de la aplicación.
2.  **Facilitar la mejora de los flujos**: Con los flujos definidos en un formato de datos estructurado, es más sencillo analizarlos, identificar posibles errores o bucles, y realizar mejoras de manera más segura.
3.  **Preparar para futuras funcionalidades**: Esta estructura sienta las bases para poder cargar y gestionar los flujos de conversación de manera dinámica, permitiendo, por ejemplo, la creación de un editor visual de flujos o la carga de flujos desde una base de datos.

Se han creado los siguientes archivos:
- : Contiene el flujo de onboarding de nuevas empleadas.
- : Define el flujo para solicitar vacaciones.
- : Especifica el flujo para solicitar permisos.
This commit is contained in:
Marco Gallegos
2025-12-20 09:33:58 -06:00
parent 72204d54cf
commit fc0e798703
3 changed files with 379 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
{
"flow_name": "leave_request",
"steps": [
{
"state": "PERMISO_CUANDO",
"question": "⏱️ **Solicitud de Permiso**\n\n¿Para cuándo lo necesitas?",
"handler": "recibir_cuando_permiso",
"type": "keyboard",
"options": ["Hoy", "Mañana", "Pasado mañana", "Fecha específica"],
"next_step": [
{
"condition": "response in ['Hoy', 'Mañana', 'Pasado mañana']",
"state": "HORARIO"
},
{
"condition": "response == 'Fecha específica'",
"state": "PERMISO_ANIO"
}
]
},
{
"state": "PERMISO_ANIO",
"question": "¿Para qué año es el permiso? (elige el actual o el siguiente)",
"handler": "recibir_anio_permiso",
"type": "keyboard",
"options": ["current_year", "next_year"],
"next_step": "INICIO_DIA"
},
{
"state": "INICIO_DIA",
"question": "¿En qué *día* inicia el permiso? (número, ej: 12)",
"handler": "recibir_inicio_dia",
"type": "text",
"next_step": "INICIO_MES"
},
{
"state": "INICIO_MES",
"question": "¿De qué *mes* inicia?",
"handler": "recibir_inicio_mes",
"type": "keyboard",
"options": [
"Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre",
"Octubre", "Noviembre", "Diciembre"
],
"next_step": "FIN_DIA"
},
{
"state": "FIN_DIA",
"question": "¿Qué *día* termina?",
"handler": "recibir_fin_dia",
"type": "text",
"next_step": "FIN_MES"
},
{
"state": "FIN_MES",
"question": "¿De qué *mes* termina?",
"handler": "recibir_fin_mes",
"type": "keyboard",
"options": [
"Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre",
"Octubre", "Noviembre", "Diciembre"
],
"next_step": "HORARIO"
},
{
"state": "HORARIO",
"question": "¿Cuál es el horario? Ej: `09:00-11:00` o `Todo el día`.",
"handler": "recibir_horario",
"type": "text",
"next_step": "MOTIVO"
},
{
"state": "MOTIVO",
"question": "Entendido. ¿Cuál es el motivo o comentario adicional?",
"handler": "recibir_motivo_fin",
"type": "text"
}
]
}