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:
- Generar borradores corporativos a partir de noticias (RSS).
- Generar publicaciones personales a partir de ideas propias.
- Revisar y aprobar cada contenido en Google Sheets.
- Publicar solo las filas aprobadas y programadas.
- Elegir entre perfil personal y página de organización.
- Mantener voces editoriales distintas para la empresa y la persona.
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:
- Ideador de empresa — lee noticias, genera el contenido corporativo y lo guarda para revisión.
- Publicador de LinkedIn — lee filas aprobadas y las dirige al perfil personal o a la organización.
- Ideador y publicador personal — convierte ideas propias en borradores con voz personal y publica los aprobados.
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:
- Mi Opinión — el punto de vista propio que la IA debe respetar.
- Experiencia — si está vacía, el prompt prohíbe inventarla.
- Objetivo — reflexión, aprendizaje, invitación, debate…
- Formato — TEXTO o IMAGEN.
- Estado — controla todo el ciclo del contenido.
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
- GENERAR → solicita un nuevo borrador a la IA.
- REVISANDO → permite corregir copy, formato y prompt visual.
- APROBADO → autoriza la publicación cuando la fecha coincide con el día actual.
- PUBLICADO → se asigna solo después de que LinkedIn confirma la creación.
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:
- TOFU → informa y abre conversación, sin ofrecer servicios.
- MOFU → transforma la noticia en criterios de evaluación de una decisión o riesgo.
- BOFU → explica de forma directa y sobria cómo ayudar ante una necesidad concreta.
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:
- Ejecuta una prueba manual con una sola fila.
- Verifica el perfil u organización seleccionada.
- Revisa texto, enlaces y menciones; confirma fecha y zona horaria.
- Asegúrate de que exista un solo publicador activo por hoja.
- Confirma que una respuesta fallida de LinkedIn no marque la fila como publicada.
- Conserva una copia exportada de cada workflow que funcione.
8. Antes de publicar el repositorio: checklist de seguridad
Si vas a compartir el proyecto, esto es obligatorio:
- Elimina cualquier JSON de cuentas de servicio o credenciales.
- Revoca y reemplaza claves que hayan aparecido en capturas, terminales o commits.
- Nunca publiques API keys (n8n, Groq, Hugging Face) ni secretos OAuth.
- Sustituye IDs privados de spreadsheets y organizaciones por variables o marcadores.
- Revisa el historial de Git, no solo los archivos actuales.
- Exporta los workflows sin datos de ejecución ni valores sensibles.
"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