소재 피드 사양

asset_feed_spec 필드를 사용하면 광고 크리에이티브의 다양한 조합을 여러 사용자에게 전달할 수 있습니다. 조합을 설정하는 방법에는 두 가지가 있습니다.

  • 자동: 크리에이티브 소재를 제공하면 Meta에서 여러 가지 조합을 다양한 사용자에게 자동으로 전송합니다. 이 옵션을 사용하려면 다이내믹 크리에이티브 API를 참조하세요.
  • 수동: 크리에이티브 소재를 제공하고 이러한 소재를 표시하는 방법에 대한 규칙을 만듭니다. 이 옵션을 사용하려면 소재 맞춤화 규칙을 참조하세요.

소재 피드 사양에는 이미지, 제목, 본문 등의 다양한 크리에이티브 요소 컬렉션이 포함됩니다. 각 소재 유형에 여러 크리에이티브 소재를 지정할 수 있습니다. 사양의 형식은 각 사용 사례에 따라 다릅니다. 참고 자료, 소재 피드 사양도 참조하세요.

소재 피드 만들기

asset_feed_spec을 사용하여 여러 크리에이티브 소재를 제공할 수 있으며, 다음과 같은 제한이 적용됩니다.

  • 모든 소재 맞춤화 규칙에 대해 asset_feed_spec에 2개 이상의 타겟 맞춤화 규칙을 포함하세요.
  • 다이내믹 크리에이티브의 경우, asset_feed_spec은 맞춤화 규칙이 있어서는 안 됩니다. 이 경우, ad_formats 아래에 [“AUTOMATIC_FORMAT”]을 지정하여 여러 노출 위치에 걸쳐 이미지와 동영상을 모두 믹스할 수 있습니다.

예를 들어 다이내믹 크리에이티브에 대한 asset_feed_spec을 만드는 방법은 다음과 같습니다.

curl -X POST \
  -F 'name="Dynamic Ad Creative with Asset Feed Spec Sample"' \
  -F 'object_story_spec={
       "page_id": "<PAGE_ID>"
     }' \
  -F 'asset_feed_spec={
       "images": [
         {
           "hash": "<IMAGE_HASH>"
         }
       ],
       "bodies": [
         {
           "text": "Begin Your Adventure"
         },
         {
           "text": "Once a Trainer, always a Trainer."
         }
       ],
       "titles": [
         {
           "text": "Level Up"
         },
         {
           "text": "Swipe to evolve"
         }
       ],
       "descriptions": [
         {
           "text": "First Dynamic Ad Creative Sample"
         }
       ],
       "ad_formats": [
         "SINGLE_IMAGE"
       ],
       "call_to_action_types": [
         "SHOP_NOW"
       ],
       "link_urls": [
         {
           "website_url": "https://www.example.com/"
         }
       ],
       "videos": []
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives

또한 두 개의 대체 동영상, 본문, 제목으로 asset_feed_spec을 만들 수 있습니다.

curl 
-F 'object_story_spec={
       "page_id": "YOUR_PAGE_ID"
       "instagram_actor_id" : "INSTAGRAM_ACTOR_ID",
    }' 
-F "asset_feed_spec={'videos': [{'video_id':'2053108854721025', 'thumbnail_url':'<thumnail_url>', 'url_tags':'video=video1'},{'video_id':'2104406249780616', 'thumbnail_url':'<thumnail_url>','url_tags':'video=video2'}], 'bodies': [{'text':'Begin Your Adventure'}, {'text':'Once a Trainer, always a Trainer.'}], 'titles': [{'text':'Level Up'}, {'text':'Swipe to evolve'}], 'descriptions': [{'text':'Begin Your Adventure'}], 'ad_formats': ['SINGLE_IMAGE'], 'link_urls': [{'website_url':'<WEBSITE_URL>'}]}"
-F 'access_token=<ACCESS_TOKEN>'  
https://graph.facebook.com/<API_VERSION>/act_<AD_ACCOUNT_ID>/adcreatives

소재 피드 사양에 이용 가능한 모든 옵션을 참조하세요.

