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

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

  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

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

# 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