จัดการสถานะของอ็อบเจ็กต์โฆษณาของคุณ

แคมเปญโฆษณา ชุดโฆษณา และโฆษณาจะอยู่ในสถานะต่อไปนี้

  • เผยแพร่อยู่
  • เก็บถาวรแล้ว
  • ลบแล้ว

คุณสามารถดูความเป็นมาได้ที่บล็อกผู้พัฒนาโฆษณา, ลบแล้วเปรียบเทียบกับเก็บถาวรแล้ว

เผยแพร่อยู่

สถานะของอ็อบเจ็กต์โฆษณาที่เผยแพร่อยู่มีดังต่อไปนี้:

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

เก็บถาวรแล้ว

ตั้งค่าอ็อบเจ็กต์โฆษณาให้เป็น ARCHIVED โดยการตั้งค่าช่อง status เป็น ARCHIVED เมื่อตั้งค่าสถานะอ็อบเจ็กต์เป็น ARCHIVED แล้ว คุณจะสามารถสืบค้นรายละเอียดและสถิติตาม ID อ็อบเจ็กต์ต่อไปได้ อย่างไรก็ตาม ระบบมีการกำหนดจำนวนอ็อบเจ็กต์สูงสุดที่คุณสามารถเก็บถาวรได้ ดังนั้น คุณจึงควรคำนึงถึงขีดจำกัดนี้และเปลี่ยนสถานะเป็น DELETED เมื่อคุณไม่ต้องใช้อ็อบเจ็กต์แล้ว

อ็อบเจ็กต์ ARCHIVED มีช่องที่คุณสามารถเปลี่ยนแปลงได้เพียง 2 ช่องเท่านั้น ได้แก่ name และ status นอกจากนี้ คุณยังสามารถเปลี่ยน status เป็น DELETED ได้อีกด้วย

ลบแล้ว

ตั้งค่าสถานะอ็อบเจ็กต์โฆษณาให้เป็น DELETED โดยการตั้งค่าช่อง status เป็น DELETED หรือโดยการส่ง HTTP DELETE ไปยังอ็อบเจ็กต์ดังกล่าว เมื่อตั้งค่าสถานะอ็อบเจ็กต์เป็น DELETED แล้ว คุณจะไม่สามารถตั้งค่ากลับเป็น ARCHIVED ได้

หากคุณเก็บ ID อ็อบเจ็กต์ที่ลบออกแล้วไว้ คุณจะสามารถเรียกใช้สถิติหรือรายละเอียดอ็อบเจ็กต์ต่อไปได้โดยการสืบค้น ID อ็อบเจ็กต์นั้น อย่างไรก็ตาม คุณจะไม่สามารถเรียกใช้อ็อบเจ็กต์ที่ลบออกแล้วเป็นอ็อบเจ็กต์การเชื่อมต่อจากโหนดหรืออ็อบเจ็กต์ที่ยังไม่ได้ลบออกได้ ตัวอย่างเช่น <API_VERSION>/<AD_ID>/insights ใช้ได้กับอ็อบเจ็กต์ที่ลบออกแล้ว แต่ <API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=ad จะไม่ส่งคืนสถิติสำหรับอ็อบเจ็กต์ที่ลบออกแล้ว

หลังจากที่คุณลบโฆษณาออก โฆษณานั้นอาจยังคงติดตามอิมเพรสชั่น จำนวนการคลิก และการดำเนินการต่างๆ ได้อีก 28 วัน หลังจากวันสุดท้ายที่แสดงโฆษณา คุณสามารถสืบค้นข้อมูลเชิงลึกสำหรับอ็อบเจ็กต์ DELETED โดยใช้ตัวกรอง ad.effective_status ได้

หากคุณมีชุดโฆษณาที่มีโฆษณา 2 ชิ้น และคุณลบโฆษณา 1 ชิ้นออก การสืบค้น 2 รายการต่อไปนี้จะไม่ส่งคืนผลลัพธ์แบบเดิม:

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

