다이내믹 제품 타겟

어드밴티지+ 카탈로그 광고를 사용하면 크로스 디바이스 구매 의향에 따라 사용자에게 광고를 보여줄 수 있습니다. 모바일 앱과 웹사이트에서 사용자 의향의 시그널을 수집한 다음 이 데이터를 사용하여 타겟을 빌드하고 잠재 고객을 타게팅할 수 있습니다.

이 문서에서는 다음을 수행하는 방법을 설명합니다.

1단계: 이벤트에 대해 사용자 시그널 설정

사용자 시그널을 수집하려면 앱 이벤트(모바일 앱의 경우) 또는 Meta 픽셀(웹사이트의 경우)을 사용합니다.

앱이 있고 데스크톱에서만 광고를 실행하는 경우에도 Facebook SDK를 설치해야 합니다. 이는 시그널을 수집하고 타겟 대상을 확장하는 데 도움이 됩니다.

모바일용 앱 이벤트

iOSAndroid용 Facebook SDK를 통해 다음 이벤트를 앱에 추가해야 합니다.

이벤트iOS 이벤트Android 이벤트

검색

FBSDKAppEventNameSearched

EVENT_NAME_SEARCHED

콘텐츠 조회

FBSDKAppEventNameViewedContent

EVENT_NAME_VIEWED_CONTENT

장바구니에 담기

FBSDKAppEventNameAddedToCart

EVENT_NAME_ADDED_TO_CART

구매

// logPurchase를 통해 전송
[[FBSDKAppEvents shared] logPurchase:(double) currency:(NSString *) parameters:(NSDictionary *)];

EVENT_NAME_PURCHASED

모든 이벤트는 content_id(또는 content_id의 JSON 배열)를 포함해야 합니다.

Meta 픽셀과 달리 앱 이벤트에는 product_catalog_id 매개변수가 없습니다. 그러므로 아래에 설명된 external_event_sources 엔드포인트로 카탈로그와 앱을 연결해야 합니다.

예시

iOS의 장바구니에 담기 이벤트:

[[FBSDKAppEvents shared] logEvent:FBSDKAppEventNameAddedToCart
      valueToSum:54.23
      parameters:@{
        FBSDKAppEventParameterNameCurrency    : @"USD",
        FBSDKAppEventParameterNameContentType : @"product",
        FBSDKAppEventParameterNameContentID   : @"123456789"
      }
];

수량 및 서로 다른 구매 품목 2개를 포함한 iOS의 구매 이벤트:

[[FBSDKAppEvents shared] logPurchase:21.97
    currency:@"USD"
    parameters:@{
      FBSDKAppEventParameterNameContent   : @"[{\"id\":\"1234\",\"quantity\":2},{\"id\":\"5678\",\"quantity\":1}]",
      FBSDKAppEventParameterNameContentType : @"product"
    }
];

수량 및 구매 품목 2개를 포함한 Android의 구매 이벤트:

Bundle parameters = new Bundle();
parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT, "[{\"id\":\"1234\",\"quantity\":2},{\"id\":\"5678\",\"quantity\":1}]");

logger.logEvent(
  AppEventsConstants.EVENT_NAME_PURCHASED,
  21.97,
  parameters
);

구매 품목 2개를 포함한 Android의 구매 이벤트:

Bundle parameters = new Bundle();
parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product");
parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, "[\"1234\",\"5678\"]");

logger.logEvent(
  AppEventsConstants.EVENT_NAME_PURCHASED,
  21.97,
  parameters
);

CONTENT_ID 또는 CONTENT 중 하나를 어드밴티지+ 카탈로그 광고와 사용하여 제품 ID를 보고할 수 있습니다. CONTENT 매개변수를 사용하면 제품에 대한 추가 정보를 제공할 수 있습니다.

모바일 측정 파트너 사용

모바일 측정 파트너(MMP)와 함께 어드밴티지+ 카탈로그 광고를 사용하려면 사용자가 앱을 사용할 때 별도의 필수 이벤트를 트리거해야 합니다. 추적해야 할 주요 인터랙션 포인트는 사용자가 제품을 검색하고, 제품을 보고, 장바구니에 담고 품목을 구매할 때입니다. MMP에서 다음 표준 어드밴티지+ 카탈로그 광고 이벤트에 상응하는 이벤트를 선택해야 합니다.

이름설명

fb_mobile_search

