mirror of
https://github.com/marcogll/talia_bot.git
synced 2026-01-13 13:25:19 +00:00
This commit fixes a critical `ImportError` that prevented the bot from starting. The error was caused by the `agenda.py` module attempting to import calendar ID variables that were not being loaded into the application's configuration. The fix involves: - Updating `talia_bot/config.py` to correctly load the `WORK_GOOGLE_CALENDAR_ID` and `PERSONAL_GOOGLE_CALENDAR_ID` from the environment. - Removing the obsolete `CALENDAR_ID` variable from the configuration. - Updating `talia_bot/modules/calendar.py` to import and use the new, more specific `WORK_GOOGLE_CALENDAR_ID` as its default, ensuring consistency with the rest of the application.
7.2 KiB
7.2 KiB
Agent_skills.md
Este documento detalla las capacidades técnicas, reglas de negocio y límites de cada agente definido en AGENTS.md.
1. Agente Recepcionista (main.py)
-
Capacidades Técnicas:
- Framework:
python-telegram-bot. - Manejo de Eventos: Utiliza
CommandHandler,CallbackQueryHandler,MessageHandlerpara registrar y procesar diferentes tipos de actualizaciones de Telegram. - Inyección de Dependencias: Almacena instancias compartidas (como
FlowEngine) en elbot_datadel contexto de la aplicación para que estén disponibles globalmente.
- Framework:
-
Reglas de Negocio:
- El comando
/startsiempre debe borrar cualquier estado de conversación previo del usuario para asegurar un inicio limpio. - Los documentos (
filters.Document.ALL) se enrutan exclusivamente al manejador de impresión. - Los mensajes de texto y voz se enrutan al
text_and_voice_handler, que a su vez los delega al motor de flujos.
- El comando
-
Límites Claros:
- No implementa lógica de reintentos para comandos fallidos.
- No contiene estado. El estado se gestiona en la base de datos a través de otros agentes.
2. Agente de Identidad (identity.py, db.py)
-
Capacidades Técnicas:
- Base de Datos:
SQLite. - Conexión: Utiliza
sqlite3para conectarse a la base de datosusers.db. - Modelo de Datos: La tabla
userscontienechat_id(INTEGER, PRIMARY KEY) yrole(TEXT).
- Base de Datos:
-
Reglas de Negocio:
- Un
chat_idsolo puede tener un rol. - Si un usuario no se encuentra en la base de datos, se le asigna el rol de
clientpor defecto. - Los roles válidos son
admin,crew, yclient. Cualquier otro valor se trata comoclient.
- Un
-
Límites Claros:
- No gestiona la adición o eliminación de usuarios. Esto debe hacerse manualmente en la base de datos por ahora.
- No ofrece permisos granulares, solo los tres roles definidos.
3. Agente de Motor de Flujos (flow_engine.py)
-
Capacidades Técnicas:
- Serialización: Lee y parsea archivos
.jsonpara definir la estructura de las conversaciones. - Persistencia de Estado: Utiliza
SQLitepara almacenar y recuperar el estado de la conversación de cada usuario en la tablaconversations. - Arquitectura: Máquina de estados finitos donde cada paso de la conversación es un estado.
- Serialización: Lee y parsea archivos
-
Reglas de Negocio:
- Cada flujo debe tener un
idúnico y una claveroleque restringe su acceso. - Los pasos se ejecutan en orden secuencial según su
step_id. - Al final de un flujo, se puede invocar una función de "finalización" (ej.
generate_sales_pitch) para procesar los datos recopilados.
- Cada flujo debe tener un
-
Límites Claros:
- No soporta bifurcaciones complejas (condicionales) en los flujos. La lógica es estrictamente lineal.
- No tiene un mecanismo de "timeout". Las conversaciones pueden permanecer activas indefinidamente hasta que el usuario las complete o las reinicie.
4. Agente de Onboarding y Menús (onboarding.py)
-
Capacidades Técnicas:
- Framework:
python-telegram-bot. - UI: Construye menús utilizando
InlineKeyboardMarkupyInlineKeyboardButton.
- Framework:
-
Reglas de Negocio:
- Debe mostrar un menú específico para cada uno de los tres roles (
admin,crew,client). - Fallo Actual: Los menús son estáticos y no se generan a partir de los flujos disponibles, lo que impide el acceso a flujos que sí existen.
- Debe mostrar un menú específico para cada uno de los tres roles (
-
Límites Claros:
- No puede mostrar menús que dependan del estado del usuario (ej. un botón diferente si el usuario ya ha completado una tarea).
5. Agente de Agenda (calendar.py, agenda.py, aprobaciones.py)
-
Capacidades Técnicas:
- Integraciones: API de Google Calendar (
googleapiclient). - Autenticación: Utiliza una cuenta de servicio de Google Cloud con un archivo
google_key.json. - Manejo de Fechas: Utiliza la librería
datetimepara manejar zonas horarias y rangos de tiempo.
- Integraciones: API de Google Calendar (
-
Reglas de Negocio:
- El tiempo personal (del
PERSONAL_GOOGLE_CALENDAR_ID) es prioritario y se considera "ocupado" e inamovible. - Los eventos propuestos por el
crewsolo deben enviarse a Google Calendar después de ser aprobados por unadmin. - Una vez que una actividad es rechazada, su estado debe persistir y no debe volver a mostrarse como "pendiente".
- Fallo Actual: El código ignora los diferentes IDs de calendario y solo usa uno genérico, rompiendo la separación entre personal y trabajo.
- El tiempo personal (del
-
Límites Claros:
- No puede modificar eventos existentes, solo crearlos.
- La lógica de aprobación es binaria (aprobar/rechazar) y no permite re-programación o negociación.
6. Agente de Impresión (printer.py)
-
Capacidades Técnicas:
- Protocolos de Red:
SMTPpara enviar correos yIMAPpara leerlos. - Librerías:
smtplibyimaplibde la biblioteca estándar de Python. - Manejo de Archivos: Descarga temporalmente los archivos de Telegram al disco antes de enviarlos.
- Protocolos de Red:
-
Reglas de Negocio:
- Solo los usuarios con rol
adminpueden usar esta función (verificación de permisos). - El estado se determina buscando palabras clave (ej. "completed", "failed") en los asuntos de los correos no leídos.
- Solo los usuarios con rol
-
Límites Claros:
- No maneja la impresión de imágenes, solo documentos.
- No tiene un sistema de cola. Las solicitudes se procesan de forma síncrona.
7. Agente de RAG y Ventas (sales_rag.py, llm_engine.py)
-
Capacidades Técnicas:
- Integraciones: API de OpenAI.
- Procesamiento de Lenguaje Natural (PLN): Realiza una búsqueda simple de palabras clave en
services.jsonpara encontrar contexto relevante. - Generación de Prompts: Construye un prompt detallado para el LLM a partir de una plantilla y los datos recopilados del usuario.
-
Reglas de Negocio:
- La regla "sin contexto, no hay respuesta" es obligatoria. Si la búsqueda en
services.jsonno arroja resultados, el agente debe detenerse. - Fallo Actual: Esta regla no se está aplicando, lo que resulta in respuestas genéricas.
- La regla "sin contexto, no hay respuesta" es obligatoria. Si la búsqueda en
-
Límites Claros:
- El mecanismo de "retrieval" (recuperación) es una búsqueda de palabras clave, no un sistema de embeddings vectoriales. Su precisión es limitada.
- No mantiene memoria de interacciones pasadas con el cliente.
8. Agente de Transcripción (Whisper)
-
Capacidades Técnicas:
- Integraciones Futuras: API de OpenAI (Whisper).
- Manejo de Medios: Deberá poder descargar archivos de audio de Telegram y enviarlos como una solicitud
multipart/form-data.
-
Reglas de Negocio:
- Debe ser capaz de manejar diferentes formatos de audio si Telegram los proporciona.
- Debe tener un manejo de errores para cuando la transcripción falle.
-
Límites Claros:
- Estado Actual: No implementado. El
text_and_voice_handlercontiene una respuesta placeholder. - No está diseñado para la traducción, solo para la transcripción del idioma hablado.
- Estado Actual: No implementado. El