Servicio de generación de leads desde Gmail usando Vertex AI y Airtable.
mfs-lead-generation-ai/
├── index.js # Punto de entrada principal
├── config.js # Configuración centralizada
├── package.json
├── Dockerfile
├── services/
│ ├── gmail.js # Cliente y operaciones de Gmail
│ ├── vertex.js # Clasificación con Vertex AI
│ ├── airtable.js # Operaciones con Airtable
│ ├── storage.js # Operaciones con GCS
│ ├── secrets.js # Gestión de secretos
│ └── processor.js # Procesador de mensajes
├── handlers/
│ ├── pubsub.js # Handler de Pub/Sub
│ └── debug.js # Endpoints de debug
└── utils/
└── helpers.js # Utilidades y helpers
- ✅ Procesa solo correos de INBOX
- ✅ Cola controlada por Gmail History + locks en GCS
- ✅ Vertex AI 2.x con fallbacks automáticos
- ✅ Backoff anti-429
- ✅ Lock en GCS por messageId para evitar duplicados
- ✅ Endpoints de debug
- ✅ Handler de Pub/Sub para notificaciones Gmail
# GCP
GOOGLE_CLOUD_PROJECT=tu-proyecto
VERTEX_LOCATION=us-central1
VERTEX_MODEL=gemini-3.0-flash
GCS_BUCKET=tu-bucket
# Gmail
GMAIL_ADDRESS=tu-email@gmail.com
AUTH_MODE=oauth # o 'dwd' para domain-wide delegation
# Pub/Sub
PUBSUB_TOPIC=mfs-gmail-leads
# Airtable
AIRTABLE_BASE_ID=tu-base-id
AIRTABLE_TABLE=nombre-tabla
AIRTABLE_TOKEN_SECRET=AIRTABLE_API_KEY
# Opcional
RESET_ON_START=false
SKIP_VERTEX=false
SKIP_AIRTABLE=false
DEBUG_SCAN_MAX=20npm install
npm startEl proyecto está listo para desplegarse en Cloud Run con Node.js 22.
gcloud run deploy mfs-lead-generation-ai \
--source . \
--region us-central1 \
--platform managed \
--allow-unauthenticatedpython cloud_run_manager.py us-central1 mfs-lead-generation-ai ./mfs-lead-generation-aiGET /healthz- Health checkGET /vertex/status- Estado de Vertex AIPOST /reset- Reinicia watch e historyIdPOST /watch- Configura watch de GmailPOST /_pubsub- Handler de notificaciones Pub/SubGET /debug/labels- Lista etiquetas de GmailGET /debug/msg?id=...- Info de un mensajePOST /debug/scan- Escanea INBOX (backup)
- Modularización: Código separado en servicios y handlers
- Configuración centralizada: Todo en
config.js - Manejo de errores mejorado: Logs estructurados
- Optimizaciones: Imports estáticos, menos duplicación
- Mantenibilidad: Código más legible y organizado