kakasoo

[Meta] API로 광고 생성하기 ( Campaign ~ AdCreative ) 본문

도메인/마케팅

[Meta] API로 광고 생성하기 ( Campaign ~ AdCreative )

카카수(kakasoo) 2024. 3. 30. 15:40
반응형
 

시작하기 - 마케팅 API - 문서 - Meta for Developers

3단계: 광고 세트를 생성하고 예산, 청구, 최적화 및 기간 정의 광고 세트는 같은 일일 또는 총 예산, 일정, 청구, 최적화 및 타게팅 데이터를 공유하는 광고 그룹입니다. 이 단계에서는 AdSet 클래

developers.facebook.com

 

이 문서의 내용을 그대로 정리할 뿐인 블로그 글이지만, 위 글은 개발자가 이미 광고 도메인 이해가 있을 것을 전제로 한 듯 하기에 어렵다.

따라서 어차피 도메인에 대해 설명할 겸 한 문장 한 문장을 해석을 달아서 API를 어떻게 호출할 것인지를 설명할 것이다.

다만, 이 글을 보고 그대로 따라한다고 해서 광고를 생성할 수 있다고 보장할 수는 없는데, 이 문서는 자기 계정인 경우에 해당하기 때문이다.

실제 광고를 의뢰하는 클라이언트로부터 광고 자산 ( = DataSource ) 에 대해서 권한을 위임 받았다면 동일한 방식으로 호출하면 된다.

하지만 아직 권한을 위임받지 못했다면 일단 그것부터 구현을 해야 이 단계가 의미가 생긴다.

물론 이 글에서는 클라이언트로부터 자산들에 대한 권한을 어떻게 받아와야 하는지에 대해서는 설명하지 않을 것이다.

일단 권한을 받았다는 전제 하에, 또는 내 광고 자산들을 이용해서 광고한다는 전제 하에 문서를 작성하도록 하겠다.

 

서론, 용어에 대하여

 

[Meta] 용어 정리 (메타 자산 구조, 유저부터 유저의 자산까지)

메타 용어 정리 설명하기에 앞서 메타 용어들을 정리하고 가야 할 필요성을 느낀다. 메타의 ERD 구조가 실제로는 어떠한지 모르지만, Meta Marketing API를 호출하면서 광고 자산들의 구조에 대해 대

kscodebase.tistory.com

 

일단 용어에 대한 것은 다른 글에 정리를 해두었다.

여기서 말하는 용어들만 숙지하더라도 지금 이 글을 이해하는 데에, 적어도 자산으로 인해 이해를 못할 일은 없을 것이다.

내가 광고 도메인을 처음 시작할 때에는 '픽셀'이 뭔지도 몰랐는데 그것도 모르고 광고 API를 연동하는 건 끔찍한 일이었다.

조금 오래 걸리더라도 메타의 광고 관리자를 보고 뒷단의 구조를 상상하거나, 아니면 이 글을 참고해서 기본적인 용어를 외워보자.

 

 

캠페인부터 광고 크리에이티브, 광고까지의 구조

 

가장 기본이 되는 Campaign ( = 캠페인 ) 부터 AdCreative ( = 광고 크리에이티브 ), 그리고 광고 순서로 생성해야 한다.

광고 생성까지의 API를 호출하는 법을 배우기 전에, 우리는 개발자니깐 각각의 개체들이 무엇을 의미하는지를 먼저 배우는 것이 좋겠다.

앞서 우리가 배운 용어들이 있다고 하더라도, 그건 광고가 아니어도 사용되는 용어들이었겠지만, 여기는 순전히 광고만을 위한 용어이다.

  • Campaign
    • 광고를 목적 ( ex. 금연 ) 을 기준으로 묶는 최상위 개체로 아래에는 AdSet들이 존재한다.
  • AdSet
    • 이름 그대로 광고 묶음으로, 동일한 목적 내에서도 기간, 예산, 최적화( = optimization_goal ), 타게팅 기준으로 나눈다.
    • 예를 들어, 똑같은 금연 광고에서도 군인들의 금연이나 청소년의 금연 광고는 묶음의 기준이 달라야 할 것이다.
  • AdCreative
    • 광고의 이미지, 동영상, 제목, 링크 등 소재를 담당한다.
    • 메타에서는 소재 없이 광고를 생성할 수 없기 때문에 ad보다 우선시된다.
    • AdSet은 광고의 기간과 예산을 결정하지만, 광고에 가장 영향이 큰 것은 결국 소재기 때문에 이 부분을 분리시킨 것으로 보인다.
  • Ad
    • 광고를 의미하며, 실제로 유저에게 보여지는 개체를 의미한다.
    • 광고를 생성할 때에는 어떤 광고 세트에서, 어떤 소재를 사용해 유저에게 노출시킨다.

