# 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*