Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
dc9db54
feat: Mundo Bot - agente WhatsApp con IA personalizado
Oskelias Mar 28, 2026
63d8df3
refactor: soporte para múltiples agentes en un solo repo
Oskelias Mar 28, 2026
1e1f6f1
docs: guía para agregar nuevos agentes
Oskelias Mar 28, 2026
cc07698
feat: FASE 2 - Sistema de filtros inteligentes por tipo de pregunta
Oskelias Mar 28, 2026
10d2139
feat: FASE 3 - Sistema de base de datos de precios
Oskelias Mar 28, 2026
f6f741e
feat: FASE 4 - Integración con Google Calendar para citas
Oskelias Mar 28, 2026
7b3a88a
feat(phase5): Sistema de tickets de soporte y reparación
Oskelias Mar 28, 2026
b8c10a6
feat: Admin Dashboard para gestionar tickets
Oskelias Mar 28, 2026
dd65b1b
refactor: Cambiar a modo multi-cliente para Google Calendar
Oskelias Mar 28, 2026
3218be9
config: Configurar calendar_id para mundo-electronico
Oskelias Mar 28, 2026
95c12ed
fix: Mejorar instrucciones de tag [CITA] para clarity absoluta
Oskelias Mar 28, 2026
9eb8bd5
fix: Simplificar formato del tag [CITA] a instrucción literal
Oskelias Mar 28, 2026
b187dea
fix: Aceptar ambos formatos de tag [CITA] en procesar_cita_si_existe
Oskelias Mar 28, 2026
1345093
fix: Generar tag [CITA] automáticamente sin esperar confirmación
Oskelias Mar 28, 2026
1b89d74
fix: Test local procesa tag [CITA] en ambos formatos
Oskelias Mar 28, 2026
30dfc2e
fix: Aceptar contacto o telefono en tag [CITA] JSON
Oskelias Mar 28, 2026
ac98897
fix: Hacer parser de tag [CITA] mucho más flexible
Oskelias Mar 28, 2026
30ae7ba
fix: Hacer OBLIGATORIO que Claude genere tag [CITA]
Oskelias Mar 28, 2026
22157ba
feat: Fallback para extraer datos de cita sin tag
Oskelias Mar 28, 2026
3c75d94
fix: Mejorar fallback extraction para datos de confirmación
Oskelias Mar 28, 2026
85182c0
fix: Arreglar error de patron_json no definido
Oskelias Mar 28, 2026
dbfc190
feat(supabase): integración centralizada con Supabase para RIWEB.APP
Oskelias Mar 28, 2026
707b52c
refactor(admin): conectar dashboard a Supabase en lugar de SQLite
Oskelias Mar 28, 2026
836e348
docs: arquitectura final — AgentKit + RIWEB.APP con Supabase centrali…
Oskelias Mar 28, 2026
a89f338
docs: estructura comercial completa de RIWEB.APP
Oskelias Mar 29, 2026
c141451
feat(supabase): agregar funciones para planes, pagos y extras
Oskelias Mar 29, 2026
38b4a30
docs: informe completo de implementación Marzo 2026
Oskelias Mar 29, 2026
43d5f1f
feat(payments): integración Mercado Pago y Stripe
Oskelias Mar 31, 2026
879b221
feat: CLIENT_ID en .env para conectar bot con Supabase + auto-registr…
claude Apr 4, 2026
29b19bf
fix: soportar ID_DE_CLIENTE como alias de CLIENT_ID para Railway
claude Apr 4, 2026
ef0a6fb
fix: soportar CLAVE_API_ANTROPICA como alias de ANTHROPIC_API_KEY par…
claude Apr 4, 2026
60b2b84
docs: agregar seccion 8 - integracion con RIWEB.APP dashboard
claude Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,14 @@
"Write",
"Edit",
"Glob",
"Grep"
"Grep",
"Bash(curl:*)",
"Bash(cat:*)",
"WebFetch(domain:github.com)",
"mcp__claude_ai_Supabase__list_tables",
"mcp__claude_ai_Supabase__apply_migration",
"Bash(npm run:*)",
"WebFetch(domain:dash.cloudflare.com)"
]
}
}
22 changes: 22 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,25 @@ ENVIRONMENT=development
DATABASE_URL=sqlite+aiosqlite:///./agentkit.db
# Produccion (PostgreSQL en Railway):
# DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/dbname

# ── Supabase (para integración con RIWEB.APP) ────────────
# Obtener URL y KEY en: supabase.com → tu proyecto → Settings → API
SUPABASE_URL=
SUPABASE_KEY=
# CLIENT_ID: UUID del cliente en la tabla "clients" de Supabase
# Lo encontrás en RIWEB.APP → Dashboard → Clientes → copiar el ID del cliente
CLIENT_ID=

# ── Mercado Pago (pagos en Argentina) ──────────────────────
# Obtener en: https://www.mercadopago.com.ar/developers/panel
# Modo Prueba (Sandbox):
MERCADO_PAGO_ACCESS_TOKEN=

# ── Stripe (pagos internacionales) ──────────────────────────
# Obtener en: https://dashboard.stripe.com/apikeys
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=

# ── URLs ─────────────────────────────────────────────────────
# URL pública del servidor (para webhooks de pago)
APP_URL=https://tu-railway.up.railway.app
10 changes: 3 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*.db
*.sqlite
*.sqlite3
data/

