Un video vertical, cuarenta cuentas: cómo un agente publica Reels y Shorts con Shager
Guía práctica para agentes que distribuyen video corto: validación de formato, metadatos de Reels y Shorts, textos por cuenta, envío escalonado y MCP real.

Un agente puede distribuir un mismo video vertical corto a decenas de cuentas de Instagram, Facebook y YouTube: lo sube una sola vez con sus dimensiones y su duración, crea una única publicación que define el formato para cada red y escribe un texto distinto para cada cuenta. Shager valida el archivo contra las reglas de cada red antes de enviar nada y después lo publica cuenta por cuenta, con una pausa aleatoria entre una y otra. El verdadero trabajo del agente son los metadatos, no la subida.
Esa última frase es toda la lección. Las campañas de video corto rara vez fallan por el video en sí. Fallan porque el agente no sabe que el clip dura 3 minutos y 4 segundos, o porque cuarenta cuentas reciben exactamente el mismo texto, palabra por palabra.
¿Qué necesita saber el agente sobre el archivo antes de subirlo?
Tres números: ancho, alto y duración. Las redes clasifican y aceptan el video corto en función de ellos, y un agente que los adivina termina con publicaciones que caen en el formato equivocado o que son rechazadas.
La regla de YouTube es la más fácil de explicar. Según la propia página de ayuda de Google sobre los Shorts de tres minutos, los videos subidos desde el 15 de octubre de 2024 con relación de aspecto cuadrada o vertical y una duración de hasta tres minutos se clasifican como Shorts. Por lo tanto, un clip de 3:04 en 9:16 es un video normal, no un Short, sin importar lo que quisiera el agente.
Instagram es más flexible con la relación de aspecto, pero tiene sus preferencias. La documentación de publicación de contenido de Meta para Instagram Platform enumera los contenedores y códecs aceptados para Reels y recomienda 9:16 para evitar recortes o espacios vacíos. El video tiene que estar en una URL accesible públicamente en el momento de publicar, porque Meta lo descarga desde ahí.
Por eso upload_media_from_url en Shager acepta los campos opcionales width, height y duration_ms. Si los envías, la validación de Reels, Shorts e historias ocurre al subir el archivo y otra vez antes de programar, en lugar de aparecer como una publicación fallida en la cuenta número 23.
Si el agente no tiene esos números, debería obtenerlos antes de subir. En Claude Code o Codex basta con una llamada a ffprobe:
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height:format=duration \
-of json launch-teaser.mp4

La secuencia de llamadas MCP
Esta es la secuencia que ejecuta un agente para un cliente con 38 cuentas conectadas, usando el servidor MCP de Shager en https://app.shager.ai/api/mcp. Los nombres de las herramientas son los reales; los ID son de ejemplo.
whoamipara confirmar a qué organización pertenece la clave y si puede publicar.list_workspacespara encontrar el espacio del cliente.list_channelsen ese espacio, para ver las redes, el estado y los formatos admitidos.list_groupspara encontrar el grupo que reúne las cuentas de esta campaña.upload_media_from_urlcon las dimensiones y la duración.create_postcomo borrador, con textos por cuenta y formato por red.request_approvalsi el cliente aprueba los videos, oschedule_postsi no.get_postdespués de la hora programada, para revisar el estado de cada cuenta.
La llamada de subida:
{
"tool": "upload_media_from_url",
"arguments": {
"workspace_id": "ws_example",
"url": "https://cdn.example-agency.com/clients/aurora/launch-teaser.mp4",
"file_name": "launch-teaser.mp4",
"width": 1080,
"height": 1920,
"duration_ms": 42000
}
}
El borrador. Fíjate en que format se define por canal, porque el mismo archivo es un REEL en Instagram y Facebook y un SHORT en YouTube:
{
"tool": "create_post",
"arguments": {
"workspace_id": "ws_example",
"caption": "Aurora opens its new showroom on Thursday. 42 seconds inside.",
"media_ids": ["med_teaser"],
"youtube_title": "Inside the new Aurora showroom",
"youtube_privacy": "public",
"cta_url": "https://aurora-example.com/showroom",
"campaign": "showroom-launch",
"label": "Showroom teaser, week 38",
"per_channel": [
{ "channel_id": "ch_ig_downtown", "format": "REEL",
"caption": "Downtown team here. Thursday we open the doors, and this is what you'll see first." },
{ "channel_id": "ch_fb_northside", "format": "REEL",
"caption": "Northside customers asked for a showroom. Here's a 42 second look before Thursday." },
{ "channel_id": "ch_yt_main", "format": "SHORT",
"caption": "A first look at the new Aurora showroom, opening Thursday." }
],
"stagger_seconds": [45, 120]
}
}
En una ejecución real, per_channel tiene una entrada por cada cuenta, no tres. Las escribe el agente; no debería hacerlo una persona.
¿Por qué cada cuenta necesita su propio texto?
Porque cuarenta páginas publicando el mismo texto en menos de una hora es justo el patrón que los sistemas antispam están hechos para detectar, y porque se lee mal para cualquiera que siga dos de esas páginas. El propio auth.md de Shager les indica a los agentes, sin rodeos, que varíen el texto de cada cuenta mediante per_channel.
Una buena variación no consiste en cambiar palabras por sinónimos. El agente debería anclar cada texto en algo real de esa cuenta: la ubicación, el equipo, el público. Explicamos el método en detalle en variación de textos por cuenta con IA, incluido cómo mantener estable la voz de la marca mientras cambia la redacción.
En el video corto en particular, los textos deben ser breves. El mensaje lo lleva el video. Un texto que repite la voz en off desperdicia el espacio.
¿Dónde va el enlace en un video corto?
Esta es la parte en la que los agentes se equivocan más seguido, porque aplican la misma regla a todas las redes.
En YouTube, Google indica en su centro de ayuda que las URL en los comentarios y en las descripciones de los Shorts no son clicables, para reducir el spam. Un enlace de captación en el primer comentario de un Short es texto, no un enlace. En Instagram, las URL en el texto y en los comentarios tampoco se muestran como enlaces. Las publicaciones de páginas de Facebook son donde un enlace en el primer comentario funciona como la gente espera.
Así que, en una campaña de video corto, el agente debería definir first_comment por canal solo donde sea útil y dejarlo vacío en los Shorts. Shager igualmente genera un enlace corto con seguimiento por cuenta a partir de cta_url, así que los datos de clics se mantienen separados por cuenta allí donde el enlace sí aparece. La guía completa está en enlaces de captación en el primer comentario con agentes.

