Facebook 將廣告組織為 3 個層級的架構:行銷活動、廣告組合和廣告。在 API 中,開發人員可存取第 4 個層級:廣告創意。
這些物件中包含您的廣告目標和一或多個廣告組合。這有助於您最佳化和衡量各廣告目標的結果。
廣告組合有一或多個廣告。您可以為每個廣告組合定義預算和排程。使用您的出價為每個目標廣告受眾各建立一個廣告組合;組合中的廣告會以相同的出價設定相同的目標廣告受眾。這有助於控制您花費在各項廣告受眾的金額、決定廣告受眾何時看到您的廣告,並提供各項廣告受眾的衡量指標。
包含廣告創意。在每個廣告組合中建立多個廣告,以根據不同的圖像、連結、影片、文字或廣告版位最佳化廣告投遞。
僅包含廣告的視覺元素,一旦建立後即無法變更。每個廣告帳號都有廣告創意檔案庫,可儲存廣告創意以便重複用於廣告。
目標 | 排程 | 預算 | 出價 | 目標設定 | 廣告創意 | |
---|---|---|---|---|---|---|
行銷活動 | ✓ | |||||
廣告組合 | ✓ | ✓ | ✓ | ✓ | ||
廣告 | ✓ |
物件公開名稱與 API 端點對照表:
公開名稱 | API 端點 |
---|---|
行銷活動 | /campaigns |
廣告組合 | /adsets |
廣告 | /ads |
廣告創意 | /adcreatives |
行銷活動是廣告帳號組織架構中的最高層級,應代表廣告商的單一目標,例如,促進專頁貼文互動。設定行銷活動的目標會強制驗證新增到該行銷活動中的任何廣告,以確保廣告也有正確的目標。
我們會在廣告管理員中顯示廣告帳號中所有進行中和已暫停的行銷活動。
若要讀取與特定帳號相關聯的行銷活動,您可以要求連接所使用的廣告帳號。依預設,我們只會傳回狀態為 ACTIVE
或 PAUSED
的行銷活動,因此您需要依據需求指定其他狀態:
curl -X GET \
-d 'effective_status=[
"ACTIVE",
"PAUSED"
]' \
-d 'fields="name,objective"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
我們也會顯示一些高階洞察報告,包括曝光次數、點擊次數和花費金額。您可以呼叫以下端點來擷取這些資料,並可選擇指定開始和/或結束時間:
use FacebookAds\Object\Campaign;
$campaign = new Campaign(<CAMPAIGN_ID>);
$insights = $campaign->getInsights(array(
AdsInsightsFields::IMPRESSIONS,
AdsInsightsFields::INLINE_LINK_CLICKS,
AdsInsightsFields::SPEND,
), array(
'end_time' => (new \DateTime('now'))->getTimestamp(),
));
from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adsinsights import AdsInsights
import time
fields = [
AdsInsights.Field.impressions,
AdsInsights.Field.inline_link_clicks,
AdsInsights.Field.spend,
]
params = {
'end_time': int(time.time()),
}
campaign = Campaign(<CAMPAIGN_ID>)
insights = campaign.get_insights(fields=fields, params=params)
APINodeList<AdsInsights> adsInsightss = new Campaign(<CAMPAIGN_ID>, context).getInsights()
.setParam("end_time", end_time)
.requestField("impressions")
.requestField("inline_link_clicks")
.requestField("spend")
.execute();
curl -G \
-d 'end_time=1517287567' \
-d 'fields=impressions,inline_link_clicks,spend' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<CAMPAIGN_ID>/insights
目標是您希望用戶看到廣告時採取的行動。您需要指定建立行銷活動期間所選擇的目標。
明確設定目標有以下好處:
若要建立行銷活動,至少需要以下 API 呼叫:
curl -X POST \
-F 'name="My First Campaign"' \
-F 'objective="OUTCOME_ENGAGEMENT"' \
-F 'status="PAUSED"' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
廣告組合是廣告的群組,可用來配置刊登廣告的預算和時段。廣告組合中包含的所有廣告應有相同的目標設定、預算、收費、最佳化目標和刊登時間。
curl -X POST \
-F 'name="My First AdSet"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2024-11-28T06:41:02-0800"' \
-F 'end_time="2024-12-05T06:41:02-0800"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=500' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="POST_ENGAGEMENT"' \
-F 'targeting={
"age_min": 20,
"age_max": 24,
"behaviors": [
{
"id": 6002714895372,
"name": "All travelers"
}
],
"genders": [
1
],
"geo_locations": {
"countries": [
"US"
],
"regions": [
{
"key": "4081"
}
],
"cities": [
{
"key": "777934",
"radius": 10,
"distance_unit": "mile"
}
]
},
"interests": [
{
"id": "<INTEREST_ID>",
"name": "<INTEREST_NAME>"
}
],
"life_events": [
{
"id": 6002714398172,
"name": "Newlywed (1 year)"
}
],
"facebook_positions": [
"feed"
],
"publisher_platforms": [
"facebook",
"audience_network"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/adsets
若要列出行銷活動中的所有廣告組合,您可以指定所需的欄位和狀態,發出要求至下列路徑:
curl -X GET \
-d 'fields="name,start_time,end_time,daily_budget,lifetime_budget"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<AD_CAMPAIGN_ID>/adsets
廣告物件包含在 Facebook 上顯示廣告所需的所有資訊,包括廣告創意。
curl -X POST \
-F 'name="My Ad"' \
-F 'adset_id="<AD_SET_ID>"' \
-F 'creative={
"creative_id": "<CREATIVE_ID>"
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/ads
若要預覽您的廣告,請參閱我們的指南。
最後,如果您想要列出廣告組合的所有廣告,可以指定您要擷取的欄位,發出要求至下列路徑:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Values\ArchivableCrudObjectEffectiveStatuses;
use FacebookAds\Object\Fields\AdFields;
$adset = new AdSet(<AD_SET_ID>);
$ads = $adset->getAds(array(
AdFields::NAME,
AdFields::CONFIGURED_STATUS,
AdFields::EFFECTIVE_STATUS,
AdFields::CREATIVE,
), array(
AdFields::EFFECTIVE_STATUS => array(
ArchivableCrudObjectEffectiveStatuses::ACTIVE,
ArchivableCrudObjectEffectiveStatuses::PAUSED,
ArchivableCrudObjectEffectiveStatuses::PENDING_REVIEW,
ArchivableCrudObjectEffectiveStatuses::PREAPPROVED,
),
));
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.ad import Ad
fields = [
Ad.Field.name,
Ad.Field.configured_status,
Ad.Field.effective_status,
Ad.Field.creative,
]
params = {
Ad.Field.effective_status: [
'ACTIVE',
'PAUSED',
'PENDING_REVIEW',
'PREAPPROVED',
],
}
ad_set = AdSet(<AD_SET_ID>)
ads = ad_set.get_ads(fields=fields, params=params)
APINodeList<Ad> ads = new AdSet(<AD_SET_ID>, context).getAds()
.setEffectiveStatus("[\"ACTIVE\",\"PAUSED\",\"PENDING_REVIEW\",\"PREAPPROVED\"]")
.requestNameField()
.requestConfiguredStatusField()
.requestEffectiveStatusField()
.requestCreativeField()
.execute();
curl -G \
--data-urlencode 'effective_status=[
"ACTIVE",
"PAUSED",
"PENDING_REVIEW",
"PREAPPROVED"
]' \
-d 'fields=name,configured_status,effective_status,creative' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<AD_SET_ID>/ads
您可能會發現廣告總數大於您想要在單一頁面上顯示的數量。在這種情況下,您應該將 limit
欄位指定為所要擷取的項目數量,然後將其餘項目分頁。
執行分頁時,會使用回應中傳回的游標:
"paging": { "previous" : "https://graph.facebook.com/...", "next": "https://graph.facebook.com/...", "cursors": { "before": "NjAxNjc3NTU1ODMyNw==", "after": "NjAxMTc0NTU2MjcyNw==" }
如果還有其他頁面要擷取,回應中會包含 previous
和 next
欄位,您可以呼叫這些網址來擷取這些資料頁面。深入瞭解游標型分頁。