Facebook은 캠페인, 광고 세트 및 광고라는 세 가지 수준으로 광고를 구성합니다. API에서 개발자는 크리에이티브라는 네 번째 수준에 액세스할 수 있습니다.
이러한 개체에는 광고 목표와 하나 이상의 광고 세트가 포함됩니다. 이는 각 광고 목표에 맞게 최적화하고 결과를 측정하는 데 도움이 됩니다.
광고 세트에는 하나 이상의 광고가 있습니다. 각 광고 세트에 대해 예산과 일정을 정의합니다. 입찰가를 포함하여 각 타겟에 대한 광고 세트를 만듭니다. 세트에 있는 광고는 동일한 입찰가를 갖는 동일한 타겟을 타게팅합니다. 이는 각 타겟에 지출하는 비용을 관리하고, 타겟이 광고를 보는 시점을 결정하고, 각 타겟의 지표를 제공하는 데 도움이 됩니다.
광고 크리에이티브를 포함합니다. 각 광고 세트에서 여러 광고를 만들어서 다양한 이미지, 링크, 동영상, 텍스트 또는 노출 위치를 기반으로 광고 게재를 최적화합니다.
광고의 시각적 요소만 포함하며, 시각적 요소는 한 번 만들고 나면 변경할 수 없습니다. 각 광고 계정에는 광고에 다시 사용하기 위한 크리에이티브를 저장하는 크리에이티브 라이브러리가 있습니다.
목표 | 일정 | 예산 | 입찰 | 타게팅 | 크리에이티브 | |
---|---|---|---|---|---|---|
캠페인 | ✓ | |||||
광고 세트 | ✓ | ✓ | ✓ | ✓ | ||
광고 | ✓ |
개체의 공개용 이름과 API 엔드포인트 사이의 매핑:
공개용 이름 | API 엔드포인트 |
---|---|
캠페인 | /campaigns |
광고 세트 | /adsets |
광고 | /ads |
크리에이티브 | /adcreatives |
캠페인은 광고 계정에서 가장 높은 수준의 조직 구조이며, 광고주가 가진 하나의 목표를 나타내야 합니다(예: 페이지 게시물 참여 유도). 캠페인의 목표를 설정하면 해당 캠페인에 추가된 광고에 대한 검증이 진행되어 광고 역시 올바른 목표가 설정되었는지 확인합니다.
Facebook은 광고 관리자에서 광고 계정 내에 모든 활성 및 일시 중단된 캠페인을 표시합니다.
특정 계정과 연결된 캠페인을 읽으려면 사용 중인 광고 계정을 연결하도록 요청하세요. 기본적으로 상태가 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:47:44-0800"' \
-F 'end_time="2024-12-05T06:47:44-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
필드가 포함되고, 해당 URL을 호출하여 데이터의 페이지를 가져올 수 있습니다. 커서 기반 페이지 매김에 대해 자세히 알아보세요.