Sistema multi-agente de logística familiar.
Recibe mensajes de WhatsApp, entiende la intención y actúa: agenda eventos, calcula tiempos de viaje reales y gestiona la lista de compras.
WhatsApp → Twilio Webhook → FastAPI
│
Intake Agent (LangGraph)
┌─────┴──────────────────────────┐
Schedule Agent Logistics Agent Shopping Agent
(Google Cal) (Google Maps) (Supabase)
└───────────────────────────────-┘
│
WhatsApp push (Twilio)
| Agente | Estado | Descripción |
|---|---|---|
| Intake | ✅ Implementado | Recibe mensajes, clasifica intención con LLM (GPT-4o-mini), extrae entidades y rutea |
| Shopping | ✅ Básico | Agrega y lista items en Supabase |
| Schedule | 🟡 En evolución | Crea, modifica y elimina eventos en Google Calendar (incluye soporte para eventos recurrentes) |
| Logistics | 🔜 Stub | Calcula tiempo de viaje real con Maps y manda alertas proactivas |
- Python 3.11+
- LangGraph – orquestación de agentes
- FastAPI + Uvicorn – servidor webhook
- Twilio – WhatsApp in/out
- OpenAI GPT-4o-mini – LLM para el Intake Agent
- Supabase (PostgreSQL) – persistencia
- Google Calendar API – calendario familiar
- Google Maps Directions API – tiempos de viaje con tráfico real
git clone https://github.com/sqlnova/famapp
cd famapp
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txtcp .env.example .env
# Editar .env con tus keysEjecutar db/migrations/001_initial.sql en el SQL editor de tu proyecto Supabase.
- Crear proyecto en Google Cloud Console
- Habilitar Calendar API y Maps Directions API
- Descargar
credentials.json→credentials/google_credentials.json - Primera vez: correr el flujo OAuth2 para generar
credentials/google_token.json
- Crear cuenta Twilio y activar WhatsApp Sandbox (o número dedicado)
- Configurar el webhook apuntando a:
https://tu-dominio.com/webhook/whatsapp - Para desarrollo local usar ngrok:
ngrok http 8000
python main.pypytest tests/ -vfamapp/
├── agents/
│ ├── intake/ # LangGraph graph – clasificación y ruteo
│ │ ├── graph.py
│ │ ├── nodes.py
│ │ ├── state.py
│ │ └── tools.py
│ ├── schedule/ # Google Calendar (stub)
│ ├── logistics/ # Google Maps + alertas proactivas (stub)
│ └── shopping/ # Lista de compras Supabase
├── core/
│ ├── config.py # Settings con pydantic-settings
│ ├── models.py # Modelos Pydantic compartidos
│ ├── supabase_client.py
│ └── whatsapp.py # Twilio wrapper
├── db/
│ └── migrations/
│ └── 001_initial.sql
├── server/
│ └── webhook.py # FastAPI app
├── tests/
│ └── test_intake.py
├── main.py
├── requirements.txt
└── .env.example
- Implementar Schedule Agent con Google Calendar API
- Implementar Logistics Agent con Google Maps + alertas cron
- APScheduler para polling proactivo de eventos
- Soporte multimedia (fotos de tickets, etc.)
La app web autenticada está en /app y usa Supabase Auth para login.
python main.py
# abrir http://localhost:8000/appMódulos incluidos:
- Inicio (resumen diario accionable)
- Agenda (Hoy/Semana/Mes)
- Compras (pendientes/comprados + alta rápida)
- Rutinas familiares (crear/editar)
- Más/Configuración (familia + lugares)
- Ejecutar migraciones nuevas (
db/migrations/014_mobile_capture.sql). - Nuevos endpoints autenticados en
/app/api/captures:POST /api/capturesGET /api/capturesGET /api/captures/:idPOST /api/captures/:id/processPOST /api/captures/:id/confirmPOST /api/captures/:id/discard
- Registro de push token:
POST /api/push/register.
cd mobile
npm install
EXPO_PUBLIC_API_URL=http://localhost:8000 npx expo startOPENAI_API_KEYAPP_TIMEZONE=America/Argentina/Buenos_AiresEXPO_PUBLIC_API_URL
core/capture_agent.py implementa extracción estructurada (eventos/tareas/recordatorios) con structured_output de LangChain/OpenAI y fallback heurístico.
Se deja preparado:
- storage de
push_tokens - tabla
capture_reminders - generación de reminders al confirmar capturas
Twilio se mantiene para webhook de WhatsApp, pero captura inteligente corre por API web/mobile sin depender del canal WhatsApp.