ช่วงจังหวะจัดแสดงโฆษณาและการกำหนดเวลา

กำหนดวิธีใช้จ่ายงบประมาณโฆษณาของคุณในช่วงเวลาต่างๆ ซึ่งจะทำให้มีการแข่งขันอย่างเท่าเทียมในการประมูลโฆษณาของ Facebook สำหรับผู้ลงโฆษณาทุกคนในแต่ละวัน และจัดสรรงบประมาณให้กับโฆษณาต่างๆ โดยอัตโนมัติ ช่วงจังหวะจัดแสดงโฆษณาทำหน้าที่ให้กับโฆษณาที่สร้างขึ้นด้วย API ในลักษณะเช่นเดียวกับที่ทำหน้าที่ด้วยเครื่องมือบน Facebook โปรดดูศูนย์ช่วยเหลือโฆษณา, การแสดงโฆษณาและช่วงจังหวะจัดแสดงโฆษณา

คุณสามารถตั้งค่าตัวเลือกช่วงจังหวะจัดแสดงโฆษณาได้ 3 รายการใน pacing_type เมื่อคุณสร้างหรืออัพเดตชุดโฆษณา เมื่อใช้ช่วงจังหวะจัดแสดงโฆษณาแบบมาตรฐาน เราจะใส่โฆษณาของคุณเข้าไปในทุกๆ การประมูลราคาที่เกี่ยวข้องและปรับราคาประมูลตลอดวันเพื่อให้การแสดงโฆษณามีความเหมาะสมที่สุดและเป็นไปอย่างต่อเนื่องโดยสัมพันธ์กับวัตถุประสงค์และงบประมาณของคุณ นี่คือช่วงจังหวะจัดแสดงโฆษณาเริ่มต้น

วิธีรีเซ็ตช่วงจังหวะจัดแสดงโฆษณาเริ่มต้น:

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;

$adset = new AdSet(<AD_SET_ID>);
$adset->{AdSetFields::PACING_TYPE} = array('standard');
$adset->update();
from facebookads.adobjects.adset import AdSet

adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
    AdSet.Field.pacing_type: ['standard'],
})
adset.remote_update()
new AdSet(<AD_SET_ID>, context).update()
  .setPacingType("[\"standard\"]")
  .execute();
curl \
  -F 'pacing_type=["standard"]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<AD_SET_ID>

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

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Targeting;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;

$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
  AdSetFields::NAME => 'Ad Set without pacing',
  AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
  AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
  AdSetFields::PACING_TYPE => array('no_pacing'),
  AdSetFields::BID_AMOUNT => 2,
  AdSetFields::DAILY_BUDGET => 1000,
  AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
  AdSetFields::TARGETING => (new Targeting())->setData(array(
    TargetingFields::GEO_LOCATIONS => array(
      'countries' => array('US'),
    ),
  )),
));
$adset->create();
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.targeting import Targeting

adset = AdSet(parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
    AdSet.Field.name: 'Ad Set without pacing',
    AdSet.Field.optimization_goal: AdSet.OptimizationGoal.reach,
    AdSet.Field.billing_event: AdSet.BillingEvent.impressions,
    AdSet.Field.pacing_type: ['no_pacing'],
    AdSet.Field.bid_amount: 2,
    AdSet.Field.daily_budget: 1000,
    AdSet.Field.campaign_id: <CAMPAIGN_ID>,
    AdSet.Field.targeting: {
        Targeting.Field.geo_locations: {
            'countries': ['US'],
        },
    },
})

adset.remote_create()
AdSet adSet = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdSet()
  .setName("Ad Set without pacing")
  .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_REACH)
  .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
  .setPacingType("[\"no_pacing\"]")
  .setBidAmount(2L)
  .setDailyBudget(1000L)
  .setCampaignId(<CAMPAIGN_ID>)
  .setTargeting(
    new Targeting()
      .setFieldGeoLocations(
        new TargetingGeoLocation()
          .setFieldCountries(Arrays.asList("US"))
      )
  )
  .execute();
