Mengelola Status Objek Iklan Anda

Kampanye Iklan, Set Iklan, dan Iklan memiliki salah satu jenis status berikut:

  • Aktif
  • Diarsipkan
  • Dihapus

Untuk latar belakang, lihat Blog Developer Iklan, Dihapus versus Diarsipkan.

Aktif

Objek iklan aktif dapat memiliki status berikut:

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

Diarsipkan

Atur objek iklan ke ARCHIVED dengan mengatur kolom status ke ARCHIVED. Saat status objek diatur ke ARCHIVED, Anda dapat melanjutkan permintaan detail dan statistik berdasarkan id objek. Namun, ada batas maksimal untuk jumlah objek yang dapat Anda arsipkan. Jadi Anda harus mematuhi batasan ini dan mengubah status ke DELETED saat Anda tidak membutuhkan suatu objek.

Objek ARCHIVED hanya memiliki dua kolom yang dapat diubah: name dan status. Anda juga hanya dapat mengubah status ke DELETED.

Dihapus

Atur objek iklan ke DELETED dengan mengatur kolom status ke DELETED atau mengirimkan HTTP DELETE ke objek tersebut. Setelah status objek diatur ke DELETED, Anda tidak dapat mengaturnya kembali ke ARCHIVED.

Jika tetap menyimpan ID objek yang dihapus, Anda dapat terus mendapatkan statistik atau perincian objek dengan mengkueri ID objek. Namun, Anda tidak dapat mengambil kembali objek yang dihapus sebagai objek koneksi dari node atau objek yang belum dihapus. Contoh: <API_VERSION>/<AD_ID>/insights bekerja untuk objek yang dihapus tetapi <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad tidak memunculkan statistik untuk objek yang dihapus itu.

Setelah Anda menghapus sebuah iklan, mungkin pelacakan masih terus berjalan untuk tayangan, klik, dan tindakan selama 28 hari setelah penayangan terakhir. Anda dapat mengkueri insight untuk objek DELETED menggunakan filter ad.effective_status.

Jika Anda memiliki set iklan yang berisi 2 iklan, dan Anda menghapus salah satu iklannya, 2 kueri berikut tidak memunculkan hasil yang sama:

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

Set iklan itu memberikan statistik untuk iklan yang dihapus maupun yang belum dihapus di dalamnya. Namun, jika mengkueri iklan di set iklan itu, Anda hanya melihat satu iklan:

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

Untuk menghindari skenario ini, Anda harus menghapus iklan 28 hari setelah tanggal penayangan terakhirnya untuk memastikan statistik tidak lagi berubah. Selain itu, Anda juga harus menyimpan statistik atau id objek tersebut di sistem Anda sendiri sebelum menghapusnya. Rekomendasi ini bersifat opsional:

  • Jika aplikasi Anda tidak menunjukkan perincian statistik, atau
  • Anda tidak masalah jika jumlah total perincian statistik tidak sesuai dengan objek induknya, karena beberapa objek turunan telah dihapus.

Anda tidak dapat mengubah kolom apa pun, kecuali name, untuk objek DELETED.

Mengelola Status

Berikut ini cara yang umumnya digunakan untuk mengelola status objek:

  • Anda membuat objek iklan, objek iklan itu berjalan dan mulai tayang
  • Saat Anda menghapus objek, kami otomatis menghapusnya
  • Saat mencapai batas pengarsipan objek, Anda tidak lagi dapat mengarsipkan objek.
  • Anda harus memindahkan objek yang dihapus dan diarsipkan ke status deleted untuk mengurangi batas itu.

Status pada objek iklan bekerja seperti ini untuk hierarki objek iklan:

  • Jika status kampanye diatur ke with_issues, paused, archived, atau deleted untuk suatu kampanye, semua objek di bawahnya secara otomatis mewarisi status tersebut.
  • Jika menetapkan sebuah kampanye iklan ke deleted, Anda tidak dapat mengambil kembali set iklan atau iklan di bawah kampanye tersebut tanpa memasukkan ID secara eksplisit.
  • Jika status iklan ditetapkan ke with_issues, paused, archived, atau deleted, set iklan atau kampanye iklan yang berisi iklan tersebut mempertahankan status aslinya dan tersedia untuk diambil.

Batas berikut berlaku pada objek ARCHIVED untuk akun iklan tertentu:

  • 100.000 untuk Kampanye Iklan
  • 100.000 untuk Set Iklan
  • 100.000 untuk Iklan

Jika membaca edge archived, Anda harus secara spesifik memfilter objek yang diarsipkan karena secara default kami tidak mengembalikannya. Jika Anda membaca statistik untuk suatu objek iklan, kami menyertakan statistik semua objek turunan, tanpa mempertimbangkan apakah turunan itu active, archived, atau deleted. Namun, Anda tidak membutuhkan filter untuk insight tentang objek turunan.

Perbandingan Berbagai Status

Objek dengan status seperti ACTIVE, PAUSED, berbeda dari objek dengan status ARCHIVED, dan DELETED. Berikut ini perbedaan utamanya.

Kueri Aktif DIARSIPKAN DIHAPUS

Ada di database

Ya

Ya

Ya

Jumlah maksimal per akun iklan

Dengan batas

100.000

Tanpa batas

Kueri sebagai edge tanpa filter

Ya

Tidak

Tidak

Kueri sebagai edge dengan filter status

Ya untuk objek dari status yang ada dalam filter

Ya, jika filter status berisi ARCHIVED.

Tidak, jika filter status tidak berisi DELETED, dan kesalahan jika berisi.

Kueri berdasarkan ID miliknya sendiri

Ya

Ya

Ya

Statistik digabungkan dalam /<PARENT_OBJECT_ID>/insights

Ya

Ya

Ya

Statistik disertakan dalam daftar hasil dari /<PARENT_OBJECT_ID>/insights?level=<OBJECT_LEVEL>

Ya

Tidak

Tidak

Statistik disertakan dalam daftar hasil /<PARENT_OBJECT_ID>/insights dengan delivery_info filtering

Ya untuk objek dari status yang ada dalam filter

Ya untuk objek dari status yang ada dalam filter

Tidak

Insight ditampilkan dengan /<OBJECT_ID>/insights

Ya

Ya

Ya

Status dapat diubah ke

Status apa pun yang valid

DELETED

Tidak dapat diubah

Untuk mengatur iklan agar diarsipkan:

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>

Untuk menghapus iklan:

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

Untuk mendapatkan subobjek siaran langsung dari sebuah objek siaran langsung, contoh: semua iklan yang ditayangkan dari sebuah kampanye iklan, tidak termasuk iklan ARCHIVED atau 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' }, })

Untuk mendapatkan subobjek ARCHIVED dari objek siaran langsung, contoh: semua iklan ARCHIVED dari set iklan, membutuhkan filter status:

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