사용자가 제품을 검색할 때

fb_mobile_content_view

계정 센터 계정이 제품을 볼 때

fb_mobile_add_to_cart

사용자가 장바구니에 품목을 담을 때

fb_mobile_purchase

계정 센터 계정이 하나 이상의 품목을 구매할 때

또한 유효한 어드밴티지+ 카탈로그 광고 이벤트로 등록되려면 각 이벤트에 추가 매개변수 2개가 필요합니다. 이 두 매개변수는 사용자가 보고 있거나 장바구니에 담았거나 구매한 품목의 ID와 해당 ID가 제품 또는 제품 그룹 ID인지 여부를 나타냅니다. 사용 가능한 추가 매개변수는 다음과 같습니다.

이름설명

fb_content_id

문자열

fb_content_id 또는 fb_content 중 하나는 필수입니다.
판매점의 제품 또는 제품 그룹 ID. JSON으로 인코딩한 ID 배열을 포함하는 문자열이어야 합니다. 더 정확한 타게팅을 위해 가능하면 제품 ID를 사용하세요.

fb_content

문자열

fb_content_idfb_content 중 하나는 필수입니다.
해당하는 경우 EAN(국제 상품 번호) 또는 기타 제품이나 콘텐츠 ID뿐만 아니라 제품의 수량 및 가격이 포함된 JSON 개체의 리스트


idquantity 필드는 필수입니다.
예:
"[{\"id\": \"1234\", \"quantity\": 2}, {\"id\": \"5678\", \"quantity\": 1}]"

fb_content_type

문자열

선택 사항.
product 또는 product_group. fb_content_id로 사용한 ID 유형과 동기화해야 합니다.


fb_content_type을 제공하지 않는 경우 Meta는 유형과 관계없이 동일한 ID가 있는 모든 항목에 이벤트를 매칭합니다.


자세한 내용은 '적절한 content_type 선택'을 참조하세요.

_valueToSum

문자열

선택 사항.
제품의 총가치

fb_currency

문자열

선택 사항.
제품 또는 구매 금액의 통화

참고: 구매가 이루어지면 _valueToSumfb_currency 매개변수를 전송하는 것이 좋습니다.

웹사이트용 Meta 픽셀 사용하기

해당하는 경우 다음 이벤트를 웹사이트에 추가해야 합니다.

  • Search
  • ViewCategory
  • ViewContent
  • AddToCart
  • Purchase

이러한 이벤트는 다음 데이터 매개변수와 함께 전송해야 합니다.

이름설명

content_ids

문자열 또는 string[]

content_ids 또는 contents 중 하나는 필수입니다.
판매점의 제품 또는 제품 그룹 ID. 더 정확한 타게팅을 위해 가능하면 제품 ID를 사용하세요.

contents

object[]

content_ids 또는 contents 중 하나는 필수입니다.
판매점의 제품 또는 제품 그룹 ID와 제품에 대한 추가 정보를 포함하는 JSON 개체의 리스트.


idquantity 필드는 필수입니다.
Example:. [{"id": "1234", "quantity": 2}, {"id": "5678", "quantity": 1}]

content_type

문자열

선택 사항.
product 또는 product_group. content_ids로 사용한 ID 유형과 동기화해야 합니다.


content_type을 제공하지 않는 경우 Meta가 유형과 관계없이 동일한 ID가 있는 모든 항목에 이벤트를 매칭합니다.


자세한 내용은 '적절한 content_type 선택'을 참조하세요.

product_catalog_id

문자열

선택 사항.
사용할 제품 카탈로그. 제공되는 경우 이 카탈로그만 픽셀 실행과 연결됩니다. 제공되지 않는 경우 픽셀과 연결된 카탈로그를 사용합니다.
자세한 내용은 사용자 시그널을 제품 카탈로그에 연결을 참조하세요.

예시

Search 표준 이벤트의 예시는 아래와 같습니다. 상위 검색 결과의 품목 5~10개를 content_ids에 제공하는 것이 좋습니다.

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

fbq('track', 'Search', { 
  search_string: 'leather sandals',
  content_ids: ['1234', '2424', '1318', '6832'], // top 5-10 search results
  content_type: 'product'
});
</script>
<!-- End Facebook Pixel Code -->

ViewCategory 이벤트의 예시는 아래와 같습니다. 상위 결과의 품목 5~10개를 content_ids에 제공하는 것이 좋습니다. 참고로 ViewCategory가 표준 이벤트가 아니므로 trackCustom 함수를 사용합니다.

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

