Facebook 的广告架构分为三个层级:广告系列、广告组和广告。在市场营销 API 中,开发者有权访问第四个层级,即广告创意。
这些对象包含您的广告目标和一个或多个广告组。这有助于优化和衡量每个广告目标的成效。
广告组包含一个或多个广告。您可以为每个广告组定义预算和排期。为各目标受众创建采用竞价策略的广告组;广告组中的广告采用同一竞价策略定位同一受众。这有助于控制对各受众投入的花费、确定各受众看到广告的时间以及查看针对各受众的指标。
包含广告创意。在每个广告组中创建多个广告,根据不同图片、链接、视频、文字或版位优化广告投放。
仅包含广告的视觉元素,创建后无法更改。每个广告帐户都拥有广告创意资料库,用于存储广告创意,以供在广告中重复使用。
目标 | 排期 | 预算 | 竞价 | 设置目标受众 | 创意 | |
---|---|---|---|---|---|---|
广告系列 | ✓ | |||||
广告组 | ✓ | ✓ | ✓ | ✓ | ||
广告 | ✓ |
对象面向公众的名称和 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:55:52-0800"' \
-F 'end_time="2024-12-05T06:55:52-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
字段,则可以调用这些网址来检索这些页面的数据。详细了解基于游标的分页。