이제 각 단계 별로 개체들을 생성하고, 또 적절한 유저들에게 광고가 노출되게 하기 위해서 어떤 설정들을 하는지 API로 확인해보자.

 

1단계: 캠페인 생성

curl -X POST \
  -F 'name="My campaign"' \
  -F 'objective="OUTCOME_TRAFFIC"' \
  -F 'status="PAUSED"' \
  -F 'special_ad_categories=[]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/campaigns

 

1단계는 캠페인 생성이다.

  • name : 캠페인을 식별하기 위한 이름 값으로 유니크한 값은 아니기 때문에 대시보드에 표시될 이름일 뿐이다.
  • objective : 캠페인의 목적으로 '트래픽', '앱 설치', '도달', '링크 클릭' 등 이 광고 캠페인을 통해 얻을 목적을 enum으로 전달한다.
  • status : "PAUSED" 상태는 캠페인의 상태로, 혹시나 캠페인 생성 즉시 청구되는 것을 방지하고자 "PAUSED"로 넣는다.
  • speical_ad_categories : (생략)
  • access_token : 이 캠페인을 생성할 주체를 의미하며, 권한을 의미하기도 한다. ( 꼭 유저일 거라는 보장은 없다. )

프로퍼티의 의미는 위와 같으며, 성공 시 생성된 캠페인의 아이디가 반환되는데 이를 유니크한 값으로 사용할 수 있다.

 

2단계: 타게팅 정의 - 생략 가능한 단계

문서 상에서는 캠페인의 광고 세트를 생성하기 위해서는 우선 타게팅을 정의하라고 되어 있다.

하지만 타켓팅을 정의하기 위해 문서에 나온 대로 반드시 'search' API를 호출할 필요는 없는데, 이 enum 값들이 바뀔 일은 드물어서다.

예를 들어, 광고를 집행할 때 국가 이름 또는 국가 코드를 사용하게 될 텐데, 이런 값들이 바뀌는 일은 거의 없다.

 

targeting={ 
    "geo_locations": {"countries":["US"]}, 
    "interests": [{id: 6003139266461, 'name': 'Movies'}]
}

 

위와 같이 지리적 타게팅은 US라는 국가만을, 대상자는 영화를 좋아하는 사람들로 한정지을 수 있지만, 이 값이 바뀔 일은 거의 없다.

또한, 대부분의 경우에는 인공지능에게 직접 광고를 맡기는 것이 효율이 좋기 때문에 국가 외의 타게팅을 설정하는 일은 드물 것이다.

타게팅을 가져왔다면, 이 개체를 정의한 그대로 AdSet 생성의 데이터로 넘기면 된다.

 

3단계: 광고 세트 생성

curl \
  -F 'name=My Ad Set' \
  -F 'optimization_goal=REACH' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'bid_amount=2' \
  -F 'daily_budget=1000' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'targeting={"geo_locations": {"countries":["US"]}, "interests": [{id: 6003139266461, "name": "Movies"}]}' \
  -F 'start_time=2024-10-06T04:45:17+0000' \
  -F 'status=PAUSED' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/adsets

 

광고 세트는 광고를 Target Audience 단위로 묶는 것이며, 위와 같은 조건들을 가지고 있다.

앞서 예시를 든 금연 광고와 같이, 동일한 목적의 광고라고 하더라도 누구에게, 어느 정도 예산과 기간으로 보여줄지는 다를 수 있다.

금연 광고지만 학생들을 대상으로 한다면 새 학생들이 입학하거나 학년이 올라가는 연초에 광고를 해야 할 수도 있을 것이고,

