出價乘數

此 API 僅提供許可清單上限定的合作夥伴和廣告商使用。如果您想要使用此 API,請聯絡 Meta 業務代表。

出價乘數可讓廣告商減少所需的廣告受眾分割量,因其允許他們在具有一個目標廣告受眾的單一廣告組合內,保持一個具有細微差別的出價策略。例如,廣告商可以建立單一廣告組合,然後使用出價乘數針對每個最近的儲存貯體進行不同的出價。

廣告商通常會建立廣告組合,以便可以針對不同的廣告受眾族群進行不同的出價。例如,廣告商可以建立對應於 3 個不同年齡群組的 3 個廣告組合:18–25、26–35、36–65。

刊登房屋、就業和信貸廣告且位於美國的廣告商,或是刊登目標鎖定為美國廣告的廣告商,會有不同的限制組合,部分受眾類別可用於調整出價。住房、就業和信貸行銷活動不得調整 agegenderlocalehome_locationuser_bucket,和類似的 custom_audience 廣告受眾類別的出價(衍生自類似廣告受眾的自訂廣告受眾)。請參閱特殊廣告類別

從 2023 年 1 月 30 日開始,使用出價乘數搭配第三方資料類別(booking_windowcustom_audience(包括類似自訂廣告受眾)、lengthofstaytravelstartdatetravelstartdayofweekuser_recencyuser_bucket)的廣告,將不再投遞給已選擇退出的使用者。

出價乘數最佳作法

  • 使用複雜的自訂出價策略,不需建立過多的廣告受眾族群或廣告組合。這樣有助於達到更好的廣告投遞效果,同時避免將廣告行銷活動過度細分為具有相對較少廣告受眾的更多廣告組合數。
  • 出價乘數並非特定於單一目標,可相容的最佳化項目如下:APP_INSTALLSCLICKSLANDING_PAGE_VIEWSLEAD_GENERATIONOFFSITE_CLICKSOFFSITE_CONVERSIONS
  • 過去,您可能會建立 3 個對應於 3 個不同年齡群組的廣告組合,然後為每個廣告組合分別出價。現在您可以建立單一廣告組合,並使用出價乘數針對每個年齡群組進行不同的出價;出價乘數的範圍為 0.09 到 1.0。
  • 出價乘數必須指定於單一 user_groups 鍵之下。

注意:出價乘數可支援所有出價策略,尤其是:出價上限、成本上限和最低成本。

設定廣告受眾類別

透過出價乘數,您可以定義廣告受眾類別,並為每個廣告受眾類別指派出價乘數。廣告受眾類別是由用戶人口統計資訊、用戶裝置和廣告商自訂資料所定義。住房、就業和信貸行銷廣告不得指派 agegenderlocalehome_locationuser_bucket,和類似的 custom_audience 廣告受眾類別的出價(衍生自類似廣告受眾的自訂廣告受眾)。

優先順序說明

age

根據年齡或年齡範圍進行不同的出價。(不適用於住房、就業和信貸行銷活動。)

booking_window

根據旅遊開始前的天數進行不同的出價。

custom_audience

根據用戶所屬的 custom_audience 進行出價。此選項支援類似廣告受眾,但住房、就業和信貸行銷活動除外。

device_platform

根據用戶的裝置平台(例如行動裝置或桌上型電腦)進行不同的出價。

gender

根據性別進行不同的出價。(不適用於住房、就業和信貸行銷活動。)

home_location

根據用戶的 home_location 進行出價。此為其目前的住家地點。home_location 乘數可解析為城市、地區和國家。(不適用於住房、就業和信貸行銷活動。)

lengthofstay

根據旅遊開始和結束之間的天數進行不同的出價。

locale

根據地區設定(例如英文或西班牙文)進行不同的出價。(不適用於住房、就業和信貸行銷活動。)

position_type

根據廣告顯示的位置進行出價,例如 facebook_feedfacebook_marketplaceinstagram_story

publisher_platform

根據 publisher_platform 進行出價,例如 facebookinstagramaudience_networkmessenger

travelstartdate

根據旅遊開始的日期進行不同的出價,例如 20181231 為 2018 年 12 月 31 日。

travelstartdayofweek

根據旅遊開始是星期幾進行出價。0 為星期一;6 為星期日。

user_bucket