fbq('trackCustom', 'ViewCategory', {
  content_name: 'Really Fast Running Shoes',
  content_category: 'Apparel &amp; Accessories > Shoes',
  content_ids: ['1234', '2424', '1318', '6832'], // top 5-10 results
  content_type: 'product'
});
</script>
<!-- End Facebook Pixel Code -->

ViewContent 표준 이벤트의 예시는 아래와 같습니다. 픽셀 설정에 대한 자세한 내용은 Meta 픽셀을 참조하세요.

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

fbq('track', 'ViewContent', {
  content_ids: ['1234'],
  content_type: 'product',
  value: 0.50,
  currency: 'USD'
});
</script>
<!-- End Facebook Pixel Code -->

AddToCart 표준 이벤트는 이커머스 플랫폼이 장바구니에 품목을 담는 방식에 따라 달라집니다. 이 작업을 동적으로 수행할 경우 버튼 클릭 시 트리거되도록 onclick 이벤트 핸들러에 배치되어야 합니다. 별도 페이지를 읽어들이는 경우 픽셀 이벤트를 평소처럼 실행할 수 있습니다.

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

// If you have a separate add to cart page that is loaded.
fbq('track', 'AddToCart', {
  content_ids: ['1234', '1853', '9386'],
  content_type: 'product',
  value: 3.50,
  currency: 'USD'
});
</script>
<!-- End Facebook Pixel Code -->

버튼 클릭 시 이벤트를 실행해야 하고 읽어들이는 별도의 페이지가 없는 경우:

<!-- The below method uses jQuery, but that is not required -->

<button id="addToCartButton">Add To Cart</button>
<!-- Add event to the button's click handler -->

<script type="text/javascript">
  $( '#addToCartButton' ).click(function() {
    fbq('track', 'AddToCart', {
      content_ids: ['1234'],
      content_type: 'product',
      value: 2.99,
      currency: 'USD' 
    });  
  });
</script>

Purchase 표준 이벤트(수량이 포함된 품목 2개 포함):

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

fbq('track', 'Purchase', {
  contents: [
    {'id': '1234', 'quantity': 2},
    {'id': '4642', 'quantity': 1}
  ],
  content_type: 'product',
  value: 21.97,
  currency: 'USD'
});
</script>

<!-- End Facebook Pixel Code -->

Purchase 표준 이벤트(품목 2개 포함):

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
// Insert Your Facebook Pixel ID below. 
fbq('init', '<FB_PIXEL_ID>');
fbq('track', 'PageView');

fbq('track', 'Purchase', {
  content_ids: ['1234', '4642'],
  content_type: 'product',
  value: 21.97,
  currency: 'USD'
});
</script>

<!-- End Facebook Pixel Code -->

적절한 content_type 선택

참고:fb_content_type은 모바일용 콘텐츠 유형입니다.

페이지가 특정 SKU(특정 크기, 색상 등)에 관한 것이라면 content_typeproduct를 사용하고 content_ids에 제품 ID(즉, 제품 피드의 id)를 전달합니다. 사람들이 특정 제품을 구매하기 때문에 모든 AddToCartPurchase 이벤트는 content_type=product를 사용해야 합니다. 사람들은 크기, 색상이 정해지지 않은 아무 셔츠나 구매하는 것이 아니라 특정 치수와 색상의 셔츠를 구매합니다.

페이지가 크기, 색상 등은 다르지만 동일한 제품 그룹에 속하는 관련 제품 그룹에 관한 것이라면 product_group을 사용하고 content_ids에 제품 그룹 ID(즉, 제품 피드의 item_group_id)를 전달합니다. 일반적인 사용 사례로는 사용자가 아직 크기를 선택하지 않은 ViewContent 페이지가 있습니다. product_groupAddToCartPurchase와 함께 사용하지 마세요.

content_typecontent_ids 또는 contents 매개변수에 포함된 ID 유형과 일치하는 것이 중요합니다.

특정 제품 ID(content_type=product)를 전달하면 사용자가 어떤 에디션(크기, 색상 등)에 관심이 있는지 알 수 있으므로 Meta가 더 관련성 있는 제품을 추천할 수 있습니다. content_type=product_group이라도 항상 (제품 그룹이 아니라) 제품을 표시합니다.

