[{"data":1,"prerenderedAt":1435},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Fai\u002Fn8n-claude-api-automatizacion-operaciones-marketing":12},{"i18nKey":4,"paths":5},"ai-005-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11},"\u002Fde\u002Fai\u002Fn8n-claude-api-marketing-automation-idempotency","\u002Fen\u002Fai\u002Fn8n-claude-api-autonomy-marketing-operations","\u002Fes\u002Fai\u002Fn8n-claude-api-automatizacion-operaciones-marketing","\u002Ffr\u002Fai\u002Fn8n-claude-api-autonomie-operations-marketing","\u002Fit\u002Fai\u002Fn8n-claude-api-marketing-autonomy","\u002Fru\u002Fai\u002Fn8n-claude-api-marketing-automation",{"_path":8,"_dir":13,"_draft":14,"_partial":14,"_locale":15,"title":16,"description":17,"publishedAt":18,"modifiedAt":18,"category":13,"i18nKey":4,"tags":19,"readingTime":25,"author":26,"body":27,"_type":1429,"_id":1430,"_source":1431,"_file":1432,"_stem":1433,"_extension":1434},"ai",false,"","n8n + Claude API: Autonomía en Operaciones de Marketing","Diseño de workflows autónomos, idempotencia y manejo de errores: cómo ejecutar Claude API en producción con n8n de forma confiable.","2026-06-25",[20,21,22,23,24],"n8n","claude-api","workflow-automation","idempotencia","llm-ops",9,"Roibase",{"type":28,"children":29,"toc":1419},"root",[30,38,45,50,55,71,77,82,96,117,122,129,138,143,149,154,159,798,803,816,1022,1027,1032,1038,1043,1056,1146,1159,1172,1341,1346,1352,1357,1362,1370,1375,1388,1394,1399,1413],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","La mayoría de operaciones de marketing consisten en ciclos manuales: recopilamos reportes, limpiamos datos, extraemos insights, disparamos acciones. Sabemos que podemos automatizar estos ciclos con LLM — pero ¿cómo llegamos a un nivel \"ejecutar y olvidar\" en producción? Cuando combinas un orquestador de workflows como n8n con la API de Claude, el punto crítico no es escribir código, sino construir una arquitectura donde el sistema pueda autocorregirse. Sin idempotencia, manejo de errores, control de costos y observabilidad, la automatización es frágil.",{"type":31,"tag":39,"props":40,"children":42},"h2",{"id":41},"qué-significa-realmente-workflow-autónomo",[43],{"type":36,"value":44},"Qué Significa Realmente Workflow Autónomo",{"type":31,"tag":32,"props":46,"children":47},{},[48],{"type":36,"value":49},"Workflow autónomo no significa \"se ejecuta una vez, luego se rompe\". Autonomía real significa que el sistema detecta y corrige sus propios errores, reintentos cuando toca rate limit, y se asegura de no procesar la misma entrada dos veces. Cuando dispara un nodo de Claude API en n8n, el comportamiento por defecto es simple: envía HTTP request, recibe response, pasa al siguiente nodo. Pero en producción puede haber latencia en la respuesta, la API puede devolver 429 (rate limit), JSON malformado puede llegar, o Claude puede responder de dos formatos diferentes a la misma pregunta.",{"type":31,"tag":32,"props":51,"children":52},{},[53],{"type":36,"value":54},"Por eso cada nodo en tu workflow debe contener realmente un \"bloque de manejo de errores\". El mecanismo error trigger de n8n lo proporciona: cuando un nodo falla, lo captura en una rama separada, envía log a Slack, o lo pasa a tu sistema de alerting vía webhook. Un workflow autónomo es uno que puede recuperarse sin intervención humana, o al menos reportar su propio estado. La documentación de API de Anthropic sugiere estrategias de retry (exponential backoff, 3-5 intentos) — implementas estas estrategias dentro de n8n usando nodos \"Function\".",{"type":31,"tag":32,"props":56,"children":57},{},[58,60,69],{"type":36,"value":59},"Otro punto crítico: los workflows se vuelven complejos con el tiempo. Tres meses después, mirando el mismo workflow, cuesta trabajo entender qué hace cada nodo. Por eso añade \"Sticky Note\" en cada nodo crítico — documenta qué prompt de Claude se ejecuta, qué estructura de datos se espera. Cuando automatizamos operaciones de ",{"type":31,"tag":61,"props":62,"children":66},"a",{"href":63,"rel":64},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fverianalizi",[65],"nofollow",[67],{"type":36,"value":68},"análisis de datos",{"type":36,"value":70}," en Roibase, documentar qué lógica de negocio resuelve cada llamada a Claude nos salvó al refactorizar seis meses después.",{"type":31,"tag":39,"props":72,"children":74},{"id":73},"idempotencia-no-hacer-dos-veces-lo-mismo",[75],{"type":36,"value":76},"Idempotencia: No Hacer Dos Veces lo Mismo",{"type":31,"tag":32,"props":78,"children":79},{},[80],{"type":36,"value":81},"La idempotencia es crítica en operaciones de marketing. Por ejemplo: extraes datos de keywords de Google Search Console (GSC), se los pasas a Claude para análisis — el workflow se dispara cada mañana a las 08:00. Una mañana hay un glitch de red, el workflow se corta a mitad, relanzas manualmente. ¿Se ejecutó dos veces ese día? Sin mecanismo de idempotencia, terminas generando dos posts de blog para la misma keyword — contenido duplicado.",{"type":31,"tag":32,"props":83,"children":84},{},[85,87,94],{"type":36,"value":86},"La forma más simple de garantizar idempotencia: asigna un ID único a cada ejecución de workflow y registra la operación. En n8n lo haces con un nodo \"Set\": la variable ",{"type":31,"tag":88,"props":89,"children":91},"code",{"className":90},[],[92],{"type":36,"value":93},"{{$execution.id}}",{"type":36,"value":95}," genera un string único para cada run. Incluyes este ID en los metadatos del prompt que envías a Claude, y cuando escribes la respuesta en la base de datos, la etiquetas con este ID. Así, si llega el mismo execution ID dos veces, una verificación de duplicados en la BD lo detecta.",{"type":31,"tag":32,"props":97,"children":98},{},[99,101,107,109,115],{"type":36,"value":100},"Pero el ID no es suficiente — también necesitas una ventana temporal. Como los datos de GSC son agregados diariamente, extraer la misma data dos veces no es violación de idempotencia (los datos se actualizaron). Pero \"misma keyword + misma fecha + mismo execution ID\" sí es duplicado. Manejas esta lógica con cláusula ",{"type":31,"tag":88,"props":102,"children":104},{"className":103},[],[105],{"type":36,"value":106},"ON CONFLICT",{"type":36,"value":108}," en PostgreSQL: ",{"type":31,"tag":88,"props":110,"children":112},{"className":111},[],[113],{"type":36,"value":114},"INSERT ... ON CONFLICT (keyword, date, execution_id) DO NOTHING",{"type":36,"value":116},". El nodo Postgres de n8n soporta esta sintaxis.",{"type":31,"tag":32,"props":118,"children":119},{},[120],{"type":36,"value":121},"Otro patrón: hacer hash de la respuesta de Claude y comparar. Si Claude genera exactamente el mismo output dos veces (cosa que puede ocurrir por prompt caching), hash match lo detecta y marcas como duplicado. Esto es especialmente útil para optimizar tu prompt cache hit rate — el caching de Anthropic ahorra 90% en costos, pero cada cache hit devuelve la misma respuesta, lo que favorece idempotencia.",{"type":31,"tag":123,"props":124,"children":126},"h3",{"id":125},"ejemplo-estructura-de-workflow-idempotente",[127],{"type":36,"value":128},"Ejemplo: Estructura de Workflow Idempotente",{"type":31,"tag":130,"props":131,"children":133},"pre",{"code":132},"1. Trigger (Cron: cada día 08:00)\n2. Llamada a GSC API → lista de keywords\n3. Loop node (para cada keyword)\n   ├─ Verificar BD: ¿existe este keyword + fecha de hoy + execution_id?\n   ├─ Si existe → SKIP (idempotencia)\n   └─ Si no existe → Llamada a Claude API\n       ├─ Parse respuesta\n       ├─ Escribir a BD (keyword, date, execution_id, contenido)\n       └─ Trigger de error → alerta a Slack\n",[134],{"type":31,"tag":88,"props":135,"children":136},{"__ignoreMap":15},[137],{"type":36,"value":132},{"type":31,"tag":32,"props":139,"children":140},{},[141],{"type":36,"value":142},"Esta estructura garantiza que cuando generes un artículo de 1450 palabras, la misma keyword no se procese dos veces en el mismo día. Si el workflow se interrumpe, al reiniciar solo procesa keywords que no fueron tocadas — los ya procesados se saltan.",{"type":31,"tag":39,"props":144,"children":146},{"id":145},"manejo-de-errores-rate-limit-timeout-output-malformado",[147],{"type":36,"value":148},"Manejo de Errores: Rate Limit, Timeout, Output Malformado",{"type":31,"tag":32,"props":150,"children":151},{},[152],{"type":36,"value":153},"En uso de producción de Claude API, los errores más comunes son: 429 (rate limit), 503 (servicio no disponible), 408 (timeout), 400 (request malformado). El nodo \"HTTP Request\" de n8n no captura estos errores automáticamente — tú los capturas. El comportamiento por defecto: si hay error, el workflow se detiene. Pero si quieres autonomía, deberías reintentar en lugar de detener.",{"type":31,"tag":32,"props":155,"children":156},{},[157],{"type":36,"value":158},"Escribes lógica de retry en un nodo \"Function\" (JavaScript):",{"type":31,"tag":130,"props":160,"children":164},{"code":161,"language":162,"meta":15,"className":163,"style":15},"const maxRetries = 3;\nlet retries = 0;\nlet response;\n\nwhile (retries \u003C maxRetries) {\n  try {\n    response = await fetch('https:\u002F\u002Fapi.anthropic.com\u002Fv1\u002Fmessages', {\n      method: 'POST',\n      headers: { \u002F* ... *\u002F },\n      body: JSON.stringify({ \u002F* ... *\u002F })\n    });\n    \n    if (response.status === 429) {\n      \u002F\u002F Exponential backoff: espera 2^retries segundos\n      await new Promise(r => setTimeout(r, Math.pow(2, retries) * 1000));\n      retries++;\n      continue;\n    }\n    \n    if (response.ok) break;\n    \n    throw new Error(`HTTP ${response.status}`);\n  } catch (err) {\n    retries++;\n    if (retries >= maxRetries) throw err;\n  }\n}\n\nreturn { json: await response.json() };\n","javascript","language-javascript shiki shiki-themes github-dark",[165],{"type":31,"tag":88,"props":166,"children":167},{"__ignoreMap":15},[168,202,230,243,253,277,291,331,350,369,407,416,425,454,463,541,559,572,581,589,611,619,670,689,706,738,747,756,764],{"type":31,"tag":169,"props":170,"children":173},"span",{"class":171,"line":172},"line",1,[174,180,186,191,196],{"type":31,"tag":169,"props":175,"children":177},{"style":176},"--shiki-default:#F97583",[178],{"type":36,"value":179},"const",{"type":31,"tag":169,"props":181,"children":183},{"style":182},"--shiki-default:#79B8FF",[184],{"type":36,"value":185}," maxRetries",{"type":31,"tag":169,"props":187,"children":188},{"style":176},[189],{"type":36,"value":190}," =",{"type":31,"tag":169,"props":192,"children":193},{"style":182},[194],{"type":36,"value":195}," 3",{"type":31,"tag":169,"props":197,"children":199},{"style":198},"--shiki-default:#E1E4E8",[200],{"type":36,"value":201},";\n",{"type":31,"tag":169,"props":203,"children":205},{"class":171,"line":204},2,[206,211,216,221,226],{"type":31,"tag":169,"props":207,"children":208},{"style":176},[209],{"type":36,"value":210},"let",{"type":31,"tag":169,"props":212,"children":213},{"style":198},[214],{"type":36,"value":215}," retries ",{"type":31,"tag":169,"props":217,"children":218},{"style":176},[219],{"type":36,"value":220},"=",{"type":31,"tag":169,"props":222,"children":223},{"style":182},[224],{"type":36,"value":225}," 0",{"type":31,"tag":169,"props":227,"children":228},{"style":198},[229],{"type":36,"value":201},{"type":31,"tag":169,"props":231,"children":233},{"class":171,"line":232},3,[234,238],{"type":31,"tag":169,"props":235,"children":236},{"style":176},[237],{"type":36,"value":210},{"type":31,"tag":169,"props":239,"children":240},{"style":198},[241],{"type":36,"value":242}," response;\n",{"type":31,"tag":169,"props":244,"children":246},{"class":171,"line":245},4,[247],{"type":31,"tag":169,"props":248,"children":250},{"emptyLinePlaceholder":249},true,[251],{"type":36,"value":252},"\n",{"type":31,"tag":169,"props":254,"children":256},{"class":171,"line":255},5,[257,262,267,272],{"type":31,"tag":169,"props":258,"children":259},{"style":176},[260],{"type":36,"value":261},"while",{"type":31,"tag":169,"props":263,"children":264},{"style":198},[265],{"type":36,"value":266}," (retries ",{"type":31,"tag":169,"props":268,"children":269},{"style":176},[270],{"type":36,"value":271},"\u003C",{"type":31,"tag":169,"props":273,"children":274},{"style":198},[275],{"type":36,"value":276}," maxRetries) {\n",{"type":31,"tag":169,"props":278,"children":280},{"class":171,"line":279},6,[281,286],{"type":31,"tag":169,"props":282,"children":283},{"style":176},[284],{"type":36,"value":285},"  try",{"type":31,"tag":169,"props":287,"children":288},{"style":198},[289],{"type":36,"value":290}," {\n",{"type":31,"tag":169,"props":292,"children":294},{"class":171,"line":293},7,[295,300,304,309,315,320,326],{"type":31,"tag":169,"props":296,"children":297},{"style":198},[298],{"type":36,"value":299},"    response ",{"type":31,"tag":169,"props":301,"children":302},{"style":176},[303],{"type":36,"value":220},{"type":31,"tag":169,"props":305,"children":306},{"style":176},[307],{"type":36,"value":308}," await",{"type":31,"tag":169,"props":310,"children":312},{"style":311},"--shiki-default:#B392F0",[313],{"type":36,"value":314}," fetch",{"type":31,"tag":169,"props":316,"children":317},{"style":198},[318],{"type":36,"value":319},"(",{"type":31,"tag":169,"props":321,"children":323},{"style":322},"--shiki-default:#9ECBFF",[324],{"type":36,"value":325},"'https:\u002F\u002Fapi.anthropic.com\u002Fv1\u002Fmessages'",{"type":31,"tag":169,"props":327,"children":328},{"style":198},[329],{"type":36,"value":330},", {\n",{"type":31,"tag":169,"props":332,"children":334},{"class":171,"line":333},8,[335,340,345],{"type":31,"tag":169,"props":336,"children":337},{"style":198},[338],{"type":36,"value":339},"      method: ",{"type":31,"tag":169,"props":341,"children":342},{"style":322},[343],{"type":36,"value":344},"'POST'",{"type":31,"tag":169,"props":346,"children":347},{"style":198},[348],{"type":36,"value":349},",\n",{"type":31,"tag":169,"props":351,"children":352},{"class":171,"line":25},[353,358,364],{"type":31,"tag":169,"props":354,"children":355},{"style":198},[356],{"type":36,"value":357},"      headers: { ",{"type":31,"tag":169,"props":359,"children":361},{"style":360},"--shiki-default:#6A737D",[362],{"type":36,"value":363},"\u002F* ... *\u002F",{"type":31,"tag":169,"props":365,"children":366},{"style":198},[367],{"type":36,"value":368}," },\n",{"type":31,"tag":169,"props":370,"children":372},{"class":171,"line":371},10,[373,378,383,388,393,398,402],{"type":31,"tag":169,"props":374,"children":375},{"style":198},[376],{"type":36,"value":377},"      body: ",{"type":31,"tag":169,"props":379,"children":380},{"style":182},[381],{"type":36,"value":382},"JSON",{"type":31,"tag":169,"props":384,"children":385},{"style":198},[386],{"type":36,"value":387},".",{"type":31,"tag":169,"props":389,"children":390},{"style":311},[391],{"type":36,"value":392},"stringify",{"type":31,"tag":169,"props":394,"children":395},{"style":198},[396],{"type":36,"value":397},"({ ",{"type":31,"tag":169,"props":399,"children":400},{"style":360},[401],{"type":36,"value":363},{"type":31,"tag":169,"props":403,"children":404},{"style":198},[405],{"type":36,"value":406}," })\n",{"type":31,"tag":169,"props":408,"children":410},{"class":171,"line":409},11,[411],{"type":31,"tag":169,"props":412,"children":413},{"style":198},[414],{"type":36,"value":415},"    });\n",{"type":31,"tag":169,"props":417,"children":419},{"class":171,"line":418},12,[420],{"type":31,"tag":169,"props":421,"children":422},{"style":198},[423],{"type":36,"value":424},"    \n",{"type":31,"tag":169,"props":426,"children":428},{"class":171,"line":427},13,[429,434,439,444,449],{"type":31,"tag":169,"props":430,"children":431},{"style":176},[432],{"type":36,"value":433},"    if",{"type":31,"tag":169,"props":435,"children":436},{"style":198},[437],{"type":36,"value":438}," (response.status ",{"type":31,"tag":169,"props":440,"children":441},{"style":176},[442],{"type":36,"value":443},"===",{"type":31,"tag":169,"props":445,"children":446},{"style":182},[447],{"type":36,"value":448}," 429",{"type":31,"tag":169,"props":450,"children":451},{"style":198},[452],{"type":36,"value":453},") {\n",{"type":31,"tag":169,"props":455,"children":457},{"class":171,"line":456},14,[458],{"type":31,"tag":169,"props":459,"children":460},{"style":360},[461],{"type":36,"value":462},"      \u002F\u002F Exponential backoff: espera 2^retries segundos\n",{"type":31,"tag":169,"props":464,"children":466},{"class":171,"line":465},15,[467,472,477,482,486,492,497,502,507,512,516,521,526,531,536],{"type":31,"tag":169,"props":468,"children":469},{"style":176},[470],{"type":36,"value":471},"      await",{"type":31,"tag":169,"props":473,"children":474},{"style":176},[475],{"type":36,"value":476}," new",{"type":31,"tag":169,"props":478,"children":479},{"style":182},[480],{"type":36,"value":481}," Promise",{"type":31,"tag":169,"props":483,"children":484},{"style":198},[485],{"type":36,"value":319},{"type":31,"tag":169,"props":487,"children":489},{"style":488},"--shiki-default:#FFAB70",[490],{"type":36,"value":491},"r",{"type":31,"tag":169,"props":493,"children":494},{"style":176},[495],{"type":36,"value":496}," =>",{"type":31,"tag":169,"props":498,"children":499},{"style":311},[500],{"type":36,"value":501}," setTimeout",{"type":31,"tag":169,"props":503,"children":504},{"style":198},[505],{"type":36,"value":506},"(r, Math.",{"type":31,"tag":169,"props":508,"children":509},{"style":311},[510],{"type":36,"value":511},"pow",{"type":31,"tag":169,"props":513,"children":514},{"style":198},[515],{"type":36,"value":319},{"type":31,"tag":169,"props":517,"children":518},{"style":182},[519],{"type":36,"value":520},"2",{"type":31,"tag":169,"props":522,"children":523},{"style":198},[524],{"type":36,"value":525},", retries) ",{"type":31,"tag":169,"props":527,"children":528},{"style":176},[529],{"type":36,"value":530},"*",{"type":31,"tag":169,"props":532,"children":533},{"style":182},[534],{"type":36,"value":535}," 1000",{"type":31,"tag":169,"props":537,"children":538},{"style":198},[539],{"type":36,"value":540},"));\n",{"type":31,"tag":169,"props":542,"children":544},{"class":171,"line":543},16,[545,550,555],{"type":31,"tag":169,"props":546,"children":547},{"style":198},[548],{"type":36,"value":549},"      retries",{"type":31,"tag":169,"props":551,"children":552},{"style":176},[553],{"type":36,"value":554},"++",{"type":31,"tag":169,"props":556,"children":557},{"style":198},[558],{"type":36,"value":201},{"type":31,"tag":169,"props":560,"children":562},{"class":171,"line":561},17,[563,568],{"type":31,"tag":169,"props":564,"children":565},{"style":176},[566],{"type":36,"value":567},"      continue",{"type":31,"tag":169,"props":569,"children":570},{"style":198},[571],{"type":36,"value":201},{"type":31,"tag":169,"props":573,"children":575},{"class":171,"line":574},18,[576],{"type":31,"tag":169,"props":577,"children":578},{"style":198},[579],{"type":36,"value":580},"    }\n",{"type":31,"tag":169,"props":582,"children":584},{"class":171,"line":583},19,[585],{"type":31,"tag":169,"props":586,"children":587},{"style":198},[588],{"type":36,"value":424},{"type":31,"tag":169,"props":590,"children":592},{"class":171,"line":591},20,[593,597,602,607],{"type":31,"tag":169,"props":594,"children":595},{"style":176},[596],{"type":36,"value":433},{"type":31,"tag":169,"props":598,"children":599},{"style":198},[600],{"type":36,"value":601}," (response.ok) ",{"type":31,"tag":169,"props":603,"children":604},{"style":176},[605],{"type":36,"value":606},"break",{"type":31,"tag":169,"props":608,"children":609},{"style":198},[610],{"type":36,"value":201},{"type":31,"tag":169,"props":612,"children":614},{"class":171,"line":613},21,[615],{"type":31,"tag":169,"props":616,"children":617},{"style":198},[618],{"type":36,"value":424},{"type":31,"tag":169,"props":620,"children":622},{"class":171,"line":621},22,[623,628,632,637,641,646,651,655,660,665],{"type":31,"tag":169,"props":624,"children":625},{"style":176},[626],{"type":36,"value":627},"    throw",{"type":31,"tag":169,"props":629,"children":630},{"style":176},[631],{"type":36,"value":476},{"type":31,"tag":169,"props":633,"children":634},{"style":311},[635],{"type":36,"value":636}," Error",{"type":31,"tag":169,"props":638,"children":639},{"style":198},[640],{"type":36,"value":319},{"type":31,"tag":169,"props":642,"children":643},{"style":322},[644],{"type":36,"value":645},"`HTTP ${",{"type":31,"tag":169,"props":647,"children":648},{"style":198},[649],{"type":36,"value":650},"response",{"type":31,"tag":169,"props":652,"children":653},{"style":322},[654],{"type":36,"value":387},{"type":31,"tag":169,"props":656,"children":657},{"style":198},[658],{"type":36,"value":659},"status",{"type":31,"tag":169,"props":661,"children":662},{"style":322},[663],{"type":36,"value":664},"}`",{"type":31,"tag":169,"props":666,"children":667},{"style":198},[668],{"type":36,"value":669},");\n",{"type":31,"tag":169,"props":671,"children":673},{"class":171,"line":672},23,[674,679,684],{"type":31,"tag":169,"props":675,"children":676},{"style":198},[677],{"type":36,"value":678},"  } ",{"type":31,"tag":169,"props":680,"children":681},{"style":176},[682],{"type":36,"value":683},"catch",{"type":31,"tag":169,"props":685,"children":686},{"style":198},[687],{"type":36,"value":688}," (err) {\n",{"type":31,"tag":169,"props":690,"children":692},{"class":171,"line":691},24,[693,698,702],{"type":31,"tag":169,"props":694,"children":695},{"style":198},[696],{"type":36,"value":697},"    retries",{"type":31,"tag":169,"props":699,"children":700},{"style":176},[701],{"type":36,"value":554},{"type":31,"tag":169,"props":703,"children":704},{"style":198},[705],{"type":36,"value":201},{"type":31,"tag":169,"props":707,"children":709},{"class":171,"line":708},25,[710,714,718,723,728,733],{"type":31,"tag":169,"props":711,"children":712},{"style":176},[713],{"type":36,"value":433},{"type":31,"tag":169,"props":715,"children":716},{"style":198},[717],{"type":36,"value":266},{"type":31,"tag":169,"props":719,"children":720},{"style":176},[721],{"type":36,"value":722},">=",{"type":31,"tag":169,"props":724,"children":725},{"style":198},[726],{"type":36,"value":727}," maxRetries) ",{"type":31,"tag":169,"props":729,"children":730},{"style":176},[731],{"type":36,"value":732},"throw",{"type":31,"tag":169,"props":734,"children":735},{"style":198},[736],{"type":36,"value":737}," err;\n",{"type":31,"tag":169,"props":739,"children":741},{"class":171,"line":740},26,[742],{"type":31,"tag":169,"props":743,"children":744},{"style":198},[745],{"type":36,"value":746},"  }\n",{"type":31,"tag":169,"props":748,"children":750},{"class":171,"line":749},27,[751],{"type":31,"tag":169,"props":752,"children":753},{"style":198},[754],{"type":36,"value":755},"}\n",{"type":31,"tag":169,"props":757,"children":759},{"class":171,"line":758},28,[760],{"type":31,"tag":169,"props":761,"children":762},{"emptyLinePlaceholder":249},[763],{"type":36,"value":252},{"type":31,"tag":169,"props":765,"children":767},{"class":171,"line":766},29,[768,773,778,783,788,793],{"type":31,"tag":169,"props":769,"children":770},{"style":176},[771],{"type":36,"value":772},"return",{"type":31,"tag":169,"props":774,"children":775},{"style":198},[776],{"type":36,"value":777}," { json: ",{"type":31,"tag":169,"props":779,"children":780},{"style":176},[781],{"type":36,"value":782},"await",{"type":31,"tag":169,"props":784,"children":785},{"style":198},[786],{"type":36,"value":787}," response.",{"type":31,"tag":169,"props":789,"children":790},{"style":311},[791],{"type":36,"value":792},"json",{"type":31,"tag":169,"props":794,"children":795},{"style":198},[796],{"type":36,"value":797},"() };\n",{"type":31,"tag":32,"props":799,"children":800},{},[801],{"type":36,"value":802},"Este código, al recibir 429, espera 2 segundos, luego 4, luego 8 — exponential backoff. Anthropic recomienda esta estrategia. En n8n, el nodo Function siempre soporta JavaScript runtime, así puedes usar async\u002Fawait.",{"type":31,"tag":32,"props":804,"children":805},{},[806,808,814],{"type":36,"value":807},"Otro error común: Claude devuelve JSON malformado. Especialmente si forzas output JSON (escribiendo \"responde en formato JSON\"), Claude a veces añade markdown code fence (",{"type":31,"tag":88,"props":809,"children":811},{"className":810},[],[812],{"type":36,"value":813},"```json ... ```",{"type":36,"value":815},"). No puedes parsearlo. Solución: limpiar la respuesta con regex:",{"type":31,"tag":130,"props":817,"children":819},{"code":818,"language":162,"meta":15,"className":163,"style":15},"let rawText = $json.content[0].text; \u002F\u002F respuesta cruda de Claude\nrawText = rawText.replace(\u002F```json\\n?\u002Fg, '').replace(\u002F```\\n?\u002Fg, '');\nconst parsed = JSON.parse(rawText);\nreturn { json: parsed };\n",[820],{"type":31,"tag":88,"props":821,"children":822},{"__ignoreMap":15},[823,859,975,1010],{"type":31,"tag":169,"props":824,"children":825},{"class":171,"line":172},[826,830,835,839,844,849,854],{"type":31,"tag":169,"props":827,"children":828},{"style":176},[829],{"type":36,"value":210},{"type":31,"tag":169,"props":831,"children":832},{"style":198},[833],{"type":36,"value":834}," rawText ",{"type":31,"tag":169,"props":836,"children":837},{"style":176},[838],{"type":36,"value":220},{"type":31,"tag":169,"props":840,"children":841},{"style":198},[842],{"type":36,"value":843}," $json.content[",{"type":31,"tag":169,"props":845,"children":846},{"style":182},[847],{"type":36,"value":848},"0",{"type":31,"tag":169,"props":850,"children":851},{"style":198},[852],{"type":36,"value":853},"].text; ",{"type":31,"tag":169,"props":855,"children":856},{"style":360},[857],{"type":36,"value":858},"\u002F\u002F respuesta cruda de Claude\n",{"type":31,"tag":169,"props":860,"children":861},{"class":171,"line":204},[862,867,871,876,881,885,890,896,901,906,910,915,920,925,930,934,938,942,947,951,955,959,963,967,971],{"type":31,"tag":169,"props":863,"children":864},{"style":198},[865],{"type":36,"value":866},"rawText ",{"type":31,"tag":169,"props":868,"children":869},{"style":176},[870],{"type":36,"value":220},{"type":31,"tag":169,"props":872,"children":873},{"style":198},[874],{"type":36,"value":875}," rawText.",{"type":31,"tag":169,"props":877,"children":878},{"style":311},[879],{"type":36,"value":880},"replace",{"type":31,"tag":169,"props":882,"children":883},{"style":198},[884],{"type":36,"value":319},{"type":31,"tag":169,"props":886,"children":887},{"style":322},[888],{"type":36,"value":889},"\u002F",{"type":31,"tag":169,"props":891,"children":893},{"style":892},"--shiki-default:#DBEDFF",[894],{"type":36,"value":895},"```json",{"type":31,"tag":169,"props":897,"children":898},{"style":182},[899],{"type":36,"value":900},"\\n",{"type":31,"tag":169,"props":902,"children":903},{"style":176},[904],{"type":36,"value":905},"?",{"type":31,"tag":169,"props":907,"children":908},{"style":322},[909],{"type":36,"value":889},{"type":31,"tag":169,"props":911,"children":912},{"style":176},[913],{"type":36,"value":914},"g",{"type":31,"tag":169,"props":916,"children":917},{"style":198},[918],{"type":36,"value":919},", ",{"type":31,"tag":169,"props":921,"children":922},{"style":322},[923],{"type":36,"value":924},"''",{"type":31,"tag":169,"props":926,"children":927},{"style":198},[928],{"type":36,"value":929},").",{"type":31,"tag":169,"props":931,"children":932},{"style":311},[933],{"type":36,"value":880},{"type":31,"tag":169,"props":935,"children":936},{"style":198},[937],{"type":36,"value":319},{"type":31,"tag":169,"props":939,"children":940},{"style":322},[941],{"type":36,"value":889},{"type":31,"tag":169,"props":943,"children":944},{"style":892},[945],{"type":36,"value":946},"```",{"type":31,"tag":169,"props":948,"children":949},{"style":182},[950],{"type":36,"value":900},{"type":31,"tag":169,"props":952,"children":953},{"style":176},[954],{"type":36,"value":905},{"type":31,"tag":169,"props":956,"children":957},{"style":322},[958],{"type":36,"value":889},{"type":31,"tag":169,"props":960,"children":961},{"style":176},[962],{"type":36,"value":914},{"type":31,"tag":169,"props":964,"children":965},{"style":198},[966],{"type":36,"value":919},{"type":31,"tag":169,"props":968,"children":969},{"style":322},[970],{"type":36,"value":924},{"type":31,"tag":169,"props":972,"children":973},{"style":198},[974],{"type":36,"value":669},{"type":31,"tag":169,"props":976,"children":977},{"class":171,"line":232},[978,982,987,991,996,1000,1005],{"type":31,"tag":169,"props":979,"children":980},{"style":176},[981],{"type":36,"value":179},{"type":31,"tag":169,"props":983,"children":984},{"style":182},[985],{"type":36,"value":986}," parsed",{"type":31,"tag":169,"props":988,"children":989},{"style":176},[990],{"type":36,"value":190},{"type":31,"tag":169,"props":992,"children":993},{"style":182},[994],{"type":36,"value":995}," JSON",{"type":31,"tag":169,"props":997,"children":998},{"style":198},[999],{"type":36,"value":387},{"type":31,"tag":169,"props":1001,"children":1002},{"style":311},[1003],{"type":36,"value":1004},"parse",{"type":31,"tag":169,"props":1006,"children":1007},{"style":198},[1008],{"type":36,"value":1009},"(rawText);\n",{"type":31,"tag":169,"props":1011,"children":1012},{"class":171,"line":245},[1013,1017],{"type":31,"tag":169,"props":1014,"children":1015},{"style":176},[1016],{"type":36,"value":772},{"type":31,"tag":169,"props":1018,"children":1019},{"style":198},[1020],{"type":36,"value":1021}," { json: parsed };\n",{"type":31,"tag":32,"props":1023,"children":1024},{},[1025],{"type":36,"value":1026},"Pon este patrón después de cada llamada a Claude — reduces el riesgo de output malformado en 80%.",{"type":31,"tag":32,"props":1028,"children":1029},{},[1030],{"type":36,"value":1031},"Finalmente, los timeouts. El tiempo de respuesta de Claude depende de la complejidad del prompt — un prompt de 200 tokens generalmente tarda 2-3 segundos, uno de 2000 tokens puede tardar 15-20 segundos. El timeout por defecto del nodo HTTP de n8n es 300 segundos (5 minutos) — demasiado largo para producción. Pon timeout de 30 segundos, y si se agota, dispara estrategia fallback (acortar el prompt e intentar de nuevo, o traer respuesta del cache).",{"type":31,"tag":39,"props":1033,"children":1035},{"id":1034},"control-de-costos-token-budget-y-prompt-caching",[1036],{"type":36,"value":1037},"Control de Costos: Token Budget y Prompt Caching",{"type":31,"tag":32,"props":1039,"children":1040},{},[1041],{"type":36,"value":1042},"En uso de Claude API, el costo depende de tokens. Input tokens (lo que envías) + output tokens (lo que genera Claude) se facturan juntos. Haiku cuesta $0.25 \u002F 1M input tokens, $1.25 \u002F 1M output tokens (precios 2026) — costo-efectivo, pero Sonnet\u002FOpus son más caros. Si quieres control de costos en tu workflow n8n, usa dos mecanismos: token budget y prompt caching.",{"type":31,"tag":32,"props":1044,"children":1045},{},[1046,1048,1054],{"type":36,"value":1047},"Token budget: limita cuántos tokens puedes gastar por ejecución de workflow. Ejemplo: analizas 1000 keywords diarios, esperas 500 input + 1500 output tokens por keyword (2000 total\u002Fkeyword). 1000 keywords × 2000 tokens = 2M tokens\u002Fdía = $2.50\u002Fdía con Haiku. Pero si Claude genera 10,000 tokens de output para una keyword (análisis muy largo), el presupuesto explota. Por eso envías parámetro ",{"type":31,"tag":88,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":36,"value":1053},"max_tokens",{"type":36,"value":1055}," a Claude:",{"type":31,"tag":130,"props":1057,"children":1060},{"code":1058,"language":792,"meta":15,"className":1059,"style":15},"{\n  \"model\": \"claude-3-5-haiku-20241022\",\n  \"max_tokens\": 1500,\n  \"messages\": [...]\n}\n","language-json shiki shiki-themes github-dark",[1061],{"type":31,"tag":88,"props":1062,"children":1063},{"__ignoreMap":15},[1064,1072,1094,1115,1139],{"type":31,"tag":169,"props":1065,"children":1066},{"class":171,"line":172},[1067],{"type":31,"tag":169,"props":1068,"children":1069},{"style":198},[1070],{"type":36,"value":1071},"{\n",{"type":31,"tag":169,"props":1073,"children":1074},{"class":171,"line":204},[1075,1080,1085,1090],{"type":31,"tag":169,"props":1076,"children":1077},{"style":182},[1078],{"type":36,"value":1079},"  \"model\"",{"type":31,"tag":169,"props":1081,"children":1082},{"style":198},[1083],{"type":36,"value":1084},": ",{"type":31,"tag":169,"props":1086,"children":1087},{"style":322},[1088],{"type":36,"value":1089},"\"claude-3-5-haiku-20241022\"",{"type":31,"tag":169,"props":1091,"children":1092},{"style":198},[1093],{"type":36,"value":349},{"type":31,"tag":169,"props":1095,"children":1096},{"class":171,"line":232},[1097,1102,1106,1111],{"type":31,"tag":169,"props":1098,"children":1099},{"style":182},[1100],{"type":36,"value":1101},"  \"max_tokens\"",{"type":31,"tag":169,"props":1103,"children":1104},{"style":198},[1105],{"type":36,"value":1084},{"type":31,"tag":169,"props":1107,"children":1108},{"style":182},[1109],{"type":36,"value":1110},"1500",{"type":31,"tag":169,"props":1112,"children":1113},{"style":198},[1114],{"type":36,"value":349},{"type":31,"tag":169,"props":1116,"children":1117},{"class":171,"line":245},[1118,1123,1128,1134],{"type":31,"tag":169,"props":1119,"children":1120},{"style":182},[1121],{"type":36,"value":1122},"  \"messages\"",{"type":31,"tag":169,"props":1124,"children":1125},{"style":198},[1126],{"type":36,"value":1127},": [",{"type":31,"tag":169,"props":1129,"children":1131},{"style":1130},"--shiki-default:#FDAEB7;--shiki-default-font-style:italic",[1132],{"type":36,"value":1133},"...",{"type":31,"tag":169,"props":1135,"children":1136},{"style":198},[1137],{"type":36,"value":1138},"]\n",{"type":31,"tag":169,"props":1140,"children":1141},{"class":171,"line":255},[1142],{"type":31,"tag":169,"props":1143,"children":1144},{"style":198},[1145],{"type":36,"value":755},{"type":31,"tag":32,"props":1147,"children":1148},{},[1149,1151,1157],{"type":36,"value":1150},"Esto garantiza: Claude nunca genera más de 1500 tokens. Si necesita cortar la respuesta (",{"type":31,"tag":88,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":36,"value":1156},"stop_reason: \"max_tokens\"",{"type":36,"value":1158},"), la detiene. Lo capturas e intentas de nuevo (aunque generalmente no es necesario — 1500 tokens = ~1200 palabras, suficiente para análisis).",{"type":31,"tag":32,"props":1160,"children":1161},{},[1162,1164,1170],{"type":36,"value":1163},"Prompt caching reduce costos en 90%. El mecanismo de Anthropic funciona así: si reutilizas el mismo system prompt, en la segunda llamada solo facturas los tokens que cambian. Ejemplo: un master prompt de 2000 tokens (como esta documentación) se reutiliza para cada keyword. El cache hit rate es 95% — cada llamada cuesta 2000 tokens la primera, ~100 tokens las siguientes. En n8n, habilitas prompt caching almacenando el system prompt en GitHub, trayéndolo por URL en cada call, y añadiendo parámetro ",{"type":31,"tag":88,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":36,"value":1169},"cache_control",{"type":36,"value":1171},":",{"type":31,"tag":130,"props":1173,"children":1175},{"code":1174,"language":792,"meta":15,"className":1059,"style":15},"{\n  \"model\": \"claude-3-5-sonnet-20241022\",\n  \"system\": [\n    {\n      \"type\": \"text\",\n      \"text\": \"{{$json.masterPrompt}}\",\n      \"cache_control\": {\"type\": \"ephemeral\"}\n    }\n  ],\n  \"messages\": [...]\n}\n",[1176],{"type":31,"tag":88,"props":1177,"children":1178},{"__ignoreMap":15},[1179,1186,1206,1219,1227,1248,1269,1300,1307,1315,1334],{"type":31,"tag":169,"props":1180,"children":1181},{"class":171,"line":172},[1182],{"type":31,"tag":169,"props":1183,"children":1184},{"style":198},[1185],{"type":36,"value":1071},{"type":31,"tag":169,"props":1187,"children":1188},{"class":171,"line":204},[1189,1193,1197,1202],{"type":31,"tag":169,"props":1190,"children":1191},{"style":182},[1192],{"type":36,"value":1079},{"type":31,"tag":169,"props":1194,"children":1195},{"style":198},[1196],{"type":36,"value":1084},{"type":31,"tag":169,"props":1198,"children":1199},{"style":322},[1200],{"type":36,"value":1201},"\"claude-3-5-sonnet-20241022\"",{"type":31,"tag":169,"props":1203,"children":1204},{"style":198},[1205],{"type":36,"value":349},{"type":31,"tag":169,"props":1207,"children":1208},{"class":171,"line":232},[1209,1214],{"type":31,"tag":169,"props":1210,"children":1211},{"style":182},[1212],{"type":36,"value":1213},"  \"system\"",{"type":31,"tag":169,"props":1215,"children":1216},{"style":198},[1217],{"type":36,"value":1218},": [\n",{"type":31,"tag":169,"props":1220,"children":1221},{"class":171,"line":245},[1222],{"type":31,"tag":169,"props":1223,"children":1224},{"style":198},[1225],{"type":36,"value":1226},"    {\n",{"type":31,"tag":169,"props":1228,"children":1229},{"class":171,"line":255},[1230,1235,1239,1244],{"type":31,"tag":169,"props":1231,"children":1232},{"style":182},[1233],{"type":36,"value":1234},"      \"type\"",{"type":31,"tag":169,"props":1236,"children":1237},{"style":198},[1238],{"type":36,"value":1084},{"type":31,"tag":169,"props":1240,"children":1241},{"style":322},[1242],{"type":36,"value":1243},"\"text\"",{"type":31,"tag":169,"props":1245,"children":1246},{"style":198},[1247],{"type":36,"value":349},{"type":31,"tag":169,"props":1249,"children":1250},{"class":171,"line":279},[1251,1256,1260,1265],{"type":31,"tag":169,"props":1252,"children":1253},{"style":182},[1254],{"type":36,"value":1255},"      \"text\"",{"type":31,"tag":169,"props":1257,"children":1258},{"style":198},[1259],{"type":36,"value":1084},{"type":31,"tag":169,"props":1261,"children":1262},{"style":322},[1263],{"type":36,"value":1264},"\"{{$json.masterPrompt}}\"",{"type":31,"tag":169,"props":1266,"children":1267},{"style":198},[1268],{"type":36,"value":349},{"type":31,"tag":169,"props":1270,"children":1271},{"class":171,"line":293},[1272,1277,1282,1287,1291,1296],{"type":31,"tag":169,"props":1273,"children":1274},{"style":182},[1275],{"type":36,"value":1276},"      \"cache_control\"",{"type":31,"tag":169,"props":1278,"children":1279},{"style":198},[1280],{"type":36,"value":1281},": {",{"type":31,"tag":169,"props":1283,"children":1284},{"style":182},[1285],{"type":36,"value":1286},"\"type\"",{"type":31,"tag":169,"props":1288,"children":1289},{"style":198},[1290],{"type":36,"value":1084},{"type":31,"tag":169,"props":1292,"children":1293},{"style":322},[1294],{"type":36,"value":1295},"\"ephemeral\"",{"type":31,"tag":169,"props":1297,"children":1298},{"style":198},[1299],{"type":36,"value":755},{"type":31,"tag":169,"props":1301,"children":1302},{"class":171,"line":333},[1303],{"type":31,"tag":169,"props":1304,"children":1305},{"style":198},[1306],{"type":36,"value":580},{"type":31,"tag":169,"props":1308,"children":1309},{"class":171,"line":25},[1310],{"type":31,"tag":169,"props":1311,"children":1312},{"style":198},[1313],{"type":36,"value":1314},"  ],\n",{"type":31,"tag":169,"props":1316,"children":1317},{"class":171,"line":371},[1318,1322,1326,1330],{"type":31,"tag":169,"props":1319,"children":1320},{"style":182},[1321],{"type":36,"value":1122},{"type":31,"tag":169,"props":1323,"children":1324},{"style":198},[1325],{"type":36,"value":1127},{"type":31,"tag":169,"props":1327,"children":1328},{"style":1130},[1329],{"type":36,"value":1133},{"type":31,"tag":169,"props":1331,"children":1332},{"style":198},[1333],{"type":36,"value":1138},{"type":31,"tag":169,"props":1335,"children":1336},{"class":171,"line":409},[1337],{"type":31,"tag":169,"props":1338,"children":1339},{"style":198},[1340],{"type":36,"value":755},{"type":31,"tag":32,"props":1342,"children":1343},{},[1344],{"type":36,"value":1345},"Este es el patrón que aplicamos en el workflow de generación de blogs de Roibase. Master prompt de 5000 tokens — con caching, pagamos 5000 en la 1ª call, ~50 en las siguientes 99. Si generamos 3000 blogs mensuales: sin caching 15M tokens ($3.75), con caching 450K tokens ($1.12) — ahorro de 70%.",{"type":31,"tag":39,"props":1347,"children":1349},{"id":1348},"observabilidad-monitorear-el-workflow",[1350],{"type":36,"value":1351},"Observabilidad: Monitorear el Workflow",{"type":31,"tag":32,"props":1353,"children":1354},{},[1355],{"type":36,"value":1356},"Cuando construyes sistema autónomo, \"¿funciona?\" no es suficiente — necesitas saber \"¿dónde es lento, dónde falla, cuánto tiempo tarda cada nodo?\". Los logs de ejecución de n8n existen pero son limitados — quieres trackear latency de cada nodo, tiempo de respuesta de Claude, error rate. Usa herramienta de observabilidad externa (Datadog, Grafana, Prometheus) y envía métricas desde el workflow.",{"type":31,"tag":32,"props":1358,"children":1359},{},[1360],{"type":36,"value":1361},"Patrón simple: añade nodo \"HTTP Request\" después de cada nodo crítico para enviar métrica a Prometheus pushgateway. Ejemplo de métrica:",{"type":31,"tag":130,"props":1363,"children":1365},{"code":1364},"# Claude API call latency (milliseconds)\nclaude_api_latency_ms{workflow=\"blog_generator\", model=\"haiku\"} 2340\n\n# Token usage (input + output)\nclaude_token_usage{workflow=\"blog_generator\", type=\"input\"} 450\nclaude_token_usage{workflow=\"blog_generator\", type=\"output\"} 1200\n\n# Error count\nworkflow_error_count{workflow=\"blog_generator\", node=\"claude_call\", error_type=\"429\"} 1\n",[1366],{"type":31,"tag":88,"props":1367,"children":1368},{"__ignoreMap":15},[1369],{"type":36,"value":1364},{"type":31,"tag":32,"props":1371,"children":1372},{},[1373],{"type":36,"value":1374},"Visualiza estas métricas en dashboard Grafana — ves cuántos tokens consume cada workflow, qué nodo es bottleneck, cuán a menudo toca rate limit. En sistemas de producción de Roibase, este dashboard nos permitió bajar latency de Claude API de 3 segundos a 1.8 (con caching + model upgrade).",{"type":31,"tag":32,"props":1376,"children":1377},{},[1378,1380,1386],{"type":36,"value":1379},"Alternativa: nodo webhook de n8n envía logs estructurados a servicio de agregación (Loki, Elasticsearch). Al final de cada execution, envía JSON como ",{"type":31,"tag":88,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":36,"value":1385},"{\"workflow\": \"...\", \"execution_id\": \"...\", \"duration_ms\": ..., \"tokens\": {...}}",{"type":36,"value":1387},". Con stack ELK puedes queryar estos logs.",{"type":31,"tag":39,"props":1389,"children":1391},{"id":1390},"qué-hacer-ahora",[1392],{"type":36,"value":1393},"Qué Hacer Ahora",{"type":31,"tag":32,"props":1395,"children":1396},{},[1397],{"type":36,"value":1398},"Los tres principios fundamentales para construir workflows autónomos con n8n + Claude API: idempotencia (no procesar dos veces), manejo de errores (retry + fallback), control de costos (token budget + caching). Sin estos tres, la fragilidad aumenta — necesitas intervención manual, la ventaja de automatización desaparece. Cuando diseñes tu workflow, haz estas preguntas para cada nodo: \"¿Qué pasa si este nodo falla?\", \"¿Qué pasa si recibe el mismo input dos veces?\", \"¿Qué pasa si tarda más de 10 segundos?\". Las respuestas determinan la arquitectura.",{"type":31,"tag":32,"props":1400,"children":1401},{},[1402,1404,1411],{"type":36,"value":1403},"Si quieres escalar operaciones de marketing con LLM, no empieces sin aplicar estos principios de engineering. Una arquitectura construida sobre ",{"type":31,"tag":61,"props":1405,"children":1408},{"href":1406,"rel":1407},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Ffirstparty",[65],[1409],{"type":36,"value":1410},"datos first-party",{"type":36,"value":1412}," puede alimentar el output de Claude a tu motor de decisiones — pero el dato mismo debe ser limpio e idempotente. Caso contrario, la automatización entra en ciclo garbage in, garbage out.",{"type":31,"tag":1414,"props":1415,"children":1416},"style",{},[1417],{"type":36,"value":1418},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":15,"searchDepth":232,"depth":232,"links":1420},[1421,1422,1425,1426,1427,1428],{"id":41,"depth":204,"text":44},{"id":73,"depth":204,"text":76,"children":1423},[1424],{"id":125,"depth":232,"text":128},{"id":145,"depth":204,"text":148},{"id":1034,"depth":204,"text":1037},{"id":1348,"depth":204,"text":1351},{"id":1390,"depth":204,"text":1393},"markdown","content:es:ai:n8n-claude-api-automatizacion-operaciones-marketing.md","content","es\u002Fai\u002Fn8n-claude-api-automatizacion-operaciones-marketing.md","es\u002Fai\u002Fn8n-claude-api-automatizacion-operaciones-marketing","md",1785967497310]