根據廣告商的像素觸發或應用程式事件中定義的 user_bucket 值進行出價。user_bucket 欄位是選用參數,以 0 到 100 的整數表示。(不適用於住房、就業和信貸行銷活動。)

user_device

根據 user_device 進行出價,例如 iPhone。請參閱 user_device

user_os

根據 user_os 進行出價,例如 iOS 或 Android。

user_recency

根據用戶上次造訪網站或應用程式的時間進行出價。

age

依年齡範圍將用戶分組,例如 18-2526-35。舉例來說,針對最高出價為 USD 5 美元的廣告組合,18 到 25 歲的用戶出價為 USD 2.5 美元,26 到 40 歲的用戶出價為 USD 3.5 美元,所有其他用戶出價為 USD 5 美元。注意:預設為選用。您可以套用 1.0 做為乘數。

範例

{
    "user_groups": {
      "age": {
        "18-25": 0.5,
        "26-40": 0.7,
        "default": 1.0
      }
    }
}

booking_window

可能的資料解析值包括大於或等於 1 的任何整數範圍,例如 1-34-9 等等。

範例

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"booking_window":{"event_sources":["123456789"],"1-2":0.1,"3-5":0.2,"default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

另請參閱旅遊乘數範例

custom_audience

從 2023 年 1 月 30 日開始,使用出價乘數搭配第三方資料類別(booking_windowcustom_audience(包括類似自訂廣告受眾)、lengthofstaytravelstartdatetravelstartdayofweekuser_recencyuser_bucket)的廣告,將不再投遞給已選擇退出的使用者。

您可以根據自訂廣告受眾調整出價。

範例

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"custom_audience":{"<CUSTOM_AUDIENCE_ID>":0.8, "<CUSTOM_AUDIENCE_ID>":1.0, "default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

device_platform

可能的資料解析值為:

  • mobile
  • desktop

範例

{
  "user_groups": {
    "device_platform": {
      "mobile": 0.7,
      "desktop": 0.9
    }
  }
}

gender

按性別對用戶進行分組。

範例

{
  "user_groups": {
    "gender": {
      "male": 0.5,
      "female": 0.7,
      "default": 1.0
    }
  }
}

home_location

可能的資料解析值為:

  • city id
  • region id
  • 2 位數國碼/區碼

您可以在搜尋 API 中找到 city idregion id。您可以從圖形 API 測試工具或您的終端機進行查詢。

注意:只能在非 citiesregionscountrieshome_location 之下設定 default

範例

{
  "user_groups": {
    "home_location": {
      "cities": {
         "2420605": 0.2
      },
      "regions": {
         "3847": 0.5
      },
      "countries": {
         "US": 0.2
      },
      "default": 0.8
     }
  }
}

length_of_stay

可能的資料解析值包括大於或等於 1 的任何整數範圍,例如 “1-3”“4-9” 等等。

範例

curl -X POST \ 
  -F 'bid_adjustments=
  {"user_groups":{"length_of_stay":{"event_sources":["123456789"],"1-2":0.1,"3-     5":0.2,"default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

另請參閱旅遊乘數範例

locale

您可以使用地區設定或地區設定群組編號,例如 6 代表美國英文,或 5 代表德文。

您可以使用目標設定搜尋:地區設定,以 type=adlocale 來尋找地區設定編號。例如:

{
  "user_groups": {
    "locale": {
      6: 0.8,
      5: 0.3
    }
  }
}

position_type

此類別與目標設定 API 中的位置選項類似。可能的資料解析值為:

廣告版位

Facebook 動態消息

facebook_feed

Facebook Marketplace

facebook_marketplace

Facebook 影片動態消息

facebook_suggested_video

Facebook 右欄

facebook_right_hand_column

Facebook 商家探索

facebook_biz_disco_feed

Instagram 動態消息

instagram_stream

Instagram 個人檔案動態消息

instagram_profile_feed

Instagram 探索

instagram_explore

Instagram 探索首頁

instagram_explore_home

Messenger 收件匣

messenger_messenger_home

Instagram 限時動態

instagram_story

Facebook 限時動態

facebook_story

Messenger 限時動態

messenger_story

Instagram Reels

instagram_reels

Facebook Reels

facebook_facebook_reels

Facebook 插播影片

facebook_instream_video

Facebook Reels 廣告

facebook_facebook_reels_overlay

Facebook 搜尋結果

facebook_search

Instagram 搜尋結果

instagram_ig_search

Messenger 贊助訊息

不支援

Audience Network 原生、橫幅和插頁廣告

audience_network_classic

Audience Network 獎勵式影片

audience_network_rewarded_video

Audience Network 插播影片

不支援

範例

{
  "user_groups": {
    "position_type":{
        "facebook_feed":0.9,
        "messenger_messenger_home":0.7,
        "instagram_stream":0.8,
        "audience_network_classic":0.5,
        "default":0.4
    }
  }
}

publisher_platform

可能的資料解析值為:

  • facebook
  • instagram
  • audience_network
  • messenger

範例

{
  "user_groups": {
    "publisher_platform": {
      "facebook": 0.7,
      "instagram": 0.9,
      "default": 1.0 // We'll apply bid multiplier 1.0 if no default is specified anyway
    }
  }
}

travel_start_date

可能的資料解析值包括格式為 _yyyymmdd_-_yyyymmdd_ 的任何日期範圍。

範例

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"travel_start_date":{"event_sources":["123456789"],"20180901-20181001":0.2,"default":0.9}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

另請參閱旅遊乘數範例

travel_start_day_of_week

可能的資料解析值包括 0 到 6 的任何整數。0 為星期一;6 為星期日。

範例

curl -X POST \ 
  -F 'bid_adjustments=
  {"user_groups":{"travel_start_day_of_week":{"event_sources":        ["123456789"],"0":0.1,"2":0.2,"6":0.3,"default":0.9}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

另請參閱旅遊乘數範例

user_bucket

您可以將自己的用戶分類器結果傳送給我們,然後在像素觸發或應用程式事件中,再傳送額外的 user_bucket 參數給我們。用戶儲存貯體為 0 到 100 的整數。

請使用以下格式來指定用戶儲存貯體群組定義:

  • event_sources - 所要追蹤的像素觸發或應用程式事件來源。
  • event_retention - 選用。略過舊 user_bucket 值的時間(以秒為單位)。
  • events_dedup_mode - 選用。當單一事件來源為相同用戶傳送不同 user_bucket 值時,用來指示使用哪個 user_bucket 值的標示。預設值是 latest
  • event_source_preference - 選用。當多個事件來源為相同用戶傳送不同 user_bucket 值時,用來指示使用哪個 user_bucket 值的標示。預設值是 latest

範例

{
  "user_groups": {
   "user_bucket": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "event_retention": 604800, // optional, exclude old events
      
      //optional, useful when multiple event sources have user_bucket
      "events_dedup_mode": "max"|"min"|"latest",
      
      //optional, dedup user_bucket values sent from one single event source
      "event_source_preference": "max"|"min"|"latest",
      
      "1":0.7, // these are the bid multipliers
      "2":1.0,
     }
  }
}

user_device

可能的資料解析值為:

  • iPad
  • iPhone

目標設定搜尋 API 中使用 type=adTargetingCategoryclass=user_device 來查看其他可能的值。

範例

{
  "user_groups": {
    "user_device": {
      "iPad": 0.7,
      "iPhone": 0.9,
      "default": 1.0
    }
  }
}

範例

curl
  -F 'name=Test BM Adset '$(date +%s) \
  -F 'bid_amount=3000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=OFFSITE_CONVERSIONS' \
  -F 'daily_budget=15000' \
  -F 'campaign_id=23843038336220329' \
  -F 'promoted_object={"product_set_id":"267888283975766"}' \
  -F 'targeting={
     "geo_locations": {"countries":["AQ"]},
     "dynamic_audience_ids": ["23842885952670329"],
     "publisher_platforms": ["facebook"]
    }' \
  -F 'bid_adjustments={"user_groups":{"user_device": {"iPad": 0.7, "iPhone": 0.9, "default": 1.0}}}' \
  -F 'status=PAUSED' \
  -F 'access_token='$access_token \
  https://graph.facebook.com/<API_VERSION>/act_1653439931385336/adsets

範例

curl
  -F 'name=Test BM Adset '$(date +%s) \
  -F 'bid_amount=3000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=OFFSITE_CONVERSIONS' \
  -F 'daily_budget=15000' \
  -F 'campaign_id=23843038336220329' \
  -F 'promoted_object={"product_set_id":"267888283975766"}' \
  -F 'targeting={
     "geo_locations": {"countries":["AQ"]},
     "dynamic_audience_ids": ["23842885952670329"],
     "publisher_platforms": ["facebook"]
     }' \
  -F 'bid_adjustments={"user_groups":{"user_device": {"iPad": 0.7, "iPhone": 0.9, "default": 1.0}}}' \
  -F 'status=PAUSED' \
  -F 'access_token='$access_token \
   https://graph.facebook.com/<API_VERSION>/act_1653439931385336/adsets
   {"id":"23843038339320329"}

範例

curl
  -F 'access_token='$access_token \
  https://graph.facebook.com/VERSION/ID?fields=bid_adjustments
  {"bid_adjustments":{"user_groups":"{\"user_device\":    {\"default\":1,\"iPad\":0.7,\"iPhone\":0.9}}"},"id":"ID"}

另請參閱進階範例

user_group_weight_spec

可能的資料解析值為:

  • age
  • gender
  • device_platform
  • publisher_platform
  • user_device
  • user_os

另請參閱進階範例

範例 - user_group_weight_spec 為 JSON 結構,如下所示:

{
  <BREAKDOWN_NAME>: {
    <BREAKDOWN_VALUE_1>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    <BREAKDOWN_VALUE_2>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    <BREAKDOWN_VALUE_3>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    ...
    "default": <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>, // optional, if not specified, we'll use 1.0
  }
}
{
  "age": {
    "18-25": 0.7,
    "26-35": {
      "gender": {
        "male": 0.9,
        "female": 1.0
      }
    },
    "default": 0.85
  }
}

* For users between the ages of 18 and 25, we apply bid multiplier 0.7.
* For male users between the ages of 26 and 35, we apply bid multiplier 0.9.
* For female users between the ages of 26 and 35, we apply bid multiplier 1.0.
* For all other users, we apply bid multiplier 0.85.

資料解析值為整數的年齡範圍,例如 18-25,其中最低年齡是 18 歲,且範圍不應重疊。

範例

{
  "user_groups": {
    "age": {
      "18-25": 0.7,
      "30-40": 1.0,
      "default": 0.3
    }
  }
}

進階範例

> curl 
    -F 'bid_adjustments={"user_groups":{"user_device":{"iPad":0.3,"iPhone":{"user_os":{"Android":0.3,"iOS":{"age":{"18-35":0.3,"35-45":0.4}}}}}}}' -F access_token=$token https://graph.intern.facebook.com/v2.12/6089875504114
{"success":true}%
> curl -G 
   -d access_token=$token https://graph.intern.facebook.com/v2.12/6089875504114\?  fields\=bid_adjustments
{"bid_adjustments":{"user_groups":"{\"user_device\":{\"iPad\":0.3,\"iPhone\":{\"user_os\":{\"Android\":0.3,\"iOS\":{\"age\":{\"18-35\":0.3,\"35-45\":0.4}}}}}}"},"id":"6089875504114"}%

旅遊乘數範例

curl -X POST \
  -F 'bid_adjustments={"user_groups":{"travel_start_day_of_week":{"event_sources":["1862565504034757"],"1":0.1,"3":0.1,"default":0.9}}}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<ADSET_ID>

  Length of Stay 'bid_adjustments={"user_groups":{"length_of_stay":{"event_sources":["1862565504034757"],"1-2":0.1,"3-7":0.2,"default":0.5}}}'
  Booking window 'bid_adjustments={"user_groups":{"booking_window":{"event_sources":["1862565504034757"],"1-2":0.1,"3-7":0.2,"default":0.5}}}'
  Travel start date: 'bid_adjustments={"user_groups":{"travel_start_date":{"event_sources":["1862565504034757"],"20180918-20190101":0.1,"default":0.5}}}'
  Day of week: 'bid_adjustments={"user_groups":{"travel_start_day_of_week":{"event_sources":["1862565504034757"],"1":0.1,"2":0.1,"0":0.2,"default":0.5}}}'

user_os

可能的資料解析值為:

  • iOS
  • Windows

目標設定搜尋 API 中使用 type=adTargetingCategoryclass=user_os 來查看其他可能的值。

目前支援的值為:

  • Android
  • Windows
  • Windows Phone
  • iOS

範例

{
  "user_groups": {
    "user_os": {
      "Android": 0.7,
      "iOS": 0.9,
      "default": 1.0
    }
  }
}

iOS14 的影響

iOS 14 政策變更是否會影響網站轉換行銷活動的出價乘數?

是的,我們預期 iOS 14 的變更會造成訊號損失且較難識別歸因,進而導致每個廣告組合的訊號減少。儘管您可以出價的大多數類別應該會繼續照常運作,但是以 iOS 14.5 用戶為目標時,recency、custom audience 和 user_bucket 的乘數將會受到影響,因為這些乘數取決於 FB 像素或轉換 API 測量的事件。所有其他乘數均來自站內資料,而不是依據 FB 像素或轉換 API。

user_recency

請按時間對用戶進行分組,因為他們具有任何像素觸發或應用程式事件。您必須指定要追蹤的事件來源和時間範圍。

範例

此範例說明如何針對在 86400 秒內有像素觸發或應用程式事件的用戶套用出價乘數 1.0 等等。

{
  "user_groups": {
    "user_recency": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "0-86400": 1.0,
      "86401-172800": 0.7,
      "default": 0.5
    }
  }
}

串聯多個資料解析

您還可以透過將浮動出價乘數替換為詳細的資料解析規格,定義具有多個資料解析的用戶群組。例如,最高出價為 USD 5 美元的廣告組合,設定方式如下所示:

  • 男性用戶出價為 USD 4.5 美元
  • 18 到 25 歲的女性用戶出價為 USD 3.5 美元
  • 26 到 35 歲的女性用戶出價為 USD 4.0 美元
  • 所有其他用戶出價為 USD 5.0 美元
{
  "user_groups": {
    "gender": {
      "male": 0.9,
      "female": {
        "age": {
          "18-25": 0.7,
          "26-35": 0.8
        }
      }
    }
  }
}

使用需求

  • 出價乘數值的範圍為 0.091.0

API 呼叫

取得

curl -G \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<ADSET_ID>?fields=bid_adjustments

更新

curl \
  -F 'bid_adjustments={"user_groups":<USER_GROUP_WEIGHT_SPEC>}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<PRODUCT_CATALOG_ID>/<ADSET_ID>

建立或更新廣告組合的出價乘數

以下是更新現有廣告組合的 API 呼叫範例。(您需要代換廣告組合編號、存取權杖、事件來源,以及您想要使用的出價乘數。)

curl -X POST \ -F 'bid_adjustments={ "user_groups": { "user_bucket": { "event_sources": [ "<PIXEL_ID>", "<APP_ID>" ], "1": 0.1, "2": 0.2, "3": 0.3, "default": { "gender": { "male": 0.99, "female": 0.12 } } } } }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_SET_ID>/
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_SET_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 = { 'bid_adjustments' : {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}}, }; const sample_code = (new AdSet(id)).update( fields, params ); logApiCallResult('sample_code api call complete.', sample_code);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_SET_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'bid_adjustments' => array('user_groups' => array('user_bucket' => array('event_sources' => array('<pixelID>','<appID>'),'1' => 0.1,'2' => 0.2,'3' => 0.3,'default' => array('gender' => array('male' => 0.99,'female' => 0.12))))), ); echo json_encode((new AdSet($id))->updateSelf( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adset import AdSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'bid_adjustments': {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}}, } print AdSet(id).update( 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_SET_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdSet(id, context).update() .setBidAdjustments(\"{\\"user_groups\\":{\\"user_bucket\\":{\\"event_sources\\":[\\"<pixelID>\\",\\"<appID>\\"],\\"1\\":0.1,\\"2\\":0.2,\\"3\\":0.3,\\"default\\":{\\"gender\\":{\\"male\\":0.99,\\"female\\":0.12}}}}}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_set = FacebookAds::AdSet.get(id) ad_set.bid_adjustments = {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}} ad_set.save

設定測試行銷活動

與您的 Meta 帳號團隊和成效衡量潛在顧客合作,使用轉換提升或分組測試來建立測試行銷活動。為了評估成效,我們建議採用分成以下小組的 3 向分組測試:

  • 小組 1(控制項 A),行銷活動 1 - 針對所有目標用戶提供具有 1 個出價的 1 個廣告組合
  • 小組 2(控制項 B),行銷活動 2 - 多個廣告組合,其中我們為每個用戶群組各建立一個廣告組合。(您可以使用網站/行動自訂廣告受眾規則,根據像素/應用程式參數進行細分)。
  • 小組 3(測試),行銷活動 3 - 1 個廣告組合,不同的用戶群組使用不同的出價乘數。請確認這裡每個用戶群組的調整出價,與小組 2 中對應廣告組合的廣告組合層級出價相同

設定分組測試

此時,您應設定分組測試和控制組,以使用出價乘數驗證成效。我們執行 1 到 2 週的測試,不需要最低預算。請依下列方式設定分組測試:

  • 小組 1,控制項 A:應包含一個具有單一出價金額的廣告組合,且目標設定應根據所有 user_bucket
  • 小組 2,控制項 B:應包含多個廣告組合,每個 user_bucket 各一個廣告組合。每個廣告組合應設定不同的 user_bucket 和對應出價為目標。您可以使用網站或行動自訂廣告受眾規則,根據其他 Facebook 像素或應用程式事件參數進一步細分廣告受眾。請參閱網站自訂廣告受眾行動應用程式自訂廣告受眾
  • 小組 3,測試:包含一個具有 bid_adjustment 屬性的廣告組合,為每個 user_bucket 決定不同的出價。您的乘數應對應於「小組 2,控制項 B」的個別廣告組合出價。

如需更多資訊,請參閱分組測試

設定測試行銷活動

廣告行銷活動的設定方式與一般行銷活動一樣。如需設定出價調整的相關協助,請聯絡 Meta 業務代表。

設定 user_groups,並為每個群組不同的出價乘數。您的群組是根據人口統計資料屬性(例如年齡、性別)和特定屬性(例如用戶分數或忠誠度方案)。例如:

{
   "user_bucket":{
      "business_id":253286871795863,
      "1":0.7,
      "2":1.0,
      "3":{
         "gender":{
            "male":1.0,
            "female":0.8
         }
      },
      "default": 0.9
   }
}

在此範例中:

  • 若用戶的 loyalty_program 值為 1,套用出價乘數 0.7
  • 若用戶的 loyalty_program 值為 2,套用出價乘數 1.0
  • 男性用戶loyalty_program 值為 3,套用出價乘數 1.0
  • 女性用戶loyalty_program 值為 3,套用出價乘數 0.8
  • 若用戶的 loyalty_program 值非 1、2 或 3,套用出價乘數 0.9
  • 若是所有其他用戶,套用出價乘數 1.0

現在,您可以建立廣告行銷活動:

curl -X POST \ -F 'name="My Adset with bid multiplier"' \ -F 'campaign_id="<AD_CAMPAIGN_ID>"' \ -F 'daily_budget=3000' \ -F 'billing_event="IMPRESSIONS"' \ -F 'optimization_goal="OFFSITE_CONVERSIONS"' \ -F 'bid_amount=500' \ -F 'bid_adjustments={ "user_groups": { "gender": { "male": 0.8, "female": 1 } } }' \ -F 'promoted_object={ "product_set_id": "<PRODUCT_SET_ID>", "custom_event_type": "ADD_TO_CART" }' \ -F 'targeting={ "facebook_positions": [ "feed" ], "geo_locations": { "countries": [ "US" ] } }' \ -F 'status="PAUSED"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adsets
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdSet = bizSdk.AdSet; 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' : 'My Adset with bid multiplier', 'campaign_id' : '<adCampaignLinkClicksID>', 'daily_budget' : '3000', 'billing_event' : 'IMPRESSIONS', 'optimization_goal' : 'OFFSITE_CONVERSIONS', 'bid_amount' : '500', 'bid_adjustments' : {'user_groups':{'gender':{'male':0.8,'female':1}}}, 'promoted_object' : {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, 'targeting' : {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, 'status' : 'PAUSED', }; const adsets = (new AdAccount(id)).createAdSet( fields, params ); logApiCallResult('adsets api call complete.', adsets);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdSet; 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' => 'My Adset with bid multiplier', 'campaign_id' => '<adCampaignLinkClicksID>', 'daily_budget' => '3000', 'billing_event' => 'IMPRESSIONS', 'optimization_goal' => 'OFFSITE_CONVERSIONS', 'bid_amount' => '500', 'bid_adjustments' => array('user_groups' => array('gender' => array('male' => 0.8,'female' => 1))), 'promoted_object' => array('product_set_id' => '<productSetID>','custom_event_type' => 'ADD_TO_CART'), 'targeting' => array('facebook_positions' => array('feed'),'geo_locations' => array('countries' => array('US'))), 'status' => 'PAUSED', ); echo json_encode((new AdAccount($id))->createAdSet( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adset import AdSet 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': 'My Adset with bid multiplier', 'campaign_id': '<adCampaignLinkClicksID>', 'daily_budget': '3000', 'billing_event': 'IMPRESSIONS', 'optimization_goal': 'OFFSITE_CONVERSIONS', 'bid_amount': '500', 'bid_adjustments': {'user_groups':{'gender':{'male':0.8,'female':1}}}, 'promoted_object': {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, 'targeting': {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, 'status': 'PAUSED', } print AdAccount(id).create_ad_set( 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).createAdSet() .setName(\"My Adset with bid multiplier\") .setCampaignId(\"<adCampaignLinkClicksID>\") .setDailyBudget(3000L) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_OFFSITE_CONVERSIONS) .setBidAmount(500L) .setBidAdjustments(\"{\\"user_groups\\":{\\"gender\\":{\\"male\\":0.8,\\"female\\":1}}}\") .setPromotedObject(\"{\\"product_set_id\\":\\"<productSetID>\\",\\"custom_event_type\\":\\"ADD_TO_CART\\"}\") .setTargeting( new Targeting() .setFieldFacebookPositions(Arrays.asList(\"feed\")) .setFieldGeoLocations( new TargetingGeoLocation() .setFieldCountries(Arrays.asList(\"US\")) ) ) .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .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) adsets = ad_account.adsets.create({ name: 'My Adset with bid multiplier', campaign_id: '<adCampaignLinkClicksID>', daily_budget: '3000', billing_event: 'IMPRESSIONS', optimization_goal: 'OFFSITE_CONVERSIONS', bid_amount: '500', bid_adjustments: {'user_groups':{'gender':{'male':0.8,'female':1}}}, promoted_object: {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, targeting: {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, status: 'PAUSED', })

建立廣告組合後,透過 API 在廣告組合上設定 bid_adjustments。參數看起來應該像這樣:

{
  "user_groups": {
    "user_bucket": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "event_source_preference": "max"|"min"|"latest", //optional, useful when multiple event sources have user_bucket
      "events_dedup_mode": "max"|"min"|"latest", //optional, dedup user_bucket values sent from one single event source
      "event_retention": 604800, // optional, exclude old events
      "1":0.7, // these are the bid multipliers
      "2":1.0,
      "default": { // used in the case that we don't have user_bucket for that user
         gender:{ // this is a nested example, but you could just do "default": 1.0,
            "male": {
              home_location: {
                  cities: { // city id, can be found in search API, eg: search?type=adgeolocation&q=Menlo Park&limit=10
                    "2420605": 0.2,
                  },
                  regions: {
                    "3847": 0.5
                  },
                  countries: {
                    "US": 0.2
                  }
                }
              }
            },
            "female": {
              "user_recency": {
                "event_sources": [<pixel_id>,<app_id>,...],
                "0-86400": 0.5,
                "86400-172800": 0.7,
                "default": 0.2
              }
            }
         },
      },
   },
}

我們目前不會驗證此參數。請將廣告組合編號傳送給您的 Meta 業務代表,我們可以手動檢查。

針對每個事件來源,將使用該用戶最新收到的 user_bucket。但是,如果已指定多個事件來源(例如:像素和應用程式),且有 2 個以上的事件來源已登錄自己的 user_bucket,我們將採用所有事件來源的最大值。

以下是更新現有廣告組合的呼叫範例。您應該提供自己的廣告組合編號、存取權杖、事件來源,以及出價乘數:

curl -X POST 
  -F access_token=<access_token> \
  -F 'bid_adjustments={"user_groups": {"user_bucket": {"event_sources": [<pixel_id>,  <app_id>,...], "1": 0.1, "2": 0.2, "3": 0.3, "default": {"gender": {"male": 0.99, "female": 0.1}} }} }' \ 
  https://graph.facebook.com/<VERSION>/<ad-set-id>