El ritmo: qué hace realmente stagger_seconds
stagger_seconds es una pausa aleatoria, en segundos, entre las cuentas de una misma red. El valor predeterminado es [30, 90]. Con 38 cuentas repartidas entre tres redes, la cola de cada red avanza por su cuenta: las cuentas de Instagram se espacian entre sí, y los canales de YouTube entre sí.
Con video, yo suelo ampliarlo. Una ejecución de 38 cuentas con [45, 120] tarda más en terminar, pero las publicaciones se reparten en un periodo que parece gente publicando, no un script. Si al cliente le importa que todo esté en vivo antes de una hora concreta, el agente debería programar más temprano en lugar de acortar el escalonamiento. Profundizamos en los horarios en estrategia de programación para agentes.
Revisar el resultado
Después de la hora programada, el agente llama a get_post. Devuelve el estado general de la publicación y el estado de cada cuenta: hora de publicación, URL en vivo o el error. Entre los estados de publicación están PUBLISHED, PARTIALLY_PUBLISHED y FAILED, junto con otros que figuran en el documento OpenAPI.
Un resultado PARTIALLY_PUBLISHED es normal a escala. A una cuenta se le venció el token; una página perdió un permiso. El trabajo del agente es informar a la persona de esas cuentas por su nombre, no reintentar a ciegas. Muchas veces la solución es un nuevo enlace de conexión para el cliente, solo para esa cuenta.
Una versión REST para scripts
Si el pipeline corre desde un script y no desde un agente de chat, los mismos dos pasos por REST se ven así:
curl -s https://app.shager.ai/api/v1/workspaces/ws_example/media \
-H "Authorization: Bearer $SHAGER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://cdn.example-agency.com/clients/aurora/launch-teaser.mp4",
"file_name":"launch-teaser.mp4","width":1080,"height":1920,"duration_ms":42000}'
curl -s https://app.shager.ai/api/v1/workspaces/ws_example/posts \
-H "Authorization: Bearer $SHAGER_API_KEY" \
-H "Content-Type: application/json" \
-d @teaser-post.json
Las respuestas llegan como { "data": ... } y los errores como { "error": { "code", "message" } }. El límite es de 120 solicitudes por minuto por clave, algo que una ejecución de un solo video nunca llega a rozar.
Preguntas frecuentes
¿Puede el agente publicar un video horizontal como Short?
No. YouTube clasifica los Shorts por relación de aspecto y duración, así que un video horizontal se sube como video normal, sin importar el format que pidas. Pídele al editor una versión vertical, o publica la horizontal con format en VIDEO en YouTube y reserva los Reels para la vertical.
¿El mismo video debería llegar a todas las cuentas el mismo día?
Puede hacerlo, con textos variados y un escalonamiento amplio. Con grupos grandes, muchas agencias reparten la ejecución en dos o tres días para que el público de cada cuenta no vea el mismo clip compartido por una página vecina a la misma hora. El agente puede lograrlo creando publicaciones separadas por grupo con distintos valores de schedule_at.
¿Qué pasa si una cuenta rechaza el video?
Shager revisa cada cuenta contra las reglas de su red antes de enviar, así que la mayoría de los problemas aparecen al programar, con un motivo claro. Si algo falla igualmente al publicar, get_post muestra qué cuenta falló y por qué, y el resto de la ejecución no se ve afectado.
Por dónde seguir
Si tu agente todavía no está conectado, empieza por el punto de entrada para agentes, que cubre el servidor MCP, la API REST y el alta autónoma. Después publica un video corto en un grupo pequeño antes de apuntarlo a toda la lista de clientes.