String ad_set_id = adSet.getId();
curl \
  -F 'name=Ad Set without pacing' \
  -F 'optimization_goal=REACH' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'pacing_type=["no_pacing"]' \
  -F 'bid_amount=2' \
  -F 'daily_budget=1000' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'targeting={"geo_locations":{"countries":["US"]}}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adsets

คุณสามารถปิดใช้งานช่วงจังหวะจัดแสดงโฆษณาสำหรับกรณีดังต่อไปนี้ได้:

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

คุณไม่ควรใช้ตัวเลือกนี้เมื่อ:

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

โปรดดูตัวเลือกช่วงจังหวะจัดแสดงโฆษณาสำหรับชุดโฆษณา, ข้อมูลอ้างอิง

คุณยังสามารถตั้งค่า pacing_type ให้เป็น day_parting เพื่อควบคุมการกำหนดเวลาโฆษณาให้ละเอียดยิ่งขึ้น (โปรดดู "Ad Scheduling")

การกำหนดเวลาโฆษณา

โปรดระบุจำนวนวันใน 1 สัปดาห์และจำนวนชั่วโมงใน 1 วันเมื่อชุดโฆษณาของคุณเผยแพร่ใน adset_schedule กำหนดการของคุณจะใช้กับกลุ่มโฆษณาทั้งหมดที่อยู่ภายใต้ชุดโฆษณาดังกล่าว โปรดดูการกำหนดเวลาโฆษณา, บล็อก ซึ่ง adset_schedule เป็นอาร์เรย์ของอ็อบเจ็กต์ JSON แต่ละอ็อบเจ็กต์จะแสดงถึงกำหนดการสำหรับ 1 วัน ตัวอย่างเช่น:

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Targeting;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;

$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
  AdSetFields::NAME => 'Ad Set with scheduling',
  AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
  AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
  AdSetFields::PACING_TYPE => array('day_parting'),
  AdSetFields::LIFETIME_BUDGET => 100000,
  AdSetFields::END_TIME
    => (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
  AdSetFields::ADSET_SCHEDULE => array(
    array(
      'start_minute' => 540,
      'end_minute' => 720,
      'days' => array(1, 2, 3, 4, 5),
    ),
  ),
  AdSetFields::BID_AMOUNT => 2,
  AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
  AdSetFields::TARGETING => (new Targeting())->setData(array(
    TargetingFields::GEO_LOCATIONS => array(
      'countries' => array('US'),
    ),
  )),
));
$adset->create();
import time
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.targeting import Targeting

adset = AdSet(parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
    AdSet.Field.name: 'Ad Set without pacing',
    AdSet.Field.optimization_goal: AdSet.OptimizationGoal.reach,
    AdSet.Field.billing_event: AdSet.BillingEvent.impressions,
    AdSet.Field.pacing_type: ['day_parting'],
    AdSet.Field.lifetime_budget: 100000,
    AdSet.Field.end_time: int(time.time() + 7 * 24 * 3600),
    AdSet.Field.adset_schedule: [
        {
            'start_minute': 540,
            'end_minute': 720,
            'days': [1, 2, 3, 4, 5],
        },
    ],
    AdSet.Field.bid_amount: 2,
    AdSet.Field.campaign_id: <CAMPAIGN_ID>,
    AdSet.Field.targeting: {
        Targeting.Field.geo_locations: {
            'countries': ['US'],
        },
    },
})

adset.remote_create()
AdSet adSet = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdSet()
  .setName("Ad Set with scheduling")
  .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_REACH)
  .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
  .setPacingType("[\"day_parting\"]")
  .setLifetimeBudget(100000L)
  .setEndTime(end_time)
  .setAdsetSchedule("[{\"start_minute\":\"540\",\"end_minute\":\"720\",\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}]")
  .setBidAmount(2L)
  .setCampaignId(<CAMPAIGN_ID>)
  .setTargeting(
    new Targeting()
      .setFieldGeoLocations(
        new TargetingGeoLocation()
          .setFieldCountries(Arrays.asList("US"))
      )
  )
  .execute();
