Gérer le statut de votre objet publicitaire

Les campagnes publicitaires, les ensembles de publicités et les publicités affichent l’un des types de statut suivants :

  • En direct
  • Archivé(e)
  • Supprimé(e)

Pour plus d’informations de fond, consultez le blog des développeur·ses de publicités, objets supprimés et archivés.

En direct

Les objets publicitaires en direct peuvent afficher les statuts suivants :

  • ACTIVE
  • PAUSED
  • PENDING_REVIEW
  • CREDIT_CARD_NEEDED
  • PREAPPROVED
  • DISABLED
  • PENDING_PROCESS
  • WITH_ISSUES

Archivé(e)

Définissez le statut de l’objet publicitaire sur ARCHIVED en définissant le champ status sur ARCHIVED. Lorsque le statut d’un objet est défini sur ARCHIVED, vous pouvez continuer à envoyer des requêtes pour obtenir des détails et des statistiques en fonction de l’identifiant de l’objet. Il existe toutefois une limite maximale quant au nombre d’objets que vous pouvez archiver. Vous devez donc respecter cette limite et remplacer le statut par DELETED lorsqu’un objet n’est plus nécessaire.

Un objet ARCHIVED ne comporte que deux champs modifiables : name et status. Vous pouvez également modifier status en DELETED.

Supprimé(e)

Vous pouvez définir le statut de l’objet publicitaire sur DELETED en définissant le champ status sur DELETED ou en envoyant une requête HTTP DELETE à cet objet. Une fois le statut d’un objet défini sur DELETED, vous ne pouvez pas le redéfinir sur ARCHIVED.

Si vous conservez l’identifiant de l’objet supprimé, vous pouvez continuer de récupérer les statistiques ou les détails de l’objet en interrogeant l’identifiant de cet objet. En revanche, vous ne pouvez pas récupérer les objets supprimés en tant qu’objets de connexion issus d’un nœud ou d’un objet non supprimé. Par exemple, <API_VERSION>/<AD_ID>/insights fonctionne pour un objet supprimé, mais <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad ne renvoie pas de statistiques concernant l’objet supprimé.

Après la suppression d’une publicité, il est possible que cette dernière effectue toujours un suivi des impressions, des clics et des actions pendant 28 jours après la date de la dernière diffusion. Vous pouvez interroger les statistiques des objets DELETED à l’aide du filtre ad.effective_status.

Si vous disposez d’un ensemble de publicités contenant deux publicités, et que vous en supprimiez une, les deux requêtes suivantes ne renverront pas les mêmes résultats :

https://graph.facebook.com/v19.0/<AD_SET_ID>/insights
https://graph.facebook.com/v19.0/<AD_ID>/insights

L’ensemble de publicités renverra des statistiques pour la publicité qui a été supprimée et celle qui ne l’est pas. Toutefois, lorsque vous interrogez les publicités de l’ensemble de publicités, vous n’en verrez qu’une seule :

https://graph.facebook.com/v19.0/<AD_SET_ID>/ads

Pour éviter ce scénario, nous vous recommandons de supprimer les publicités 28 jours après la dernière date de diffusion afin de garantir l’absence d’évolution des statistiques. Vous devez également enregistrer les statistiques ou les identifiants de ces objets sur votre propre système avant de les supprimer. Cette recommandation est facultative :

  • si votre application n’affiche pas la répartition des statistiques ou ;
  • si vous ne voyez pas d’inconvénient à ce que la somme de la répartition des statistiques ne corresponde pas à celle de l’objet parent, du fait de la suppression de certains objets enfants.

En dehors de name, vous ne pouvez modifier aucun champ d’un objet DELETED.

Gérer le statut

Vous procéderez généralement à la gestion du statut d’un objet de la manière suivante :

  • Vous créez des objets publicitaires, qui seront ensuite mis en ligne et diffusés.
  • Lorsque vous supprimez un objet, nous le supprimons automatiquement.
  • Lorsque vous atteignez la limite d’objets archivés, vous ne pouvez plus archiver d’objets.
  • Vous devez basculer ces objets supprimés et archivés sur le statut deleted pour éviter d’atteindre cette limite.

Le statut des objets publicitaires fonctionne de la manière suivante dans le cadre de la hiérarchie de ces objets :

  • Si le statut d’une campagne est défini sur with_issues, paused, archived ou deleted, tous les objets qu’elle contient basculent automatiquement sur ce statut.
  • Si vous définissez une campagne publicitaire sur deleted, vous ne pouvez pas récupérer les ensembles de publicités ou les publicités de cette campagne sans préciser explicitement leur identifiant.
  • Si le statut d’une publicité est défini sur with_issues, paused, archived ou deleted, l’ensemble de publicités ou la campagne publicitaire contenant cette publicité conserve son statut initial et peut être récupéré(e).

Les limitations suivantes s’appliquent aux objets ARCHIVED d’un compte publicitaire donné :

  • 100 000 pour les campagnes publicitaires ;
  • 100 000 pour les ensembles de publicités ;
  • 100 000 pour les publicités.

