Une vidéo verticale, quarante comptes : comment un agent diffuse Reels et Shorts avec Shager

Guide pratique de la vidéo courte diffusée par un agent : contrôle des formats, métadonnées Reels et Shorts, légendes par compte, envoi échelonné, appels MCP.

Un agent peut diffuser une même vidéo verticale courte sur des dizaines de comptes Instagram, Facebook et YouTube : il l'importe une seule fois avec ses dimensions et sa durée, crée une seule publication qui fixe le format réseau par réseau, et rédige une légende différente pour chaque compte. Shager vérifie le fichier au regard des règles de chaque réseau avant tout envoi, puis publie compte par compte, avec une pause aléatoire entre deux envois. Le vrai travail de l'agent, ce sont les métadonnées, pas l'import.

Cette dernière phrase résume toute la leçon. Une diffusion de vidéo courte échoue rarement à cause de la vidéo elle-même. Elle échoue parce que l'agent ignore que le clip dure 3 minutes et 4 secondes, ou parce que quarante comptes reçoivent la même légende, mot pour mot.

Que doit savoir l'agent sur le fichier avant de l'importer ?

Trois chiffres : la largeur, la hauteur et la durée. C'est sur cette base que les réseaux classent et acceptent les vidéos courtes, et un agent qui devine produira des publications qui tombent dans le mauvais format ou qui sont refusées.

La règle de YouTube est la plus simple à énoncer. D'après la page d'aide de Google consacrée aux Shorts YouTube de trois minutes, les vidéos mises en ligne depuis le 15 octobre 2024 au format carré ou vertical et d'une durée maximale de trois minutes sont classées comme Shorts. Un clip de 3:04 en 9:16 est donc une vidéo classique, pas un Short, quelle que soit l'intention de l'agent.

Instagram est plus souple sur le format d'image, mais a ses préférences. La documentation sur la publication de contenu de la plateforme Instagram de Meta liste les conteneurs et les codecs acceptés pour les Reels et recommande le 9:16 pour éviter tout recadrage ou espace vide. Au moment de la publication, la vidéo doit se trouver à une URL accessible publiquement, car c'est Meta qui va la chercher.

Voilà pourquoi upload_media_from_url accepte, dans Shager, les champs facultatifs width, height et duration_ms. Renseignez-les, et la vérification des Reels, des Shorts et des stories a lieu dès l'import, puis de nouveau avant la programmation, au lieu de se traduire par une publication en échec sur le 23e compte.

Si l'agent ne dispose pas de ces chiffres, il doit les obtenir avant l'import. Dans Claude Code ou Codex, un seul appel à ffprobe suffit :

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height:format=duration \
  -of json launch-teaser.mp4
Schéma : la même vidéo en vertical 9:16 pour les Reels, Shorts et stories, et en horizontal 16:9 pour une vidéo YouTube classique.
Shager vérifie le format et la durée avant l'envoi, pas après un échec.

La séquence d'appels MCP

Voici la séquence qu'exécute un agent pour un client qui a 38 comptes connectés, via le serveur MCP de Shager à https://app.shager.ai/api/mcp. Les noms d'outils sont les vrais ; les identifiants sont fictifs.

  1. whoami pour confirmer à quelle organisation appartient la clé et si elle a le droit de publier.
  2. list_workspaces pour trouver l'espace de travail du client.
  3. list_channels sur cet espace, pour voir les réseaux, l'état des comptes et les formats pris en charge.
  4. list_groups pour trouver le groupe qui réunit les comptes de cette campagne.
  5. upload_media_from_url avec les dimensions et la durée.
  6. create_post en brouillon, avec une légende par compte et un format par réseau.
  7. request_approval si le client valide les vidéos, sinon schedule_post.
  8. get_post après l'heure programmée, pour vérifier l'état de chaque compte.

L'appel d'import :

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

Le brouillon. Notez que format est défini pour chaque compte, car le même fichier est un REEL sur Instagram et Facebook, et un SHORT sur 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]
  }
}

Dans une vraie exécution, per_channel contient une entrée par compte, pas trois. C'est l'agent qui les rédige, pas un humain.

Pourquoi chaque compte a-t-il besoin de sa propre légende ?

Parce que quarante pages qui publient le même texte en moins d'une heure, c'est exactement le schéma que les systèmes anti-spam sont conçus pour repérer, et parce que c'est mal perçu par quiconque suit deux de ces pages. Le fichier auth.md de Shager demande d'ailleurs explicitement aux agents de varier les légendes d'un compte à l'autre via per_channel.

Bien varier, ce n'est pas remplacer des mots par leurs synonymes. L'agent doit ancrer chaque légende dans quelque chose de vrai pour le compte concerné : le lieu, l'équipe, l'audience. Nous détaillons la méthode dans varier les légendes de chaque compte avec l'IA, y compris la façon de garder une voix de marque stable pendant que la formulation change.

Pour la vidéo courte en particulier, gardez des légendes brèves. C'est la vidéo qui porte le message. Une légende qui répète la voix off gaspille l'espace.