String ad_set_id = adSet.getId();
curl \
  -F 'name=Ad Set with scheduling' \
  -F 'optimization_goal=REACH' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'pacing_type=["day_parting"]' \
  -F 'lifetime_budget=100000' \
  -F 'end_time=2018-02-06T04:45:17+0000' \
  -F 'adset_schedule=[ 
    { 
      "start_minute": 540, 
      "end_minute": 720, 
      "days": [ 
        1, 
        2, 
        3, 
        4, 
        5 
      ] 
    } 
  ]' \
  -F 'bid_amount=2' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'targeting={"geo_locations":{"countries":["US"]}}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adsets

วิธีอัพเดตการกำหนดเวลาโฆษณา:

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;

$adset = new AdSet(<AD_SET_ID>);

$adset->setData(array(
  AdSetFields::DAILY_BUDGET => null,
  AdSetFields::LIFETIME_BUDGET => 100000,
  AdSetFields::END_TIME
    => (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
  AdSetFields::PACING_TYPE => array('day_parting'),
  AdSetFields::ADSET_SCHEDULE => array(
    array(
      'start_minute' => 720,
      'end_minute' => 840,
      'days' => array(1, 2, 3, 4, 5),
    ),
  ),
));
$adset->update();
import time
from facebookads.adobjects.adset import AdSet

adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
    AdSet.Field.daily_budget: None,
    AdSet.Field.lifetime_budget: 100000,
    AdSet.Field.end_time: int(time.time() + 7 * 24 * 3600),
    AdSet.Field.pacing_type: ['day_parting'],
    AdSet.Field.adset_schedule: [
        {
            'start_minute': 540,
            'end_minute': 720,
            'days': [1, 2, 3, 4, 5],
        },
    ],
})
adset.remote_update()
curl \
  -F 'lifetime_budget=100000' \
  -F 'end_time=2016-07-21T20:42:08+0000' \
  -F 'pacing_type=["day_parting"]' \
  -F 'adset_schedule=[ 
    { 
      "start_minute": 720, 
      "end_minute": 840, 
      "days": [ 
        1, 
        2, 
        3, 
        4, 
        5 
      ] 
    } 
  ]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.7/<AD_SET_ID>

วิธีปิดการกำหนดเวลาโฆษณา:

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;

$adset = new AdSet(<AD_SET_ID>);

$adset->setData(array(
  AdSetFields::PACING_TYPE => array('standard'),
  AdSetFields::ADSET_SCHEDULE => array(),
));
$adset->update();
from facebookads.adobjects.adset import AdSet

adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
    AdSet.Field.pacing_type: ['standard'],
    AdSet.Field.adset_schedule: [],
})
adset.remote_update()
new AdSet(<AD_SET_ID>, context).update()
  .setPacingType("[\"standard\"]")
  .setAdsetSchedule("[]")
  .execute();
curl \
  -F 'pacing_type=["standard"]' \
  -F 'adset_schedule=[]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<AD_SET_ID>

วิธีรับข้อมูลการกำหนดเวลาโฆษณา:

