Initial commit: SKEEN Derma Experts - Sistema Integral de Gestión Clínica
- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind - Frontend Homenest (versión alternativa) - Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp) - WACRM fork (Next.js 16 + Supabase) - Hermes + Bridge + Skills (Qwen3.6 via Nan Builders) - Scripts de migración y operación - Documentación extensiva en docs/
This commit is contained in:
759
hermes/docs/ROADMAP_SKEEN_HERMES.md
Normal file
759
hermes/docs/ROADMAP_SKEEN_HERMES.md
Normal file
@@ -0,0 +1,759 @@
|
||||
# ROADMAP SKEEN Derma Experts: WACRM + Hermes + Odoo
|
||||
|
||||
## Arquitectura Tecnica Actualizada | Reemplazo Twilio → WACRM | FastAPI → Hermes
|
||||
|
||||
**Consultoria Alcaraz Salazar, S.A.S.**
|
||||
**5 de julio de 2026**
|
||||
|
||||
---
|
||||
|
||||
## Tabla de Contenidos
|
||||
|
||||
1. Comparativa: Arquitectura Original vs Nueva
|
||||
2. Arquitectura Detallada con WACRM + Hermes
|
||||
3. Stack Tecnologico Actualizado
|
||||
4. Estructura de Proyecto Actualizada
|
||||
5. Skills de Hermes para SKEEN
|
||||
6. Integraciones Detalladas
|
||||
7. Configuracion de WACRM
|
||||
8. Configuracion de Hermes
|
||||
9. Roadmap Actualizado por Fase
|
||||
10. Ventajas y Desventajas de esta Arquitectura
|
||||
11. Requisitos del Cliente (Actualizados)
|
||||
12. Presupuesto de Infraestructura Actualizado
|
||||
|
||||
---
|
||||
|
||||
## 1. Comparativa: Arquitectura Original vs Nueva
|
||||
|
||||
### 1.1 Tabla Comparativa General
|
||||
|
||||
| Componente | Arquitectura ORIGINAL | Arquitectura NUEVA (WACRM + Hermes) | Justificacion |
|
||||
|------------|----------------------|-------------------------------------|---------------|
|
||||
| WhatsApp Gateway | Twilio API ($0.005/msg) + webhook custom | WACRM + Meta WhatsApp Cloud API directo | Sin intermediario, inbox nativo, costo solo Meta fees (~$0.003-0.008/msg) |
|
||||
| Inbox / CRM | Inbox custom en React (a construir) | WACRM shared inbox (listo) | Inbox multi-agente con asignacion, notas internas, Kanban pipelines, broadcast — sin desarrollo |
|
||||
| Backend IA | FastAPI custom + GPT-4o directo | Hermes gateway + skills (SKILL.md) | Agente autonomo con 25+ tools, memoria persistente SQLite, cron nativo, multi-model, subagentes |
|
||||
| Agente "Sofia" | API endpoint REST stateless | Agente autonomo Hermes con contexto | Memoria persistente, proactive (cron), skills modulares, handoff a humano, context compression |
|
||||
| Pipelines de ventas | A construir en Odoo/Odoo + custom | WACRM Kanban pipelines nativos | Drag-drop, deals vinculados a conversaciones, win-rate analytics |
|
||||
| Base de datos CRM | PostgreSQL custom | Supabase (PostgreSQL + RLS + Auth) | Auth built-in, Row-Level Security, Realtime subscriptions, Storage |
|
||||
| Automatizaciones | Codigo custom en FastAPI | WACRM no-code automations + Hermes skills | Visual builder (Figma-like) + agente IA con razonamiento |
|
||||
| Broadcasts | Twilio API custom | WACRM broadcasts con templates Meta | Templates aprobados por Meta, delivery tracking, segmentacion |
|
||||
| Contactos / Leads | Tabla custom en PostgreSQL | WACRM contacts + tags + custom fields | Deduplicacion automatica, CSV import, tags, campos custom |
|
||||
| AI Assistant | GPT-4o directo via API | WACRM AI Assistant (BYOK) + Hermes skills | Draft replies, auto-reply bot, knowledge base, handoff a humano |
|
||||
| Costo mensual infra | ~$150-250 USD/mes | ~$80-150 USD/mes | WACRM es MIT (gratis), Hermes es MIT (gratis), solo hosting + API fees |
|
||||
| Tiempo de desarrollo inbox | ~2 semanas | ~0 dias (listo) | WACRM inbox funcional dia 1 post-configuracion |
|
||||
| Tiempo de desarrollo agente IA | ~3 semanas | ~1 semana (skills + config) | Hermes ya tiene tools, memoria, gateway, cron — solo configurar skills |
|
||||
|
||||
### 1.2 Diferencias Clave por Dimension
|
||||
|
||||
| Dimension | Original | Nueva | Impacto |
|
||||
|-----------|----------|-------|---------|
|
||||
| Complejidad de codigo | Alto (inbox + agente + CRM desde cero) | Medio (solo skills + integraciones) | ~60% menos codigo custom |
|
||||
| Mantenimiento | Equipo propio mantiene todo | Comunidad open-source mantiene WACRM/Hermes | Menos deuda tecnica |
|
||||
| Escalabilidad | Manual | WACRM escala con Supabase; Hermes con gateway | Mejor arquitectura cloud-native |
|
||||
| Vendor lock-in | Twilio (API propietaria) | Meta Cloud API (estandar) + MIT code | Codigo propio, migrable |
|
||||
| Onboarding de agentes | Desarrollo custom | WACRM invita por link, roles nativos | Minutos vs dias |
|
||||
| Analytics | A construir | WACRM dashboard real-time nativo | Disponible dia 1 |
|
||||
| Subagentes | No disponible | Sí — delegacion aislada con terminal propio | Tareas paralelas sin costo de contexto |
|
||||
| Fallback providers | No disponible | Sí — cadena de failover automatico | Mayor resiliencia |
|
||||
| Context compression | No disponible | Sí nativo — hasta 50% de ventana | Manejo de conversaciones largas |
|
||||
| Credential pools | No disponible | Sí — rotacion de API keys | Mayor tolerancia a rate limits |
|
||||
|
||||
### 1.3 Mapa de Reemplazo de Componentes
|
||||
|
||||
```
|
||||
Twilio API ──────────────→ Meta WhatsApp Cloud API (via WACRM)
|
||||
Twilio webhooks ─────────→ WACRM webhooks (/api/v1/webhooks)
|
||||
Inbox React custom ──────→ WACRM shared inbox (Next.js 16 App Router)
|
||||
FastAPI backend ─────────→ Hermes gateway (Python daemon)
|
||||
GPT-4o directo ──────────→ Hermes agent runtime (multi-model + fallback)
|
||||
PostgreSQL CRM ──────────→ Supabase PostgreSQL + RLS
|
||||
Automatizaciones code ───→ WACRM no-code automations + Hermes skills + cron
|
||||
Dashboard analytics ─────→ WACRM dashboard real-time
|
||||
Contact management ──────→ WACRM contacts + tags + pipelines
|
||||
OpenClaw gateway ────────→ Hermes gateway (Python, mas plataformas nativas)
|
||||
OpenClaw heartbeat ───────→ Hermes cron nativo (mas flexible)
|
||||
OpenClaw skills ─────────→ Hermes skills (compatible agentskills.io)
|
||||
OpenClaw memory MD ──────→ Hermes SQLite + MEMORY.md + plugins
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Arquitectura Detallada con WACRM + Hermes
|
||||
|
||||
### 2.1 Diagrama de Componentes Completo
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ LAYER: PACIENTE │
|
||||
│ WhatsApp Business (telefono SKEEN) ─── App movil del paciente │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼ Meta Cloud API (HTTPS webhook)
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ LAYER: WACRM (CRM) │
|
||||
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ WACRM — Next.js 16 + Supabase PostgreSQL │ │
|
||||
│ │ Puerto: 3000 (interno) / HTTPS via Nginx │ │
|
||||
│ │ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │ │
|
||||
│ │ │ Shared Inbox │ │ Contacts │ │ Sales Pipelines (Kanban)│ │ │
|
||||
│ │ │ Multi-agente │ │ + Tags + │ │ Deals → Conversaciones │ │ │
|
||||
│ │ │ Asignacion │ │ Custom Fields│ │ Win-rate analytics │ │ │
|
||||
│ │ └──────────────┘ └──────────────┘ └──────────────────────────┘ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │ │
|
||||
│ │ │ Broadcasts │ │ Automations │ │ AI Assistant (BYOK) │ │ │
|
||||
│ │ │ Templates │ │ No-code │ │ OpenAI/Anthropic key │ │ │
|
||||
│ │ │ Meta │ │ Triggers │ │ Auto-reply + Handoff │ │ │
|
||||
│ │ └──────────────┘ └──────────────┘ └──────────────────────────┘ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │ │
|
||||
│ │ │ Dashboard │ │ Flows │ │ Templates Manager │ │ │
|
||||
│ │ │ Real-time │ │ Chatbots │ │ Meta approval sync │ │ │
|
||||
│ │ └──────────────┘ └──────────────┘ └──────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ API REST PUBLICA: /api/v1 │ │
|
||||
│ │ ├── POST /messages (enviar WhatsApp) │ │
|
||||
│ │ ├── GET /contacts (listar contactos) │ │
|
||||
│ │ ├── POST /contacts (crear/find-or-create) │ │
|
||||
│ │ ├── GET /conversations (listar conversaciones) │ │
|
||||
│ │ ├── GET /conversations/:id/messages (thread) │ │
|
||||
│ │ ├── POST /broadcasts (campaña broadcast) │ │
|
||||
│ │ ├── POST /webhooks (registrar webhook outbound) │ │
|
||||
│ │ └── GET /me (info cuenta + scopes) │ │
|
||||
│ │ │ │
|
||||
│ │ Webhooks outbound (a Hermes): │ │
|
||||
│ │ ├── message.received (nuevo mensaje) │ │
|
||||
│ │ ├── message.status_updated (delivery/read) │ │
|
||||
│ │ └── conversation.created (nueva conversacion) │ │
|
||||
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌──────────────────┼──────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────────────────────┐ ┌─────────────────┐ ┌──────────────────────────┐
|
||||
│ LAYER: Hermes │ │ LAYER: Odoo 17 │ │ LAYER: Frontend React │
|
||||
│ (Agente IA "Sofia") │ │ (Backend ERP) │ │ (app.skeen.mx) │
|
||||
│ │ │ │ │ │
|
||||
│ Gateway Python │ │ Modulos: │ │ Dashboard clinicos │
|
||||
│ Puerto: 8080 (HTTP) │ │ ├── Pacientes │ │ Agenda citas │
|
||||
│ + WS API (cron) │ │ ├── Citas │ │ Monedero digital │
|
||||
│ Daemon (systemd) │ │ ├── Historial │ │ Pagos (Stripe/MP) │
|
||||
│ │ │ ├── Inventario │ │ Reportes │
|
||||
│ ┌──────────────────┐ │ │ ├── POS │ │ │
|
||||
│ │ Agent Runtime │ │ │ ├── Monedero │ │ Auth: Odoo JWT │
|
||||
│ │ ├─ SOUL.md │ │ │ └── Website │ │ API: Odoo REST + │
|
||||
│ │ ├─ AGENTS.md │ │ │ │ │ WACRM REST │
|
||||
│ │ ├─ SKILL.md (5) │ │ │ API REST XML/ │ │ │
|
||||
│ │ ├─ MEMORY.md │ │ │ JSON (custom) │ │ Puerto: 5173 (dev) │
|
||||
│ │ └─ SQLite state │ │ │ │ │ 80/443 (prod) │
|
||||
│ └──────────────────┘ │ └─────────────────┘ └──────────────────────────┘
|
||||
│ │
|
||||
│ ┌──────────────────┐ │
|
||||
│ │ Cron (nativo) │ │
|
||||
│ │ ├─ Recordatorios│ │
|
||||
│ │ ├─ Follow-ups │ │
|
||||
│ │ └─ Re-engagement│ │
|
||||
│ └──────────────────┘ │
|
||||
│ │
|
||||
│ ┌──────────────────┐ │
|
||||
│ │ Tools Built-in │ │
|
||||
│ │ ├─ web_search │ │
|
||||
│ │ ├─ web_fetch │ │
|
||||
│ │ ├─ exec (python)│ │
|
||||
│ │ ├─ shell │ │
|
||||
│ │ ├─ browser │ │
|
||||
│ │ └─ file R/W │ │
|
||||
│ └──────────────────┘ │
|
||||
│ │
|
||||
│ ┌──────────────────┐ │
|
||||
│ │ Custom Plugins │ │
|
||||
│ │ ├─ odoo_api_call│ │
|
||||
│ │ ├─ wacrm_send │ │
|
||||
│ │ └─ calendar_check│ │
|
||||
│ └──────────────────┘ │
|
||||
│ │
|
||||
│ ┌──────────────────┐ │
|
||||
│ │ API Server │ │
|
||||
│ │ /v1/chat/completions│ │
|
||||
│ │ /api/jobs (cron)│ │
|
||||
│ └──────────────────┘ │
|
||||
└───────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 Flujo de Datos Paso a Paso
|
||||
|
||||
#### FLUJO 1: Primera vez que un paciente escribe por WhatsApp
|
||||
|
||||
```
|
||||
[1] Paciente envia "Hola, quiero agendar una cita" por WhatsApp
|
||||
│
|
||||
▼
|
||||
[2] Meta WhatsApp Cloud API recibe el mensaje
|
||||
│
|
||||
▼
|
||||
[3] Meta envia webhook HTTPS a WACRM: POST /api/whatsapp/webhook
|
||||
│
|
||||
▼
|
||||
[4] WACRM procesa:
|
||||
- Crea/actualiza contacto (telefono, nombre si disponible)
|
||||
- Crea conversacion en inbox
|
||||
- Almacena mensaje en Supabase
|
||||
- Dispara trigger de automatizacion ("Nuevo mensaje")
|
||||
│
|
||||
├──► WACRM AI Assistant (opcional, si auto-reply activo)
|
||||
│
|
||||
└──► Webhook outbound a Hermes: POST http://hermes:8080/webhook/wacrm
|
||||
│
|
||||
▼
|
||||
[5] Hermes Gateway recibe webhook via HTTP endpoint custom
|
||||
- Parsea payload: { event: "message.received", data: { from, text, conversation_id } }
|
||||
- Inicia/continua sesion para ese contacto (SQLite session store)
|
||||
- Inyecta skills relevantes al contexto
|
||||
│
|
||||
▼
|
||||
[6] Hermes Agent Runtime procesa con LLM (GPT-4o):
|
||||
- Lee skills: skeen-rag.md (catalogo) + skeen-agendar.md (citas)
|
||||
- Detecta intencion: "agendar_cita"
|
||||
- Consulta disponibilidad via plugin odoo_api_call
|
||||
│
|
||||
▼
|
||||
[7] Hermes → Odoo API (XML-RPC/JSON-RPC):
|
||||
- Consulta slots disponibles del dermatologo
|
||||
- Recibe: ["2026-07-05 10:00", "2026-07-05 14:00", "2026-07-06 09:00"]
|
||||
│
|
||||
▼
|
||||
[8] Hermes formatea respuesta y envia a WACRM:
|
||||
POST /api/v1/messages
|
||||
{ "to": "+526641234567", "type": "text",
|
||||
"text": "Hola! Soy Sofia de SKEEN. Puedo agendarte para:
|
||||
1. Sab 5 jul 10:00 AM
|
||||
2. Sab 5 jul 2:00 PM
|
||||
3. Dom 6 jul 9:00 AM
|
||||
Cual prefieres?" }
|
||||
│
|
||||
▼
|
||||
[9] WACRM envia via Meta Cloud API → WhatsApp → Paciente
|
||||
│
|
||||
▼
|
||||
[10] Respuesta del paciente: "El sabado a las 10"
|
||||
│
|
||||
└──► Repite [2]→[6], Hermes confirma cita
|
||||
└──► Odoo: crea cita + WACRM: envia confirmacion
|
||||
```
|
||||
|
||||
#### FLUJO 2: Confirmacion de cita + Recordatorio automatico
|
||||
|
||||
```
|
||||
[1] Hermes crea la cita en Odoo via odoo_api_call
|
||||
- Modelo: salon.booking (o calendar.event)
|
||||
- Datos: paciente_id, servicio_id, fecha_hora, estado='confirmada'
|
||||
│
|
||||
▼
|
||||
[2] Hermes programa recordatorio via cron nativo:
|
||||
- hermes cron schedule --name "recordatorio-cita-[ID]" \
|
||||
--at "2026-07-04 18:00" \
|
||||
--command "skill skeen-recordatorios --phone +526641234567 --cita 2026-07-05T10:00"
|
||||
│
|
||||
▼
|
||||
[3] Cron de Hermes ejecuta a la hora programada:
|
||||
- Skill skeen-recordatorios se activa
|
||||
- Consulta Odoo: citas para manana (5 jul)
|
||||
- Para cada cita sin recordatorio enviado:
|
||||
└──► WACRM API: POST /api/v1/messages
|
||||
{ "to": "+526641234567", "type": "template",
|
||||
"template": { "name": "recordatorio_cita_skeen",
|
||||
"language": "es_MX",
|
||||
"params": ["Sofia", "5 de julio", "10:00 AM"] } }
|
||||
│
|
||||
▼
|
||||
[4] WACRM envia template aprobado por Meta → WhatsApp → Paciente
|
||||
"Hola Sofia! Te recordamos tu cita manana 5 de julio a las 10:00 AM
|
||||
en SKEEN Derma Experts. Ubicacion: Blvd. Popotla 123, Rosarito."
|
||||
│
|
||||
▼
|
||||
[5] Odoo marca recordatorio como enviado
|
||||
```
|
||||
|
||||
#### FLUJO 3: Pago de cita + Monedero digital
|
||||
|
||||
```
|
||||
[1] Paciente despues de cita: "Quiero pagar mi tratamiento"
|
||||
│
|
||||
▼
|
||||
[2] WACRM → Hermes (webhook message.received)
|
||||
│
|
||||
▼
|
||||
[3] Hermes skill skeen-pagos.md:
|
||||
- Consulta Odoo: citas del paciente + servicios pendientes de pago
|
||||
- Calcula total
|
||||
- Genera link de pago (Stripe Checkout / MercadoPago preference)
|
||||
│
|
||||
▼
|
||||
[4] Hermes responde via WACRM:
|
||||
"Tu tratamiento de Acne Control tiene un saldo de $1,200 MXN.
|
||||
Puedes pagar aqui: [Link Stripe] o [Link MercadoPago]
|
||||
Tambien acumulas 120 puntos en tu monedero SKEEN!"
|
||||
│
|
||||
▼
|
||||
[5] Paciente paga via Stripe/MP
|
||||
│
|
||||
▼
|
||||
[6] Webhook Stripe/MP → Odoo (confirmacion de pago)
|
||||
- Odoo actualiza estado de factura
|
||||
- Odoo acumula puntos en monedero del paciente
|
||||
│
|
||||
▼
|
||||
[7] Hermes cron detecta pago confirmado:
|
||||
- WACRM: envia confirmacion + saldo de monedero
|
||||
"Pago confirmado! Gracias Sofia. Tu monedero SKEEN: 450 puntos
|
||||
(equivalente a $450 MXN). Los puedes usar en tu proxima visita."
|
||||
```
|
||||
|
||||
### 2.3 Diagrama de Secuencia: Agendar Cita Completa
|
||||
|
||||
```
|
||||
Paciente WhatsApp Meta API WACRM Hermes Odoo
|
||||
│ │ │ │ │ │
|
||||
│ "Hola, quiero │ │ │ │ │
|
||||
│ agendar" │ │ │ │ │
|
||||
│─────────────────>│ │ │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ Webhook msg │ │ │ │
|
||||
│ │<───────────────│ │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ POST /webhook │ │
|
||||
│ │ │─────────────>│ │ │
|
||||
│ │ │ │ message.received │
|
||||
│ │ │ │ webhook outbound │
|
||||
│ │ │ │──────────────>│ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ │ │ odoo_api_call│
|
||||
│ │ │ │ │ (slots libres)│
|
||||
│ │ │ │ │─────────────>│
|
||||
│ │ │ │ │ │
|
||||
│ │ │ │ │<─────────────│
|
||||
│ │ │ │ │ ["10:00", │
|
||||
│ │ │ │ │ "14:00"] │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ POST /api/v1/messages │ │
|
||||
│ │ │<─────────────│ │ │
|
||||
│ │ │ (WACRM envia opciones) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ Template msg │ │ │ │
|
||||
│ │<───────────────│ │ │ │
|
||||
│ "Hola! Opciones:│ │ │ │ │
|
||||
│ 1. 10:00..." │ │ │ │ │
|
||||
│<─────────────────│ │ │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ "Opcion 1" │ │ │ │ │
|
||||
│─────────────────>│ │ │ │ │
|
||||
│ │ ... (mismo flujo) ... │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ │ │ odoo_api_call│
|
||||
│ │ │ │ │ (crear cita) │
|
||||
│ │ │ │ │─────────────>│
|
||||
│ │ │ │ │ │
|
||||
│ │ │ POST /api/v1/messages │ │
|
||||
│ │ │<─────────────│ │ │
|
||||
│ │ │ │ │ │
|
||||
│ "Cita confirmada│ │ │ │ │
|
||||
│ para 5 jul 10AM│ │ │ │ │
|
||||
│ con Dra. Ana" │ │ │ │ │
|
||||
│<─────────────────│ │ │ │ │
|
||||
│ │ │ │ │ │
|
||||
```
|
||||
|
||||
### 2.4 Comunicacion entre Componentes
|
||||
|
||||
| De | A | Protocolo | Auth | Payload |
|
||||
|----|---|-----------|------|---------|
|
||||
| Meta API | WACRM | HTTPS webhook | Verify Token HMAC | JSON mensaje |
|
||||
| WACRM | Meta API | HTTPS REST | Bearer Access Token | JSON mensaje/template |
|
||||
| WACRM | Hermes | HTTPS webhook outbound | HMAC-SHA256 signature | JSON evento |
|
||||
| Hermes | WACRM | HTTPS REST | Bearer API Key (wacrm_live_*) | JSON mensaje |
|
||||
| Hermes | Odoo | XML-RPC / JSON-RPC / HTTP | API Key / OAuth | XML/JSON |
|
||||
| Odoo | Frontend | HTTPS REST (CORS) | JWT Token | JSON |
|
||||
| Frontend | WACRM | HTTPS REST | Bearer API Key | JSON (dashboard unificado) |
|
||||
| Hermes | LLM Provider | HTTPS SSE/REST | Bearer API Key | JSON (OpenAI/Anthropic format) |
|
||||
| Hermes | Hermes API | HTTPS REST | Bearer Token | JSON (OpenAI-compatible) |
|
||||
|
||||
---
|
||||
|
||||
## 3. Stack Tecnologico Actualizado
|
||||
|
||||
### 3.1 Tabla Completa de Tecnologias
|
||||
|
||||
#### WACRM (CRM WhatsApp)
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| Framework | Next.js | 16 (App Router) | SSR + API routes + ISR | MIT / Gratis |
|
||||
| UI | React | 19 | Componentes interactivos | MIT / Gratis |
|
||||
| Lenguaje | TypeScript | 5.x | Tipado estatico | OSS / Gratis |
|
||||
| Estilos | Tailwind CSS | v4 | Utility-first CSS | MIT / Gratis |
|
||||
| UI Kit | shadcn/ui + base-ui | latest | Componentes accesibles | MIT / Gratis |
|
||||
| Database | Supabase (PostgreSQL) | 15+ | Datos + Auth + RLS + Realtime | OSS Cloud / ~$25/mes |
|
||||
| Auth | Supabase Auth | built-in | Email/password + JWT | Incluido |
|
||||
| Storage | Supabase Storage | built-in | Avatares + media | Incluido |
|
||||
| WhatsApp | Meta Cloud API | v18.0+ | Mensajeria oficial | Meta fees |
|
||||
| Encriptacion | node:crypto | built-in | AES-256-GCM tokens | built-in |
|
||||
|
||||
#### Hermes (Agente IA)
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| Runtime | Python | 3.11+ | Gateway daemon | OSS / Gratis |
|
||||
| Package | uv / pip | latest | Gestor de paquetes | OSS / Gratis |
|
||||
| Gateway | hermes-agent | 0.14.0+ | Gateway HTTP + WS + API | MIT / Gratis |
|
||||
| Comunicacion | HTTP / WebSocket | RFC 6455 | Gateway ↔ clients | built-in |
|
||||
| Skills | SKILL.md (Markdown) | agentskills.io | Capacidades del agente | MIT / Gratis |
|
||||
| Memory | SQLite + MEMORY.md | - | Memoria persistente + FTS5 search | File system |
|
||||
| Cron | hermes cron | built-in | Tareas programadas | built-in |
|
||||
| LLM Provider | OpenAI GPT-4o | latest | Modelo principal | ~$0.005-0.015/token |
|
||||
| Fallback LLM | Claude 3.5 Sonnet | latest | Fallback / tareas complejas | ~$0.003-0.015/token |
|
||||
| Fallback chain | Hermes nativo | 0.6.0+ | Failover automatico | built-in |
|
||||
| Local LLM | Ollama / LM Studio | 0.4+ / 0.12.0+ | Desarrollo offline | OSS / Gratis |
|
||||
| Context compression | Hermes nativo | built-in | Compresion de contexto | built-in |
|
||||
| Credential pools | Hermes nativo | 0.7.0+ | Rotacion de API keys | built-in |
|
||||
| Subagentes | Hermes delegate | built-in | Tareas aisladas | built-in |
|
||||
| API Server | OpenAI-compatible | 0.4.0+ | /v1/chat/completions | built-in |
|
||||
| TUI | Ink (React) | 0.11.0+ | Interfaz terminal interactiva | built-in |
|
||||
| Plugins | Python files | 0.3.0+ | Custom tools | built-in |
|
||||
| MCP | Model Context Protocol | 0.4.0+ | Integracion MCP | built-in |
|
||||
|
||||
#### Odoo 17 (ERP)
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| ERP | Odoo Community | 17.0 | Backend negocio completo | LGPL / Gratis |
|
||||
| Lenguaje | Python | 3.10+ | Logica de servidor | OSS |
|
||||
| Database | PostgreSQL | 15+ | Datos ERP (compartido con Supabase o separado) | OSS |
|
||||
| Cache | Redis | 7.x | Cache + sessions + queue | BSD / Gratis |
|
||||
| Queue | Celery + Redis | 5.x+ | Tareas asincronas | OSS |
|
||||
|
||||
#### Frontend SKEEN
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| Framework | React | 18 | UI components | MIT / Gratis |
|
||||
| Lenguaje | TypeScript | 5.x | Tipado estatico | OSS |
|
||||
| Build | Vite | 5.x+ | Bundler + dev server | MIT / Gratis |
|
||||
| Estilos | Tailwind CSS | v3+ | Estilos utility-first | MIT / Gratis |
|
||||
| Routing | React Router | v6+ | SPA routing | MIT / Gratis |
|
||||
| HTTP Client | Axios | 1.6+ | Llamadas API | MIT / Gratis |
|
||||
| Estado | Zustand | 4.x+ | State management | MIT / Gratis |
|
||||
| Calendario | react-big-calendar | 1.x+ | Vista agenda citas | MIT |
|
||||
| Charts | Recharts | 2.x+ | Graficos dashboard | MIT |
|
||||
|
||||
#### Infraestructura
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| VPS | Hetzner Cloud | CPX31 | 4 vCPU / 8 GB / 160 GB SSD | ~$15/mes |
|
||||
| OS | Ubuntu Server | 24.04 LTS | Sistema operativo | Gratis |
|
||||
| Proxy | Nginx | 1.24+ | Reverse proxy + SSL + rate limit | BSD |
|
||||
| SSL | Let's Encrypt | latest | Certificados HTTPS gratis | Gratis |
|
||||
| Contenedores | Docker | 25.x+ | Container runtime | Apache 2.0 |
|
||||
| Orquestacion | Docker Compose | 2.24+ | Multi-container local | Apache 2.0 |
|
||||
| DNS | Cloudflare | Free tier | DNS + CDN + DDoS protection | Gratis |
|
||||
| Monitoreo | Uptime Kuma | 1.x+ | Health checks + alerting | MIT |
|
||||
|
||||
#### Pagos
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Costo |
|
||||
|------|-----------|---------|-----------|-------|
|
||||
| Pagos intl | Stripe | latest | Tarjetas internacionales | 2.9% + $0.30 |
|
||||
| Pagos MX | MercadoPago | latest | OXXO, tarjetas MX, SPEI | 3.5-4.5% |
|
||||
|
||||
#### Desarrollo
|
||||
|
||||
| Capa | Tecnologia | Version | Proposito | Licencia/Costo |
|
||||
|------|-----------|---------|-----------|---------------|
|
||||
| Git | GitHub | - | Repositorios + CI/CD | Free/Pro |
|
||||
| IDE | VS Code | latest | Editor + extensions | Gratis |
|
||||
| API Testing | Postman / Hoppscotch | latest | Test APIs | Gratis |
|
||||
| DB Admin | pgAdmin / Tableplus | latest | Admin PostgreSQL | Gratis |
|
||||
|
||||
### 3.2 Diagrama de Puertos y Servicios
|
||||
|
||||
| Servicio | Puerto Interno | Puerto Externo | Path Nginx |
|
||||
|----------|---------------|----------------|------------|
|
||||
| WACRM (Next.js) | 3000 | 443 | /crm/* → localhost:3000 |
|
||||
| Hermes Gateway | 8080 | 443 | /webhook/* → localhost:8080 |
|
||||
| Hermes API Server | 8080 (mismo) | - | Solo interno (localhost) |
|
||||
| Hermes TUI | - | - | Interactivo local |
|
||||
| Odoo | 8069 | 443 | /odoo/* → localhost:8069 |
|
||||
| Odoo Longpolling | 8072 | - | Solo interno |
|
||||
| Frontend React | 5173 (dev) / 80 (prod) | 443 | / → localhost:80 |
|
||||
| PostgreSQL | 5432 | - | Solo interno |
|
||||
| Redis | 6379 | - | Solo interno |
|
||||
| Nginx | 80, 443 | 80, 443 | Reverse proxy principal |
|
||||
| Uptime Kuma | 3001 | 443 | /status → localhost:3001 |
|
||||
|
||||
---
|
||||
|
||||
## 4. Estructura de Proyecto Actualizada
|
||||
|
||||
### 4.1 Repositorios Git
|
||||
|
||||
```
|
||||
skeen-derma-experts/ (organizacion GitHub)
|
||||
├── wacrm/ (fork de ArnasDon/wacrm)
|
||||
│ ├── src/
|
||||
│ │ ├── app/
|
||||
│ │ │ ├── (auth)/ # login, signup
|
||||
│ │ │ ├── (dashboard)/ # UI autenticada
|
||||
│ │ │ │ ├── dashboard/ # home / metrics
|
||||
│ │ │ │ ├── inbox/ # shared inbox
|
||||
│ │ │ │ ├── contacts/ # contactos + tags
|
||||
│ │ │ │ ├── pipelines/ # Kanban deals
|
||||
│ │ │ │ ├── broadcasts/ # campañas
|
||||
│ │ │ │ ├── automations/ # flow builder
|
||||
│ │ │ │ └── settings/ # perfil / WhatsApp / API keys
|
||||
│ │ │ ├── api/ # endpoints server-only
|
||||
│ │ │ │ ├── whatsapp/webhook/ # inbound desde Meta
|
||||
│ │ │ │ ├── whatsapp/send/ # outbound a Meta
|
||||
│ │ │ │ ├── automations/ # engine + cron
|
||||
│ │ │ │ └── v1/ # API publica (messages, contacts, etc.)
|
||||
│ │ ├── components/
|
||||
│ │ ├── lib/
|
||||
│ │ │ ├── supabase/ # client, server, middleware
|
||||
│ │ │ ├── whatsapp/ # Meta API client
|
||||
│ │ │ └── automations/ # engine, steps, validation
|
||||
│ │ └── types/
|
||||
│ ├── supabase/migrations/ # SQL idempotente
|
||||
│ ├── .env.local # variables de entorno
|
||||
│ └── package.json
|
||||
│
|
||||
├── hermes/ # Gateway + Skills SKEEN
|
||||
│ ├── .hermes/
|
||||
│ │ ├── config.yaml # config principal
|
||||
│ │ ├── plugins/
|
||||
│ │ │ ├── odoo_api_call.py # plugin Odoo XML-RPC
|
||||
│ │ │ ├── wacrm_send.py # plugin WACRM API
|
||||
│ │ │ └── calendar_check.py # plugin disponibilidad
|
||||
│ │ └── workspace/
|
||||
│ │ ├── AGENTS.md # instrucciones operativas
|
||||
│ │ ├── SOUL.md # personalidad "Sofia"
|
||||
│ │ ├── MEMORY.md # memoria persistente
|
||||
│ │ ├── TOOLS.md # notas de tools
|
||||
│ │ ├── IDENTITY.md # nombre/vibe/emoji
|
||||
│ │ └── USER.md # perfil clinica
|
||||
│ ├── skills/
|
||||
│ │ ├── skeen-rag/
|
||||
│ │ │ └── SKILL.md # catalogo servicios
|
||||
│ │ ├── skeen-agendar/
|
||||
│ │ │ └── SKILL.md # agendamiento citas
|
||||
│ │ ├── skeen-pagos/
|
||||
│ │ │ └── SKILL.md # pagos Stripe/MP
|
||||
│ │ ├── skeen-monedero/
|
||||
│ │ │ └── SKILL.md # monedero digital
|
||||
│ │ └── skeen-recordatorios/
|
||||
│ │ └── SKILL.md # recordatorios citas
|
||||
│ ├── webhooks/
|
||||
│ │ └── wacrm_webhook_server.py # servidor HTTP para webhooks WACRM
|
||||
│ ├── pyproject.toml
|
||||
│ ├── requirements.txt
|
||||
│ └── Dockerfile
|
||||
│
|
||||
├── odoo-backend/ # Odoo 17 + modulos custom
|
||||
│ ├── odoo/
|
||||
│ │ ├── addons/
|
||||
│ │ │ ├── skeen_pacientes/ # gestion pacientes
|
||||
│ │ │ ├── skeen_citas/ # agendamiento
|
||||
│ │ │ ├── skeen_monedero/ # monedero digital
|
||||
│ │ │ ├── skeen_pagos/ # integracion Stripe/MP
|
||||
│ │ │ ├── skeen_whatsapp/ # webhook WACRM → Odoo
|
||||
│ │ │ └── skeen_reportes/ # reportes clinicos
|
||||
│ │ └── odoo.conf
|
||||
│ ├── Dockerfile
|
||||
│ └── docker-compose.yml
|
||||
│
|
||||
├── frontend/ # React 18 + TypeScript
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # UI components
|
||||
│ │ ├── pages/ # vistas (Home, Agenda, Pagos)
|
||||
│ │ ├── hooks/ # custom hooks
|
||||
│ │ ├── services/ # API clients (Odoo + WACRM)
|
||||
│ │ ├── store/ # Zustand state
|
||||
│ │ └── types/ # TypeScript types
|
||||
│ ├── package.json
|
||||
│ └── Dockerfile
|
||||
│
|
||||
└── infra/ # Docker Compose completo
|
||||
├── docker-compose.yml # orquestacion total
|
||||
├── .env # variables globales
|
||||
├── nginx/
|
||||
│ ├── nginx.conf # reverse proxy
|
||||
│ └── ssl/ # certificados Let's Encrypt
|
||||
├── scripts/
|
||||
│ ├── init-supabase.sh # migraciones SQL
|
||||
│ ├── setup-wacrm.sh # post-install WACRM
|
||||
│ └── setup-hermes.sh # post-install Hermes
|
||||
└── monitoring/
|
||||
├── uptime-kuma/ # health checks
|
||||
└── prometheus/ # metrics (opcional)
|
||||
```
|
||||
|
||||
### 4.2 Estructura de Docker Compose
|
||||
|
||||
```yaml
|
||||
# infra/docker-compose.yml — Resumen de servicios
|
||||
|
||||
services:
|
||||
# ── WACRM (CRM WhatsApp) ──────────────────────────────
|
||||
wacrm:
|
||||
build: ../wacrm/
|
||||
ports: ["3000:3000"]
|
||||
environment:
|
||||
- NEXT_PUBLIC_SUPABASE_URL=${SUPABASE_URL}
|
||||
- NEXT_PUBLIC_SUPABASE_ANON_KEY=${SUPABASE_ANON_KEY}
|
||||
- SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE}
|
||||
- ENCRYPTION_KEY=${WACRM_ENCRYPTION_KEY}
|
||||
- WHATSAPP_PHONE_NUMBER_ID=${META_PHONE_ID}
|
||||
- WHATSAPP_BUSINESS_ACCOUNT_ID=${META_BUSINESS_ID}
|
||||
- WHATSAPP_ACCESS_TOKEN=${META_ACCESS_TOKEN}
|
||||
- WHATSAPP_VERIFY_TOKEN=${META_VERIFY_TOKEN}
|
||||
depends_on: [postgres, redis]
|
||||
|
||||
# ── Hermes (Agente IA) ──────────────────────────────
|
||||
hermes:
|
||||
build: ../hermes/
|
||||
ports: ["8080:8080"]
|
||||
environment:
|
||||
- HERMES_MODEL_PROVIDER=openai
|
||||
- HERMES_MODEL=gpt-4o
|
||||
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||
- ODOO_URL=http://odoo:8069
|
||||
- ODOO_DB=skeen
|
||||
- ODOO_API_KEY=${ODOO_API_KEY}
|
||||
- WACRM_URL=http://wacrm:3000
|
||||
- WACRM_API_KEY=${WACRM_API_KEY}
|
||||
- HERMES_WEBHOOK_PORT=8080
|
||||
- HERMES_API_SERVER_ENABLED=true
|
||||
- HERMES_CRON_ENABLED=true
|
||||
volumes:
|
||||
- hermes_workspace:/root/.hermes/workspace
|
||||
- hermes_plugins:/root/.hermes/plugins
|
||||
- ./../hermes/skills:/skills:ro
|
||||
depends_on: [odoo, wacrm]
|
||||
command: ["hermes", "gateway", "start"]
|
||||
|
||||
# ── Odoo 17 (ERP) ─────────────────────────────────────
|
||||
odoo:
|
||||
build: ../odoo-backend/
|
||||
ports: ["8069:8069", "8072:8072"]
|
||||
environment:
|
||||
- HOST=postgres
|
||||
- PORT=5432
|
||||
- USER=odoo
|
||||
- PASSWORD=${POSTGRES_PASSWORD}
|
||||
- DB_NAME=skeen
|
||||
volumes:
|
||||
- odoo_data:/var/lib/odoo
|
||||
- ./../odoo-backend/odoo/addons:/mnt/extra-addons:ro
|
||||
depends_on: [postgres, redis]
|
||||
|
||||
# ── Frontend React ────────────────────────────────────
|
||||
frontend:
|
||||
build: ../frontend/
|
||||
ports: ["80:80"]
|
||||
depends_on: [odoo, wacrm]
|
||||
|
||||
# ── PostgreSQL ────────────────────────────────────────
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
ports: ["5432:5432"]
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_DB=skeen
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
# ── Redis ─────────────────────────────────────────────
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
ports: ["6379:6379"]
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
# ── Nginx (Reverse Proxy) ─────────────────────────────
|
||||
nginx:
|
||||
image: nginx:1.24-alpine
|
||||
ports: ["443:443"]
|
||||
volumes:
|
||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./nginx/ssl:/etc/nginx/ssl:ro
|
||||
depends_on: [wacrm, odoo, frontend, hermes]
|
||||
|
||||
# ── Uptime Kuma ───────────────────────────────────────
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:1
|
||||
ports: ["3001:3001"]
|
||||
volumes:
|
||||
- uptime_data:/app/data
|
||||
|
||||
volumes:
|
||||
hermes_workspace:
|
||||
hermes_plugins:
|
||||
odoo_data:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
uptime_data:
|
||||
```
|
||||
|
||||
### 4.3 Variables de Entorno (.env)
|
||||
|
||||
```bash
|
||||
# ============================================================
|
||||
# INFRA — infra/.env
|
||||
# ============================================================
|
||||
|
||||
# PostgreSQL
|
||||
POSTGRES_PASSWORD=skeen_postgres_2026_secure
|
||||
POSTGRES_USER=odoo
|
||||
POSTGRES_DB=skeen
|
||||
|
||||
# Redis
|
||||
REDIS_PASSWORD=skeen_redis_2026
|
||||
|
||||
# WACRM
|
||||
SUPABASE_URL=http://postgres:5432
|
||||
SUPABASE_ANON_KEY=eyJ...
|
||||
SUPABASE_SERVICE_ROLE=eyJ...
|
||||
WACRM_ENCRYPTION_KEY=a1b2c3d4e5f6... # 64 chars hex AES-256
|
||||
META_PHONE_ID=123456789012345
|
||||
META_BUSINESS_ID=987654321098765
|
||||
META_ACCESS_TOKEN=EAA...
|
||||
META_VERIFY_TOKEN=skeen_webhook_verify_2026
|
||||
|
||||
# Hermes
|
||||
OPENAI_API_KEY=sk-proj-...
|
||||
ANTHROPIC_API_KEY=sk-ant-...
|
||||
HERMES_MODEL_PROVIDER=openai
|
||||
HERMES_MODEL=gpt-4o
|
||||
HERMES_FALLBACK_PROVIDERS=anthropic,openrouter
|
||||
HERMES_API_SERVER_ENABLED=true
|
||||
HERMES_CRON_ENABLED=true
|
||||
HERMES_WEBHOOK_PORT=8080
|
||||
HERMES_TUI_ENABLED=false
|
||||
ODOO_API_KEY=skeen_odoo_api_key_2026
|
||||
WACRM_API_KEY=wacrm_live_xxxxxxxx
|
||||
|
||||
# Stripe / MercadoPago
|
||||
STRIPE_SECRET_KEY=sk_test_...
|
||||
STRIPE_WEBHOOK_SECRET=whsec_...
|
||||
MP_ACCESS_TOKEN=TEST-...
|
||||
MP_PUBLIC_KEY=TEST-...
|
||||
|
||||
# Dominio
|
||||
DOMAIN=skeen.mx
|
||||
WACRM_SUBDOMAIN=crm.skeen.mx
|
||||
ODOO_SUBDOMAIN=erp.skeen.mx
|
||||
APP_SUBDOMAIN=app.skeen.mx
|
||||
HERMES_SUBDOMAIN=hermes.skeen.mx
|
||||
```
|
||||
1099
hermes/docs/ROADMAP_SKEEN_HERMES_APPENDIX.md
Normal file
1099
hermes/docs/ROADMAP_SKEEN_HERMES_APPENDIX.md
Normal file
File diff suppressed because it is too large
Load Diff
1858
hermes/docs/ROADMAP_SKEEN_HERMES_COMPLETE.md
Normal file
1858
hermes/docs/ROADMAP_SKEEN_HERMES_COMPLETE.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user