Où placer le lien sur une vidéo courte ?

C'est ce que les agents ratent le plus souvent, parce qu'ils appliquent la même règle à tous les réseaux.

Sur YouTube, Google indique dans son centre d'aide que les URL dans les commentaires et les descriptions des Shorts ne sont pas cliquables, afin de limiter le spam. Un lien vers votre page de conversion placé dans le premier commentaire d'un Short reste du texte, pas un lien. Sur Instagram, les URL dans les légendes et les commentaires ne s'affichent pas non plus sous forme de liens. C'est sur les publications de pages Facebook qu'un lien en premier commentaire fonctionne comme on s'y attend.

Pour une diffusion de vidéo courte, l'agent doit donc renseigner first_comment compte par compte, uniquement là où c'est utile, et le laisser vide sur les Shorts. Shager génère quand même un lien court suivi par compte à partir de cta_url, si bien que les données de clics restent ventilées par compte partout où le lien apparaît. La méthode complète est décrite dans les liens en premier commentaire avec des agents.

Frise chronologique : les publications vers différents comptes sont réparties sur plusieurs minutes, sur une ligne distincte par réseau, au lieu de partir toutes à la même seconde.
L'étalement respecte le rythme de chaque réseau et évite de ressembler à du spam. Par défaut : 30 à 90 secondes entre les comptes d'un même réseau.

Le rythme : ce que fait vraiment stagger_seconds

stagger_seconds est une pause aléatoire, en secondes, entre les comptes d'un même réseau. La valeur par défaut est [30, 90]. Avec 38 comptes répartis sur trois réseaux, la file de chaque réseau avance de façon indépendante : les comptes Instagram sont espacés entre eux, et les chaînes YouTube entre elles.

Pour la vidéo, j'élargis généralement cet intervalle. Une diffusion sur 38 comptes avec [45, 120] prend plus de temps, mais les publications s'étalent sur une durée qui ressemble à des personnes en train de publier, pas à un script. Si le client tient à ce que tout soit en ligne avant une heure précise, l'agent doit programmer plus tôt plutôt que resserrer l'échelonnement. Nous approfondissons la question du calendrier dans la stratégie de programmation pour les agents.

Vérifier le résultat

Après l'heure programmée, l'agent appelle get_post. L'outil renvoie l'état global de la publication et l'état de chaque compte : heure de publication, URL en ligne, ou erreur. Parmi les statuts possibles figurent PUBLISHED, PARTIALLY_PUBLISHED et FAILED, les autres étant listés dans le document OpenAPI.

Un résultat PARTIALLY_PUBLISHED est normal à grande échelle. Le jeton d'un compte a expiré ; une page a perdu une autorisation. Le rôle de l'agent est de signaler ces comptes nommément à l'humain, pas de relancer à l'aveugle. Souvent, la solution consiste à envoyer un nouveau lien de connexion client pour ce seul compte.

Une version REST pour les scripts

Si le pipeline tourne depuis un script plutôt que depuis un agent conversationnel, les deux mêmes étapes en REST ressemblent à ceci :

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

Les réponses arrivent sous la forme { "data": ... }, les erreurs sous la forme { "error": { "code", "message" } }. La limite est de 120 requêtes par minute et par clé, un plafond qu'une diffusion vidéo n'approche jamais.

FAQ

L'agent peut-il publier une vidéo horizontale en tant que Short ?

Non. YouTube classe les Shorts selon le format d'image et la durée : une vidéo horizontale est donc mise en ligne comme une vidéo classique, quel que soit le format demandé. Demandez au monteur une version verticale, ou publiez la version horizontale avec format défini sur VIDEO pour YouTube, et réservez les Reels à la version verticale.

La même vidéo doit-elle partir sur tous les comptes le même jour ?

C'est possible, avec des légendes variées et un échelonnement large. Pour les grands groupes, beaucoup d'agences répartissent la diffusion sur deux ou trois jours, pour que l'audience de chaque compte ne voie pas le même clip partagé au même moment par une page voisine. L'agent peut le faire en créant des publications distinctes par groupe, avec des valeurs schedule_at différentes.

Que se passe-t-il si un compte refuse la vidéo ?

Shager vérifie chaque compte au regard des règles de son réseau avant l'envoi : la plupart des problèmes apparaissent donc dès la programmation, avec une explication claire. Si quelque chose échoue malgré tout au moment de la publication, get_post indique quel compte a échoué et pourquoi, et le reste de la diffusion n'est pas affecté.

Pour aller plus loin

Si votre agent n'est pas encore connecté, commencez par le point d'entrée des agents, qui présente le serveur MCP, l'API REST et l'auto-inscription. Diffusez ensuite une vidéo courte sur un petit groupe avant de l'étendre à toute la liste du client.

Essayez sur vos propres comptes.

Gratuit pendant le lancement, sans carte. Connectez, écrivez une fois, et Shager publie et mesure.