leads-optimizer/optimizer.py

34 lines
1.2 KiB
Python

import config
def apply_decision(campaign: dict, decision: dict, metrics: dict, gads_client) -> bool:
"""
Aplica la decisión del agente sobre Google Ads.
En DRY_RUN solo imprime lo que haría.
"""
accion = decision.get("accion", "MANTENER")
nuevo_budget = decision.get("nuevo_budget_diario", 0)
budget_resource = metrics.get("budget_resource_name", "")
if accion == "PAUSAR":
print(f" ⛔ ACCIÓN: Pausar campaña")
return gads_client.pause_campaign(campaign["google_campaign_id"])
elif accion in ("AUMENTAR_PRESUPUESTO", "REDUCIR_PRESUPUESTO"):
if nuevo_budget <= 0:
print(f" ⚠️ Presupuesto calculado inválido ({nuevo_budget}), omitiendo.")
return False
print(f" 💰 ACCIÓN: {accion}{nuevo_budget:.2f}€/día")
if not budget_resource:
print(f" ⚠️ Sin budget_resource_name, no se puede aplicar.")
return False
return gads_client.set_campaign_budget(budget_resource, nuevo_budget)
elif accion == "MANTENER":
print(f" ✅ ACCIÓN: Mantener sin cambios")
return True
else:
print(f" ❓ Acción desconocida: {accion}")
return False