# Python
__pycache__/
Expand All @@ -21,13 +22,8 @@ build/
knowledge/*
!knowledge/.gitkeep

# Archivos generados por Claude Code durante onboarding
agent/
config/
tests/
requirements.txt
Dockerfile
docker-compose.yml
# Nota: agent/, config/, tests/, requirements.txt, Dockerfile y docker-compose.yml
# AHORA se suben a GitHub para que Railway haga el deploy automático

# Session state
config/session.yaml
Expand Down
Empty file added =2.0.0
Empty file.
158 changes: 158 additions & 0 deletions ADMIN_DASHBOARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# Admin Dashboard — Gestión de Tickets

## ¿Qué es?

Una interfaz web donde el dueño del negocio puede:
- ✅ Ver TODOS los tickets de reparación
- ✅ Ver estado en tiempo real (abierto, en progreso, completado, cerrado)
- ✅ Cambiar estado con un dropdown
- ✅ Agregar notas sobre el progreso
- ✅ Ver fechas de creación y última actualización
- ✅ Estadísticas rápidas (total, abiertos, en progreso, completados)

## Acceso

**URL:** `https://tu-app.railway.app/admin`

**Contraseña:** Definida en `ADMIN_PASSWORD` (default: `admin123`)

Cambiar en `.env`:
```env
ADMIN_PASSWORD=tu-contraseña-segura
```

## Características

### 1. Login
```
Entra a /admin
Sistema pide contraseña
Si es correcta, sesión por 7 días (cookie httponly)
```

### 2. Dashboard principal

```
📊 Estadísticas:
• Total de Tickets
• Abiertos
• En Progreso
• Completados

📋 Tabla de tickets:
• Ticket # | Cliente | Dispositivo | Problema | Estado | Creado | Acciones
```

### 3. Cambiar estado

Simplemente selecciona el nuevo estado en el dropdown:
```
🆕 Abierto → ⚙️ En progreso → ✅ Completado → ✓ Cerrado
```

Se guarda automáticamente y se muestra un confirmación.

### 4. Agregar notas

Click en botón "Notas" para abrir modal:
```
┌─────────────────────────────────────┐
│ Notas para MER-20260328-001 │
├─────────────────────────────────────┤
│ [textarea] │
│ Agregar cualquier actualización │
│ sobre el progreso de la reparación │
├─────────────────────────────────────┤
│ [Cancelar] [Guardar] │
└─────────────────────────────────────┘
```

Las notas se guardan con timestamp automático:
```
[2026-03-29 14:00] Se está realizando cambio de pantalla
[2026-03-29 15:30] Pantalla reemplazada, probando funcionamiento
```

## Ejemplo de flujo

```
1. Cliente agenda cita por WhatsApp
→ Sistema crea ticket: MER-20260328-001

2. Dueño entra a /admin
→ Ve ticket nuevo en "Abierto"

3. Técnico inicia reparación
→ Dueño cambia estado a "En progreso"
→ Sistema notifica al cliente (futuro)

4. Se termina la reparación
→ Dueño cambia a "Completado"
→ Dueño agrega nota: "Pantalla reemplazada. Listo para retirar mañana 14:00"

5. Cliente pregunta por WhatsApp: "¿Está listo?"
→ Bot responde: "Sí! Tu iPhone está completado. Podes pasar mañana a las 14:00."
```

## Seguridad

- ✅ Contraseña protegida (ADMIN_PASSWORD en .env)
- ✅ Sesión por cookie httponly (7 días)
- ✅ Solo cambios autenticados
- ✅ No expone API keys o datos sensibles

## Styling

El dashboard tiene:
- Gradiente moderno (púrpura)
- Responsive (funciona en mobile)
- Dropdowns de estado con colores (rojo=abierto, azul=progreso, verde=completado, gris=cerrado)
- Modal elegante para notas
- Loading visual
- Mensajes de confirmación

## Archivos modificados

### agent/admin.py (nuevo)
- Ruta GET `/admin` — dashboard HTML
- Ruta POST `/admin/login` — validar contraseña
- Ruta POST `/admin/actualizar` — cambiar estado/notas
- Función `obtener_todos_los_tickets()` — query a BD
- Función `generar_html_dashboard()` — HTML + CSS + JS

### agent/main.py
- Agregar import: `from agent.admin import admin_router`
- Incluir router: `app.include_router(admin_router)`

### .env
- Nueva variable: `ADMIN_PASSWORD=admin123`

## Deploy a producción

En Railway ya está incluido. Solo:

1. Cambiar contraseña en Railway variables:
```
ADMIN_PASSWORD = tu-contraseña-fuerte-aqui
```

2. Acceder a: `https://tu-app.railway.app/admin`

3. Login con la contraseña

4. ¡Usa el dashboard!

## Próximas mejoras

- [ ] Exportar tickets a CSV
- [ ] Filtrar por estado/cliente
- [ ] Búsqueda por nombre o ticket #
- [ ] Notificaciones automáticas al cliente cuando cambia estado
- [ ] Historial de quién cambió qué y cuándo
- [ ] Integración con WhatsApp (enviar mensajes directamente desde dashboard)

---

**Dashboard listo para usar.** No requiere configuración adicional.
Loading