Sistema de automatización inteligente que integra IA para procesar y automatizar tareas usando FastAPI, n8n y OpenAI, permitiendo resúmenes, traducciones y clasificación de textos a través de una interfaz de Telegram o API REST.
-
📝 Procesamiento de Texto Inteligente:
- Resumen automático de textos largos (artículos, reportes, documentos)
- Traducción multilingüe con preservación de contexto (optimizado para ES-EN)
- Clasificación de contenido, urgencia e intención
-
🤖 Integración Multi-Canal:
- Bot de Telegram nativo para interacción conversacional
- API REST para integración con sistemas externos
- Webhooks para automatización basada en eventos
-
⚡ Arquitectura de Alto Rendimiento:
- Sistema de caché Redis para respuestas frecuentes (hasta 95% más rápido)
- Backend asíncrono end-to-end para máxima concurrencia
- Optimización con pool de conexiones a PostgreSQL
- Modelo de reintentos automáticos con backoff exponencial
- Manejo robusto de errores con códigos HTTP específicos
-
🔐 Seguridad Enterprise:
- Autenticación basada en API Keys
- Soporte SSL/TLS para comunicaciones cifradas
- Sanitización automática de datos sensibles en logs
- Contenedores Docker con usuario no-root
-
📊 Analítica y Monitoreo:
- Trazabilidad completa de operaciones
- Métricas de rendimiento y uso
- Visualización en tiempo real con Prometheus/Grafana (opcional)
- Registro detallado y estructurado de eventos
graph TD
A[Cliente] -->|Telegram/API| B[n8n]
B -->|REST API| C[FastAPI Backend]
C -->|LLM Query| D[OpenAI API]
C -->|Persist| E[(PostgreSQL)]
C -->|Cache| H[(Redis)]
subgraph "Security Layer"
I[API Key Auth]
J[Rate Limiting]
K[SSL/TLS]
end
subgraph "Monitoring"
F[Health Checks]
G[Prometheus]
L[Grafana]
end
C --- I
C --- J
C --- K
C --- F
F --- G
G --- L
- Docker y Docker Compose
- Acceso a internet para descargar imágenes
- OpenAI API Key para procesamiento IA
- Telegram Bot Token (opcional, para integración con Telegram)
- 2GB RAM mínimo, 4GB recomendado
# Clonar el repositorio
git clone https://github.com/dasafo/AI-Workflow-Assistant.git
cd AI-Workflow-Assistant
# Configurar variables de entorno
cp .env.example .env
nano .env
# Iniciar servicios
make up
# Verificar que todo funciona correctamente
make health-checkEdita el archivo .env con la siguiente información mínima:
# API Key para el backend (generar una segura)
API_KEY=tu_api_key_segura
# OpenAI API Key (https://platform.openai.com/api-keys)
OPENAI_API_KEY=sk-...
# Configuración de Telegram (opcional)
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
WEBHOOK_URL=https://tu-dominio.com/webhook
# Redis y PostgreSQL (puedes dejar valores por defecto para desarrollo local)
POSTGRES_PASSWORD=password_segura
REDIS_HOST=redisEstas son algunas posibilidades que podrías implementar con AI Workflow Assistant:
¿Y si pudieras...?
- Recibir resúmenes automáticos de correos largos al instante
- Clasificar la urgencia de solicitudes entrantes automáticamente
- Obtener traducciones de correspondencia internacional preservando el contexto empresarial
# Un ejecutivo podría simplemente enviar:
/resumir [correo extenso]
# Y recibir instantáneamente:
> "Reunión el martes con marketing. Necesitan aprobación del presupuesto Q3. Presentación adjunta."Imagina poder:
- Tener toda tu documentación técnica resumida y clasificada automáticamente
- Hacer disponible la misma información en múltiples idiomas sin esfuerzo
- Permitir búsquedas en lenguaje natural sobre tu base de conocimiento
# Un equipo técnico podría consultar:
curl -X POST http://localhost:8000/api/v1/procesar \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"texto": "The system employs a multi-tier architecture...",
"tipo_tarea": "traducir"
}'
# Obteniendo inmediatamente la versión localizada¿Te gustaría...?
- Analizar el sentimiento de los comentarios de clientes automáticamente
- Detectar tendencias emergentes en las opiniones recibidas
- Priorizar incidencias según su impacto potencial en el negocio
# Este análisis podría realizarse con:
curl -X POST http://localhost:8000/api/v1/procesar \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"texto": "La aplicación se cierra al abrir PDFs...",
"tipo_tarea": "clasificar"
}'
# Facilitando decisiones informadas sobre prioridadescurl -X POST http://localhost:8000/api/v1/estado \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"modo": "/resumir"
}'curl -X POST http://localhost:8000/api/v1/procesar \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"texto": "Tu texto largo aquí para procesar según el modo activo o el tipo_tarea especificado",
"tipo_tarea": "resumir"
}'curl -X POST http://localhost:8000/api/v1/consultar-inteligente \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"texto": "Muéstrame mis últimas traducciones"
}'curl -X POST http://localhost:8000/api/v1/consultar \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
"chat_id": 123456,
"tipo_tarea": "traducir",
"limit": 5
}'curl http://localhost:8000/health# Ver todos los comandos disponibles
make help
# Iniciar todos los servicios
make up
# Verificar estado de servicios
make ps
# Ver logs en tiempo real
make logs
# Acceder a la base de datos
make db
# Ejecutar tests
make test
# Detener servicios
make down
# Reconstruir servicios después de cambios
make build
# Limpiar archivos temporales y caché
make cleanEl proyecto incluye pgAdmin, una interfaz web completa para administrar la base de datos PostgreSQL:
- Acceso: http://localhost:8081
- Credenciales por defecto:
- Email: [email protected]
- Password: admin
Para conectar a la base de datos:
- Accede a pgAdmin en tu navegador
- Crea una nueva conexión con:
- Host: postgres (nombre del servicio en Docker)
- Port: 5432
- Database: workflowdb (o el valor de POSTGRES_DB en tu .env)
- Username: david (o el valor de POSTGRES_USER en tu .env)
- Password: (el valor de POSTGRES_PASSWORD en tu .env)
Esta interfaz te permite:
- Explorar tablas y relaciones
- Ejecutar queries SQL
- Visualizar y editar registros
- Exportar datos
- Monitorear el rendimiento
El sistema incluye flujos pre-configurados para n8n que puedes importar:
- Accede a n8n en http://localhost:5678
- Usa los archivos en la carpeta
n8n-flows/ - Configura las credenciales necesarias:
- HTTP Node: URL del backend y API Key
- Telegram: Bot Token si usas la integración
- telegram-bot.json: Bot completo con comandos /resumir, /traducir y /clasificar
- periodic-reports.json: Generación automática de informes y envío por email
- content-monitor.json: Monitoreo de URLs y notificación de cambios
El sistema sigue una arquitectura de microservicios, con componentes desacoplados que se comunican a través de interfaces bien definidas:
| Componente | Tecnología | Función |
|---|---|---|
| Backend Core | FastAPI | Punto de entrada API, validación, autenticación |
| Gestión de Estados | Python Async | Manejo de modos de usuario y contexto de conversación |
| Procesamiento de Tareas | Python Async | Resumir, traducir y clasificar textos |
| Caché | Redis | Almacenamiento en memoria para respuestas frecuentes |
| Base de Datos | PostgreSQL | Persistencia de datos, histórico y trazabilidad |
| Flujos | n8n | Orquestación de procesos, integración de canales |
| Procesamiento IA | OpenAI API | Motor de inteligencia artificial |
- Petición recibida (API o n8n)
- Validación y autenticación
- Verificación en caché (si aplica)
- Procesamiento con servicio específico según el tipo de tarea
- Llamada a OpenAI si es necesario
- Persistencia en base de datos (modelo unificado ConsultaIA)
- Respuesta al cliente
La aplicación utiliza un modelo de datos unificado para todas las consultas de IA:
-
ConsultaIA: Almacena todas las consultas (resúmenes, traducciones, clasificaciones)
chat_id: Identificador del chat/usuariotipo_tarea: Tipo de tarea realizada (resumir, traducir, clasificar)texto_original: Texto enviado para procesarresultado: Resultado de la operaciónidioma: Solo para traduccionesfecha: Timestamp de la consulta
-
EstadoUsuario: Mantiene el estado/modo actual del usuario
chat_id: Identificador del chat/usuariomodo_actual: Modo activo (/resumir, /traducir, etc.)
AI-Workflow-Assistant/
├── backend/
│ ├── api/
│ │ ├── routes/
│ │ │ ├── __init__.py
│ │ │ └── router.py # Router principal
│ │ ├── workflow_endpoints.py # Endpoints principales
│ │ └── schemas.py # Esquemas Pydantic
│ ├── core/
│ │ ├── cache.py # Sistema de caché Redis
│ │ ├── errors.py # Manejo de errores y excepciones globales
│ │ ├── health.py # Health checks
│ │ ├── logging.py # Configuración de logs
│ │ └── retry.py # Sistema de reintentos
│ ├── services/
│ │ ├── db.py # Gestión de base de datos unificada
│ │ ├── models.py # Modelos SQLAlchemy (ConsultaIA, EstadoUsuario)
│ │ └── tasks/ # Implementación específica de tareas
│ │ ├── summarize.py # Servicio de resumen
│ │ ├── translate.py # Servicio de traducción
│ │ └── classify.py # Servicio de clasificación
│ ├── migrations/ # Migraciones de base de datos
│ └── main.py # Punto de entrada de la aplicación
├── docs/
│ ├── GUIDE.md # Guía técnica completa
│ └── workflow.md # Documentación de arquitectura
├── n8n-flows/ # Flujos exportados de n8n
└── docker/ # Configuraciones Docker
├── cleanup.sh # Script para limpieza de archivos temporales
El sistema incluye herramientas para monitoreo y mantenimiento:
- Health Checks: Endpoint
/healthpara verificar estado de componentes - Logs Estructurados: Formato JSON para fácil integración con ELK/Loki
- Manejo de Errores: Tratamiento específico de errores de OpenAI API
- Timeouts: Código 504
- Rate limits: Código 429
- Errores generales de API: Código 502
- Métricas Prometheus: Exposición de métricas de rendimiento (opcional)
- Dashboards Grafana: Visualización pre-configurada (opcional)
- Backups Automáticos: Scripts para backup de datos y configuración
- Errores 5xx > 1% de peticiones
- Latencia > 1000ms en percentil 95
- Uso de CPU > 80% por más de 5 minutos
- Espacio en disco < 15%
El sistema implementa múltiples capas de seguridad:
- Autenticación: API Keys con rotación recomendada cada 90 días
- Network: Servicios en red Docker aislada, mínima exposición
- Datos: Sanitización de entradas, validación Pydantic
- Contenedores: Imágenes Alpine mínimas, usuario no-root
- Secretos: Variables de entorno en archivos .env (no hardcoded)
- SSL/TLS: Configuración HTTPS con certificados renovados automáticamente
| Problema | Solución |
|---|---|
| Error de conexión a Redis | Verificar que el servicio está corriendo: docker ps | grep redis |
| Fallos en API OpenAI | Comprobar límites de cuota y validez de API Key, revisar errores 429/504 |
| n8n no se conecta al backend | Verificar URL y API Key en configuración de HTTP Request |
| Telegram no responde | Comprobar Webhook URL y token del bot en las variables de entorno |
| Lentitud en respuestas | Revisar logs por posibles timeouts o aumentar recursos de contenedores |
Para más asistencia, consulta la documentación completa o abre un issue en GitHub.
- Video Demo - Demostración completa del sistema
- Slides de Presentación - Presentación para equipos técnicos
- Artículo Técnico - Detalles de implementación y arquitectura
Las contribuciones son bienvenidas y apreciadas. Para contribuir:
- Fork el proyecto
- Crea tu rama (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add: AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Por favor, asegúrate de seguir nuestras guías de contribución y código de conducta.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
David Salas
- Website: dasafodata.com
- GitHub: @dasafo
- LinkedIn: David Salas
Creado con ❤️ por David Salas - dasafodata