ชุดโฆษณาจะส่งกลับสถิติสำหรับทั้งโฆษณาที่ถูกลบออกแล้วและยังไม่ได้ถูกลบออก อย่างไรก็ตาม เมื่อคุณสืบค้นโฆษณาในชุดโฆษณานั้น คุณจะเห็นโฆษณาเพียงชิ้นเดียว:

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

หากต้องการหลีกเลี่ยงสถานการณ์ดังกล่าว คุณควรลบโฆษณาออกหลังจากผ่านวันสุดท้ายที่แสดงโฆษณาไปแล้ว 28 วัน ทั้งนี้เพื่อให้แน่ใจว่าสถิติจะไม่เปลี่ยนแปลงไปอีก และคุณควรจัดเก็บสถิติหรือ ID ของอ็อบเจ็กต์เหล่านั้นไว้ในระบบของคุณเองก่อนที่คุณจะลบออก โดยจะทำตามคำแนะนำนี้หรือไม่ก็ได้:

  • หากแอพพลิเคชั่นของคุณไม่แสดงข้อมูลแยกย่อยของสถิติหรือ
  • คุณไม่สนใจหากจำนวนข้อมูลแยกย่อยของสถิติไม่ตรงกับจำนวนอ็อบเจ็กต์หลักเนื่องจากมีอ็อบเจ็กต์รองบางรายการถูกลบออก

คุณไม่สามารถเปลี่ยนช่องใดๆ ได้ ยกเว้น name สำหรับอ็อบเจ็กต์ DELETED

จัดการสถานะ

นี่คือวิธีจัดการสถานะอ็อบเจ็กต์โดยทั่วไป:

  • คุณสร้างอ็อบเจ็กต์โฆษณา และอ็อบเจ็กต์เหล่านี้จะทำงานและเริ่มแสดงโฆษณา
  • เมื่อคุณลบอ็อบเจ็กต์ เราจะลบอ็อบเจ็กต์นั้นให้โดยอัตโนมัติ
  • เมื่อคุณมีอ็อบเจ็กต์แบบเก็บถาวรแล้วถึงขีดจำกัด คุณจะไม่สามารถจัดเก็บอ็อบเจ็กต์ถาวรได้อีก
  • คุณควรย้ายอ็อบเจ็กต์ที่เก็บถาวรไปยังสถานะ deleted เพื่อลดขีดจำกัด

สถานะของอ็อบเจ็กต์โฆษณาจะทำงานในลักษณะนี้สำหรับลำดับชั้นของอ็อบเจ็กต์โฆษณา:

  • หากตั้งค่าสถานะแคมเปญเป็น with_issues, paused, archived หรือ deleted สำหรับแคมเปญ อ็อบเจ็กต์ทั้งหมดที่อยู่ด้านล่างแคมเปญดังกล่าวจะได้รับสถานะนั้นด้วยโดยอัตโนมัติ
  • หากคุณตั้งค่าแคมเปญโฆษณาเป็น deleted คุณจะไม่สามารถเรียกใช้ชุดโฆษณาหรือโฆษณาที่อยู่ด้านล่างแคมเปญนั้นได้หากไม่ระบุ ID อย่างชัดเจน
  • หากตั้งค่าสถานะโฆษณาเป็น with_issues, paused, archived หรือ deleted ชุดโฆษณาหรือแคมเปญโฆษณาที่มีโฆษณานั้นจะเก็บสถานะเดิมไว้และจะสามารถเรียกใช้ได้

ขีดจำกัดต่อไปนี้จะใช้กับอ็อบเจ็กต์ ARCHIVED สำหรับบัญชีโฆษณาที่ระบุ:

  • 100,000 สำหรับแคมเปญโฆษณา
  • 100,000 สำหรับชุดโฆษณา
  • 100,000 สำหรับโฆษณา

