Administrar el estado del objeto de anuncio

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

  • Publicado
  • Archivado
  • Eliminado

Para obtener más información, consulta Comparación entre objetos eliminados y archivados en el blog para desarrolladores de anuncios.

Publicado

Los objetos de anuncio publicados pueden tener cualquiera de los siguientes estados:

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

Archivado

Para definir el objeto publicitario en el estado ARCHIVED, establece el campo status en ARCHIVED. Cuando el estado de un objeto se define en ARCHIVED, puedes seguir consultando las estadísticas y los detalles relacionados con el identificador de dicho objeto. Sin embargo, hay un límite máximo en el número de objetos que se pueden archivar. Por lo tanto, debes respetarlo y cambiar el estado a DELETED cuando ya no necesites el objeto.

Un objeto ARCHIVED solo tiene dos campos modificables: name y status. Además, solo puedes cambiar el valor de status a DELETED.

Eliminado

Para definir el objeto publicitario en el estado DELETED, puedes establecer el campo status en DELETED o enviar una solicitud HTTP DELETE a dicho objeto. Una vez que el estado de un objeto se define en DELETED, no se puede volver a establecer en ARCHIVED.

Si conservas el identificador del objeto eliminado, para seguir recuperando las estadísticas o los detalles del objeto, puedes enviar consultas con el identificador correspondiente. Sin embargo, no puedes recuperar los objetos eliminados como un objeto de conexión a partir de un nodo u objeto que no se haya eliminado. Por ejemplo, <API_VERSION>/<AD_ID>/insights funciona para un objeto eliminado, pero <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad no devuelve estadísticas del objeto eliminado.

Después de eliminar un anuncio, se sigue haciendo un seguimiento de las impresiones, los clics y las acciones que se producen durante los 28 días posteriores a la última fecha de entrega. Puedes consultar las estadísticas de los objetos DELETED con el filtro ad.effective_status.

Si tienes un conjunto de dos anuncios de los cuales eliminas uno, las primeras dos consultas que realices a partir de ese momento no devolverán los mismos resultados:

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

El conjunto de anuncios devuelve estadísticas de los dos anuncios: el que queda y el que se ha eliminado. Sin embargo, al consultar los anuncios que incluye el conjunto, solo se te mostrará uno:

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

Para evitar el caso anterior, debes eliminar los anuncios 28 días después de su última fecha de entrega para asegurarte de que las estadísticas no cambien más. También debes almacenar las estadísticas o los identificadores de dichos objetos en tu propio sistema antes de eliminarlos. Esta recomendación es opcional en los siguientes casos:

  • Si la aplicación no muestra las estadísticas desglosadas.
  • Si no te importa que la suma de las estadísticas desglosadas no coincida con las del objeto principal debido a la eliminación de algunos objetos dependientes.

No puedes cambiar ningún campo de los objetos en estado DELETED, a excepción de name.

Administrar el estado

Normalmente, los estados de objeto se administran de la siguiente forma:

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

El estado de los objetos de anuncio funciona de la forma descrita a continuación en relación con la jerarquía de objetos de anuncio:

  • Si el estado de una campaña se establece en with_issues, paused, archived o deleted, todos los objetos de menor jerarquía que la formen heredarán ese mismo estado.
  • Si estableces el estado de una campaña publicitaria en deleted, no podrás recuperar los conjuntos de anuncios o los anuncios que la forman, a no ser que especifiques sus identificadores.
  • Si el estado de un anuncio se establece en with_issues, paused, archived o deleted, la campaña publicitaria o el conjunto de anuncios en los que se incluya dicho anuncio mantendrán su estado original y podrán recuperarse.

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

  • 100 000 para campañas publicitarias,
  • 100 000 para conjuntos de anuncios,
  • 100 000 para anuncios.

Si lees perímetros archived, debes filtrar específicamente los objetos archivados, ya que no se devuelven de forma predeterminada. Si lees las estadísticas de un objeto publicitario, incluimos las estadísticas de todos los objetos dependientes, sin importar si dichos objetos tienen el estado active, archived o deleted. Por lo tanto, no es necesario que filtres las estadísticas de los objetos dependientes.

Comparaciones de los distintos estados

Los objetos con estados como ACTIVE o PAUSED son distintos de los que tienen los estados ARCHIVED y DELETED. Estas son las principales diferencias.

Consulta Publicado ARCHIVED DELETED

Existe en la base datos.

Número máximo por cuenta publicitaria

Con límites

100 000

Sin límite

Consulta como perímetros sin filtro

No

No

Consulta como perímetros con filtro de estado

Sí, para los objetos del estado incluido en el filtro.

Sí, si el filtro de estado contiene ARCHIVED.

No, si el filtro de estado no contiene DELETED. Si lo incluye, devuelve un error.

Consulta mediante su propio 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 el filtro de información de entrega

Sí, para los objetos del estado incluido en el filtro.

Sí, para los objetos del estado incluido en el filtro.

No

Insights que se muestran con /<OBJECT_ID>/insights

Cambios de estado posibles

Cualquier estado válido

DELETED

No se puede cambiar.

Para establecer un anuncio como archivado:

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 publicados de un objeto publicado (por ejemplo, todos los anuncios publicados de una campaña publicitaria, sin incluir anuncios con el estado ARCHIVED o 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' }, })

Para recuperar subobjetos en estado ARCHIVED de un objeto publicado (por ejemplo, todos los anuncios en estado ARCHIVED de un conjunto de anuncios), se requiere el filtro de estado:

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'], })