curl -X GET \ -d 'fields="adset_schedule"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_SET_ID>/
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_SET_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 = [ 'adset_schedule', ]; params = { }; const sample_code = (new AdSet(id)).get( fields, params ); logApiCallResult('sample_code api call complete.', sample_code);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_SET_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( 'adset_schedule', ); $params = array( ); echo json_encode((new AdSet($id))->getSelf( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adset import AdSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ 'adset_schedule', ] params = { } print AdSet(id).get( 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_SET_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdSet(id, context).get() .requestAdsetScheduleField() .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_set = FacebookAds::AdSet.get(id ,'adset_schedule')

แต่ละอาร์เรย์ต้องมี:

ชื่อช่อง คำอธิบาย

start_minute

ประเภท: จำนวนเต็ม

นาทีของวันโดยเริ่มจาก 0 เมื่อกำหนดการเริ่มต้น

end_minute

ประเภท: จำนวนเต็ม

นาทีของวันโดยเริ่มจาก 0 เมื่อกำหนดการสิ้นสุด

days

ประเภท: อาร์เรย์ของจำนวนเต็ม

วันที่กำหนดให้ทำงาน ค่าที่ใช้ได้คือ 0-6 โดย 0 เท่ากับวันอาทิตย์ 1 เท่ากับวันจันทร์ และ 6 เท่ากับวันเสาร์

timezone_type

ไม่บังคับ

หากค่าเป็น "user" แสดงว่าเป็นโซนเวลาของผู้ดู หากค่าเป็น "advertizer" แสดงว่าเป็นโซนเวลาของบัญชี

start_minute และ end_minute จะต้องตรงกับจำนวนชั่วโมงพอดี และต้องห่างกันอย่างน้อย 1 ชั่วโมง ในกรณีของการเข้าถึงและความถี่ ช่วงของวันต้องอยู่ที่ 4 ชั่วโมงเป็นอย่างน้อย ตัวอย่างเช่น:

[{'start_minute':540,'end_minute':720,'days':[1,2,3,4,5]},{'start_minute':180, 'end_minute':360,'days':[0,6]}]

การใช้งานมีข้อจำกัดดังต่อไปนี้:

  • ใช้การกำหนดเวลาโฆษณากับงบประมาณตลอดอายุการใช้งานเท่านั้น
  • การกำหนดเวลาโฆษณาจะใช้กับโซนเวลาของกลุ่มเป้าหมายสำหรับโฆษณาในชุด ไม่ใช่โซนเวลาของบัญชีโฆษณา หากบัญชีโฆษณาของคุณใช้โซนเวลาตะวันออก (ET) แต่โฆษณาของคุณกำหนดเป้าหมายเป็นผู้คนในแคลิฟอร์เนียในเวลามาตรฐานแปซิฟิก (PST) เมื่อคุณกำหนดเวลาให้โฆษณาเริ่มตั้งแต่ 18:00 น. - 21:00 น. เราจะแสดงโฆษณาให้ผู้คนในแคลิฟอร์เนียในเวลา 18:00 น. - 21:00 น. ตามเวลามาตรฐานแปซิฟิก (PST) ไม่ใช่ตามเวลาตะวันออก (ET)

คำถามที่พบบ่อย

For under-delivery, your bid price might be too low or your audience too narrow. Your bid should be in the suggested bid range so your ads win auctions and get placement. With competitive target audiences, you may need to bid above the suggested bid range. Or your targeting is too narrow.

If we over-deliver your ad, you might have a very large audience that quickly exhausts budget. If you believe that is not the case, contact us at Facebook Advertising Help.

If you're using campaign budget optimization, budget pacing is at the campaign level. Otherwise, budget pacing is done at the ad set level.

When you change budget, our systems have to learn the new optimal bid which takes time. During this time, your bids are not optimal and we can't maximize ROI. Therefore you should not change bid and budget frequently.

If you have to change these parameters, limit yourself to 2-3 times a day and only the early part of the day. This impacts pacing less than changing it often or later in a day.

Facebook optimizes pacing within a day, so this is not a problem.

Pacing may change. Since you switch from view-based billing to click-based billing, we re-adjust pacing.

Max bid is bid_amount of an ad set you specify regardless of its optimization goal.

With ad scheduling, you schedule hours in a day and days in a week when your ads display to a target audience. You can have your ads display when they are most relevant to an audience. Pacing takes this schedule into account to calculate your effective, optimal bid. See ad scheduling.

From April 9th, 2014, we change the way budgets are spent on partial days at the beginning and end of ad set schedules. For ad sets with daily budgets, we adjust the first and last day spend based on the number of hours we have to deliver ads on those days. For example, if your ad set starts at 6PM, we try to deliver only 25% of daily budget between 6 PM and midnight.