หากคุณอ่านจุดเชื่อมโยง archived คุณจะต้องกรองอ็อบเจ็กต์ที่เก็บถาวรโดยเฉพาะเนื่องจากเราจะไม่ส่งคืนอ็อบเจ็กต์เหล่านั้นตามค่าเริ่มต้น หากคุณอ่านสถิติสำหรับอ็อบเจ็กต์โฆษณา เราจะใส่สถิติของอ็อบเจ็กต์รองทั้งหมด ไม่ว่าอ็อบเจ็กต์รองนั้นจะเป็น active, archived หรือ deleted ดังนั้น คุณจึงไม่จำเป็นต้องใช้ตัวกรองสำหรับข้อมูลเชิงลึกเกี่ยวกับอ็อบเจ็กต์รอง

การเปรียบเทียบสถานะต่างๆ

อ็อบเจ็กต์ที่มีสถานะ เช่น ACTIVE และ PAUSED จะแตกต่างจากอ็อบเจ็กต์ที่มีสถานะ ARCHIVED และ DELETED ตารางด้านล่างจะแสดงข้อแตกต่างหลักๆ

การสืบค้น เผยแพร่อยู่ เก็บถาวรแล้ว ลบแล้ว

อยู่ในฐานข้อมูล

ใช่

ใช่

ใช่

จำนวนสูงสุดต่อบัญชีโฆษณา

มีขีดจำกัด

100,000

ไม่มีขีดจำกัด

สืบค้นเป็นจุดเชื่อมโยงโดยไม่มีตัวกรอง

ใช่

ไม่

ไม่

สืบค้นเป็นจุดเชื่อมโยงโดยมีตัวกรองสถานะ

ใช่ สำหรับอ็อบเจ็กต์ของสถานะที่อยู่ในตัวกรอง

ใช่ หากตัวกรองสถานะประกอบไปด้วย ARCHIVED

ไม่ หากตัวกรองสถานะไม่มี DELETED และจะส่งข้อผิดพลาดถ้ามีสถานะดังกล่าว

การสืบค้นโดยใช้ ID

ใช่

ใช่

ใช่

สถิติที่รวบรวมใน /<PARENT_OBJECT_ID>/insights

ใช่

ใช่

ใช่

สถิติที่อยู่ในรายการผลลัพธ์ของ /<PARENT_OBJECT_ID>/insights?level=<OBJECT_LEVEL>

ใช่

ไม่

ไม่

สถิติที่อยู่ในรายการผลลัพธ์ของ /<PARENT_OBJECT_ID>/insights ที่มีการกรอง delivery_info

ใช่ สำหรับอ็อบเจ็กต์ของสถานะที่อยู่ในตัวกรอง

ใช่ สำหรับอ็อบเจ็กต์ของสถานะที่อยู่ในตัวกรอง

ไม่

ข้อมูลเชิงลึกที่แสดงพร้อมกับ /<OBJECT_ID>/insights

ใช่

ใช่

ใช่

สามารถเปลี่ยนสถานะเป็น

สถานะที่ถูกต้องใดๆ

DELETED

ไม่สามารถเปลี่ยนได้

วิธีตั้งค่าโฆษณาเป็นแบบเก็บถาวรแล้ว:

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>

วิธีลบโฆษณา:

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

ในการเรียกใช้อ็อบเจ็กต์ย่อยแบบสดของอ็อบเจ็กต์ถ่ายทอดสด ตัวอย่างเช่น โฆษณาถ่ายทอดสดทั้งหมดของแคมเปญโฆษณา โดยไม่รวมถึงโฆษณาแบบ ARCHIVED หรือ 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' }, })

ในการเรียกใช้อ็อบเจ็กต์ย่อย ARCHIVED ของอ็อบเจ็กต์ถ่ายทอดสด ตัวอย่างเช่น โฆษณา ARCHIVED ทั้งหมดของชุดโฆษณา จะต้องมีตัวกรองสถานะดังนี้:

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