Files
SKEEN-Proyecto/docs/configuracion.md
Consultoría Alcaraz Salazar a718592291 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/
2026-07-20 07:44:23 +00:00

12 KiB

Configuración — SKEEN Derma Experts

Versión: 2.0
Fecha: 16 de julio de 2026


1. Variables de Entorno

1.1 Bridge SKEEN (/root/skeen-roadmap-hermes/hermes/.env)

# Nan Builders (IA)
NAN_API_KEY=sk-gJ8OWbZVGeWy9ns_H00cxA
NAN_BASE_URL=https://api.nan.builders/v1
NAN_MODEL=qwen3.6

# WACRM
WACRM_URL=http://localhost:3000
WACRM_API_KEY=wacrm_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# Bridge
BRIDGE_PORT=8090
NODE_ENV=production

1.2 WACRM (/root/skeen-wacrm/.env.local)

# Supabase (self-hosted on localhost)
NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNjQxNzY5MjAwLCJleHAiOjE3OTk1MzU2MDB9.pnl22qqc0WMyNRwqdXq7cEq1hw_YTrdTgWHd0TPsHPU
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaXNzIjoic3VwYWJhc2UiLCJpYXQiOjE2NDE3NjkyMDAsImV4cCI6MTc5OTUzNTYwMH0.XA05Pgn-gkEKaZEaHYFc9DAyP45uNJdsl8DL9axUxbc

# Encryption key for WACRM (64 hex chars)
ENCRYPTION_KEY=8bbf201d9d60488a1e86e5396b31e22d8bbf201d9d60488a1e86e5396b31e22d

# WhatsApp / Meta (pending client data)
WHATSAPP_PHONE_NUMBER_ID=PENDING_PHONE_ID
WHATSAPP_BUSINESS_ACCOUNT_ID=PENDING_WABA_ID
WHATSAPP_ACCESS_TOKEN=PENDING_TOKEN
WHATSAPP_VERIFY_TOKEN=skeen_webhook_verify_2026

# Meta App Secret for webhook signature verification
META_APP_SECRET=skeen_meta_app_secret_2026_demo

# Application
NEXT_PUBLIC_APP_URL=http://localhost:3000
NODE_ENV=production

1.3 Odoo (/root/skeen-odoo/odoo.conf)

[options]
addons_path = /root/skeen-odoo/addons,/root/skeen-odoo/odoo/addons
admin_passwd = skeen_admin_2026
csv_internal_sep = ,
data_dir = /var/lib/odoo
db_host = localhost
db_maxconn = 64
db_name = skeen_odoo
db_password = skeen_dev_2026
db_port = 5432
db_sslmode = prefer
db_user = skeen
demo = {}
email_from = False
geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb
http_enable = True
http_interface =
http_port = 8069
import_partial =
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120
limit_time_real_cron = -1
list_db = True
log_db = False
log_db_level = warning
log_handler = :INFO
log_level = info
logfile =
longpolling_port = 8072
max_cron_threads = 2
osv_memory_age_limit = False
osv_memory_count_limit = False
pg_path =
pidfile =
proxy_mode = True
reportgz = False
screencasts =
screenshots = /tmp/odoo_screenshots
server_wide_modules = base,web
smtp_password = False
smtp_port = 25
smtp_server = localhost
smtp_ssl = False
smtp_ssl_certificate_filename = False
smtp_ssl_private_key_filename = False
smtp_user = False
test_file =
test_tags = None
translate_modules = ['all']
unaccent = False
upgrade_path =
without_demo = False
workers = 0

1.4 Scripts de Inicio (/root/skeen-start-all.sh)

export SUPABASE_URL="http://localhost:8000"
export SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaXNzIjoic3VwYWJhc2UiLCJpYXQiOjE2NDE3NjkyMDAsImV4cCI6MTc5OTUzNTYwMH0.XA05Pgn-gkEKaZEaHYFc9DAyP45uNJdsl8DL9axUxbc"

2. Credenciales y Accesos

