動態商品廣告受眾

高效速成+ 目錄廣告可讓您依照用戶的跨裝置購買意願來顯示廣告。您可以從行動應用程式和網站收集用戶意願的訊號,然後利用此資料建立廣告受眾,以設定目標潛在顧客。

本文件說明以下做法:

步驟 1:設定事件的用戶訊號

若要收集用戶訊號,請使用應用程式事件(適用於行動應用程式)或 Meta 像素(適用於網站)。

如果您有應用程式,並且只在桌上型電腦上刊登廣告,仍應安裝 Facebook SDK。如此有助於擷取訊號並擴大目標廣告受眾。

行動版應用程式事件

您必須透過 iOSAndroid 版 Facebook SDK,將下列事件加入應用程式:

事件iOS 事件Android 事件

Search

FBSDKAppEventNameSearched

EVENT_NAME_SEARCHED

View Content

FBSDKAppEventNameViewedContent

EVENT_NAME_VIEWED_CONTENT

Add To Cart

FBSDKAppEventNameAddedToCart

EVENT_NAME_ADDED_TO_CART

Purchase

// 透過 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"
      }
];

在 iOS 上購買兩項不同商品的購買事件,包含商品數量:

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

在 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
);

在 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_IDCONTENT 可與高效速成+ 目錄廣告搭配用來回報商品編號。CONTENT 參數可讓您提供商品的其他相關資訊。

使用行動衡量合作夥伴

若要使用高效速成+ 目錄廣告搭配行動衡量合作夥伴(MMP),應在用戶使用您的應用程式時,觸發個別的必要事件。您應追蹤的關鍵互動點包括:當用戶搜尋商品、瀏覽商品、將商品加入購物車,以及購買商品時。您應在 MMP 選擇對應於下列標準高效速成+ 目錄廣告事件的事件:

名稱說明

fb_mobile_search

用戶搜尋商品

fb_mobile_content_view

帳號管理中心帳號瀏覽商品時

fb_mobile_add_to_cart

用戶將商品加入購物車

fb_mobile_purchase

帳號管理中心帳號購買一或多項商品

此外,每個事件需要兩個附加參數,才能成功註冊為有效的高效速成+ 目錄廣告事件。這兩個參數代表被瀏覽、加入購物車或購買的商品編號,以及該編號是商品編號或商品群組編號。可用的附加參數如下:

名稱說明

fb_content_id

字串

fb_content_idfb_content 必須擇一使用。
零售商的商品或商品群組編號。此應為字串,包含編號的 JSON 編碼陣列。請盡可能使用商品編號,以提高目標設定準確度。

fb_content

字串

fb_content_idfb_content 必須擇一使用。
JSON 物件清單,內含國際商品條碼(EAN)(如適用),或其他商品或內容識別資料,以及商品的數量和價格。


idquantity必要欄位。
例如:
"[{\"id\": \"1234\", \"quantity\": 2}, {\"id\": \"5678\", \"quantity\": 1}]"

fb_content_type

字串

選用項目。
productproduct_group,需與用作 fb_content_id 的編號類型同步。


若未提供 fb_content_type,Meta 會將事件與具有相同編號的每個項目進行配對(與其類型無關)。


如需瞭解詳情,請參閱「選擇適當的 content_type

_valueToSum

字串

選用項目。
商品的總價值。

fb_currency

字串

選用項目。
商品或購買金額的幣別。

附註:建議在用戶進行購買時,傳送 _valueToSumfb_currency 參數。

將 Meta 像素用於網站

必須將下列事件加入網站(如適用):

  • Search
  • ViewCategory
  • ViewContent
  • AddToCart
  • Purchase

這些事件應與下列資料參數一起傳送:

名稱說明

content_ids

字串或字串陣列

content_idscontents 必須擇一使用。
零售商的商品或商品群組編號。請盡可能使用商品編號,以提高目標設定準確度。

contents

物件陣列

content_idscontents 必須擇一使用。
JSON 物件清單,內含零售商的商品或商品群組編號,以及商品的其他相關資訊。


