86 lines
3.7 KiB
Python
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)}" |