## Frontend - Add media display (images, audio, video, docs) in Inbox - Add pause/resume functionality for WhatsApp accounts - Fix media URLs to use nginx proxy (relative URLs) ## API Gateway - Add /accounts/:id/pause and /accounts/:id/resume endpoints - Fix media URL handling for browser access ## WhatsApp Core - Add pauseSession() - disconnect without logout - Add resumeSession() - reconnect using saved credentials - Add media download and storage for incoming messages - Serve media files via /media/ static route ## Odoo Module (odoo_whatsapp_hub) - Add Chat Hub interface with DOLLARS theme (dark, 3-column layout) - Add WhatsApp/DRRR theme switcher for chat view - Add "ABRIR CHAT" button in conversation form - Add send_message_from_chat() method - Add security/ir.model.access.csv - Fix CSS scoping to avoid breaking Odoo UI - Update webhook to handle message events properly ## Documentation - Add docs/CONTEXTO_DESARROLLO.md with complete project context ## Infrastructure - Add whatsapp_media Docker volume - Configure nginx proxy for /media/ route - Update .gitignore to track src/sessions/ source files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10 KiB
WhatsApp Centralizado - Contexto de Desarrollo
Fecha de última actualización: 2026-01-30 Estado: En desarrollo activo
Resumen del Proyecto
Sistema centralizado de WhatsApp para gestión de múltiples números, integrado con Odoo y un frontend React. Permite:
- Conectar múltiples números de WhatsApp vía QR
- Recibir y enviar mensajes (texto, imágenes, audio, video, documentos)
- Gestionar conversaciones desde frontend web o Odoo
- Automatizar respuestas con flujos de bot
- Pausar/reanudar conexiones sin perder sesión
Arquitectura del Sistema
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │────▶│ API Gateway │────▶│ WhatsApp Core │
│ React + Ant │ │ FastAPI │ │ Node + Baileys │
│ Puerto: 3000 │ │ Puerto: 8000 │ │ Puerto: 3001 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ │
┌─────────────────┐ │
│ PostgreSQL │◀────────────┘
│ Puerto: 5432 │
└─────────────────┘
│
▼
┌─────────────────┐
│ Odoo (CAS) │◀── Webhooks
│ 192.168.10.188 │
│ Puerto: 8069 │
└─────────────────┘
Servicios Docker
| Servicio | Puerto | Descripción |
|---|---|---|
frontend |
3000 | React + Ant Design |
api-gateway |
8000 | FastAPI - API principal |
whatsapp-core |
3001 | Node.js + Baileys - Conexión WhatsApp |
flow-engine |
8001 | Motor de flujos de bot |
integrations |
8002 | Integraciones externas |
postgres |
5432 | Base de datos PostgreSQL |
redis |
6379 | Cache y colas |
Comandos Docker útiles
# Reconstruir servicios
docker compose build whatsapp-core frontend api-gateway
# Reiniciar servicios
docker compose up -d
# Ver logs
docker compose logs -f whatsapp-core
docker compose logs -f api-gateway
# Entrar a un contenedor
docker exec -it wac_whatsapp sh
docker exec -it wac_api bash
Servidor Odoo
- IP: 192.168.10.188
- Puerto: 8069
- Base de datos:
cas(NO usar "odoo") - Usuario SSH: root / Aasi940812
- Ruta módulo:
/opt/odoo/addons/odoo_whatsapp_hub/
Comandos Odoo útiles
# Conectar por SSH
sshpass -p 'Aasi940812' ssh root@192.168.10.188
# Actualizar módulo
systemctl stop odoo
/usr/bin/odoo -c /etc/odoo/odoo.conf -d cas -u odoo_whatsapp_hub --stop-after-init
systemctl start odoo
# Instalar módulo
/usr/bin/odoo -c /etc/odoo/odoo.conf -d cas -i odoo_whatsapp_hub --stop-after-init
# Ver logs
tail -f /var/log/odoo/odoo-server.log
# Consultas a PostgreSQL
sudo -u postgres psql -d cas -c "SELECT * FROM whatsapp_conversation;"
Configuración WhatsApp Account en Odoo
-- Ver cuentas
SELECT id, name, external_id, api_url FROM whatsapp_account;
-- Configurar external_id (debe coincidir con el UUID del frontend)
UPDATE whatsapp_account
SET external_id = '33ce868e-1aa0-4795-9d44-a389e8ade0de',
api_url = 'http://192.168.10.221:8000'
WHERE id = 1;
Módulo Odoo (odoo_whatsapp_hub)
Estructura
odoo_whatsapp_hub/
├── __manifest__.py
├── __init__.py
├── models/
│ ├── whatsapp_account.py # Cuentas WhatsApp
│ ├── whatsapp_conversation.py # Conversaciones
│ └── whatsapp_message.py # Mensajes
├── controllers/
│ └── webhook.py # Recibe eventos del sistema
├── views/
│ ├── whatsapp_account_views.xml
│ ├── whatsapp_conversation_views.xml
│ ├── dollars_action.xml # Interfaz DOLLARS
│ └── whatsapp_menu.xml
├── wizards/
│ └── send_whatsapp_wizard.xml
├── static/src/
│ ├── css/
│ │ ├── whatsapp.css # Estilos WhatsApp/DRRR
│ │ └── dollars_theme.css # Tema DOLLARS oscuro
│ ├── js/
│ │ ├── chat_action.js # Chat con temas
│ │ └── dollars_chat.js # Chat Hub DOLLARS
│ └── xml/
│ ├── chat_template.xml
│ └── dollars_template.xml
└── security/
└── ir.model.access.csv
Menú en Odoo
- WhatsApp Hub > Chat Hub - Interfaz DOLLARS (oscura, 3 columnas)
- WhatsApp Hub > Conversaciones (Lista) - Vista clásica de Odoo
- WhatsApp Hub > Cuentas - Gestión de números
- WhatsApp Hub > Configuración - Ajustes
Webhook
POST http://192.168.10.188:8069/whatsapp/webhook
Header: X-Odoo-Database: cas
Header: Content-Type: application/json
Body:
{
"type": "message", // message, status_update, conversation_update, account_status
"account_id": "uuid-de-la-cuenta",
"data": { ... }
}
Frontend React
Estructura principal
frontend/src/
├── pages/
│ ├── WhatsAppAccounts.tsx # Gestión de números (pausar/reanudar)
│ ├── Inbox.tsx # Bandeja de entrada
│ ├── Dashboard.tsx
│ └── ...
├── api/
│ └── client.ts # Cliente API
└── App.tsx
Funcionalidades implementadas
-
Gestión de cuentas WhatsApp
- Crear cuenta y escanear QR
- Pausar conexión (mantiene sesión)
- Reanudar conexión (sin QR)
- Eliminar cuenta
-
Bandeja de entrada (Inbox)
- Lista de conversaciones
- Visualización de mensajes
- Envío de mensajes
- Soporte para imágenes, audio, video, documentos
Proxy Nginx para media
location /media/ {
proxy_pass http://whatsapp-core:3001/media/;
proxy_set_header Host $host;
}
API Endpoints Principales
WhatsApp Accounts
GET /api/whatsapp/accounts # Listar cuentas
POST /api/whatsapp/accounts # Crear cuenta
GET /api/whatsapp/accounts/:id # Obtener cuenta
DELETE /api/whatsapp/accounts/:id # Eliminar cuenta
POST /api/whatsapp/accounts/:id/pause # Pausar conexión
POST /api/whatsapp/accounts/:id/resume # Reanudar conexión
Conversaciones y Mensajes
GET /api/whatsapp/conversations # Listar conversaciones
GET /api/whatsapp/conversations/:id # Detalle con mensajes
POST /api/whatsapp/conversations/:id/send # Enviar mensaje
WhatsApp Core (interno)
POST /api/sessions # Crear sesión
GET /api/sessions/:id # Info de sesión
POST /api/sessions/:id/disconnect # Cerrar sesión (logout)
POST /api/sessions/:id/pause # Pausar (sin logout)
POST /api/sessions/:id/resume # Reanudar
POST /api/sessions/:id/messages # Enviar mensaje
Temas de Chat en Odoo
Tema WhatsApp (clásico)
- Fondo beige con patrón
- Burbujas verdes (salientes) y blancas (entrantes)
- Estilo familiar de WhatsApp
Tema DRRR (Durarara/Dollars)
- Fondo negro (#0a0a0a)
- Texto verde neón (#00ff88) para salientes
- Texto cyan (#00ccff) para entrantes
- Nombres en corchetes [Usuario]
- Fuente monospace
Tema DOLLARS (Chat Hub)
- Interfaz oscura 3 columnas
- Sidebar con lista de conversaciones
- Chat central
- Panel de detalles a la derecha
- Acentos ámbar/naranja (#f59e0b)
Problemas Conocidos y Soluciones
1. Imágenes no se ven en frontend
Causa: URLs absolutas con hostname Docker interno
Solución: Usar URLs relativas (/media/uuid.jpg) + proxy nginx
2. Odoo no muestra cambios
Causa: Base de datos incorrecta (odoo vs cas)
Solución: Siempre usar -d cas y header X-Odoo-Database: cas
3. CSS rompe todo Odoo
Causa: Estilos globales no encapsulados
Solución: Prefijar todo con .o_dollars_chat o .o_whatsapp_chat_fullscreen
4. Webhook retorna 404
Causa: Falta header de base de datos
Solución: Agregar X-Odoo-Database: cas a todas las peticiones
5. Account not found en webhook
Causa: external_id no configurado en Odoo
Solución: Actualizar tabla whatsapp_account con el UUID correcto
Próximos Pasos Sugeridos
- Testing de pausar/reanudar - Verificar que funciona correctamente
- Notificaciones en tiempo real - WebSocket para nuevos mensajes
- Mejoras al Chat Hub DOLLARS - Indicador de typing, scroll automático
- Integración completa Odoo - Sincronizar contactos con res.partner
- Panel de métricas - Dashboard con estadísticas de uso
Credenciales y Accesos
| Servicio | URL | Usuario | Contraseña |
|---|---|---|---|
| Frontend | http://192.168.10.221:3000 | admin | (ver BD) |
| API Gateway | http://192.168.10.221:8000 | - | - |
| Odoo | http://192.168.10.188:8069 | ialcarazsalazar@consultoria-as.com | (conocida) |
| SSH Odoo | 192.168.10.188:22 | root | Aasi940812 |
| Gitea | https://git.consultoria-as.com | consultoria-as | (token en remote) |
Comandos de Desarrollo
# Clonar repositorio
git clone https://git.consultoria-as.com/consultoria-as/WhatsAppCentralizado.git
# Levantar todo
cd WhatsAppCentralizado
docker compose up -d
# Desplegar módulo Odoo
sshpass -p 'Aasi940812' scp -r odoo_whatsapp_hub root@192.168.10.188:/opt/odoo/addons/
sshpass -p 'Aasi940812' ssh root@192.168.10.188 "systemctl stop odoo && /usr/bin/odoo -c /etc/odoo/odoo.conf -d cas -u odoo_whatsapp_hub --stop-after-init && systemctl start odoo"
# Ver estado
docker compose ps
docker compose logs -f
Documento generado automáticamente. Última sesión de trabajo: 2026-01-30