Sync campaign Status from Google Ads (ENABLED→Activa, PAUSED→Pausada)
Both on create and update, mirror the real Google Ads status instead of defaulting to Pausada. https://claude.ai/code/session_01WEcdWPxGWZKk8FGwBRLGR2
This commit is contained in:
parent
905ad3bcd2
commit
67d5104dca
@ -30,10 +30,12 @@ class AirtableClient:
|
||||
def sync_campaigns_from_google_ads(self, google_campaigns: list[dict]) -> dict:
|
||||
"""
|
||||
Sincroniza campañas de Google Ads → Airtable.
|
||||
- Crea las campañas nuevas (Activa=False, requiere configuración manual de PPL/Cap/CPA).
|
||||
- Actualiza el nombre si ha cambiado.
|
||||
- Crea las campañas nuevas con el status real de Google Ads.
|
||||
- Actualiza nombre y/o status si han cambiado.
|
||||
Devuelve un resumen con listas de campañas creadas y actualizadas.
|
||||
"""
|
||||
STATUS_MAP = {"ENABLED": "Activa", "PAUSED": "Pausada"}
|
||||
|
||||
all_records = self.campaigns.all()
|
||||
at_by_gid = {
|
||||
str(r["fields"].get("CampaignID", "")).strip(): r
|
||||
@ -46,19 +48,22 @@ class AirtableClient:
|
||||
|
||||
for gc in google_campaigns:
|
||||
gid = gc["id"]
|
||||
at_status = STATUS_MAP.get(gc["status"], "Pausada")
|
||||
at_record = at_by_gid.get(gid)
|
||||
|
||||
if at_record is None:
|
||||
self.campaigns.create({
|
||||
"Campaign Name": gc["name"],
|
||||
"CampaignID": int(gid),
|
||||
"Status": "Pausada",
|
||||
"Status": at_status,
|
||||
})
|
||||
created.append(gc["name"])
|
||||
else:
|
||||
changes = {}
|
||||
if at_record["fields"].get("Campaign Name") != gc["name"]:
|
||||
changes["Campaign Name"] = gc["name"]
|
||||
if at_record["fields"].get("Status") != at_status:
|
||||
changes["Status"] = at_status
|
||||
if changes:
|
||||
self.campaigns.update(at_record["id"], changes)
|
||||
updated.append(gc["name"])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user