whatsapp_account.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import logging
  2. import requests
  3. import json
  4. from odoo import fields, models
  5. _logger = logging.getLogger(__name__)
  6. class WhatsAppAccount(models.Model):
  7. _inherit = 'whatsapp.account'
  8. whatsapp_web_url = fields.Char(string="WhatsApp Web URL", readonly=False, copy=False)
  9. whatsapp_web_login = fields.Char(string="Login", readonly=False, copy=False)
  10. whatsapp_web_api_key = fields.Char(string="API Key", readonly=False, copy=False)
  11. def get_groups(self):
  12. """
  13. Obtiene los grupos de WhatsApp Web para la cuenta desde la base de datos de la plataforma.
  14. Returns:
  15. list: Lista de diccionarios con la información de los grupos en formato compatible con Odoo
  16. """
  17. self.ensure_one()
  18. if not self.whatsapp_web_url:
  19. _logger.warning("No se ha configurado la URL de WhatsApp Web para la cuenta %s", self.name)
  20. return []
  21. if not self.whatsapp_web_login:
  22. _logger.warning("No se ha configurado el Login (session_name) para la cuenta %s", self.name)
  23. return []
  24. if not self.whatsapp_web_api_key:
  25. _logger.warning("No se ha configurado la API Key para la cuenta %s", self.name)
  26. return []
  27. try:
  28. # Construir URL del nuevo endpoint
  29. base_url = self.whatsapp_web_url.rstrip('/')
  30. session_name = self.whatsapp_web_login
  31. url = f"{base_url}/api/v1/{session_name}/groups"
  32. headers = {
  33. "Content-Type": "application/json",
  34. "X-API-Key": self.whatsapp_web_api_key
  35. }
  36. response = requests.get(url, headers=headers, timeout=30)
  37. if response.status_code == 200:
  38. groups = response.json()
  39. _logger.info("Grupos obtenidos desde la base de datos: %d grupos", len(groups))
  40. return groups
  41. else:
  42. _logger.error("Error al obtener groups: %s - %s", response.status_code, response.text)
  43. return []
  44. except Exception as e:
  45. _logger.error("Error en la petición de groups: %s", str(e))
  46. return []