Quản lý trạng thái của đối tượng quảng cáo

Chiến dịch quảng cáo, nhóm quảng cáo và quảng cáo có một trong các loại trạng thái sau đây:

  • Đang hoạt động
  • Đã lưu trữ
  • Đã xóa

Để biết thông tin cơ bản, hãy xem Blog dành cho nhà phát triển quảng cáo, Đã xóa và Đã lưu trữ.

Đang hoạt động

Đối tượng quảng cáo đang hoạt động có thể có trạng thái sau đây:

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

Đã lưu trữ

Đặt đối tượng quảng cáo thành ARCHIVED bằng cách đặt trường status thành ARCHIVED. Khi trạng thái đối tượng được đặt thành ARCHIVED, bạn có thể tiếp tục truy vấn thông tin chi tiết và số liệu thống kê dựa trên ID đối tượng. Tuy nhiên, sẽ có giới hạn tối đa đối với số lượng đối tượng mà bạn có thể lưu trữ. Vì vậy, bạn nên tuân thủ giới hạn này và thay đổi trạng thái thành DELETED khi không cần một đối tượng nữa.

Đối tượng ARCHIVED chỉ có 2 trường mà bạn có thể thay đổi: namestatus. Bạn cũng chỉ có thể thay đổi status thành DELETED.

Đã xóa

Đặt đối tượng quảng cáo thành DELETED bằng cách đặt trường status thành DELETED hoặc gửi HTTP DELETE đến đối tượng đó. Sau khi đặt trạng thái đối tượng thành DELETED, bạn sẽ không thể đặt lại về ARCHIVED.

Nếu giữ lại ID đối tượng đã xóa, bạn có thể tiếp tục truy xuất số liệu thống kê hoặc thông tin chi tiết đối tượng bằng cách truy vấn ID đối tượng đó. Tuy nhiên, bạn không thể truy xuất đối tượng đã xóa như đối tượng kết nối từ nút hoặc đối tượng không xóa. Ví dụ: <API_VERSION>/<AD_ID>/insights có hiệu quả với đối tượng đã xóa nhưng <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad không trả về số liệu thống kê cho đối tượng đã xóa đó.

Sau khi bạn xóa một quảng cáo, quảng cáo đó có thể vẫn theo dõi lượt hiển thị, lượt click và hành động trong 28 ngày sau ngày phân phối gần đây nhất. Bạn có thể truy vấn thông tin chi tiết về đối tượng DELETED bằng cách sử dụng bộ lọc ad.effective_status.

Nếu nhóm quảng cáo có 2 quảng cáo và bạn xóa một quảng cáo thì 2 truy vấn sau đây sẽ không trả về cùng kết quả:

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

Nhóm quảng cáo trả về số liệu thống kê cho cả quảng cáo đã xóa và không xóa. Tuy nhiên, khi truy vấn quảng cáo trong nhóm quảng cáo đó, bạn sẽ chỉ thấy một quảng cáo:

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

Để tránh tình huống này, bạn nên xóa quảng cáo sau 28 ngày kể từ ngày phân phối gần đây nhất để đảm bảo số liệu thống kê không thay đổi nữa. Ngoài ra, bạn cũng nên lưu trữ số liệu thống kê hoặc ID của các đối tượng đó trong hệ thống của chính mình trước khi xóa đi. Đề xuất này không bắt buộc:

  • Nếu ứng dụng của bạn không hiển thị số liệu thống kê chia nhỏ hoặc
  • Bạn không quan tâm nếu tổng các số liệu thống kê chia nhỏ không khớp với số liệu thống kê của đối tượng cha, do một số đối tượng con đã bị xóa.

Bạn không thể thay đổi bất cứ trường nào - ngoại trừ name - đối với đối tượng DELETED.

Quản lý trạng thái

Sau đây là cách bạn thường quản lý trạng thái đối tượng:

  • Bạn tạo đối tượng quảng cáo, đối tượng quảng cáo hoạt động và bắt đầu phân phối
  • Khi bạn xóa một đối tượng, chúng tôi tự động xóa đối tượng đó
  • Khi đã chạm đến giới hạn dành cho đối tượng đạt được, bạn sẽ không thể lưu trữ thêm đối tượng nữa.
  • Bạn nên chuyển những đối tượng đã lưu trữ/đã xóa sang trạng thái deleted để giảm giới hạn này.

