La idea de fondo: la IA propone, una persona dispone. El sistema genera borradores automáticamente, pero nada se publica sin pasar por una revisión humana en una hoja de cálculo. Automatización con un freno de mano deliberado.

1. Qué construimos

Un sistema en n8n (orquestador de flujos open source) que permite:

2. La arquitectura del flujo

El pipeline conecta fuentes, orquestación, generación con IA, control humano y publicación:

RSS / Ideas  →  n8n (orquesta)  →  Groq / OpenAI (genera el copy)
       ↓
Google Sheets (revisión y control)  →  ✅ Aprobación humana  →  in LinkedIn (publica)

Se reparte en tres flujos independientes:

Regla de oro de la duplicación: nunca actives dos publicadores que lean la misma pestaña y los mismos estados. Es la forma más fácil de publicar el mismo post dos veces.

3. Las dos hojas de Google Sheets

La hoja de cálculo es el panel de control y el punto de aprobación. Se usan dos pestañas:

Contenido de empresa

Columnas clave: Etapa Funnel, Tema/Título, Tipo de Post, Destino LinkedIn (Personal u Organización), Copy Sugerido, Prompt Visual, CTA, Fecha Publicación, Estado y Link Noticia.

Ideas personales

Aquí lo interesante es que el contexto guía a la IA y la limita:

4. El ciclo de vida del contenido

Cada fila avanza por cuatro estados, y ese es justo el mecanismo de control humano:

GENERAR  →  REVISANDO  →  APROBADO  →  PUBLICADO

No uses APROBADO como estado de prueba si no estás dispuesto a publicar de verdad. Ese estado dispara LinkedIn.

5. Dos voces editoriales

El sistema mantiene tonos distintos según quién publica.

Voz personal

Se deriva de publicaciones reales y se documenta en una guía de voz. Principios: tono cercano y reflexivo, contexto antes de la opinión, primera persona solo cuando hay una opinión o experiencia real, sin cifras ni credenciales inventadas, cierre abierto y uso moderado de emojis y hashtags. Un formateador previene el temido "muro de texto": divide el copy en párrafos de una o dos frases y deja los hashtags en una línea final.

Voz de empresa y el funnel

La intensidad comercial es proporcional a la cercanía con una decisión de negocio — no se asigna al azar:

Cada copy: 160–260 palabras, párrafos breves, un solo cierre y entre tres y cinco hashtags específicos. El cierre (CTA) va dentro del copy, no concatenado después.

6. Errores encontrados y soluciones (lo más útil)

Aquí está el verdadero conocimiento — los muros con los que choca cualquiera que automatice esto:

⚠️ Las fechas localizadas rompían el filtro

Google Sheets entregaba 18/06/2026 y el código esperaba 2026-06-18 → el filtro devolvía cero filas. Solución: una función normalizeDate() que acepta ambos formatos (DD/MM/YYYY y YYYY-MM-DD).

⚠️ LinkedIn: "Requested version is not active" (HTTP 426)

El nodo de LinkedIn traía fija una cabecera LinkedIn-Version que LinkedIn ya no aceptaba. Solución temporal: actualizar la versión dentro del contenedor. Solución recomendada: actualizar n8n a una versión con el nodo vigente, o reemplazar el nodo por un HTTP Request que controle explícitamente LinkedIn-Version.

Cuidado con los parches dentro del contenedor: sobreviven a un reinicio normal, pero se pierden si el contenedor se recrea o se actualiza la imagen. Respalda el volumen y exporta los workflows antes de actualizar.

⚠️ Groq agotaba su cuota diaria de tokens

Tres RSS entregaban ~80 noticias; una ejecución procesó 19 y reventó el límite diario. Una espera no resuelve un límite diario. Solución: un nodo "Seleccionar lote editorial" reduce cada ejecución a tres noticias (idealmente una por fuente), con pausa de 10 s entre cada una.

⚠️ Todo se clasificaba como MOFU

Al clasificar cada noticia aislada, el modelo repetía la categoría más segura. Solución: cada lote recibe tres objetivos editoriales asignados —un TOFU, un MOFU y un BOFU— y se validan antes de guardar. La distribución es una decisión editorial del lote, no un sorteo.

⚠️ Filas a medio escribir en Sheets

El modelo a veces devolvía hashtags fuera del objeto JSON y JSON.parse no capturaba todos los campos, pero la fila igual se creaba incompleta. Solución: un nodo "Validar respuesta IA" que extrae y analiza el JSON, recupera los hashtags externos y detiene la escritura con un error explícito si falta un campo clave.

⚠️ Contingencia cuando se agota la cuota

Groq sigue como proveedor principal; su salida de error pasa por un nodo que solo autoriza OpenAI si el error es de cuota (429, rate limit, too many requests). Errores de configuración o credenciales no activan la contingencia: deben corregirse. La respuesta de respaldo pasa por la misma validación, manteniendo el esquema.

⚠️ El texto salía como un solo bloque

El modelo entregaba el copy sin saltos de línea y LinkedIn lo respetaba. Solución: un formateador que introduce separaciones seguras antes de guardar el borrador.

⚠️ Publicar como organización estaba bloqueado

LinkedIn devolvía Organization permissions must be used…: la credencial era personal y la app aún tenía la Community Management API en revisión. Sin la aprobación no se concede w_organization_social. Acción pendiente: esperar la aprobación, crear una credencial específica y conectarla solo al nodo de organización.

7. Operación segura

Antes de activar cualquier workflow:

8. Antes de publicar el repositorio: checklist de seguridad

Si vas a compartir el proyecto, esto es obligatorio:

"La automatización no reemplaza el criterio: lo coloca donde más vale. La IA escribe el primer borrador; tú decides qué merece tu nombre."

Sobre el autor

Marcos Vinicio Reyes Muñoz — IT Business Partner, especializado en Product & Innovation Management, Transformación Digital e IA aplicada al negocio (fintech, salud digital y blockchain). Stellar Ambassador. Esta guía documenta su implementación real del sistema. Conéctate en LinkedIn

¿Estás automatizando tu contenido o tus flujos con n8n e IA? Comparte tu setup y tus tropiezos con la comunidad.

Conversa en la comunidad