idquantity必要欄位。
例如:[{"id": "1234", "quantity": 2}, {"id": "5678", "quantity": 1}]

content_type

字串

選用項目。
productproduct_group,需與用作 content_ids 的編號類型同步。


若未提供 content_type,Meta 會將事件與具有相同編號的每個項目進行配對(與其類型無關)。


如需瞭解詳情,請參閱「選擇適當的 content_type」。

product_catalog_id

字串

選用項目。
所要使用的商品目錄。如果提供此資料,這將會是與像素觸發關聯的唯一目錄。如果未提供此資料,則會使用與像素關聯的目錄。
如需瞭解詳情,請參閱「將用戶訊號與商品目錄建立關聯」。

範例

Search 標準事件如下所示。建議在 content_ids 中提供熱門搜尋結果中的前 5 至 10 項商品。

<!-- 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 事件如下所示。建議在 content_ids 中提供熱門結果中的前 5 至 10 項商品。請注意,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 標準事件,包含兩項商品及其數量:

<!-- 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 標準事件,包含兩項商品:

<!-- 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_type 使用 product,並在 content_ids 中傳遞商品編號(即「商品摘要」中的 id 欄位)。所有 AddToCartPurchase 事件都應使用 content_type=product,因為用戶會購買特定產品。用戶不會購買尺寸和顏色不明的不定形式襯衫;他們會購買特定尺寸和顏色的特定襯衫。

如果網頁是關於一組尺寸、顏色等不同的相關商品,但屬於同一個商品群組,則使用 product_group,並在 content_ids 中傳遞商品群組編號(即「商品摘要」中的 item_group_id 欄位)。常見的使用案例是 ViewContent 頁面,在這個頁面中,用戶尚未選擇尺寸。請勿AddToCartPurchaseproduct_group 搭配使用。

重要的是,content_type 必須符合 content_idscontents 參數包含的編號類型。

傳遞特定商品編號(content_type=product),有助於 Meta 推薦更多相關產品,因為 Facebook 知道用戶對哪些特定變數(尺寸、顏色等)感興趣。即使您傳遞的是 content_type=product_group,我們還是會顯示產品(而不是產品群組)。

若未提供 content_type,Meta 會將事件與具有相同編號的每個項目進行配對(與其類型無關)。建議您傳送 content_type,因其可讓您更好地控制要與事件配對的特定編號。

步驟 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

必要項目。
要建立關聯的應用程式和像素編號陣列,做為 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 物件

必要項目。
要設為目標的一組事件。至少需要一個包含關係。每個包含關係應各包含一個事件。

inclusions.retention_seconds

整數

必要項目。
將帳號管理中心帳號保留在廣告受眾的秒數。

inclusions.rule

物件陣列

必要項目。
引用一個 event網站自訂廣告受眾規則

exclusions

JSON 物件

選用項目。
應將帳號管理中心帳號排除在目標設定之外的事件。
針對排除關係,如果該事件發生於同一商品群組中的任何商品,具有這些事件的帳號管理中心帳號將從目標設定中排除(即商品摘要中有相同 item_group_id in 的商品)。
例如,商品廣告受眾設為包含 ViewContent 並排除購買事件。帳號管理中心帳號瀏覽商品 A 和 B,並購買商品 B。如果商品 A 和商品 B 屬於同一商品群組,則該帳號管理中心帳號將排除在商品廣告受眾之外,因為 A 和 B 僅為不同款式。如果商品 A 和 B 不在同一個商品群組,則該帳號管理中心帳號將繼續留在廣告受眾中,因為他仍有商品 A 的 ViewContent 事件。

exclusions.retention_seconds

整數

如果指定排除關係,則此為必要項目。
要保留排除關係的秒數。

exclusions.rule

物件陣列

如果指定排除關係,則此為必要項目。
引用一個 event網站自訂廣告受眾規則

不論是做為頂層規則或是頂層 and 規則的一部分,每個規則皆必須包含附有運算子 eqevent

如果同一 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>