content_type을 제공하지 않는 경우 Meta가 유형과 관계없이 동일한 ID가 있는 모든 항목에 이벤트를 매칭합니다. content_type을 보내면 이벤트를 매칭하고 싶은 특정 ID를 더욱 세밀하게 관리할 수 있으므로 이를 권장합니다.

2단계: 사용자 시그널을 제품 카탈로그에 연결

이벤트 소스와 각 제품 카탈로그를 연결해서 Facebook이 이 데이터를 가져오고 광고에 올바른 제품을 표시하도록 해야 합니다. 이렇게 하려면 비즈니스 관리자의 카탈로그 페이지를 방문하여 이벤트 소스 연결 버튼을 클릭하면 됩니다. 어드밴티지+ 카탈로그 광고 이벤트를 수신할 앱과 픽셀을 선택하세요.

또는 외부 이벤트 소스 리스트를 UTF-8로 인코딩된 쿼리 문자열 매개변수로 포함해 POST API를 호출할 수 있습니다.

use FacebookAds\Object\ProductCatalog;

$product_catalog = new ProductCatalog(<PRODUCT_CATALOG_ID>);
$product_catalog->createExternalEventSource(array(), array(
  'external_event_sources' => array(
    <PIXEL_ID>,
    <APP_ID>,
  ),
));
from facebookads.adobjects.productcatalog import ProductCatalog

product_catalog = ProductCatalog(<PRODUCT_CATALOG_ID>)
product_catalog.add_external_event_sources([
    <PIXEL_ID>,
    <APP_ID>,
])
curl \
  -F 'external_event_sources=["<PIXEL_ID>","<APP_ID>"]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<PRODUCT_CATALOG_ID>/external_event_sources

참고: 카탈로그, 픽셀, 앱 및 비즈니스에 대한 권한이 필요합니다.

매개변수

이름설명

external_event_sources

필수 항목.
연결할 앱 및 픽셀 ID로 구성된 배열(UTF-8 인코딩 쿼리 문자열 매개변수 형식)

3단계: 제품 타겟 만들기

다음 단계에서는 모바일 앱과 웹사이트 활동을 기반으로 제품 타겟을 빌드해야 합니다. 사용할 이벤트를 선택하고 제품 타겟을 사용하여 광고를 타게팅할 수 있습니다.

표준 앱 이벤트의 경우 타겟은 다음 광고 픽셀 이벤트 이름으로 집계됩니다.

  • Search
  • ViewContent
  • AddToCart
  • Purchase

Android 및 iOS 사용자를 포함하더라도 타겟 규칙에 위의 이벤트 이름을 사용하세요.

/act_{ad-account-id}/product_audiences 엔드포인트로 POST API 호출을 보내서 제품 타겟을 만듭니다.

https://graph.facebook.com/v21.0/act_AD_ACCOUNT_ID/product_audiences

매개변수

이름설명

name

문자열

필수 항목.
타겟의 이름

description

문자열

선택 사항.
타겟 설명

product_set_id

숫자 문자열

필수 항목. 이 타겟으로 타게팅할 제품 세트.

inclusions

JSON 개체

필수 항목.
타게팅할 이벤트 세트. 적어도 한 번은 포함해야 합니다. 각 포함에는 이벤트가 정확히 1개여야 합니다.

inclusions.retention_seconds

정수

필수 항목.
타겟에서 계정 센터 계정을 유지하는 시간(초).

inclusions.rule

object[]

필수 항목.
하나의 event를 참조하는 웹사이트 맞춤 타겟 규칙.

exclusions

JSON 개체

선택 사항.
계정 센터 계정을 타게팅에서 제외할 이벤트.
제외의 경우 이벤트가 같은 제품 그룹 내에 있는 제품에서 발생했다면 이러한 이벤트가 적용된 계정 센터 계정을 타게팅에서 제외해야 합니다(즉, 제품 피드에서 동일한 item_group_id in을 가지는 제품이 이에 해당합니다).
예를 들어 제품 타겟은 ViewContent를 포함하고 구매 이벤트는 제외하도록 설정됩니다. 계정 센터 계정이 제품 A와 B를 조회하고 제품 B를 구매합니다. 제품 A와 제품 B가 같은 제품 그룹에 속해 있다면 해당 계정 센터 계정은 제품 타겟에서 제외됩니다. A와 B는 단지 에디션이기 때문입니다. 제품 A와 B가 같은 제품 그룹에 속해 있지 않다면 계정 센터 계정이 계속 타겟에 남게 됩니다. 해당 계정 센터 계정이 아직 제품 A에 대해 ViewContent 이벤트를 가지고 있기 때문입니다.

