Nessuna descrizione

odoo d7900d0e4b Update whatsapp_web and whatsapp_web_groups modules 1 mese fa
data df0b1a28fe first commit 8 mesi fa
models d7900d0e4b Update whatsapp_web and whatsapp_web_groups modules 1 mese fa
security df0b1a28fe first commit 8 mesi fa
views 3ebe73cd3c feat: agregar extensión de whatsapp_web con campos Many2one a ww.group 2 mesi fa
.gitignore 3ebe73cd3c feat: agregar extensión de whatsapp_web con campos Many2one a ww.group 2 mesi fa
API_REFERENCE.md bc6d6f7aa3 Add WhatsApp groups management features and documentation 4 mesi fa
README.md bc6d6f7aa3 Add WhatsApp groups management features and documentation 4 mesi fa
__init__.py df0b1a28fe first commit 8 mesi fa
__manifest__.py 3ebe73cd3c feat: agregar extensión de whatsapp_web con campos Many2one a ww.group 2 mesi fa

README.md

Gestor de Grupos de WhatsApp Web para Odoo 18

Descripción

Este módulo permite gestionar grupos, contactos y roles de WhatsApp Web, sincronizando automáticamente con la API de whatsapp-web.js. Proporciona una interfaz completa para administrar grupos de WhatsApp y sus miembros dentro de Odoo.

Características Principales

  • ✅ Sincronización automática de grupos de WhatsApp Web
  • ✅ Gestión de contactos y miembros de grupos
  • ✅ Creación automática de canales de discusión para cada grupo
  • ✅ Sistema de roles y permisos para miembros
  • ✅ Integración con el sistema de contactos de Odoo
  • ✅ Procesamiento automático de mensajes de grupos
  • ✅ Sincronización programada con cron jobs
  • ✅ Envío directo de mensajes a grupos

Requisitos

  • Odoo 18.0
  • Módulo whatsapp_web (dependencia obligatoria)
  • Módulos: base, contacts, mail, calendar, helpdesk
  • Servidor whatsapp-web.js configurado y funcionando

Instalación

  1. Instalar dependencias:

    cd /var/odoo/mcteam.run
    sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web
    
  2. Instalar el módulo:

    sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web_groups
    
  3. Reiniciar el servidor Odoo:

    ./restart_odoo.sh
    

Configuración Inicial

