Administración del estado del objeto de tu anuncio

Las campañas publicitarias, los conjuntos de anuncios y los anuncios tienen uno de los siguientes tipos de estado:

  • Activo
  • Archivado
  • Eliminado

Para obtener información de referencia, consulta "Diferencias entre eliminar y archivar" en el blog para desarrolladores sobre anuncios.

Activo

Los objetos de anuncio activo pueden tener el siguiente estado:

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

Archivado

Para definir el objeto de anuncio como ARCHIVED, establece en el campo status el valor ARCHIVED. Cuando el estado de un objeto se define como ARCHIVED, puedes seguir consultando los detalles y las estadísticas mediante el identificador del objeto. Sin embargo, el número de objetos que puedes archivar tiene un límite. Por lo tanto, debes respetar el límite y cambiar el estado a DELETED cuando ya no necesites un objeto.

Un objeto ARCHIVED solo tiene 2 campos que se pueden modificar: name y status. Además, status solo puede cambiarse por DELETED.

Eliminado

Para definir un objeto de anuncio como DELETED puedes establecer en el campo status el valor DELETED o puedes enviar una solicitud HTTP DELETE para dicho objeto. Una vez que el estado de un objeto se define como DELETED, no se puede devolver al estado ARCHIVED.

Si conservas el identificador del objeto eliminado, puedes seguir consultando las estadísticas o los detalles del objeto mediante una consulta del identificador del objeto. Sin embargo, no podrás recuperar los objetos eliminados como un objeto de conexión de un objeto o nodo no eliminados. Por ejemplo, <API_VERSION>/<AD_ID>/insights funciona para un objeto eliminado, pero <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad no devuelve las estadísticas del objeto eliminado.

Si eliminas un anuncio, es posible que siga registrando impresiones, clics y acciones durante 28 días después la última fecha de entrega. Puedes consultar estadísticas para los objetos DELETED mediante el filtro ad.effective_status.

Si tienes un conjunto de anuncios con 2 anuncios y eliminas uno, las 2 consultas siguientes no devuelven los mismos resultados:

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

El conjunto de anuncios devuelve las estadísticas tanto de los anuncios eliminados como de los no eliminados. Sin embargo, cuando se realizan consultas relacionadas con anuncios en el conjunto de anuncios solo se ve uno:

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

Para evitar esa situación, debes eliminar los anuncios 28 días después de su última fecha de entrega para asegurarte de que sus estadísticas ya no cambiarán. También debes almacenar las estadísticas o los identificadores de los objetos en tu sistema antes de eliminarlos. Esta recomendación es opcional:

  • si tu app no muestra el desglose de estadísticas, o
  • si no te importa que la suma del desglose de estadísticas no coincida con la del objeto principal, a causa de la eliminación de algunos objetos secundarios.

No puedes cambiar ningún campo, con la excepción de name, de un objeto DELETED.

Administrar el estado

A continuación se detalla la forma habitual de administrar los estados de los objetos:

  • Creas objetos publicitarios, se ponen en circulación y empiezan a entregarse
  • Cuando eliminas un objeto, lo eliminamos automáticamente
  • Si alcanzas el límite de objetos archivados, no podrás archivar más objetos.
  • Debes pasar los objetos eliminados archivados al estado deleted para reducir el límite.

El estado de los objetos publicitarios, en relación con la jerarquía de estos objetos, funciona de la siguiente manera:

  • Si el estado de una campaña se establece en with_issues, paused, archived o deleted, todos los objetos que esta contenga heredarán automáticamente ese estado.
  • Si la campaña publicitaria se definió como deleted, solo podrás consultar los anuncios y conjuntos de anuncios de la campaña si especificas sus identificadores de modo explícito.
  • Si el estado de un anuncio se establece en with_issues, paused, archived o deleted, el conjunto de anuncios o campaña publicitaria que lo contenga conserva su estado original y se podrá consultar.

Los siguientes límites se aplican a los objetos ARCHIVED de una cuenta publicitaria:

  • 100.000 en campañas publicitarias
  • 100.000 en conjuntos de anuncios
  • 100.000 en anuncios

Si lees los perímetros archived, debes aplicar filtros específicamente en función de los objetos archivados, ya que no los devolvemos de forma predeterminada. Si lees las estadísticas de un objeto publicitario, incluimos las estadísticas de todos los objetos secundarios, independientemente de que su estado sea active, archived o deleted. Es decir, no necesitas un filtro para las estadísticas de los objetos secundarios.

Comparaciones de diferentes estados

Los objetos con estados como ACTIVE o PAUSED difieren de los que tienen los estados ARCHIVED y DELETED. Las siguientes son las principales diferencias:

Consulta Activo ARCHIVED DELETED

Existe en la base de datos.

Número máximo por cuenta publicitaria

Con límites

100.000

Sin límite

Consultar como perímetros sin filtro

No

No

Consultar como perímetros sin filtro de estado

Sí, para objetos cuyo estado se incluye en el filtro.

Sí, si el filtro del estado incluye ARCHIVED.

No, si el filtro de estado no contiene DELETED, y error, si lo contiene.

Consultar por el identificador

Estadísticas totales en /<PARENT_OBJECT_ID>/insights

Estadísticas incluidas en la lista de resultados de /<PARENT_OBJECT_ID>/insights?level=<OBJECT_LEVEL>

No

No

Estadísticas incluidas en la lista de resultados de /<PARENT_OBJECT_ID>/insights con filtrado por "delivery_info"

Sí, para objetos cuyo estado se incluye en el filtro.

Sí, para objetos cuyo estado se incluye en el filtro.

No

Estadísticas mostradas con /<OBJECT_ID>/insights

Los estados se pueden cambiar a

Cualquier estado válido

DELETED

No se pueden cambiar

Para definir que un anuncio se archive:

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>

Para eliminar un anuncio:

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>/

Para recuperar subobjetos activos de un objeto activo, por ejemplo, todos los anuncios activos de una campaña publicitaria, sin incluir los archivos ARCHIVED o DELETED:

curl -X GET \ -d 'fields="name"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.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' }, })

Para recuperar subobjetos ARCHIVED de un objeto activo, por ejemplo, todos los anuncios con el estado ARCHIVED de un conjunto de anuncios, se necesita usar el filtro de estado:

curl -X GET \ -d 'effective_status=[ "ARCHIVED" ]' \ -d 'fields="name"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.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'], })