85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Fase 1 FIX: el nodo `Buscar Contacto Objetivo - MARCA (phone)` referenciaba
|
|
`$json['Token/API']` y `$json['Location ID']` asumiendo que el input previo era
|
|
`Datos API Cuenta objetivo - MARCA`. Tras la Fase 1, el input proviene del IF
|
|
nuevo (que solo trae `contacts` y `total`). Cambiamos las refs a explícitas.
|
|
|
|
Idempotente.
|
|
"""
|
|
import argparse
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, ROOT)
|
|
sys.path.insert(0, os.path.join(ROOT, "scripts"))
|
|
from n8n_workflow_lib import load_credentials, N8NClient # noqa: E402
|
|
|
|
WID = "x4DqZ5FtSc43tdzB"
|
|
TARGET_NODE = "Buscar Contacto Objetivo - MARCA (phone)"
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--apply", action="store_true")
|
|
args = parser.parse_args()
|
|
if hasattr(sys.stdout, "reconfigure"):
|
|
sys.stdout.reconfigure(encoding="utf-8")
|
|
|
|
client = N8NClient(*load_credentials())
|
|
wf, backup_path = client.backup_workflow(WID, label="fase1_fix_phone_refs")
|
|
print(f"backup: {backup_path}")
|
|
prev = wf.get("versionId")
|
|
|
|
node = client.find_node(wf, TARGET_NODE)
|
|
if not node:
|
|
raise SystemExit(f"nodo {TARGET_NODE!r} no encontrado")
|
|
|
|
p = node["parameters"]
|
|
# Cambiar Authorization header
|
|
for h in p.get("headerParameters", {}).get("parameters", []):
|
|
if h.get("name") == "Authorization":
|
|
old = h["value"]
|
|
new = old.replace(
|
|
"$json['Token/API']",
|
|
"$('Datos API Cuenta objetivo - MARCA').item.json['Token/API']"
|
|
)
|
|
if old != new:
|
|
h["value"] = new
|
|
print(f" Authorization: actualizado")
|
|
else:
|
|
print(f" Authorization: ya tenía referencia explícita (skip)")
|
|
|
|
# Cambiar jsonBody locationId
|
|
body = p.get("jsonBody") or ""
|
|
new_body = body.replace(
|
|
"$json['Location ID']",
|
|
"$('Datos API Cuenta objetivo - MARCA').item.json['Location ID']"
|
|
)
|
|
if new_body != body:
|
|
p["jsonBody"] = new_body
|
|
print(f" jsonBody locationId: actualizado")
|
|
else:
|
|
print(f" jsonBody locationId: ya tenía referencia explícita (skip)")
|
|
|
|
# Dry-run / apply
|
|
if not args.apply:
|
|
res = client.put_workflow(WID, wf, dry_run=True)
|
|
print(f"DRY-RUN. path: {res['path']}")
|
|
return
|
|
|
|
client.put_workflow(WID, wf, dry_run=False)
|
|
wf2 = client.verify_post(WID, expected_node_names=[TARGET_NODE], prev_version_id=prev)
|
|
print(f"versionId nuevo: {wf2.get('versionId')}")
|
|
print(f"active: {wf2.get('active')}")
|
|
if not wf2.get("active"):
|
|
client.activate(WID)
|
|
print("activado.")
|
|
print("OK")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|