Files
WhatsAppCentralizado/docs/CONTEXTO_DESARROLLO.md
Claude AI 5dd3499097 feat: Major WhatsApp integration update with Odoo and pause/resume
## 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>
2026-01-30 20:48:56 +00:00

345 lines
10 KiB
Markdown

# 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
```bash
# 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
```bash
# 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
```sql
-- 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
1. **Gestión de cuentas WhatsApp**
- Crear cuenta y escanear QR
- Pausar conexión (mantiene sesión)
- Reanudar conexión (sin QR)
- Eliminar cuenta
2. **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
```nginx
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
1. **Testing de pausar/reanudar** - Verificar que funciona correctamente
2. **Notificaciones en tiempo real** - WebSocket para nuevos mensajes
3. **Mejoras al Chat Hub DOLLARS** - Indicador de typing, scroll automático
4. **Integración completa Odoo** - Sincronizar contactos con res.partner
5. **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
```bash
# 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*