타겟이 40대 중년 남성들을 대상으로 한다면 다른 광고들과 하나로 묶기가 애매할 수도 있다.

이렇게 전체 캠페인 목표 안에서, 다시 최적화 목표 ( = optimization_goal ) 을 설정하고, 타게팅을 할 것이다.

캠페인에 목표가 있었는데 다시 최적화 목표라는 개념이 등장해서 objective와 optimization_goal의 차이가 뭔지 의아할 것이다.

 

  • name : 광고 세트의 이름으로, 역시나 유니크한 이름은 아니기 때문에 추후 다른 API의 기준 값으로 사용하면 안 된다.
  • optimization_goal : 이 goal은, 예를 들면 Traffic ( = 사람을 모을 것인가 ), Sales ( = 물건을 팔 것인가 ) 등 구체화된 목표이다.
  • billing_event : 어떤 상황에 이 광고 세트가 지불하게 될 것인가를 의미한다.
  • bid_amount : 지불 금액으로, 만약 billing_event가 impression이면 노출 1,000번 당 얼마를 지불할 것인지를 의미한다.
  • daily_budget : 하루동안 지불 가능한 최대 금액을 의미한다.
  • targeting : 이전 단계에서 정의한 타겟팅을 JSON으로 직렬화하여 대입한다.
  • start_time : 광고의 시작 시간을 의미한다.
  • status : 마찬가지로 PAUSED 상태로 두어 광고가 바로 집행되지 않게 제한할 수 있지만, 캠페인만 PAUSED로 해도 충분하다.
  • access_token : 광고 세트 생성을 시도하는 주체의 토큰을 대입한다.

 

4단계: 광고 크리에이티브 제공하기

이 단계에서는 AdCreative 개체를 사용하여 광고의 시각적 요소를 제공할 것입니다. 제공해야 하는 정보는 목표에 따라 달라지지만 공통적인 속성은 다음과 같습니다.

- 이미지 및 동영상
- 제목 및 설명
- 링크
- 행동 유도 버튼

 

 

광고의 목표를 달성하는 데에 가장 큰 요소는 결국 소재다.

캠페인이나 광고 세트의 목적 (objective), 목표 (optimization_goal) 는 일종의 희망사항이지 얼마나 효과적일지는 예측할 수 없다.

금연이라는 목적과 최대한 많은 사람에게 보여주기라는 목표는 아름답기는 해도 이 자체만으로 효과적일 수 없는 것이다.

따라서 이 목적, 목표를 달성하기 위해서는 광고의 소재가 무척이나 중요하다.

여기서 소재는, 위의 인용처럼 이미지와 영상, 텍스트, 링크, 행동 유도 버튼 ( = Call To Action ) 을 의미한다.

 

curl \
  -F 'filename=@<IMAGE_PATH>' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/adimages

 

이미지 해시를 생성한다.

 

curl -X POST \
  -F 'name="Sample Creative"' \
  -F 'object_story_spec={
       "page_id": "",
       "link_data": {
         "image_hash": "",
         "link": "https://facebook.com/",
         "message": "try it out"
       }
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives

 

해시된 이미지를 가지고 광고 크리에이티브를 만든다.

 

5단계 : 광고 생성하기

메타 문서 상에는 '광고 게재하기' 라는 제목으로 5단계가 설명되어 있는데, 이는 광고 크리에이티브가 광고의 소재이기 때문이다.

유저에게 노출되는 실제 광고 이미지와 텍스트가 모두 광고 크리에이티브에 담겨있기 때문에 사실 상 광고와 동일시되며,

메타에서 'Ad'는 광고를 유저에게 보여줄지 말지를 담당하는 일종의 토글에 해당한다.

 

curl -X POST \
  -F 'name="My Ad"' \
  -F 'adset_id="&lt;AD_SET_ID&gt;"' \
  -F 'creative={
       "creative_id": "<CREATIVE_ID>"
     }' \
  -F 'status="PAUSED"' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/ads

 

광고가 광고 크리에이티브와 분리된 덕에, 광고의 수정은 새 광고 크리에이티브의 생성과 광고의 소재 변경으로 대체된다.

반응형