소재 피드 읽기

크리에이티브를 확인하려면 asset_feed_spec을 읽어보세요.

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

여러 이미지와 본문이 포함된 다이내믹 크리에이티브가 있을 경우, 응답은 다음과 같습니다.

{  
   "asset_feed_spec":{  
      "images":[  
         {  
            "url_tags":"image=image1",
            "hash":"785095162a2034666e0d0cc4ea1faf89"
         },
         {  
            "url_tags":"image=image2",
            "hash":"3a24122c13923569599be35567ce4e9e"
         }
      ],
      "bodies":[  
         {  
            "text":"Begin Your Adventure"
         },
         {  
            "text":"Once a Trainer, always a Trainer."
         }
      ],
      "call_to_action_types":[  
         "LEARN_MORE"
      ],
      "call_to_actions":[  
         {  
            "type":"LEARN_MORE"
         }
      ],
      "descriptions":[  
         {  
            "text":"Begin Your Adventure"
         }
      ],
      "link_urls":[  
         {  
            "website_url":"<WEBSITE_URL>"
         }
      ],
      "titles":[  
         {  
            "text":"Swipe to evolve"
         },
         {  
            "text":"Level Up"
         }
      ],
      "ad_formats":[  
         "SINGLE_IMAGE"
      ],
      "optimization_type":"REGULAR"
   },
   "id":"<AD_CREATIVE_ID>",
}

여러 동영상, 본문 및 제목이 포함된 다이내믹 크리에이티브 피드가 있을 경우, 응답은 다음과 같습니다.

{  
   "asset_feed_spec":{  
      "videos":[  
         {  
            "url_tags":"video=video1",
            "video_id":"2053108854721025",
            "thumbnail_url":"<thumnail_url>",
            "thumbnail_hash":"<thumnail_hash>"
         },
         {  
            "url_tags":"video=video2",
            "video_id":"2104406249780616",
            "thumbnail_url":"<thumnail_url>",
            "thumbnail_hash":"<thumnail_hash>"
         }
      ],
      "bodies":[  
         {  
            "text":"Begin Your Adventure"
         },
         {  
            "text":"Once a Trainer, always a Trainer."
         }
      ],
      "call_to_action_types":[  
         "LEARN_MORE"
      ],
      "call_to_actions":[  
         {  
            "type":"LEARN_MORE"
         }
      ],
      "descriptions":[  
         {  
            "text":"Begin Your Adventure"
         }
      ],
      "link_urls":[  
         {  
            "website_url":"<WEBSITE_URL>"
         }
      ],
      "titles":[  
         {  
            "text":"Swipe to evolve"
         },
         {  
            "text":"Level Up"
         }
      ],
      "ad_formats":[  
         "SINGLE_VIDEO"
      ],
      "optimization_type":"REGULAR"
   },
   "id":"<AD_CREATIVE_ID>",
}

소재 피드 수정

임의의 크리에이티브 소재를 추가하거나 교체하거나 삭제할 수 있습니다. 이를 위해서는 새로운 asset_feed_spec을 포함한 다른 크리에이티브를 제공하세요.

다음과 같은 작업을 진행할 수 있습니다.

  • 소재를 추가합니다.
  • 기존 소재를 삭제합니다.
  • 소재를 완전히 새로운 것으로 교체합니다.

다음과 같은 작업은 진행할 수 없습니다.

  • 광고 형식을 변경합니다(예: SINGLE IMAGE에서 VIDEO로 변경).
  • 소재 피드 기반 크리에이티브 광고를 다이내믹 크리에이티브 광고가 아닌 것(즉 asset_feed_spec이 없는 광고)으로 업데이트합니다.
curl 
  -F 'access_token=<ACCESS_TOKEN>' 
  -F 'creative={
      "creative_id": <CREATIVE_ID>,
   }' 
https://graph.facebook.com/<API-VERSION>/<AD_ID>

기존 광고 크리에이티브를 교체할 새로운 크리에이티브를 만들 때도 해당하는 모든 제한을 준수해야 합니다.