Files
2026-06-27 11:58:05 -05:00

86 lines
3.7 KiB
Python

# modules/asesores/processor.py
import requests
import time
class AsesoresProcessor:
def __init__(self):
# Tus credenciales maestras de Chatwoot
self.chatwoot_url = "https://gestor.escueladerefrigeracion.edu.pe"
self.access_token = "4anazHvZnvKLtup8biu5Zuoh"
self.account_id = "1"
def obtener_agentes_chatwoot(self):
url = f"{self.chatwoot_url}/api/v1/accounts/{self.account_id}/agents"
headers = {
"api_access_token": self.access_token,
"Content-Type": "application/json"
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
agentes = response.json()
# =================================================================
# 🕵️‍♂️ ESCÁNER DEBUG (Se imprimirá en tu consola negra)
# =================================================================
print("\n" + "="*60)
print("🕵️‍♂️ ESCÁNER: REVISANDO 'DESCONEXIÓN AUTOMÁTICA'")
print("="*60)
for ag in agentes:
nombre = ag.get('available_name') or ag.get('name', 'Desconocido')
estado = ag.get('availability_status', 'offline')
auto_offline = ag.get('auto_offline', 'Desconocido')
print(f"👤 {nombre} | Estado: {estado} | Radar: {auto_offline}")
print("="*60 + "\n")
return agentes
except Exception:
return []
# =========================================================================
# MOTOR DE ACTUALIZACIÓN (EL COMBO DE 2 GOLPES)
# =========================================================================
def cambiar_estado_agente(self, agent_id, is_online):
url = f"{self.chatwoot_url}/api/v1/accounts/{self.account_id}/agents/{agent_id}"
headers = {
"api_access_token": self.access_token,
"Content-Type": "application/json"
}
estado_str = "online" if is_online else "offline"
try:
# -----------------------------------------------------------------
# GOLPE 1: Desactivar el botón automático primero
# -----------------------------------------------------------------
payload_radar = {
"auto_offline": False
}
requests.patch(url, headers=headers, json=payload_radar, timeout=10)
# Le damos 0.5 segundos a la base de datos de Chatwoot para que
# asimile que el radar de este usuario acaba de ser destruido.
time.sleep(0.5)
# -----------------------------------------------------------------
# GOLPE 2: El código viejo y confiable para cambiar el estado
# -----------------------------------------------------------------
payload_estado = {
"availability_status": estado_str,
"availability": estado_str
}
response = requests.patch(url, headers=headers, json=payload_estado, timeout=10)
if response.status_code == 500:
return False, "Error interno del servidor Chatwoot."
response.raise_for_status()
# ⏳ Le damos 1.5 segundos para que le avise a la computadora
# del asesor que su estado acaba de cambiar en pantalla.
time.sleep(1.5)
return True, "Orden ejecutada con el combo de 2 pasos"
except Exception as e:
return False, f"Fallo de red: {str(e)}"