Um vídeo vertical, quarenta contas: como um agente distribui Reels e Shorts pelo Shager

Guia prático para agentes que distribuem vídeo curto: checagem de formato, metadados de Reels e Shorts, legenda por conta, envio escalonado e chamadas MCP.

Um agente consegue distribuir um vídeo vertical curto para dezenas de contas do Instagram, do Facebook e do YouTube enviando o arquivo uma única vez com as dimensões e a duração, criando um só post que define o formato de cada rede e escrevendo uma legenda diferente para cada conta. O Shager valida o arquivo segundo as regras de cada rede antes de enviar qualquer coisa e depois dispara conta por conta, com uma pausa aleatória entre elas. O trabalho de verdade do agente está nos metadados, não no upload.

Essa última frase resume a lição. Uma distribuição de vídeo curto raramente falha por causa do vídeo em si. Ela falha porque o agente não sabe que o vídeo tem 3 minutos e 4 segundos, ou porque quarenta contas recebem exatamente a mesma legenda, palavra por palavra.

O que o agente precisa saber sobre o arquivo antes do upload?

Três números: largura, altura e duração. As redes classificam e aceitam vídeos curtos com base neles, e um agente que chuta vai gerar posts que caem no formato errado ou são rejeitados.

A regra do YouTube é a mais fácil de explicar. Segundo a própria página de ajuda do Google sobre Shorts de três minutos, vídeos enviados desde 15 de outubro de 2024 com proporção quadrada ou vertical e duração de até três minutos são classificados como Shorts. Um vídeo de 3:04 em 9:16, portanto, é um vídeo comum, não um Short, não importa a intenção do agente.

O Instagram é mais flexível com a proporção, mas tem as suas preferências. A documentação de publicação de conteúdo da Meta para a Instagram Platform lista os contêineres e codecs aceitos para Reels e recomenda 9:16 para evitar cortes ou faixas vazias. O vídeo precisa estar em uma URL acessível publicamente no momento da publicação, porque é a Meta que vai buscá-lo.

É por isso que o upload_media_from_url do Shager aceita os campos opcionais width, height e duration_ms. Se você os informar, a validação de Reels, Shorts e stories acontece no upload e de novo antes do agendamento, em vez de aparecer como um post com falha na conta número 23.

Se o agente não tiver esses números, deve obtê-los antes do upload. No Claude Code ou no Codex, basta uma chamada ao ffprobe:

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height:format=duration \
  -of json launch-teaser.mp4
Diagrama: o mesmo vídeo na vertical 9:16 para Reels, Shorts e stories, e na horizontal 16:9 para um vídeo comum do YouTube.
O Shager verifica a proporção e a duração antes de enviar, não depois de uma falha.

A sequência de chamadas MCP

Esta é a sequência que um agente executa para um cliente com 38 contas conectadas, usando o servidor MCP do Shager em https://app.shager.ai/api/mcp. Os nomes das ferramentas são os reais; os IDs são fictícios.

  1. whoami para confirmar a qual organização a chave pertence e se ela pode publicar.
  2. list_workspaces para encontrar o espaço de trabalho do cliente.
  3. list_channels desse espaço de trabalho, para ver redes, status e formatos suportados.
  4. list_groups para encontrar o grupo que reúne as contas desta campanha.
  5. upload_media_from_url com as dimensões e a duração.
  6. create_post como rascunho, com legendas por conta e formato por rede.
  7. request_approval se o cliente aprova os vídeos, ou schedule_post se não aprova.
  8. get_post depois do horário agendado, para conferir o estado de cada conta.

A chamada de upload:

{
  "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
  }
}

O post em rascunho. Repare que o format é definido por canal, porque o mesmo arquivo é um REEL no Instagram e no Facebook e um SHORT no 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]
  }
}

Em uma execução real, o per_channel tem uma entrada para cada conta, não só três. Quem escreve é o agente; não deveria ser uma pessoa.

Por que cada conta precisa da sua própria legenda?

Porque quarenta páginas publicando o mesmo texto em menos de uma hora é justamente o padrão que os sistemas antispam foram feitos para detectar, e porque a leitura fica ruim para quem segue duas dessas páginas. O próprio auth.md do Shager orienta os agentes, com todas as letras, a variar as legendas de cada conta pelo per_channel.

Variar bem não é trocar palavras por sinônimos. O agente deve ancorar cada legenda em algo verdadeiro sobre aquela conta: a localização, a equipe, o público. Explicamos o método em detalhes em variação de legenda por conta com IA, incluindo como manter a voz da marca estável enquanto o texto muda.

