Facebook Business Extension (FBE) permet à vos utilisateurs et utilisatrices d’importer facilement des éléments de contenu publicitaire dans la famille d’applications Meta en se connectant à un Business Manager existant ou nouveau. En utilisant le Business Manager renvoyé à l’issue de ce processus, les partenaires peuvent importer des éléments de contenu publicitaire sur Facebook au nom de leurs client·es.
Ce document présente les principales conditions requises pour le processus de Contenu publicitaire FBE, ainsi que les étapes nécessaires à sa réalisation. Veuillez consulter le guide Facebook Business Extension pour obtenir des détails spécifiques sur les intégrations en général.
Exemple : Processus d’intégration de la plateforme partenaire (Business Login)
Inscrivez-vous en tant que développeur·se Facebook pour accéder à nos outils destinés aux équipes de développement et créer des applications Facebook.
Si vous ne l’avez pas déjà fait, créez une application Meta.
Votre application Meta doit appartenir à un Business Manager qui est une entreprise vérifiée. Obtenez plus d’informations sur la procédure de vérification de votre entreprise.
Créez une app test qui vous permettra de réaliser tous vos nouveaux développements et vos tests. Assurez-vous d’affecter un Business Manager différent à votre app test.
Autorisations/Fonctionnalités privées :
manage_business_extension
: permet d’accéder à Facebook Business Extension. Une fois que cette fonctionnalité est accordée à votre application, le FBE Developer Panel est disponible sous Produits.
Business_creative_asset_management
: permet d’accéder aux API de gestion des éléments de contenu publicitaire. Une fois que cette fonctionnalité vous a été accordée, vous pouvez accéder aux autorisations suivantes :
business_creative_insights
: permet d’accéder aux insights sur les éléments de contenu publicitaire professionnel.
business_creative_management
: permet à votre application de créer, modifier et partager de nouveaux dossiers et d’y importer des éléments dans le contexte de votre propre entreprise.
business_creative_insights_share
(en cours de développement) : autorisation facultative utilisée dans le processus de partage de dossiers. Si l’utilisateur·ice l’autorise, votre application pourra partager le dossier de contenu publicitaire avec d’autres entreprises et leur permettre de consulter les insights sur les éléments de contenu publicitaire.
Générez un token d’accès partenaire :
Générez un token d’accès d’utilisateur système admin sous votre Business Manager en suivant ces instructions.
Assurez-vous que les autorisations business_creative_insights
, business_creative_management
et business_management
sont sélectionnées pour ce token à l'étape « champs d’action disponibles ».
Ce bouton permet d’envoyer un élément à la bibliothèque Facebook Media de l’utilisateur·ice à partir de votre application. Au cours de ce processus, votre application devra permettre à l'utilisateur·ice de sélectionner ou de créer un dossier vers lequel envoyer l’élément.
Nous recommandons deux approches pour y parvenir :
1. (Au minimum) L'utilisateur·ice ne peut que choisir ou créer un dossier de premier niveau. Dans le contexte d’entreprise autorisée, interrogez tous les dossiers de premier niveau auxquels l'utilisateur·ice a accès. Demandez à l'utilisateur·ice de choisir un dossier de premier niveau existant ou d'en créer un nouveau. Les utilisateurs et utilisatrices peuvent soit spécifier le nom du dossier, soit utiliser le nom de dossier par défaut <YourBusinessName>_<UserBusinessName>_<UserName>
. Importez les éléments dans le dossier de premier niveau sélectionné ou nouveau. Cette approche nécessite un travail minimal au niveau de l'UI, et les détails de l'API figurent à l’Étape 3 ci-dessous.
2. (Facultatif) L'utilisateur·ice a le contrôle total de la navigation dans les dossiers et sous-dossiers. Dans le contexte d’entreprise autorisée, interrogez tous les dossiers de premier niveau auxquels l'utilisateur·ice a accès, et demandez à ce dernier ou cette dernière de choisir un dossier de premier niveau existant ou d'en créer un nouveau. Pour un nouveau dossier, vous pouvez demander à l'utilisateur·ice de nommer le dossier ou d’utiliser le nom par défaut <YourBusinessName>_<UserBusinessName>_<UserName>
. Sous le dossier de premier niveau sélectionné, l'utilisateur·ice a la possibilité d’accéder à un sous-dossier existant, de créer un nouveau sous-dossier ou d’importer des éléments. Avec cette option, vous devrez implémenter la navigation par dossier dans votre UI. Des instructions sur l’intégration de l’API sont disponibles dans l’Étape 3 et l’Étape 4 ci-dessous.
Les étapes spécifiques requises pour implémenter ce processus sont les suivantes :
Lorsque l'utilisateur·ice envoie un élément de contenu publicitaire à Facebook pour la première fois, vous devez demander à Facebook Business Extension de lui demander de s'authentifier et d'accorder à votre application les autorisations nécessaires et l'accès aux éléments, sous la forme de tokens d'accès, afin qu’il ou elle puisse accéder à ses données sur Facebook. Consultez Facebook Business Extension : premiers pas pour implémenter Facebook Business Extension dans votre application. Suivez le guide Applications d’entreprise pour rendre votre application compatible avec les applications d’entreprise.
Pour exécuter le processus de Contenu publicitaire :
business_creative_management
et business_creative_insights
.
business_creative_insights_share
.
VIEW_INSIGHTS
.En utilisant le token d'accès de l'utilisateur·ice renvoyé par cette invite, vous pouvez effectuer des appels d'API au nom de cet·te utilisateur·ice.
Champ | Type | Description |
---|---|---|
| configuration | Obligatoire Paramètres de configuration Facebook du vendeur, tels que son identifiant unique ( |
| business_config | Obligatoire Objet de configuration utilisé par Facebook Business Extension pour configurer le flux de travail de Facebook Business Extension. Voir Détails sur l’objet |
| booléen | Obligatoire Définir cette valeur sur |
Utilisez cet objet pour définir les paramètres de présence Facebook de l’utilisateur ou l’utilisatrice final·e.
Champ | Description |
---|---|
| Obligatoire. |
| Obligatoire. |
| Obligatoire. |
| Obligatoire. |
| Obligatoire.
|
| Facultatif. |
Utilisez cet objet pour configurer les paramètres de l’entreprise d’un utilisateur ou d’une utilisatrice final·e. Il comprend les CTA, la carte de services, etc. Chaque champ comprend un « type » lié aux tableaux respectifs ci-dessous.
Champ | Description |
---|---|
| Obligatoire. |
Utilisez cet objet pour configurer le nom de l’entreprise.
Champ | Description |
---|---|
| Obligatoire. |
Une fois que l'utilisateur·ice aura terminé le processus d’intégration FBE ci-dessus, vous recevrez l'ID du Business Manager et le token d'accès de l'utilisateur·ice via l’API FBE Installation, ou une notification Webhook.
Les utilisateur·ices peuvent importer des éléments dans le dossier de premier niveau ou créer des sous-dossiers sous ce dossier.
Tout d'abord, vérifiez les dossiers de premier niveau auxquels l'utilisateur·ice a accès pour la tâche CREATE_CONTENT
, en effectuant une demande au point de terminaison <business_id>/creative_folders
(en cours de développement).
Requête
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<user_business_id>/creative_folders?filtering=[{field:"permitted_tasks", operator: "EQUAL", value:"create_content"}]
Réponse
{ "id": "<folder_id>" }
Demandez à l’utilisateur·ice de choisir un dossier de premier niveau existant ou d’en créer un nouveau dans le contexte de son Business Manager. Pour un nouveau dossier de premier niveau, vous pouvez demander à l'utilisateur·ice de nommer le dossier ou d’utiliser le <YourBusinessName>_<UserBusinessName>_<UserName>
par défaut. Si l'utilisateur·ice partage le dossier avec vous, il ou elle sera visible à la fois pour votre entreprise et pour celle de l'utilisateur·ice dans la bibliothèque d’éléments Facebook.
Remarque : le nom d'entreprise de l'utilisateur·ice peut être obtenu en envoyant une demande GET
au point de terminaison {business-id}
où {business-id}
est l'ID d'entreprise de l'utilisateur·ice.
Requête
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>
Réponse
{ "id": {business-id} "name": {user-business-name} }
Requête
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
Réponse
{ "id": {top-level-folder-id} }
Si vous souhaitez prendre en charge le processus de navigation complet par dossier, demandez à l'utilisateur·ice de choisir un sous-dossier existant ou d'en créer un nouveau sous le dossier de premier niveau à l'aide des demandes suivantes :
business_creative_management
Requête
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<parent_folder_id>/subfolders?fields=name
Réponse
{ "data": [ { "name": "<subfolder_name>", "id": "<subfolder_id>" } ] }
business_creative_management
Requête
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F "parent_folder_id={parent-folder-id}" -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
Réponse
{ "id": {sub-folder-id} }
Vous pouvez supprimer le dossier et le sous-dossier en envoyant une requête DELETE
au point de terminaison <folder_id>
ou <subfolder_id>
.
Importez les éléments de contenu publicitaire de l'utilisateur·ice dans le sous-dossier.
business_creative_management
Requête
curl -X POST \ -F 'bytes={image-content-in-bytes-format}' \ -F 'name={image-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ https://graph.facebook.com/{version}/{business-id}/images
Réponse
{ "images":{ "{image-name}":{ "id":"{business-creative-image-id}", "hash":"{hash}", "url":"{image-url}" } } }
Importez une vidéo en une seule fois si elle fait moins de quelques mégaoctets. Sinon, chargez-la par segments (consultez la section suivante ci-dessous). Effectuez votre appel d’API pour l’importation de la vidéo à graph-video.facebook.com
au lieu de graph.facebook.com
.
Exemple : envoyez un POST
à {business-id}/video
en indiquant le nom de votre vidéo, la source et l'ID du sous-dossier.
Requête
curl -X POST \ -F 'name={video-name}' \ -F 'source='@{video-path}'' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ https://graph-video.facebook.com/{version}/{business-id}/videos
Réponse
{ "success": true, "business_video_id": "<business_video_id>" }
Pour les vidéos plus volumineuses, envoyez une demande de démarrage, une ou plusieurs demandes de transfert et une demande de fin.
Pour effectuer une demande de démarrage et créer une session d’importation de vidéo, envoyez une demande POST
à /{business-id}/videos
, définissez le champ upload_phase
sur démarrage, et spécifiez file_size
en octets
Requête
curl -X POST \ -F 'title={video-name}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'access_token={user-access-token}' \ -F 'upload_phase=start' \ -F 'file_size={video_file_size_in_bytes}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
Réponse
{ "upload_session_id": "{session-id}", "video_id": "{video-id}", "start_offset": "0", "end_offset": "52428800" }
Pour importer [0, 52428800] à partir de votre vidéo, découpez le fichier en segments en fonction des décalages de début et de fin, puis envoyez ces segments avec les demandes de transfert. Nous vous envoyons de nouveaux décalages pour chaque segment ; utilisez ces nouveaux décalages pour importer chaque segment.
Exemple : envoyer votre premier segment
Requête
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'upload_phase=transfer' \ -F 'upload_session_id={session-id}' \ -F 'start_offset=0' \ -F 'video_file_chunk=@{binary-chunk-filename}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
Réponse
En cas de réussite, nous répondons par les décalages de votre prochain segment.
{ "start_offset": "52428800", //Start byte position of the next file chunk "end_offset": "104857601" //End byte position of the next file chunk }
Coupez et importez le deuxième segment avec la plage [52428800, 104857601] depuis votre fichier et envoyez-le :
Requête
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'upload_phase=transfer' \ -F 'start_offset=52428801' \ -F 'upload_session_id={your-upload-sesson-id}' \ -F 'video_file_chunk={binary-chunk-filename}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
Réponse
Envoyez tous les segments supplémentaires jusqu’à ce que start_offset
soit égal à end_offset
:
{ "start_offset": "152043520", "end_offset": "152043520" }
La réponse ci-dessus signifie que vous avez importé le fichier dans son intégralité. Vous devez maintenant publier cette vidéo et terminer la session d’importation.
Requête
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={business-creative-folder-id}' \ -F 'upload_phase=finish' \ -F 'upload_session_id={session-id}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
Si vous obtenez des erreurs lors d’une importation, vous pouvez réessayer d’importer le segment concerné. En général, les erreurs sont dues à des problèmes de réponse. Recommencez votre importation pour le segment ayant échoué. Pour en savoir plus sur les erreurs, consultez :
Votre application doit informer l'utilisateur·ice que l’importation a réussi et présenter un lien profond vers ce contenu publicitaire derrière un call-to-action « Voir le contenu publicitaire dans ma bibliothèque d’éléments Facebook ». Le lien profond du dossier ou de l’élément est :
https://business.facebook.com/asset_library/business_creatives/?object_id={asset_id or folder id}
(en cours de développement)
Ce lien renvoie l'utilisateur·ice vers la page de sélection de l’entreprise si l'utilisateur·ice a plusieurs Business Managers. Afin de lever toute ambiguïté quant à l’entreprise, vous pouvez fournir le contexte de l’entreprise dans l'URL comme suit :
https://business.facebook.com/asset_library/business_creatives/?object_id={asset_id or folder id}&business_id={client_business_id}
Vous pouvez également obtenir l’URL du lien profond en envoyant une requête GET
au point de terminaison :
curl -X GET \ /<folder_id or asset_id> ?fields=['media_library_url'] &access_token=<user_access_token>
Le lien permet à l’utilisateur·ice d’accéder au dossier ou à l’élément directement sous la bibliothèque d’éléments Facebook.
Vous pouvez demander que le dossier de premier niveau soit partagé avec vous si vous souhaitez gérer le dossier ou consulter les insights relatifs aux éléments. Envoyez une demande POST
à : {business-creative-folder-id}/agencies
et affectez permitted_tasks
à CREATE_CONTENT
.
Remarque : vous pouvez également affecter la tâche autorisée VIEW_INSIGHTS
si l'utilisateur·ice accorde business_creative_insights_share
à votre application (en cours de développement).
business_creative_management
Requête
curl -X POST \ -F 'permitted_tasks=['CREATE_CONTENT','VIEW_INSIGHTS']' \ -F 'business={partner-business-id} ' \ -F 'access_token={user-access-token}' https://graph.facebook.com/<API_VERSION>/<BUSINESS_CREATIVE_FOLDER_ID>/agencies
La réponse est de l’un des deux types suivants, selon le rôle de l’utilisateur·ice dans l’organisation de son entreprise :
L'API établira un accord de partenariat entre l'entreprise de l’utilisateur·ice et l'entreprise du client ou de la cliente.
Réponse
S’il existe un accord de partenariat établi entre l’entreprise de l’utilisateur·ice et votre entreprise (l’entreprise de l’utilisateur·ice a partagé un dossier avec vous, et vous avez accepté une demande de partage auparavant) :
{ "success": true }
Si vous n’avez pas encore accepté de demande de partage de la part de l’entreprise de l’utilisateur·ice :
{ "success": true, "share_status": "In Progress" }
Dans ce scénario, votre entreprise devra accepter la demande de partage avant de pouvoir accéder à toutes les fonctionnalités activées par le partage (affichage, création, etc.).
Pour répertorier tous les accords de partenariat en attente d'approbation, envoyez une demande à {business-id}/received_sharing_agreements
en utilisant votre token d'accès partenaire et définissez request_status
sur IN_PROGRESS
. Pour effectuer cette action, vous devez disposer des autorisations business_creative_management
et business_management
.
Répertorier tous les accords de partenariat
Requête
curl -i -X GET https://graph.facebook.com/<API_VERSION>/<PARTNER_BUSINESS_ID>/received_sharing_agreements ?request_status=IN_PROGRESS &access_token={partner-access-token}"
Vous pouvez accepter une demande de partage en envoyant un POST
à business_sharing_agreement_request_id
et définir request_status
sur APPROVE
. L’action n’est nécessaire que lors du premier partage d’un dossier avec votre entreprise. Pour effectuer cette action, vous devez disposer de l’autorisation business_management
:
Accepter les accords de partenariat
Requête
curl -X POST \ -F 'request_status=APPROVE' \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_SHARING_AGREEMENT_REQUEST_ID>
Réponse
{ "success": true }
Vous pouvez également approuver les demandes de partage en attente dans l’UI de Business Manager. Pour consulter les demandes en attente dans Business Manager, accédez à Paramètres > Demandes > Demandes reçues, où vous pouvez voir plus d'informations sur la demande.
L'API déclenche un workflow de notification destiné à envoyer un e-mail de notification aux admins de l'entreprise afin qu'ils approuvent la demande.
Réponse
{ "success": true, "share_status": "Pending" }
En réponse à cet état, votre application doit informer l’utilisateur·ice des faits suivants :
Pour répertorier tous les accords en attente qui ont été initiés dans l'entreprise de l'utilisateur·ice, envoyez une demande à {business-id}/attempted_sharing_agreements
et définissez request_status
sur IN_PROGRESS
, définissez requesting_business_id
sur l'ID du Business Manager de l'utilisateur·ice. Pour exécuter cette action, vous devez disposer des autorisations business_creative_management
et business_management
.
Répertorier tous les accords de partage de dossiers en attente
Requête
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<PARTNER_BUSINESS_ID>/attempted_sharing_agreements ?request_status=IN_PROGRESS &requesting_business_id=<user_business_id> &access_token={partner-access-token}
Répertorier tous les accords de partage de dossiers en attente avec l’ID de la demande
Sinon, si vous disposez de l'ID de la demande, vous pouvez obtenir directement le statut en envoyant une demande à {request_id}
.
business_creative_management
Requête
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<REQUEST_ID>?fields=status
Lorsqu’un admin de l’entreprise approuve la demande, le statut passe à APPROVE
, et le dossier est partagé à nouveau avec votre Business Manager si l’entreprise de l’utilisateur·ice et votre entreprise ont établi une relation d’accord de partage (l’entreprise de l’utilisateur·ice a partagé un dossier avec vous, et vous avez accepté une demande de partage auparavant). Sinon, le share_status
est mis à jour sur IN_PROGRESS
. Vous pouvez répertorier tous les accords de partenariat avec le statut IN_PROGRESS
et les accepter via l'API ou dans l’UI du Business Manager.
Lorsque l'utilisateur·ice partage un dossier avec l'autorisation de la tâche VIEW_INSIGHTS
, vous pouvez lire les insights des images et vidéos d'entreprise sous le dossier partagé en envoyant une demande GET
au point de terminaison <business_asset_id>/insights
.
business_creative_management
et business_creative_insights
.Requête
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ASSET_ID>/insights ?breakdowns=["age","gender"] &fields=impressions,inline_link_clicks,age,gender,date_start, &time_range={"since":"2019-08-01","until":"2019-08-22"} &access_token={partner-access-token}"
Réponse
{ "data": [ { "impressions": 99, "inline_link_clicks": 1, "age": "18-24", "gender": "female", "date_start": "2019-08-01", "date_end": "2019-08-22" }, { "impressions": 198, "inline_link_clicks": 2, "age": "18-24", "gender": "male", "date_start": "2019-08-01", "date_end": "2019-08-22" }, { "impressions": 464, "inline_link_clicks": 2, "age": "25-34", "gender": "female", "date_start": "2019-08-01", "date_end": "2019-08-22" }, ] }
La répartition peut être effectuée par :
gender
age
country
publisher_platform
platform_position
device_platform
ad_id
objective
optimization_goal
time_range
(nécessite une date au format « AAAA-MM-JJ », ce qui implique un début à minuit de ce jour-là.)Pour les partenaires de services géré·es, vous pouvez gérer le dossier de premier niveau à l'aide d'un token d'accès partenaire s’il a été partagé avec les tâches autorisées appropriées qui vous sont accordées :
CREATE_CONTENT
sur le dossier, ce qui permet à votre application de créer des sous-dossiers et d’importer des images et des vidéos dans le dossier.VIEW_INSIGHTS
, que votre application peut utiliser pour voir les performances de tous les éléments de contenu publicitaire stockés dans ce dossier.Appelez le point de terminaison <business_id>/creative_folders
pour obtenir tous les dossiers parents qui sont partagés avec vous sous l'entreprise de l'utilisateur·ice.
business_creative_management
Obtenir les dossiers de l'entreprise de l'utilisateur
Requête
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<partner_business_id>/creative_folders?filtering=[{field:"owner_business_id", operator:"EQUAL", value:"user_business_id"}]
Réponse
{ "data": [ { "id": "<shared_folder_id>" } ] }
Obtenir les tâches autorisées dont vous disposez sur le dossier
Requête
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<folder_id>/agencies
Réponse
{ "data": [ { "id": "<partner_business_id>", "name": "<partner business name>", "permitted_tasks": [ "VIEW_INSIGHTS", "VIEW_CONTENT", "CREATE_CONTENT", "MANAGE_CONTENT", "MANAGE_PERMISSIONS"] } ], }
CREATE_CONTENT
est nécessaire pour importer des images et des vidéos dans un dossier partagé.VIEW_INSIGHTS
est nécessaire pour interroger les insights relatifs aux contenus publicitaires des images ou vidéos sous un dossier partagéAvec l'autorisation de tâche CREATE_CONTENT
sur le dossier parent, vous pouvez créer un sous-dossier dans un dossier partagé.
business_creative_management
Créer le sous-dossier
Requête
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F "parent_folder_id={parent-folder-id}" -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
Réponse
{ "id": {subfolder-id} }
Suivez les mêmes étapes que celles indiquées dans l’Étape 5. Importer des images et des vidéos dans un sous-dossier à l’aide d’un token de partenaire.
Lorsque votre application importe une image ou une vidéo dans la bibliothèque d’éléments Facebook, l'API de Facebook renvoie un ID pour cet élément.
Afin d’assurer la continuité, votre application devra suivre l'ID de l’élément en fonction du projet/de l’espace de travail qui a produit cette image/vidéo dans votre application.
Cela permettra de rationaliser les prochains cas d'utilisation « modification » et « mise à jour » pris en charge, par exemple :
media_library_url
de l’élément image/vidéo importéRequête
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<asset_id>?fields=media_library_url
&action=CREATE_AD
ou &action=CREATE_POST
à la fin du lien profond de l'étape précédente.Exemple :
https://business.facebook.com/asset_library/business_creatives/?object_id=2838437832929622&action=CREATE_AD