# WhatsApp Web Integration for Odoo 18 ## Descripción Este módulo integra WhatsApp con la automatización de marketing de Odoo, permitiendo enviar mensajes de WhatsApp a través de una URL personalizada usando whatsapp-web.js. Proporciona funcionalidad completa para enviar mensajes tanto a números telefónicos como a grupos de WhatsApp. ## Características Principales - ✅ Envío de mensajes a números telefónicos individuales - ✅ Envío de mensajes a grupos de WhatsApp - ✅ Soporte para plantillas de WhatsApp Business API - ✅ Mensajes de texto libre (sin plantilla) para WhatsApp Web - ✅ Gestión de adjuntos y archivos multimedia - ✅ Respuestas a mensajes (quoted messages) - ✅ Integración con el sistema de marketing de Odoo - ✅ Configuración flexible de cuentas WhatsApp Web ## Requisitos - Odoo 18.0 - Módulo `whatsapp` (dependencia) - Servidor whatsapp-web.js configurado y funcionando ## Instalación 1. **Instalar el módulo:** ```bash cd /var/odoo/mcteam.run sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web ``` 2. **Reiniciar el servidor Odoo:** ```bash ./restart_odoo.sh ``` ## Configuración ### 1. Configuración General 1. Ir a **Configuración > Técnico > Parámetros del Sistema** 2. Buscar el parámetro `whatsapp_web.whatsapp_endpoint` 3. Establecer la URL de tu servidor whatsapp-web.js (ej: `https://web.whatsapp.com/api`) ### 2. Configuración de Cuenta WhatsApp 1. Ir a **WhatsApp > Configuración > Cuentas WhatsApp** 2. Crear o editar una cuenta WhatsApp 3. En la sección "WhatsApp Web", configurar: - **WhatsApp Web URL**: URL de tu servidor whatsapp-web.js 4. Guardar la configuración ### 3. Configuración de Grupos (Opcional) Si deseas enviar mensajes a grupos, instala también el módulo `whatsapp_web_groups`: ```bash sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web_groups ``` ## Uso ### Envío de Mensajes Individuales 1. **Desde el Composer de WhatsApp:** - Seleccionar "Phone Number" como tipo de destinatario - Ingresar el número de teléfono - Elegir una plantilla o escribir mensaje libre - Enviar 2. **Desde Marketing:** - Crear una campaña de marketing - Configurar plantillas WhatsApp - Ejecutar campaña ### Envío de Mensajes a Grupos 1. **Desde el Composer:** - Seleccionar "WhatsApp Group" como tipo de destinatario - Elegir un grupo de la lista o ingresar ID manualmente - Escribir mensaje libre o usar plantilla - Enviar 2. **Desde la vista de Grupos:** - Ir a **WhatsApp Web > Grupos** - Seleccionar un grupo - Hacer clic en "Send WhatsApp Message" ### Formato de Números - **Números individuales**: Se formatean automáticamente con prefijo de país (ej: `5215551234567@c.us`) - **Grupos**: Usan formato `120363158956331133@g.us` ### Mensajes con Adjuntos El módulo soporta envío de: - Documentos PDF - Imágenes - Videos - Audio - Cualquier tipo de archivo soportado por WhatsApp ## API del Módulo ### Métodos Principales #### `whatsapp.account.get_groups()` Obtiene la lista de grupos disponibles en WhatsApp Web. ```python account = self.env['whatsapp.account'].browse(1) groups = account.get_groups() ``` #### `whatsapp.message._send_message()` Envía un mensaje WhatsApp usando la configuración de la cuenta. #### `whatsapp.composer.action_send_whatsapp_template()` Procesa el envío desde el composer, soportando tanto plantillas como mensajes libres. ## Estructura de Datos ### Modelos Principales #### `whatsapp.account` (Extendido) - `whatsapp_web_url`: URL del servidor whatsapp-web.js #### `whatsapp.message` (Extendido) - `recipient_type`: Tipo de destinatario ('phone' o 'group') - `whatsapp_group_id`: Referencia al grupo (si aplica) - `final_recipient`: Destinatario final calculado #### `whatsapp.composer` (Extendido) - `recipient_type`: Tipo de destinatario - `whatsapp_group_id`: Grupo seleccionado - `whatsapp_group_id_char`: ID de grupo manual - `body`: Mensaje libre (sin plantilla) ## Configuración del Servidor whatsapp-web.js ### Ejemplo de Configuración ```javascript // Ejemplo de servidor básico const express = require('express'); const { Client } = require('whatsapp-web.js'); const app = express(); app.use(express.json()); const client = new Client(); client.on('ready', () => { console.log('WhatsApp Web está listo'); }); // Endpoint para enviar mensajes app.post('/', async (req, res) => { const { method, args } = req.body; if (method === 'sendMessage') { const [to, content, options] = args; const message = await client.sendMessage(to, content, options); res.json({ _data: { id: { _serialized: message.id._serialized } } }); } }); client.initialize(); app.listen(3000); ``` ## Solución de Problemas ### Error: "No WhatsApp Web account configured" - Verificar que la cuenta WhatsApp tenga configurada la URL de WhatsApp Web - Confirmar que la URL sea accesible desde el servidor Odoo ### Error: "Error en la petición de groups" - Verificar conectividad con el servidor whatsapp-web.js - Confirmar que el servidor esté ejecutándose y respondiendo - Revisar logs del servidor para errores específicos ### Mensajes no se envían - Verificar que WhatsApp Web esté conectado en el servidor - Confirmar que el número de teléfono esté en formato correcto - Revisar logs de Odoo para errores de la API ### Grupos no aparecen - Ejecutar sincronización manual desde el menú de grupos - Verificar que el método `getGroups` esté implementado en el servidor - Confirmar permisos de lectura de grupos en WhatsApp ## Logs y Debugging Los logs se pueden encontrar en: - **Logs de Odoo**: `/var/odoo/stg2.mcteam.run/logs/odoo-server.log` - **Logs del servidor whatsapp-web.js**: Revisar configuración del servidor Para debugging, buscar en los logs: - `WHATSAPP WEB SEND MESSAGE` - `Error en la petición` - `Petición exitosa` ## Actualizaciones Para actualizar el módulo: ```bash cd /var/odoo/mcteam.run sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -u whatsapp_web ./restart_odoo.sh ``` ## Soporte Para soporte técnico o reportar bugs, contactar al equipo de desarrollo. ## Changelog ### Versión 1.0 - Implementación inicial - Soporte para mensajes individuales y grupos - Integración con whatsapp-web.js - Soporte para plantillas y mensajes libres