Trạng thái của đối tượng quảng cáo hoạt động theo cách này để phân cấp đối tượng quảng cáo:

  • Nếu bạn đặt trạng thái chiến dịch là with_issues, paused, archived hoặc deleted cho một chiến dịch, tất cả đối tượng thuộc chiến dịch đó sẽ tự động kế thừa trạng thái đó.
  • Nếu đặt một chiến dịch quảng cáo là deleted, bạn sẽ không thể truy xuất nhóm quảng cáo hoặc quảng cáo thuộc chiến dịch đó mà không chỉ định rõ ID.
  • Nếu bạn đặt trạng thái quảng cáo là with_issues, paused, archived hoặc deleted, nhóm quảng cáo hoặc chiến dịch quảng cáo chứa quảng cáo đó sẽ giữ nguyên trạng thái ban đầu và có thể truy xuất được.

Các giới hạn sau đây áp dụng với đối tượng ARCHIVED của tài khoản quảng cáo đã cho:

  • 100.000 đối với chiến dịch quảng cáo
  • 100.000 đối với nhóm quảng cáo
  • 100.000 đối với quảng cáo

Nếu đọc cạnh archived, bạn phải lọc cụ thể các đối tượng đã lưu trữ vì chúng tôi không trả về các đối tượng này theo mặc định. Nếu bạn đọc số liệu thống kê về đối tượng quảng cáo, chúng tôi sẽ bao gồm số liệu thống kê của mọi đối tượng con, bất kể đối tượng con đó ở trạng thái active, archived hay deleted. Do vậy, bạn không cần lọc thông tin chi tiết về đối tượng con.

So sánh các trạng thái khác nhau

Những đối tượng có trạng thái như ACTIVE, PAUSED khác với những đối tượng có trạng thái ARCHIVEDDELETED. Sau đây là các điểm khác biệt chính.

Truy vấn Đang hoạt động ĐÃ LƯU TRỮ ĐÃ XÓA

Tồn tại trong cơ sở dữ liệu

Số lượng tối đa trên mỗi tài khoản quảng cáo

Có giới hạn

100.000

Không có giới hạn

Truy vấn dưới dạng cạnh không có bộ lọc

Không

Không

Truy vấn dưới dạng cạnh có bộ lọc trạng thái

Có đối với các đối tượng có trạng thái nằm trong bộ lọc này

Có nếu bộ lọc trạng thái chứa ARCHIVED.

Không nếu bộ lọc trạng thái không chứa DELETED và lỗi nếu bộ lọc chứa trạng thái đó.

Truy vấn theo ID riêng

Số liệu thống kê được tổng hợp trong /<PARENT_OBJECT_ID>/insights

Số liệu thống kê được bao gồm trong danh sách kết quả của /<PARENT_OBJECT_ID>/insights?level=<OBJECT_LEVEL>

Không

Không

Số liệu thống kê được bao gồm trong danh sách kết quả của /<PARENT_OBJECT_ID>/insights với tùy chọn lọc delivery_info

Có đối với các đối tượng có trạng thái nằm trong bộ lọc này

Có đối với các đối tượng có trạng thái nằm trong bộ lọc này

Không

Thông tin chi tiết được hiển thị với /<OBJECT_ID>/insights

Có thể thay đổi trạng thái thành

Bất kỳ trạng thái nào hợp lệ

DELETED

Không thể thay đổi

Cách đặt quảng cáo thành đã lưu trữ:

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>

Cách xóa quảng cáo:

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

Cách truy xuất các đối tượng con đang hoạt động của một đối tượng đang hoạt động - chẳng hạn như tất cả quảng cáo đang hoạt động của một chiến dịch quảng cáo - không bao gồm quảng cáo ARCHIVED hoặc 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' }, })

Cách truy xuất đối tượng con ARCHIVED của một đối tượng đang hoạt động - chẳng hạn như tất cả quảng cáo ARCHIVED của một nhóm quảng cáo - yêu cầu bộ lọc trạng thái:

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