Un sistema que programa, avisa y pregunta antes de tocar nada
Con 1–2 semanas de montaje tendrás funcionando:
El calendario manda
Lee tu calendario en Notion o Google Sheets como única fuente de verdad.
Nadie descarga y vuelve a subir
Toma los archivos desde Drive o Dropbox directamente.
Cada pieza se programa sola
En Metricool, Buffer, Later o las APIs nativas, solo si está Aprobada.
Falla con nombre, no en silencio
Slack te dice el campo exacto que falta y te lleva a la fila.
Propone, nunca publica a ciegas
Grok Bot o similar revisa, sugiere hooks y pide aprobación.
| Antes | Después |
|---|---|
| Subes cada pieza a mano en 3 plataformas | El script programa todo lo que está "Aprobado" |
| Te enteras de un error cuando el post no salió | Recibes una alerta horas antes, con el campo que falta |
| El calendario y el programador no coinciden | El calendario manda; el programador refleja |
| Revisión dispersa en chats | Una revisión diaria de 10 minutos |
Si publicas 3 piezas a la semana, no necesitas esto
Es para ti si
- Publicas al menos 10–15 piezas por semana entre Instagram, TikTok y YouTube.
- Ya tienes (o quieres tener) un calendario de contenido en Notion o Sheets.
- Usas, o estás dispuesto a usar, una herramienta de programación con API.
- Alguien puede leer y ajustar un script de Python de 100–300 líneas, o tienes un agente de IA que te ayude.
- Eres founder, líder de marketing o community manager y estás cansado de los "se me pasó la hora".
No es para ti si
- Publicas 2–3 piezas a la semana: programarlas a mano es más rápido.
- Buscas una herramienta que "publique sola" sin que nadie revise nada.
- Tu contenido depende de reacciones en tiempo real, como cobertura en vivo o tendencias del minuto.
- Nadie se hace responsable del calendario. La automatización amplifica el orden, no lo crea.
La información fluye en una sola dirección. El calendario es la verdad; el programador es una copia.
Cinco piezas, cinco responsabilidades. Toca cada una para ver qué hace y, sobre todo, qué no debe hacer.
Si el equipo edita directamente en el programador, rompes la dirección del flujo y aparecen los duplicados.
Los scripts ejecutan, el agente propone, el humano aprueba
La pregunta clave: ¿esta tarea es barata, frecuente y determinística? Si sí, es un script. Si requiere criterio, es el agente con un humano al final.
| Usa un script cuando… | Usa el agente cuando… |
|---|---|
| Corre cada pocas horas | Pasa una vez al día o por excepción |
| La regla se escribe con un if | Hay que interpretar contexto ("¿este hook encaja con la marca?") |
| El resultado siempre debe ser el mismo | Hay varias opciones válidas y alguien debe elegir |
| Validar campos, programar, marcar estado | Revisar el día, proponer hooks, explicar por qué falló algo |
Stack mínimo recomendado
| Capa | Recomendada | Alternativas |
|---|---|---|
| Fuente de verdad | Notion (base de datos) | Google Sheets, Airtable |
| Media | Google Drive | Dropbox |
| Programador | Uno solo con API: Metricool, Buffer o Later | APIs nativas de Meta, TikTok y YouTube |
| Automatización | Python + cron (o un scheduler en la nube) | GitHub Actions, funciones serverless |
| Alertas | Slack (un canal dedicado) | Teams, email |
| Agente | Grok Bot u otro agente de IA de escritorio | Asistente con acceso de solo lectura |
Ocho pasos. Cada uno termina con una condición de "hecho".
1Mapea redes, formatos y reglas de choque
Lista cada combinación red + formato que realmente usas. No es lo mismo un post de feed que una Story o un Reel.
| Red | Formato | Caption | Portada | Notas |
|---|---|---|---|---|
| Feed (imagen/carrusel) | Sí | No | Carruseles: todos los archivos deben ser accesibles al publicar | |
| Reel | Sí | Recomendada | Video vertical | |
| Story | No (normalmente) | No | El texto va dentro del diseño | |
| TikTok | Video | Sí | Opcional | Revisa privacidad y modo de publicación |
| YouTube | Short | Título + descripción | Opcional | Título con límite de caracteres |
| YouTube | Video largo | Título + descripción | Sí | La miniatura cuenta mucho |
Reglas de choque (qué no puede coincidir):
- Máximo un Reel por cuenta cada X horas.
- No publicar la misma pieza en dos redes en el mismo minuto si el programador lo marca como duplicado.
- Las Stories no cuentan como slot de feed.
Hecho cuando tienes una tabla de formatos aprobada por el equipo y 3–5 reglas de choque escritas.
2Diseña el esquema del calendario
| Campo | Tipo | Ejemplo |
|---|---|---|
| Red | Selección | |
| Formato | Selección | Reel |
| Fecha y hora | Fecha con zona horaria | 2026-11-03 18:30 (America/Bogota) |
| Caption / hook | Texto | "3 errores al lanzar tu MVP…" |
| Título | Texto (YouTube) | "Cómo validar tu MVP en 7 días" |
| Link de media | URL | Carpeta o archivo en Drive |
| Estado | Selección | Borrador → Aprobado → Programado → Publicado / Error |
| ID externo | Texto (lo llena el script) | ID devuelto por el programador |
- Guarda la zona horaria explícita. Buena parte de los "se publicó a otra hora" vienen de aquí.
- El ID externo es tu ancla: así sabes con certeza qué ya se programó.
- Solo el estado "Aprobado" dispara el script. Nada en "Borrador" sale.
Hecho cuando todas las piezas de la próxima semana tienen los campos obligatorios y un estado claro.
3Conecta las fuentes de media de forma segura
- Google Drive: una service account con acceso solo a la carpeta de contenido, o OAuth con refresh token guardado como variable de entorno.
- Dropbox: una app con los permisos mínimos (lectura de archivos y, si usas carpetas compartidas, lectura de compartidos).
- Programador y redes: tokens en un gestor de secretos o en variables de entorno del servidor.
Reglas no negociables
- Nunca pegues tokens, contraseñas ni claves en un chat, ni con personas ni con un agente de IA.
- Un token por integración, con el alcance mínimo.
- Documenta cuándo vence cada token y quién lo renueva.
- Prueba el acceso con un archivo de muestra antes de conectar el calendario real.
Hecho cuando el script puede descargar un archivo de prueba de cada fuente sin que nadie comparta credenciales en texto plano.
4Construye el script de sync
- Lee filas en estado Aprobado con fecha en las próximas N horas o días.
- Valida campos obligatorios según red y formato.
- Si falta algo: marca Error, guarda el motivo y envía alerta.
- Si todo está bien: obtiene la media y la programa vía API.
- Si la API responde OK: guarda el ID externo y cambia el estado a Programado.
Empieza siempre en modo dry-run: el script hace todo menos programar, e imprime lo que haría.
[DRY-RUN] Instagram Reel | 2026-11-03 18:30 | OK → se programaría [DRY-RUN] YouTube Short | 2026-11-04 12:00 | FALTA: título [DRY-RUN] TikTok Video | 2026-11-04 19:00 | OK → se programaría
Corre el dry-run al menos 2–3 días contra el calendario real antes de activar la programación.
Principios
- Idempotencia: si el script corre dos veces, no debe programar dos veces. Usa el ID externo, no la hora.
- Cambia el estado solo después de una respuesta exitosa de la API.
- Registra todo: un log por ejecución para reconstruir qué pasó.
Hecho cuando el dry-run coincide con lo que el CM esperaba durante 3 días seguidos y la primera ejecución real programa sin duplicados.
5Maneja las particularidades de cada red
| Red | Particularidad | Qué hacer |
|---|---|---|
| YouTube | El título es obligatorio y tiene límite de 100 caracteres | Validar longitud y presencia antes de programar |
| YouTube | La miniatura personalizada se sube aparte | Campo "Portada" opcional con validación |
| TikTok | Algunas integraciones envían el video como borrador o notificación en lugar de publicar directo | Confirmar el modo de publicación de tu herramienta y cuenta |
| TikTok | La privacidad puede quedar restringida por defecto según la integración | Definir privacidad explícita y revisar el primer post |
| Las Stories normalmente no llevan caption | No exigir caption para Stories | |
| Los carruseles necesitan todos los archivos accesibles al publicar | Usar enlaces estables, no temporales | |
| Todas | Formato y relación de aspecto | Validar vertical (9:16) para Reels, Shorts y TikTok |
Hecho cuando cada combinación red + formato tiene su propia regla de validación y pasó al menos una prueba real.
6Alertas que nombran el campo exacto
Una alerta útil responde tres preguntas: qué pieza, qué falta y dónde lo arreglo.
| Mala alerta | Buena alerta |
|---|---|
| "Error al programar" | "Falta el título en el YouTube Short del mié 4 nov, 12:00. Arréglalo aquí: [link a la fila]" |
| "Falló el sync" | "El archivo de Drive no es accesible (permiso denegado). Pieza: Reel 'Errores MVP'. [link]" |
- Un canal de Slack dedicado, no el general.
- Agrupa: un mensaje por ejecución con la lista de problemas, no 15 mensajes sueltos.
- Indica la urgencia según cuánto falta para la hora de publicación.
- Menciona al responsable de la pieza si existe ese campo.
Hecho cuando el CM puede resolver cualquier alerta sin abrir los logs.
7Define el rol del agente de IA
El agente (Grok Bot o similar) trabaja encima de los scripts, no en lugar de ellos.
Lo que sí hace
- Revisión diaria: resume qué se programó, qué falló y qué viene en las próximas 48 horas.
- Propone hooks y captions para las filas que los tienen vacíos, marcados como sugerencia.
- Explica errores en lenguaje claro y sugiere la corrección.
- Pregunta antes de cambiar cualquier dato del calendario o del programador.
Lo que no hace
- Publicar sin reglas explícitas y sin aprobación.
- Mover piezas de fecha por su cuenta.
- Manejar credenciales en el chat.
Hecho cuando el agente entrega una revisión diaria útil y todas sus propuestas pasan por aprobación humana.
8Define la cadencia de operación
| Cuándo | Qué corre | Quién |
|---|---|---|
| Cada 2–4 horas | Script de sync (validar + programar) | Cron |
| Cada mañana (ej. 8:00) | Revisión diaria del agente en Slack | Agente |
| Cada mañana (10 min) | El CM resuelve alertas y aprueba sugerencias | Humano |
| Viernes | Revisión de la semana siguiente + métricas | CM + líder |
| Mensual | Revisión de tokens, permisos y reglas | Responsable técnico |
Hecho cuando la cadencia corre una semana completa sin intervención fuera de la revisión matutina.
Nada pasa a "Aprobado" sin cumplir esto
Nueve formas de que se rompa, y cómo evitar cada una
| Falla | Qué pasa | Cómo evitarla |
|---|---|---|
| Canal vacío | La fila no indica la red o cuenta y el script no sabe dónde programar | Campo "Red" obligatorio; bloquear "Aprobado" si está vacío |
| Falta el título | YouTube rechaza la pieza | Validación específica por red antes de llamar a la API |
| Hora vencida sin reintento | La pieza falla, pasa la hora y nadie se entera | Alertar con antelación; si la hora pasó, marcar "Requiere nueva fecha" y avisar |
| Falso "ya publicado" | El script compara solo por hora y cree que otra pieza es la misma | Usar el ID externo como referencia, nunca solo la hora |
| TikTok en modo notificación | El video llega como borrador y nadie lo publica | Confirmar el modo de publicación; si es manual, crear un recordatorio explícito |
| Carpetas compartidas de Dropbox sin permiso | El script ve la carpeta pero no puede descargar | Revisar que la app tenga permiso de lectura de contenido compartido |
| Links temporales de Drive para carruseles | El link vence antes de la publicación y el carrusel falla | Usar enlaces estables o subir la media al programador al momento de programar |
| Equipo editando en el programador | Alguien cambia algo en la interfaz, el script lo vuelve a crear y aparecen duplicados | Todo cambio se hace en el calendario; el programador es solo lectura para el equipo |
| Zona horaria implícita | Se publica una hora antes o después | Guardar siempre la zona horaria y mostrarla en las alertas |
| Token vencido | Todo falla de golpe un lunes | Calendario de vencimientos y alerta específica de autenticación |
Mide la línea base la semana antes de empezar
Sin ese "antes", no tendrás cómo demostrar el "después". Las metas son sugeridas, no promedios de nadie.
| Métrica | Cómo se mide | Meta sugerida |
|---|---|---|
| % de piezas auto-programadas | Programadas por el script / total publicadas | ≥ 80 % |
| Rescates manuales | Piezas que alguien tuvo que publicar a mano | ≤ 2 por semana |
| Slots perdidos | Piezas aprobadas que no salieron a tiempo | 0 |
| Tiempo de respuesta a alertas | Desde la alerta hasta la corrección | < 4 horas laborales |
| Duplicados | Piezas publicadas dos veces | 0 |
| Tiempo del CM en programación | Horas por semana, antes contra después | −50 % o más |
¿Cuántas horas recupera tu CM al mes?
Mueve los controles con tus datos. Los valores iniciales son un ejemplo; la reducción parte de la meta sugerida de −50 %.
Fórmula: piezas × 4,33 semanas × minutos × reducción ÷ 60.
Tres plantillas listas para adaptar
{
"red": "youtube",
"formato": "short",
"fecha_hora": "2026-11-04T12:00:00-05:00",
"caption": "Valida tu idea en 7 días",
"titulo": "",
"media_url": "https://drive.google.com/...",
"estado": "aprobado",
"id_externo": null
}⚠️ Sync de contenido — 2 piezas necesitan atención 1) YouTube Short · mié 4 nov, 12:00 (hora Colombia) · faltan 26 h Falta: título (obligatorio, máx. 100 caracteres) Arréglalo aquí: <link a la fila> 2) Instagram Carrusel · jue 5 nov, 18:00 (hora Colombia) · faltan 56 h El archivo 3 de 5 no es accesible (permiso denegado en Drive) Arréglalo aquí: <link a la fila> ✅ 7 piezas programadas correctamente en esta ejecución. Próxima ejecución: 14:00 (hora Colombia).
Buenos días 👋 Resumen de contenido para hoy y mañana: • Programadas: 6 (3 Instagram, 2 TikTok, 1 YouTube) • Con errores: 1 → YouTube Short sin título • Sugerencias pendientes de aprobación: 2 hooks para TikTok Propuesta de título para el Short: "Valida tu idea de startup en 7 días (sin gastar en ads)" ¿Lo agrego al calendario? Responde sí / no / editar.
Ejemplos ilustrativos: las fechas, piezas y cantidades no son datos reales.