Sistema profesional de automatización de Data Entry con Telegram Bot, Gemini 2.5 LLM y validación BCRA
Características • Instalación • Uso • Documentación • Contribuir
- Descripción
- Características
- Stack Tecnológico
- Estructura del Proyecto
- Instalación
- Configuración
- Uso
- API Endpoints
- Arquitectura
- Desarrollo
- Despliegue
- Troubleshooting
- Contribuir
- Licencia
Data Entry Bot es un sistema completo de automatización de data entry diseñado para roles administrativos. Permite procesar documentos, leer cheques mediante razonamiento avanzado con Gemini 2.5 LLM, validar información crediticia con la API del BCRA, y gestionar todo el flujo a través de un bot de Telegram.
- ✅ Procesamiento automatizado de cheques
- ✅ Extracción de datos de documentos (fotos, PDFs)
- ✅ Validación crediticia en tiempo real
- ✅ Detección y procesamiento de múltiples cheques en un solo documento
- ✅ Formato comanda estructurado para visualización de resultados
- Interfaz conversacional intuitiva
- Soporte para comandos
/starty/help - Procesamiento automático de imágenes y PDFs
- Formato comanda estructurado para mostrar resultados
- Detección automática de múltiples cheques en un documento
- Gemini 2.5 LLM (Flash/Pro) con capacidades de razonamiento avanzado
- Análisis estructural y contextual de documentos
- Detección automática de cheques con razonamiento
- Extracción estructurada de campos específicos con validación
- Soporte para múltiples formatos (JPG, PNG, PDF)
- Extracción de datos clave:
- CUIT del librador
- Banco emisor
- Fechas de emisión y pago
- Importe y número de cheque
- CBU/CUIT del beneficiario
- Validación automática con BCRA
- Normalización de formatos
- Consulta de situación crediticia
- Verificación de cheques rechazados
- Evaluación de riesgo crediticio
- Modo mock para desarrollo
- Endpoints RESTful con FastAPI
- Documentación automática (Swagger/OpenAPI)
- Manejo de errores robusto
- Health checks para monitoreo
- Python 3.11+ - Lenguaje principal
- FastAPI - Framework web moderno y rápido
- Uvicorn - Servidor ASGI de alto rendimiento
- Pydantic - Validación de datos y configuración
- python-telegram-bot - Biblioteca para Telegram Bot API
- Google Gemini 2.5 LLM - Procesamiento inteligente de imágenes con razonamiento avanzado (Flash/Pro)
- BCRA API - Validación crediticia (con modo mock)
- Docker - Containerización
- Docker Compose - Orquestación de servicios
- Python-dotenv - Gestión de variables de entorno
dataentrybot/
├── src/
│ └── app/
│ ├── __init__.py
│ ├── main.py # FastAPI application entry point
│ ├── api/ # API routes
│ │ ├── __init__.py
│ │ └── routes.py # API endpoints
│ ├── bot/ # Telegram Bot
│ │ ├── __init__.py
│ │ └── bot.py # Bot implementation
│ ├── core/ # Core modules
│ │ ├── __init__.py
│ │ ├── config.py # Configuration management
│ │ └── models.py # Pydantic models
│ ├── services/ # External services
│ │ ├── __init__.py
│ │ ├── gemini_client.py # Gemini API client
│ │ ├── bcra_client.py # BCRA API client
│ │ └── cheques_processor.py # Cheque processing logic
│ └── utils/ # Utilities
│ ├── __init__.py
│ └── file.py # File handling utilities
├── docker/ # Docker configuration
│ ├── Dockerfile # Docker image definition
│ └── docker-compose.yml # Docker Compose config
├── scripts/ # Utility scripts
│ └── run_bot.py # Bot runner script
├── .env.example # Environment variables template
├── .dockerignore # Docker ignore file
├── .gitignore # Git ignore file
├── requirements.txt # Python dependencies
└── README.md # This file
- Python 3.11 o superior
- Docker y Docker Compose (opcional, para despliegue con Docker)
- Token de Bot de Telegram (Cómo obtenerlo)
- API Key de Google Gemini (Obtener aquí)
-
Clonar el repositorio
git clone https://github.com/sebastianjlopez/dataentrybot.git cd dataentrybot -
Crear entorno virtual
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Instalar dependencias
pip install -r requirements.txt
-
Configurar variables de entorno
cp .env.example .env
Editar
.envcon tus credenciales:TELEGRAM_BOT_TOKEN=tu_token_aqui GEMINI_API_KEY=tu_api_key_aqui GEMINI_MODEL=gemini-2.5-flash
-
Clonar el repositorio
git clone https://github.com/sebastianjlopez/dataentrybot.git cd dataentrybot -
Configurar variables de entorno
cp .env.example .env # Editar .env con tus credenciales -
Construir y ejecutar con Docker Compose
docker-compose -f docker/docker-compose.yml up -d
| Variable | Descripción | Requerido | Default |
|---|---|---|---|
TELEGRAM_BOT_TOKEN |
Token del bot de Telegram | ✅ | - |
GEMINI_API_KEY |
API Key de Google Gemini | ✅ | - |
GEMINI_MODEL |
Modelo de Gemini a usar (gemini-2.5-flash o gemini-2.5-pro) | ❌ | gemini-2.5-flash |
API_HOST |
Host del servidor API | ❌ | 0.0.0.0 |
API_PORT |
Puerto del servidor API | ❌ | 8000 |
API_BASE_URL |
URL base de la API | ❌ | http://localhost:8000 |
BCRA_API_URL |
URL de la API BCRA | ❌ | https://api.bcra.gov.ar |
BCRA_API_KEY |
API Key de BCRA | ❌ | - |
BCRA_MOCK_MODE |
Usar modo mock de BCRA | ❌ | true |
LOG_LEVEL |
Nivel de logging | ❌ | INFO |
- Habla con @BotFather en Telegram
- Crea un nuevo bot con
/newbot - Copia el token proporcionado
- El bot está listo para usar - no requiere configuración adicional
Local:
uvicorn src.app.main:app --host 0.0.0.0 --port 8000 --reloadDocker:
docker-compose -f docker/docker-compose.yml upLa API estará disponible en http://localhost:8000
- Documentación Swagger:
http://localhost:8000/docs - Documentación ReDoc:
http://localhost:8000/redoc
Local:
python scripts/run_bot.pyO directamente:
python -m src.app.bot.bot-
Iniciar conversación
- Busca tu bot en Telegram
- Envía
/startpara comenzar
-
Subir un documento
- Envía una foto o PDF al bot
- El bot procesará automáticamente el documento
-
Procesar un cheque
- Si el documento es un cheque, el bot:
- Extraerá todos los campos relevantes
- Validará con BCRA
- Mostrará un resumen en formato comanda
- Si hay múltiples cheques, se mostrarán uno por uno
- Si el documento es un cheque, el bot:
Sube y procesa un archivo.
Request:
curl -X POST "http://localhost:8000/api/upload" \
-F "[email protected]"Response:
{
"success": true,
"tipo_documento": "cheque",
"data": {
"cuit_librador": "20-12345678-9",
"banco": "Banco Nación",
"importe": 50000.0,
...
},
"filename": "cheque.jpg"
}Health check del servicio.
Response:
{
"status": "healthy",
"service": "data-entry-bot-api",
"version": "1.0.0"
}Usuario envía foto/PDF
↓
Bot recibe archivo
↓
API /upload procesa
↓
Detección automática de cheques
↓
Gemini 2.5 LLM analiza y extrae datos con razonamiento
↓
BCRA valida CUIT (si está disponible)
↓
Bot muestra resultados en formato comanda
↓
Múltiples cheques se muestran individualmente
TelegramBot: Maneja interacciones con usuariosGeminiClient: Procesa imágenes con Gemini 2.5 LLM usando razonamiento avanzadoBCRAClient: Valida información crediticiaChequesProcessor: Orquesta el procesamiento de chequesFastAPI Routes: Endpoints REST para procesamiento
src/app/core/: Configuración y modelos basesrc/app/api/: Endpoints de la APIsrc/app/bot/: Lógica del bot de Telegramsrc/app/services/: Clientes de servicios externossrc/app/utils/: Utilidades compartidas
- Crear modelo en
src/app/core/models.py - Agregar procesador en
src/app/services/ - Actualizar
src/app/api/routes.py - Actualizar
src/app/bot/bot.pypara manejar el nuevo tipo
# Próximamente
pytest# Construir imagen
docker build -f docker/Dockerfile -t dataentrybot:latest .
# Ejecutar contenedor
docker run -d \
--name dataentrybot \
-p 8000:8000 \
--env-file .env \
dataentrybot:latestEl proyecto está optimizado para servicios cloud como Render:
✅ Procesamiento en memoria: Los archivos se procesan directamente en memoria, no se guardan en disco ✅ Sin dependencias de sistema de archivos: Compatible con sistemas de archivos efímeros ✅ Configuración simple: Solo necesitas las variables de entorno ✅ Archivo render.yaml incluido: Configuración lista para usar
Opción 1: Usando render.yaml (Recomendado)
- Conectar tu repositorio de GitHub a Render
- Crear un nuevo Blueprint en Render
- Seleccionar el archivo
render.yamldel repositorio - Configurar variables de entorno en Render Dashboard:
TELEGRAM_BOT_TOKEN(requerido)GEMINI_API_KEY(requerido)GEMINI_MODEL(opcional, default:gemini-2.5-flash)BCRA_MOCK_MODE=true(ofalsesi tienes API key real)
- Render creará automáticamente:
- Un Web Service para la API
- Un Background Worker para el Bot
Opción 2: Configuración Manual
Para el API Service (Web Service):
- Crear un nuevo Web Service en Render
- Conectar tu repositorio de GitHub
- Configurar:
- Build Command:
pip install -r requirements.txt - Start Command:
uvicorn src.app.main:app --host 0.0.0.0 --port $PORT
- Build Command:
- Variables de entorno:
TELEGRAM_BOT_TOKENGEMINI_API_KEYGEMINI_MODEL(opcional)BCRA_MOCK_MODE=trueLOG_LEVEL=INFO
Para el Bot Service (Background Worker):
- Crear un nuevo Background Worker en Render
- Conectar el mismo repositorio de GitHub
- Configurar:
- Build Command:
pip install -r requirements.txt - Start Command:
python -m src.app.bot
- Build Command:
- Variables de entorno:
TELEGRAM_BOT_TOKEN(mismo que el API)GEMINI_API_KEY(mismo que el API)GEMINI_MODEL(opcional)API_BASE_URL(URL del API Service de Render, ej:https://dataentrybot-api.onrender.com)BCRA_MOCK_MODE=trueLOG_LEVEL=INFO
Notas importantes:
- Render asigna un puerto dinámico en
$PORTpara Web Services - El API Service debe estar disponible públicamente para que el Bot pueda conectarse
- Usa la URL completa del API Service (con
https://) enAPI_BASE_URLdel Bot - Los archivos se procesan en memoria, no se requiere almacenamiento persistente
- Configurar dominio y SSL
- Configurar
API_BASE_URLcon la URL de producción (con HTTPS) - Configurar
BCRA_MOCK_MODE=falsesi usas API real - Configurar logging apropiado
- Usar un servidor WSGI/ASGI como Gunicorn con Uvicorn workers
- Usar Docker Compose para facilitar el despliegue (ver
docker/docker-compose.yml)
- Verifica que el token de Telegram sea correcto
- Asegúrate de que el bot esté corriendo
- Revisa los logs para errores
- Verifica que la API Key de Gemini sea válida
- Revisa que la imagen sea válida y no esté corrupta
- Verifica los límites de la API de Gemini
- Verifica que
API_BASE_URLsea correcta (debe incluirhttps://en producción) - Asegúrate de que la API esté accesible públicamente
- Revisa los logs del bot para ver errores de conexión
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto es una demo profesional para roles administrativos y automatización de data entry.
Sebastián López
- GitHub: @sebastianjlopez
- Repositorio: dataentrybot
⭐ Si este proyecto te resultó útil, considera darle una estrella ⭐