En cas de lecture d’arêtes archived, vous devez filtrer précisément les objets archivés, car nous ne les renvoyons pas par défaut. En cas de lecture des statistiques d’un objet publicitaire, nous incluons les statistiques de tous les objets enfants, indépendamment du statut active, archived ou deleted de l’enfant. Vous n’avez donc pas besoin de filtrer les insights des objets enfants.

Comparaisons des différents statuts

Les objets portant les statuts ACTIVE et PAUSED diffèrent de ceux qui portent les statuts ARCHIVED et DELETED. En voici les principales différences :

Requête En direct ARCHIVED DELETED

Existe dans la base de données

Oui

Oui

Oui

Nombre maximum par compte publicitaire

Avec limitations

100 000

Aucune limitation

Requête sous forme d’arête sans filtre

Oui

Non

Non

Requête sous forme d’arête avec filtre de statut

Oui, pour les objets dont le statut est inclus dans le filtre

Oui, si le filtre de statut contient ARCHIVED.

Non, si le filtre de statut ne contient pas DELETED, et erreur dans le cas contraire.

Requête selon son propre identifiant

Oui

Oui

Oui

Statistiques agrégées dans /<PARENT_OBJECT_ID>/insights

Oui

Oui

Oui

Statistiques incluses dans la liste de résultats de /<PARENT_OBJECT_ID>/insights?level=<OBJECT_LEVEL>

Oui

Non

Non

Statistiques incluses dans la liste de résultats de /<PARENT_OBJECT_ID>/insights avec filtrage par delivery_info

Oui, pour les objets dont le statut est inclus dans le filtre

Oui, pour les objets dont le statut est inclus dans le filtre

Non

Statistiques affichées avec /<OBJECT_ID>/insights

Oui

Oui

Oui

Le statut peut être défini sur

N’importe quel statut valable

DELETED

Modification impossible

Pour archiver une publicité :

use FacebookAds\Object\Ad;

$ad = new Ad(<AD_ID>);
$ad->archive();
from facebookads.adobjects.ad import Ad

ad = Ad(ad_id)
ad.remote_archive()
new Ad(<AD_ID>, context).update()
  .setStatus(Ad.EnumStatus.VALUE_ARCHIVED)
  .execute();
curl \
  -F 'status=ARCHIVED' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<AD_ID>

Pour supprimer une publicité :

use FacebookAds\Object\Ad;

$ad = new Ad(<AD_ID>);
$ad->deleteSelf();
from facebookads.adobjects.ad import Ad

ad = Ad(<AD_ID>)
ad.remote_delete()
new Ad(<AD_ID>, context).update()
  .setStatus(Ad.EnumStatus.VALUE_DELETED)
  .execute();
curl -X DELETE \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<AD_ID>/

Pour récupérer les sous-objets d’un objet en direct, par exemple, toutes les publicités en direct d’une campagne publicitaire, à l’exception des publicités ARCHIVED ou DELETED :

curl -X GET \ -d 'fields="name"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_CAMPAIGN_ID>/ads
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const Campaign = bizSdk.Campaign; const Ad = bizSdk.Ad; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_CAMPAIGN_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ 'name', ]; params = { }; const adss = (new Campaign(id)).getAds( fields, params ); logApiCallResult('adss api call complete.', adss);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\Campaign; use FacebookAds\Object\Ad; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_CAMPAIGN_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( 'name', ); $params = array( ); echo json_encode((new Campaign($id))->getAds( $fields, $params )->getResponse()->getContent(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.campaign import Campaign from facebook_business.adobjects.ad import Ad from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_CAMPAIGN_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ 'name', ] params = { } print Campaign(id).get_ads( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_CAMPAIGN_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new Campaign(id, context).getAds() .requestNameField() .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_CAMPAIGN_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end campaign = FacebookAds::Campaign.get(id) adss = campaign.ads({ fields: { 'name' }, })

Pour récupérer les sous-objets ARCHIVED d’un objet en direct, par exemple, toutes les publicités ARCHIVED d’un ensemble de publicités, le filtre de statut suivant est nécessaire :

curl -X GET \ -d 'effective_status=[ "ARCHIVED" ]' \ -d 'fields="name"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_CAMPAIGN_ID>/ads
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const Campaign = bizSdk.Campaign; const Ad = bizSdk.Ad; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_CAMPAIGN_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ 'name', ]; params = { 'effective_status' : ['ARCHIVED'], }; const adss = (new Campaign(id)).getAds( fields, params ); logApiCallResult('adss api call complete.', adss);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\Campaign; use FacebookAds\Object\Ad; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_CAMPAIGN_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( 'name', ); $params = array( 'effective_status' => array('ARCHIVED'), ); echo json_encode((new Campaign($id))->getAds( $fields, $params )->getResponse()->getContent(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.campaign import Campaign from facebook_business.adobjects.ad import Ad from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_CAMPAIGN_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ 'name', ] params = { 'effective_status': ['ARCHIVED'], } print Campaign(id).get_ads( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_CAMPAIGN_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new Campaign(id, context).getAds() .setEffectiveStatus(\"[\\"ARCHIVED\\"]\") .requestNameField() .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_CAMPAIGN_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end campaign = FacebookAds::Campaign.get(id) adss = campaign.ads({ fields: { 'name' }, effective_status: ['ARCHIVED'], })