exclusions.retention_seconds

정수

필수 항목(제외를 지정하는 경우).
제외를 유지하는 시간(초).

exclusions.rule

object[]

필수 항목(제외를 지정하는 경우).
하나의 event를 참조하는 웹사이트 맞춤 타겟 규칙

각 규칙은 연산자 eq를 포함하는 event를 최상위 규칙으로 포함하거나 최상위 and 규칙의 일부로 포함해야 합니다.

포함과 제외에 동일한 event를 사용했다면 추가 매개변수 검사도 정확히 똑같아야 합니다.

예시

제품을 보거나 장바구니에 담았지만 구매하지 않은 사용자를 타게팅하는 타겟을 만들 경우의 예시는 다음과 같습니다.

curl -X POST \ -F 'name="Test Product Audience"' \ -F 'product_set_id="<PRODUCT_SET_ID>"' \ -F 'inclusions=[ { "retention_seconds": 86400, "rule": { "event": { "eq": "AddToCart" } } }, { "retention_seconds": 72000, "rule": { "event": { "eq": "ViewContent" } } } ]' \ -F 'exclusions=[ { "retention_seconds": 172800, "rule": { "event": { "eq": "Purchase" } } } ]' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_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 = [ ]; params = { 'name' : 'Test Product Audience', 'product_set_id' : '<productSetID>', 'inclusions' : [{'retention_seconds':86400,'rule':{'event':{'eq':'AddToCart'}}},{'retention_seconds':72000,'rule':{'event':{'eq':'ViewContent'}}}], 'exclusions' : [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], }; const product_audiences = (new AdAccount(id)).createProductAudience( fields, params ); logApiCallResult('product_audiences api call complete.', product_audiences);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Test Product Audience', 'product_set_id' => '<productSetID>', 'inclusions' => array(array('retention_seconds' => 86400,'rule' => array('event' => array('eq' => 'AddToCart'))),array('retention_seconds' => 72000,'rule' => array('event' => array('eq' => 'ViewContent')))), 'exclusions' => array(array('retention_seconds' => 172800,'rule' => array('event' => array('eq' => 'Purchase')))), ); echo json_encode((new AdAccount($id))->createProductAudience( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Test Product Audience', 'product_set_id': '<productSetID>', 'inclusions': [{'retention_seconds':86400,'rule':{'event':{'eq':'AddToCart'}}},{'retention_seconds':72000,'rule':{'event':{'eq':'ViewContent'}}}], 'exclusions': [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], } print AdAccount(id).create_product_audience( 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_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createProductAudience() .setName(\"Test Product Audience\") .setProductSetId(\"<productSetID>\") .setInclusions(\"[{\\"retention_seconds\\":86400,\\"rule\\":{\\"event\\":{\\"eq\\":\\"AddToCart\\"}}},{\\"retention_seconds\\":72000,\\"rule\\":{\\"event\\":{\\"eq\\":\\"ViewContent\\"}}}]\") .setExclusions(\"[{\\"retention_seconds\\":172800,\\"rule\\":{\\"event\\":{\\"eq\\":\\"Purchase\\"}}}]\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) product_audiences = ad_account.product_audiences.create({ name: 'Test Product Audience', product_set_id: '<productSetID>', inclusions: [{'retention_seconds':86400,'rule':{'event':{'eq':'AddToCart'}}},{'retention_seconds':72000,'rule':{'event':{'eq':'ViewContent'}}}], exclusions: [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], })

iPhone으로 웹에서 제품을 보았지만 어떤 기기에서도 제품을 구매하지 않은 사용자를 타게팅하려면 다음과 같이 타겟을 만듭니다.

여기에서는 Meta 픽셀에 userAgent 매개변수를 포함하는 것으로 가정합니다.

curl -X POST \ -F 'name="Test Iphone Product Audience"' \ -F 'product_set_id="<PRODUCT_SET_ID>"' \ -F 'inclusions=[ { "retention_seconds": 86400, "rule": { "and": [ { "event": { "eq": "AddToCart" } }, { "userAgent": { "i_contains": "iPhone" } } ] } } ]' \ -F 'exclusions=[ { "retention_seconds": 172800, "rule": { "event": { "eq": "Purchase" } } } ]' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_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 = [ ]; params = { 'name' : 'Test Iphone Product Audience', 'product_set_id' : '<productSetID>', 'inclusions' : [{'retention_seconds':86400,'rule':{'and':[{'event':{'eq':'AddToCart'}},{'userAgent':{'i_contains':'iPhone'}}]}}], 'exclusions' : [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], }; const product_audiences = (new AdAccount(id)).createProductAudience( fields, params ); logApiCallResult('product_audiences api call complete.', product_audiences);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Test Iphone Product Audience', 'product_set_id' => '<productSetID>', 'inclusions' => array(array('retention_seconds' => 86400,'rule' => array('and' => array(array('event' => array('eq' => 'AddToCart')),array('userAgent' => array('i_contains' => 'iPhone')))))), 'exclusions' => array(array('retention_seconds' => 172800,'rule' => array('event' => array('eq' => 'Purchase')))), ); echo json_encode((new AdAccount($id))->createProductAudience( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Test Iphone Product Audience', 'product_set_id': '<productSetID>', 'inclusions': [{'retention_seconds':86400,'rule':{'and':[{'event':{'eq':'AddToCart'}},{'userAgent':{'i_contains':'iPhone'}}]}}], 'exclusions': [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], } print AdAccount(id).create_product_audience( 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_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createProductAudience() .setName(\"Test Iphone Product Audience\") .setProductSetId(\"<productSetID>\") .setInclusions(\"[{\\"retention_seconds\\":86400,\\"rule\\":{\\"and\\":[{\\"event\\":{\\"eq\\":\\"AddToCart\\"}},{\\"userAgent\\":{\\"i_contains\\":\\"iPhone\\"}}]}}]\") .setExclusions(\"[{\\"retention_seconds\\":172800,\\"rule\\":{\\"event\\":{\\"eq\\":\\"Purchase\\"}}}]\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) product_audiences = ad_account.product_audiences.create({ name: 'Test Iphone Product Audience', product_set_id: '<productSetID>', inclusions: [{'retention_seconds':86400,'rule':{'and':[{'event':{'eq':'AddToCart'}},{'userAgent':{'i_contains':'iPhone'}}]}}], exclusions: [{'retention_seconds':172800,'rule':{'event':{'eq':'Purchase'}}}], })

제품 타겟 가져오기

제품 타겟을 만들고 나면 맞춤 타겟 API를 사용하여 이를 가져올 수 있습니다. data_source 매개변수를 이용하여 타겟을 만들 때 사용한 원래의 매개변수를 가져올 수 있습니다.

제품 타겟은 특정한 유형의 맞춤 타겟으로, 제품 이벤트에서 동적으로 생성됩니다. act_{ad-account-id}/product_audiences 엔드포인트는 이러한 타겟을 생성하는 특수한 POST 엔드포인트입니다.

예시

맞춤 타겟을 가져오는 예시는 다음과 같습니다.

curl -X GET \ -d 'fields="data_source,subtype"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/customaudiences
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_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 = [ 'data_source', 'subtype', ]; params = { }; const customaudiencess = (new AdAccount(id)).getCustomAudiences( fields, params ); logApiCallResult('customaudiencess api call complete.', customaudiencess);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( 'data_source', 'subtype', ); $params = array( ); echo json_encode((new AdAccount($id))->getCustomAudiences( $fields, $params )->getResponse()->getContent(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ 'data_source', 'subtype', ] params = { } print AdAccount(id).get_custom_audiences( 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_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).getCustomAudiences() .requestField(\"data_source\") .requestField(\"subtype\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) customaudiencess = ad_account.customaudiences({ fields: { 'data_source''subtype' }, })

특정 제품 타겟을 가져오는 예시는 다음과 같습니다.

use FacebookAds\Object\ProductAudience;

$product_audience = new ProductAudience(<PRODUCT_AUDIENCE_ID>);
$product_audience->read();
from facebookads.objects import ProductAudience

product_audience = ProductAudience(<PRODUCT_AUDIENCE_ID>)
product_audience.remote_read()
CustomAudience customAudience2 = new CustomAudience(<PRODUCT_AUDIENCE_ID>, context).get()
  .execute();
curl -G \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<PRODUCT_AUDIENCE_ID>