1. Configurar Cuenta WhatsApp Web

  1. Ir a WhatsApp > Configuración > Cuentas WhatsApp
  2. Crear o editar una cuenta WhatsApp
  3. Configurar la WhatsApp Web URL (ej: https://web.whatsapp.com/api)
  4. Guardar la configuración

2. Sincronización Inicial

  1. Ir a WhatsApp Web > Grupos
  2. Hacer clic en "Sincronizar" o ejecutar manualmente:

    self.env['ww.group'].sync_ww_contacts_groups()
    

3. Configurar Cron Job (Opcional)

Para sincronización automática cada hora:

  1. Ir a Configuración > Técnico > Automatización > Acciones Programadas
  2. Buscar "Sincronizar Contactos y Grupos WhatsApp Web"
  3. Activar el cron job
  4. Configurar intervalo deseado

Uso

Gestión de Grupos

Ver Grupos Sincronizados

  1. Ir a WhatsApp Web > Grupos
  2. Ver lista de todos los grupos sincronizados
  3. Hacer clic en un grupo para ver detalles

Enviar Mensaje a Grupo

  1. Seleccionar un grupo de la lista
  2. Hacer clic en "Send WhatsApp Message"
  3. Completar el composer de WhatsApp
  4. Enviar el mensaje

Sincronización Manual

# Desde shell de Odoo
groups = self.env['ww.group']
groups.sync_ww_contacts_groups()

Gestión de Contactos

Ver Contactos WhatsApp

  1. Ir a Contactos > Contactos WhatsApp Web
  2. Ver todos los contactos sincronizados de WhatsApp
  3. Editar información de contactos si es necesario

Contactos en Grupos

  • Los contactos se sincronizan automáticamente cuando están en grupos
  • Se actualizan los números de teléfono y nombres
  • Se evitan duplicados usando los últimos 10 dígitos del móvil

Canales de Discusión

Creación Automática

  • Cada grupo crea automáticamente un canal de discusión
  • El canal se nombra con prefijo "📱" + nombre del grupo
  • Todos los miembros del grupo se agregan al canal

Gestión de Canales

  1. Ir al canal desde el menú de discusión
  2. Los mensajes de WhatsApp se procesan automáticamente
  3. Se mantiene historial de conversaciones

Estructura de Datos

Modelos Principales

ww.group

Representa un grupo de WhatsApp Web.

Campos:

  • name: Nombre del grupo
  • whatsapp_web_id: ID único en WhatsApp Web
  • whatsapp_account_id: Cuenta WhatsApp asociada
  • channel_id: Canal de discusión creado
  • contact_ids: Contactos miembros del grupo

ww.contact (Extiende res.partner)

Contactos de WhatsApp Web.

Campos adicionales:

  • whatsapp_web_id: ID único en WhatsApp Web
  • group_ids: Grupos donde participa el contacto

ww.role

Roles que pueden tener los miembros en grupos.

Campos:

  • name: Nombre del rol
  • description: Descripción del rol

ww.group_contact_rel

Relación entre grupos y contactos con roles.

Campos:

  • group_id: Referencia al grupo
  • contact_id: Referencia al contacto
  • is_admin: Si es administrador
  • is_super_admin: Si es super administrador
  • role_id: Rol asignado

API del Módulo

Métodos Principales

ww.group.sync_ww_contacts_groups()

Sincroniza todos los grupos y contactos desde WhatsApp Web.

# Sincronización completa
self.env['ww.group'].sync_ww_contacts_groups()

# Sincronización por cuenta específica
account = self.env['whatsapp.account'].browse(1)
groups_data = account.get_groups()

ww.group._create_discussion_channel()

Crea un canal de discusión para el grupo.

group = self.env['ww.group'].browse(1)
channel = group._create_discussion_channel()

ww.group._process_messages(messages_data)

Procesa mensajes de WhatsApp y los crea en el canal.

group = self.env['ww.group'].browse(1)
messages = [
    {
        'id': {'_serialized': 'message_id'},
        'body': 'Contenido del mensaje',
        'author': 'contacto_id',
        'timestamp': 1234567890
    }
]
group._process_messages(messages)

ww.group.send_whatsapp_message(body, attachment=None, wa_template_id=None)

Envía un mensaje WhatsApp al grupo.

group = self.env['ww.group'].browse(1)
message = group.send_whatsapp_message(
    body="Hola grupo!",
    attachment=attachment_record,
    wa_template_id=template_record
)

ww.group.action_send_whatsapp_message()

Abre el composer de WhatsApp para enviar mensaje al grupo.

group = self.env['ww.group'].browse(1)
action = group.action_send_whatsapp_message()

Métodos de Sincronización

whatsapp.account.get_groups()

Obtiene grupos desde el servidor whatsapp-web.js.

Respuesta esperada:

[
    {
        "id": {"_serialized": "120363158956331133@g.us"},
        "name": "Mi Grupo",
        "members": [
            {
                "id": {"_serialized": "5215551234567@c.us"},
                "number": "5551234567",
                "name": "Juan Pérez",
                "isAdmin": false,
                "isSuperAdmin": false
            }
        ],
        "messages": [...]
    }
]

Configuración Avanzada

Personalización de Sincronización

Modificar Intervalo de Sincronización

<!-- En data/ir_cron.xml -->
<field name="interval_number">2</field>
<field name="interval_type">hours</field>

Filtros de Sincronización

# Sincronizar solo grupos específicos
accounts = self.env['whatsapp.account'].search([
    ('name', 'ilike', 'cuenta_especifica')
])
for account in accounts:
    groups_data = account.get_groups()
    # Procesar solo grupos deseados

Gestión de Permisos

Configurar Accesos

# En security/ir.model.access.csv
access_ww_group_user,ww.group.user,model_ww_group,base.group_user,1,1,1,0
access_ww_group_manager,ww.group.manager,model_ww_group,base.group_system,1,1,1,1

Solución de Problemas

Error: "No hay contactos para crear el canal"

  • Causa: El grupo no tiene miembros o la sincronización falló
  • Solución: Ejecutar sincronización manual y verificar conectividad

Error: "Error al crear el canal para el grupo"

  • Causa: Problemas de permisos o configuración de grupos de usuario
  • Solución: Verificar que el usuario tenga permisos para crear canales

Grupos no se sincronizan

  • Causa: Servidor whatsapp-web.js no responde o método getGroups no implementado
  • Solución:
    1. Verificar conectividad con el servidor
    2. Confirmar implementación del método getGroups
    3. Revisar logs del servidor whatsapp-web.js

Contactos duplicados

  • Causa: Múltiples números similares en diferentes formatos
  • Solución: El módulo usa los últimos 10 dígitos para evitar duplicados automáticamente

Mensajes no se procesan en canales

  • Causa: Formato incorrecto de datos de mensajes o canal no creado
  • Solución:
    1. Verificar que el grupo tenga canal asociado
    2. Confirmar formato de datos de mensajes
    3. Revisar permisos de escritura en canales

Logs y Debugging

Logs de Sincronización

# Ver logs de sincronización
tail -f /var/odoo/stg2.mcteam.run/logs/odoo-server.log | grep -i "sincroniz\|grupo\|contacto"

Debug de Grupos

# Verificar estado de grupos
groups = self.env['ww.group'].search([])
for group in groups:
    print(f"Grupo: {group.name}")
    print(f"Contactos: {len(group.contact_ids)}")
    print(f"Canal: {group.channel_id.name if group.channel_id else 'Sin canal'}")

Debug de Sincronización

# Probar sincronización paso a paso
account = self.env['whatsapp.account'].search([('whatsapp_web_url', '!=', False)], limit=1)
groups_data = account.get_groups()
print(f"Grupos obtenidos: {len(groups_data)}")

Mantenimiento

Limpieza de Datos

# Limpiar grupos sin contactos
empty_groups = self.env['ww.group'].search([
    ('contact_ids', '=', False)
])
empty_groups.unlink()

# Limpiar contactos sin grupos
orphan_contacts = self.env['res.partner'].search([
    ('whatsapp_web_id', '!=', False),
    ('group_ids', '=', False)
])
orphan_contacts.write({'whatsapp_web_id': False})

Optimización de Performance

  • La sincronización procesa grupos en lotes para evitar timeouts
  • Los mensajes se crean en bulk para mejorar performance
  • Se evitan duplicados usando constraints de base de datos

Actualizaciones

Para actualizar el módulo:

cd /var/odoo/mcteam.run
sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -u whatsapp_web_groups
./restart_odoo.sh

Integración con Otros Módulos

Marketing

  • Los grupos se pueden usar como destinatarios en campañas de marketing
  • Soporte para plantillas personalizadas por grupo

Helpdesk

  • Crear tickets automáticamente desde mensajes de grupos
  • Asignar SLAs basados en roles de grupo

Calendar

  • Programar reuniones con miembros de grupos
  • Invitaciones automáticas a eventos

Soporte

Para soporte técnico o reportar bugs:

  • Revisar logs de Odoo y del servidor whatsapp-web.js
  • Verificar configuración de cuentas WhatsApp
  • Confirmar conectividad de red

Changelog

Versión 1.0

  • Implementación inicial del gestor de grupos
  • Sincronización automática de grupos y contactos
  • Creación automática de canales de discusión
  • Sistema de roles y permisos
  • Procesamiento de mensajes de grupos
  • Integración con composer de WhatsApp