From 67d5104dca3789c092f9edfdfbfef6ec1a24a5a0 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 17 Apr 2026 11:52:38 +0000 Subject: [PATCH] =?UTF-8?q?Sync=20campaign=20Status=20from=20Google=20Ads?= =?UTF-8?q?=20(ENABLED=E2=86=92Activa,=20PAUSED=E2=86=92Pausada)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both on create and update, mirror the real Google Ads status instead of defaulting to Pausada. https://claude.ai/code/session_01WEcdWPxGWZKk8FGwBRLGR2 --- airtable_client.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/airtable_client.py b/airtable_client.py index d37f219..255684e 100644 --- a/airtable_client.py +++ b/airtable_client.py @@ -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"])