No caso do vídeo curto, mantenha as legendas curtas. A mensagem está no vídeo. Uma legenda que repete a narração desperdiça o espaço.

Onde fica o link no vídeo curto?

É aqui que os agentes mais erram, porque aplicam uma única regra a todas as redes.

No YouTube, o Google afirma na central de ajuda que URLs nos comentários e nas descrições de Shorts não são clicáveis, para reduzir o spam. Um link de captação no primeiro comentário de um Short é texto, não link. No Instagram, URLs em legendas e comentários também não viram links. Os posts de páginas do Facebook são onde um link no primeiro comentário se comporta como as pessoas esperam.

Então, numa distribuição de vídeo curto, o agente deve definir o first_comment por canal só onde ele for útil, e deixá-lo vazio nos Shorts. O Shager continua gerando um link curto rastreável por conta a partir do cta_url, e assim os dados de cliques continuam separados por conta onde quer que o link apareça. O passo a passo completo está em links de captação no primeiro comentário com agentes.

Diagrama de linha do tempo: os posts em contas diferentes se distribuem ao longo de minutos, em uma faixa separada por rede, em vez de saírem todos no mesmo segundo.
O escalonamento respeita o ritmo de cada rede e evita parecer spam. Padrão: de 30 a 90 segundos entre contas da mesma rede.

Ritmo: o que o stagger_seconds realmente faz

O stagger_seconds é uma pausa aleatória, em segundos, entre contas da mesma rede. O padrão é [30, 90]. Com 38 contas divididas entre três redes, a fila de cada rede anda de forma independente: as contas do Instagram são espaçadas entre si, e os canais do YouTube entre si.

Para vídeo, eu costumo aumentar o intervalo. Uma execução de 38 contas com [45, 120] demora mais para terminar, mas os posts se espalham por um período que parece gente publicando, não um script. Se o cliente faz questão de que tudo esteja no ar antes de um horário específico, o agente deve agendar mais cedo em vez de apertar o escalonamento. Falamos mais sobre horários em estratégia de agendamento para agentes.

Conferindo o resultado

Depois do horário agendado, o agente chama get_post. A resposta traz o estado geral do post e o estado de cada conta: horário de publicação, URL no ar ou o erro. Os status de post incluem PUBLISHED, PARTIALLY_PUBLISHED e FAILED, entre outros listados no documento OpenAPI.

Um resultado PARTIALLY_PUBLISHED é normal em escala. O token de uma conta expirou; uma página perdeu uma permissão. O papel do agente é informar essas contas pelo nome à pessoa responsável, não ficar tentando de novo às cegas. Muitas vezes, a solução é um novo link de conexão do cliente só para aquela conta.

Uma versão REST para scripts

Se o pipeline roda a partir de um script, e não de um agente em chat, os mesmos dois passos via REST ficam assim:

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

As respostas voltam como { "data": ... }, e os erros como { "error": { "code", "message" } }. O limite é de 120 requisições por minuto por chave, e uma execução de um único vídeo nunca chega perto disso.

Perguntas frequentes

O agente pode publicar um vídeo horizontal como Short?

Não. O YouTube classifica os Shorts pela proporção e pela duração, então um vídeo horizontal sobe como vídeo comum, seja qual for o format que você pedir. Peça ao editor uma versão vertical, ou publique a versão horizontal com o format definido como VIDEO no YouTube e deixe os Reels para a vertical.

O mesmo vídeo deve ir para todas as contas no mesmo dia?

Pode ir, com legendas variadas e um escalonamento amplo. Em grupos grandes, muitas agências dividem a execução em dois ou três dias, para que o público de cada conta não veja o mesmo vídeo compartilhado por uma página vizinha no mesmo horário. O agente pode fazer isso criando posts separados por grupo, com valores diferentes de schedule_at.

O que acontece se uma conta rejeitar o vídeo?

O Shager verifica cada conta segundo as regras da sua rede antes de enviar, então a maioria dos problemas aparece já no agendamento, com um motivo claro. Se algo ainda falhar na hora da publicação, o get_post mostra qual conta falhou e por quê, e o resto da execução não é afetado.

Para onde ir agora

Se o seu agente ainda não está conectado, comece pela porta de entrada para agentes, que cobre o servidor MCP, a API REST e o autocadastro. Depois, distribua um vídeo curto para um grupo pequeno antes de apontá-lo para a lista inteira de clientes.

Experimente nas suas próprias contas.

Grátis durante o lançamento, sem cartão. Conecte, escreva uma vez, e o Shager publica e mede.