Ce document explique comment publier des vidéos simultanément sur plusieurs Pages à l’aide de l’API Live Video.
Le crosspostage n’est pas disponible pour les profils personnels. Il est réservé aux Pages et aux profils professionnels. Le crosspostage est également disponible pour les vidéos à la demande (VOD), en plus des vidéos en direct.
Pour crossposter des vidéos en direct ou à la demande sur plusieurs Pages et profils professionnels, les conditions suivantes doivent être réunies :
CREATE_CONTENT
sur la Page.pages_manage_posts
pages_read_user_content
pages_manage_engagement
pages_show_list
publish_video
Pour crossposter sur une autre Page ou un autre profil professionnel, votre Page doit envoyer une requête de crosspostage à la Page ou au profil professionnel en question, que celle-ci ou celui-ci doit accepter.
Pour demander le crosspostage, envoyez une requête POST
au point de terminaison /<YOUR_PAGE_ID>
avec les paramètres suivants :
begin_crossposting_handshake
défini sur un tableau contenant une liste de Pages séparées par une virgule dans lequel partner_page_id
est défini sur l’ID de la Page à laquelle vous envoyez la requête et allow_live
est défini sur true
.
Lorsque vous testez un appel d’API, vous pouvez inclure le paramètre access_token
, défini sur votre token d’accès. En revanche, lorsque vous effectuez des appels sécurisés depuis votre application, utilisez la classe de token d’accès.
curl -i -X POST "https://graph.facebook.com/v21.0
<PAGE_1_ID> \
?begin_crossposting_handshake=[{partner_page_id:<PAGE_2_ID>,allow_live:true}]"
Si la requête aboutit, votre application reçoit une réponse JSON dans laquelle success
est défini sur true
.
{ "success": true }
Définissez allow_live
sur false
pour envoyer une requête permettant de créer une relation de crosspostage où une Page peut crossposter des vidéos en direct sur votre Page uniquement lorsque vos admins ou éditeurs ont approuvé la vidéo.
Pour accepter la demande d’une autre Page souhaitant crossposter sa vidéo sur votre Page, envoyez une requête POST
au point de terminaison /<ID>
avec le paramètre accept_crossposting_handshake
défini sur l’ID de la Page ayant envoyé la requête et allow_live
défini sur true
.
curl -X POST "https://graph.facebook.com/v21.0
/<PAGE_2_ID>
?accept_crossposting_handshake=[{partner_page_id:<PAGE_1_ID>, allow_live:true}]"
Si la requête aboutit, votre application reçoit une réponse JSON dans laquelle success
est défini sur true
. La vidéo est alors diffusée en direct sur plusieurs Pages.
Pour refuser une demande, définissez allow_live
sur false
.
Pour identifier les Pages sur lesquelles les utilisateur·ices de votre application sont autorisé·es à crossposter, envoyez une requête GET
au point de terminaison /<PAGE_ID>/crosspost_whitelisted_pages
avec les champs suivants :
allows_live_crossposts
id
name
(facultatif)
curl "https://graph.facebook.com/v21.0
/<PAGE_ID>/crosspost_whitelisted_pages" \
-d "fields=id,name,allows_live_crossposts"
Si la requête aboutit, votre application reçoit une liste d’ID associés chacun à un nom de Page et une valeur true
ou false
indiquant si le crosspostage est autorisé ou non. true
signifie que la Page source peut publier directement sur la Page cible une vidéo en direct crosspostée, sans autre autorisation. false
signifie que la Page cible doit publier manuellement la vidéo crosspostée.
{ "data": [ { "id": "107738621396466", "name": "Crossposting Page C", "allows_live_crossposts": false }, { "id": "106589754846067", "name": "Crossposting Page B", "allows_live_crossposts": true }, { "id": "106343288214714", "name": "Crossposting Target X", "allows_live_crossposts": true, } ], "paging": { "cursors": { "before": "<PAGE_CURSOR>", "after": "<PAGE_CURSOR>" } } }
L’utilisateur·ice doit être autorisé·e à agir au nom de la Page et à modifier et mettre à jour des vidéos. Cela signifie que votre application devra disposer de l’autorisation pages_manage_posts
au nom de votre utilisateur·ice.
Une fois que les Pages disponibles pour le crosspostage sont connues, vous pouvez ajouter des crossposting_actions
à tout objet LiveVideo. Chaque action de crosspostage indique si la vidéo en direct est disponible pour le crosspostage et si elle doit être publiée automatiquement sur la Page cible.
Pour mettre à jour une vidéo, la requête est POST /{video-id}
.
curl -i -X POST \
"https://graph.facebook.com/v10.0/112103234301221?fields=crosspost_shared_pages,crossposted_broadcasts%7Bstatus,from%7Bname%7D%7D&access_token=${access_token}" \
-H "Content-Type: application/json" \
-d @- << HEREDOC
{"crossposting_actions": [
{
"page_id": "107738621396466",
"action": "enable_crossposting"
},
{
"page_id": "106589754846067",
"action": "enable_crossposting_and_create_post"
},
{
"page_id": "106343288214714",
"action": "disable_crossposting"
}
]}
HEREDOC
Ces actions montrent les options disponibles. La première autorise la première Page (107738621396466
) à crossposter la vidéo à partir de Creator Studio ou de l’API, mais ne la crossposte pas automatiquement où que ce soit. La deuxième empêche la seconde Page (106589754846067
) de crossposter la vidéo. La troisième publie automatiquement la vidéo sur la Page ciblée (106343288214714
).
Renvoie l’objet LiveVideo, et nous avons utilisé l’arête crosspost_shared_pages
pour voir sur quelles Pages il est disponible et l’arête crossposted_broadcasts
pour voir sur quelles Pages nos publications ont déjà été publiées.
Si les relations de crosspostage ont été modifiées ou ne sont pas valides, les crosspostages ne fonctionnent pas, mais ils ne déclenchent pas non plus d’erreur. Ainsi, le seul moyen de savoir si une action a réussi ou non est de rechercher les diffusions réussies dans la réponse.
{ "crosspost_shared_pages": { "data": [ { "name": "Crossposting Page C", "id": "107738621396466" }, { "name": "[FB Test Page] Crossposting Page B", "id": "106589754846067" } ] }, "crossposted_broadcasts": { "data": [ { "status": "UNPUBLISHED", "from": { "name": "[FB Test Page] Crossposting Page B", "id": "106589754846067" }, "id": "114820814022961" } ] }, "id": "112103234301221" }
Si une des crossposting_options
n’est pas valide, l’intégralité de la requête échoue. Aucun crosspostage ne réussit.
{ "error": { "message": "Fatal", "type": "OAuthException", "code": -1, "error_subcode": 1363103, "is_transient": false, "error_user_title": "Invalid Parameters", "error_user_msg": "The request does not specify valid parameters, no action has been taken.", "fbtrace_id": "AnI03n5n0Px-ihrZjkWMeTP" } }