Servicio URL Usuario Contraseña Notas
Odoo http://localhost:8069 admin skeen_admin_2026 DB: skeen_odoo
Frontend http://localhost:5173 admin SkeenAdmin2026! Usuario seed
WACRM http://localhost:3000 ivan@horuxfin.com (definida por usuario) Registro manual
Supabase Studio http://localhost:8000 supabase (definida en .env) Dashboard
PostgreSQL Odoo localhost:5432 skeen skeen_dev_2026 DB: skeen_odoo
PostgreSQL Supabase localhost:5433 postgres (definida en .env) Docker

3. Endpoints Importantes

3.1 Odoo REST API (skeen_whatsapp)

Endpoint Método Descripción Auth
/skeen/api/v1/available_slots POST Slots disponibles API Key
/skeen/api/v1/create_appointment POST Crear cita API Key
/skeen/api/v1/patient_balance POST Saldo paciente API Key
/skeen/api/v1/wallet_redeem POST Redimir puntos API Key
/skeen/api/v1/cancel_appointment POST Cancelar cita API Key

3.2 Odoo Frontend API (skeen/frontend/v1/*)

Endpoint Método Descripción Auth
/skeen/frontend/v1/health GET Health check None
/skeen/frontend/v1/auth/login POST Login None
/skeen/frontend/v1/auth/me GET Usuario actual JWT
/skeen/frontend/v1/appointments GET/POST Citas JWT
/skeen/frontend/v1/appointments/<id> GET/PUT/DELETE Cita individual JWT
/skeen/frontend/v1/services GET/POST Servicios JWT
/skeen/frontend/v1/services/<id> PUT Actualizar servicio JWT
/skeen/frontend/v1/patients GET/POST Pacientes JWT
/skeen/frontend/v1/patients/<id> GET/PUT Paciente individual JWT
/skeen/frontend/v1/wallets GET Monederos JWT
/skeen/frontend/v1/sales GET/POST Ventas JWT
/skeen/frontend/v1/inventory GET Inventario JWT
/skeen/frontend/v1/wacrm/contacts GET Contactos WACRM JWT
/skeen/frontend/v1/wacrm/conversations GET Conversaciones WACRM JWT
/skeen/frontend/v1/wacrm/messages GET Mensajes WACRM JWT
/skeen/frontend/v1/wacrm/deals GET Deals WACRM JWT
/skeen/frontend/v1/wacrm/sync POST Sincronizar WACRM→Odoo JWT

3.3 WACRM API (/api/v1/*)

Endpoint Método Descripción Auth
/api/v1/messages POST Enviar mensaje Bearer Token
/api/v1/messages/simulate POST Simular mensaje (demo) Bearer Token
/api/v1/contacts GET/POST Contactos Bearer Token
/api/v1/conversations GET Conversaciones Bearer Token
/api/v1/webhooks GET/POST Webhooks Bearer Token
/api/whatsapp/webhook POST Webhook Meta Verify Token

3.4 Bridge SKEEN (:8090)

Endpoint Método Descripción
/health GET Health check
/webhook/wacrm POST Webhook WACRM → Hermes

4. Configuración de Hermes

4.1 Gateway

# Ver estado
hermes gateway status

# Iniciar
hermes gateway run

# Instalar como servicio
hermes gateway install
sudo hermes gateway install --system

4.2 Serve (Dashboard/API)

hermes serve --host 0.0.0.0 --port 9119 --skip-build

4.3 Skills Instalados

hermes skills list

Skills disponibles:

  • skeen-rag
  • skeen-agendar
  • skeen-pagos
  • skeen-monedero
  • skeen-recordatorios

5. Configuración de Meta WhatsApp Cloud API

5.1 Crear App en Meta Developers

  1. Ir a https://developers.facebook.com
  2. Crear app tipo "Business"
  3. Agregar producto "WhatsApp"
  4. Obtener:
    • Phone Number ID
    • WhatsApp Business Account ID (WABA ID)
    • Access Token (permanente, System User)
    • App Secret

5.2 Configurar Webhook en Meta

Campo Valor
Callback URL https://crm.skeen.mx/api/whatsapp/webhook
Verify Token skeen_webhook_verify_2026
Subscription fields messages, message_template_status_update

5.3 Configurar WACRM

En WACRM Dashboard → Settings → WhatsApp:

Campo Valor
Phone Number ID De Meta Developers
Access Token Token permanente
Business Account ID WABA ID
Verify Token skeen_webhook_verify_2026

5.4 Templates de WhatsApp

Templates a subir y aprobar en Meta Business Manager:

Template Categoría Uso
bienvenida_skeen UTILITY Primer contacto
confirmacion_cita UTILITY Confirmación de agendamiento
recordatorio_cita UTILITY Recordatorio 24h antes
followup_tratamiento UTILITY Seguimiento post-tratamiento
reengage_skeen MARKETING Re-engagement pacientes inactivos
comprobante_pago UTILITY Confirmación de pago recibido

6. Configuración de Supabase

6.1 Docker Compose

cd /root/skeen-supabase/docker
docker compose up -d
docker compose ps

6.2 Variables de Entorno Clave

POSTGRES_PASSWORD=your_password
JWT_SECRET=your_jwt_secret
ANON_KEY=your_anon_jwt
SERVICE_ROLE_KEY=your_service_role_jwt
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=your_dashboard_password

6.3 Acceso a Base de Datos

# Desde host
psql -h localhost -p 5433 -U postgres -d postgres

# Desde contenedor
docker exec supabase-db psql -U postgres -d postgres

7. Configuración de nginx

7.1 Frontend React

server {
    listen 80;
    server_name skeen.consultoria-as.com;
    root /var/www/skeen-frontend;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/odoo {
        proxy_pass http://localhost:8069;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /api/wacrm {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

7.2 WACRM (subdominio)

server {
    listen 80;
    server_name skeencrm.consultoria-as.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

8. Configuración de Cloudflare Tunnel

Para exponer servicios sin abrir puertos en el firewall:

# Instalar cloudflared
curl -fsSL https://pkg.cloudflare.com/cloudflared.repo | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared

# Autenticar
cloudflared tunnel login

# Crear tunnel
cloudflared tunnel create skeen-tunnel

# Configurar DNS
cloudflared tunnel route dns skeen-tunnel skeen.consultoria-as.com

# Ejecutar tunnel
cloudflared tunnel run --token YOUR_TUNNEL_TOKEN

Nota: El tunnel ya está configurado en esta VM con el token proporcionado.


9. Configuración de systemd (Producción)

9.1 Odoo

[Unit]
Description=Odoo 17 SKEEN
After=network.target postgresql.service

[Service]
Type=simple
User=root
Environment=SUPABASE_URL=http://localhost:8000
Environment=SUPABASE_SERVICE_ROLE_KEY=your_key
ExecStart=/root/odoo-venv/bin/python /root/skeen-odoo/odoo-bin -c /root/skeen-odoo/odoo.conf
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

9.2 WACRM

[Unit]
Description=WACRM SKEEN
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/skeen-wacrm
Environment=NODE_ENV=production
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

9.3 Bridge SKEEN

[Unit]
Description=Bridge Webhook SKEEN
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/skeen-roadmap-hermes/hermes
Environment=NODE_ENV=production
ExecStart=/usr/bin/node webhook-bridge.js
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

10. Configuración de Backups

# Backup PostgreSQL Odoo
pg_dump -U skeen -h localhost skeen_odoo > /root/backups/odoo_$(date +%Y%m%d_%H%M%S).sql

# Backup PostgreSQL Supabase
docker exec supabase-db pg_dump -U postgres postgres > /root/backups/supabase_$(date +%Y%m%d_%H%M%S).sql

# Backup archivos
tar -czf /root/backups/skeen-files_$(date +%Y%m%d_%H%M%S).tar.gz \
  /root/skeen-frontend \
  /root/skeen-wacrm \
  /root/skeen-odoo/addons/skeen_* \
  /root/skeen-roadmap-hermes \
  /root/migracion

11. Checklist de Configuración para Go-Live

  • Número WhatsApp Business verificado por Meta
  • Meta App ID + Secret configurados
  • Access Token permanente generado
  • Phone Number ID y WABA ID configurados en WACRM
  • Templates de WhatsApp aprobados por Meta
  • Dominio skeen.mx apuntando a la VM
  • SSL certificado instalado (Let's Encrypt)
  • Firewall configurado (solo 80, 443, 22)
  • Backups automatizados configurados
  • Monitoreo Uptime Kuma activo
  • API keys de WACRM generadas y configuradas
  • Variables de entorno en producción
  • systemd services habilitados
  • Logs rotando correctamente