|
|
2 miesięcy temu | |
|---|---|---|
| data | 8 miesięcy temu | |
| models | 4 miesięcy temu | |
| security | 8 miesięcy temu | |
| views | 4 miesięcy temu | |
| .gitignore | 2 miesięcy temu | |
| API_REFERENCE.md | 4 miesięcy temu | |
| README.md | 4 miesięcy temu | |
| __init__.py | 8 miesięcy temu | |
| __manifest__.py | 4 miesięcy temu |
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.
whatsapp_web (dependencia obligatoria)base, contacts, mail, calendar, helpdeskInstalar dependencias:
cd /var/odoo/mcteam.run
sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web
Instalar el módulo:
sudo -u odoo venv/bin/python3 src/odoo-bin -c odoo.conf -i whatsapp_web_groups
Reiniciar el servidor Odoo:
./restart_odoo.sh
https://web.whatsapp.com/api)Hacer clic en "Sincronizar" o ejecutar manualmente:
self.env['ww.group'].sync_ww_contacts_groups()
Para sincronización automática cada hora:
# Desde shell de Odoo
groups = self.env['ww.group']
groups.sync_ww_contacts_groups()
ww.groupRepresenta un grupo de WhatsApp Web.
Campos:
name: Nombre del grupowhatsapp_web_id: ID único en WhatsApp Webwhatsapp_account_id: Cuenta WhatsApp asociadachannel_id: Canal de discusión creadocontact_ids: Contactos miembros del grupoww.contact (Extiende res.partner)Contactos de WhatsApp Web.
Campos adicionales:
whatsapp_web_id: ID único en WhatsApp Webgroup_ids: Grupos donde participa el contactoww.roleRoles que pueden tener los miembros en grupos.
Campos:
name: Nombre del roldescription: Descripción del rolww.group_contact_relRelación entre grupos y contactos con roles.
Campos:
group_id: Referencia al grupocontact_id: Referencia al contactois_admin: Si es administradoris_super_admin: Si es super administradorrole_id: Rol asignadoww.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()
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": [...]
}
]
<!-- En data/ir_cron.xml -->
<field name="interval_number">2</field>
<field name="interval_type">hours</field>
# 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
# 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
getGroups no implementadogetGroups# Ver logs de sincronización
tail -f /var/odoo/stg2.mcteam.run/logs/odoo-server.log | grep -i "sincroniz\|grupo\|contacto"
# 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'}")
# 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)}")
# 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})
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
Para soporte técnico o reportar bugs: