مضاعفات عروض الأسعار

تتوفر API هذه على أساس محدود للشركاء والمعلنين المدرجين بقائمة السماح. تواصل مع ممثل Meta لاستخدامها.

تعمل مضاعفات عروض الأسعار على تمكين المعلنين من تقليل عدد تقسيمات شرائح الجماهير اللازمة، نظرًا لأنها تتيح لهم الاحتفاظ بإستراتيجية عرض أسعار محددة داخل مجموعة إعلانية واحدة تتضمن جمهورًا مستهدفًا واحدًا. فعلى سبيل المثال، يمكن للمعلن إنشاء مجموعة إعلانية واحدة، ثم استخدام معاملات الضرب الحسابية لعروض الأسعار بغرض تحديد عرض الأسعار بشكل مختلف لكل الفئات الحديثة هذه.

عادة ينشئ المعلنون مجموعات إعلانية بحيث يمكنهم تحديد عرض الأسعار بشكل مختلف لمختلف شرائح الجمهور. على سبيل المثال: بإمكان المعلن إنشاء 3 مجموعات إعلانية مقابل 3 فئات عمرية مختلفة: 18 إلى 25 و26 إلى 35 و36 إلى 65.

يكون للمعلنين الذين يقومون بتشغيل إعلانات الإسكان والتوظيف والائتمان، والذين يقيمون في الولايات المتحدة أو يعملون على تشغيل الإعلانات التي تستهدف الولايات المتحدة مجموعات من التقييدات ومجموعة فرعية من فئات الجمهور متوفرة لضبط عروض الأسعار. يتم تقييد الحملات الإعلانية للإسكان والتوظيف والائتمان فيما يتعلق بضبط عروض الأسعار لفئات الجمهور من حيث age وgender وlocale وhome_location وuser_bucket والجمهور المشابه custom_audience (جمهور مخصص مشتق من الجمهور المشابه). راجع الفئة الإعلانية الخاصة.

بدءًا من 30 يناير 2023، لن يتم عرض الإعلانات التي تستخدم مضاعف عرض الأسعار بفئات بيانات تابعة لجهات خارجية (booking_window وcustom_audience (بما في ذلك الجماهير المخصصة المشابهة) وlengthofstay وtravelstartdate وtravelstartdayofweek وuser_recency وuser_bucket) للمستخدمين الذين ألغوا الاشتراك.

أفضل الممارسات في معاملات الضرب الحسابية لعروض الأسعار

  • استخدم إستراتيجيات معقدة ومخصصة لعروض الأسعار دون الحاجة إلى إنشاء العديد من شرائح الجمهور أو المجموعات الإعلانية. يساعدك هذا على تحقيق عرض أفضل للإعلانات بينما تتجنب الإفراط في تقسيم الحملات الإعلانية إلى عدد أكبر من المجموعات الإعلانية ذات الجماهير الصغيرة نسبيًا.
  • ومعاملات الضرب الحسابية لعروض الأسعار ليست محددة لهدف معين. وتتوافق مع التحسينات التالية: APP_INSTALLS وCLICKS وLANDING_PAGE_VIEWS وLEAD_GENERATION وOFFSITE_CLICKS وOFFSITE_CONVERSIONS.
  • في الماضي، كان من الممكن إنشاء 3 مجموعات إعلانية متطابقة مع 3 فئات عمرية مختلفة. يمكنك بعد ذلك عرض الأسعار لكل مجموعة إعلانية على حدة. يمكنك الآن إنشاء مجموعة إعلانية واحدة واستخدام مضاعفات عروض الأسعار لتقديم عروض الأسعار بشكل مختلف لكل من تلك الفئات العمرية؛ وتتراوح مضاعفات عروض الأسعار من 0.09 إلى 1.0.
  • يجب تحديد مضاعفات عروض الأسعار ضمن مفتاح user_groups واحد.

ملاحظة: يتم دعم كل إستراتيجيات عروض الأسعار بواسطة مضاعفات عروض الأسعار، خاصةً: الحد الأقصى لعرض الأسعار والحد الأقصى للتكلفة والتكلفة الأقل.

إعداد فئات الجمهور

من خلال مضاعف عرض الأسعار، يمكنك تحديد فئات الجمهور وتعيين مضاعف عرض أسعار لكل فئة جمهور. يتم تحديد فئات الجمهور من خلال المعلومات الديموغرافية للمستخدمين وأجهزة المستخدمين والبيانات المخصصة للمعلنين. يتم تقييد الحملات الإعلانية للإسكان أو التوظيف أو الائتمان فيما يتعلق بتعيين عروض الأسعار لفئات الجمهور من حيق age وgender وlocale وhome_location وuser_bucket والجمهور المشابه custom_audience (جمهور مخصص مشتق من الجمهور المشابه).

الأولويةالوصف

age

اعرض الأسعار بشكل مختلف بناءً على العمر أو النطاق العمري. (غير متوفر للحملات الإعلانية للإسكان والتوظيف والائتمان.)

booking_window

اعرض الأسعار بشكل مختلف بناءً على عدد الأيام حتى بداية السفر.

custom_audience

عرض الأسعار استنادًا إلى custom_audience الذي يُعد المستخدم جزءًا منها. يتم دعم هذا الخيار لدى الجماهير المشابهة، باستثناء الحملات الإعلانية للإسكان والتوظيف والائتمان.

device_platform

اعرض الأسعار بشكل مختلف بناءً على منصة جهاز المستخدم، مثل الهاتف المحمول أو الكمبيوتر.

gender

اعرض الأسعار بشكل مختلف بناءً على الجنس. (غير متوفر للحملات الإعلانية للإسكان والتوظيف والائتمان.)

home_location

عرض الأسعار استنادًا إلى home_location لدى المستخدم. ويمثل ذلك موقعه الأصلي الحالي. يمكن تقسيم مضاعف home_location إلى مدن ومناطق وبلدان. (غير متوفر للحملات الإعلانية للإسكان والتوظيف والائتمان.)

lengthofstay

اعرض الأسعار بناءً على عدد الأيام الواقعة بين بداية السفر وانتهائه.

locale

اعرض الأسعار بشكل مختلف بناءً على اللغة المحلية، مثل الإنجليزية أو الإسبانية. (غير متوفر للحملات الإعلانية للإسكان والتوظيف والائتمان.)

position_type

عرض الأسعار استنادًا إلى موضع عرض الإعلان؛ على سبيل المثال، facebook_feed أو facebook_marketplace أو instagram_story.

publisher_platform

عرض الأسعار استنادًا إلى publisher_platform، مثل facebook وinstagram وaudience_network وmessenger.

travelstartdate

عرض الأسعار بشكل مختلف استنادًا إلى تاريخ بدء السفر؛ على سبيل المثال، 20181231 هو 31 ديسمبر 2018.

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-25 و26-35. على سبيل المثال، بالنسبة للمجموعة الإعلانية التي يبلغ الحد الأقصى فيها لعرض الأسعار 5 دولارات أمريكية، اعرض الأسعار بمبلغ 2.5 دولار أمريكي للمستخدمين الذين تتراوح أعمارهم بين 18 و25 عامًا وبمبلغ 3.5 دولارات أمريكية للمستخدمين الذين تتراوح أعمارهم بين 26 و40 عامًا وبمبلغ 5 دولارات أمريكية لجميع المستخدمين الآخرين. ملاحظة: الإعداد الافتراضي اختياري. يمكنك تطبيق 1.0 كمضاعف.

المثال

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

booking_window

تتضمن قيم التقسيم المحتملة أي نطاق عدد صحيح أكبر من أو يساوي 1. على سبيل المثال، 1-3 و4-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

بدءًا من 30 يناير 2023، لن يتم عرض الإعلانات التي تستخدم مضاعف عرض الأسعار بفئات بيانات تابعة لجهات خارجية (booking_window وcustom_audience (بما في ذلك الجماهير المخصصة المشابهة) وlengthofstay وtravelstartdate وtravelstartdayofweek وuser_recency وuser_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
  • كود البلد المكوّن من رقمين

يمكنك العثور على city id وregion id في API البحث. يمكنك الاستعلام من خلال مستكشف Graph API أو من الوحدة الطرفية.

ملاحظة: لا يمكن تعيين default إلا ضمن home_location وليس cities أو regions أو countries.

المثال

{
  "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_feed

Facebook Marketplace

facebook_marketplace

مواجز مقاطع الفيديو من فيسبوك

facebook_suggested_video

العمود الأيسر على فيسبوك

facebook_right_hand_column

استكشاف الأنشطة التجارية على فيسبوك

facebook_biz_disco_feed

موجز Instagram

instagram_stream

موجز الملف الشخصي على Instagram

instagram_profile_feed

قسم "استكشاف" في Instagram

instagram_explore

الصفحة الرئيسية لقسم "استكشاف" في Instagram

instagram_explore_home

البريد الوارد في Messenger

messenger_messenger_home

Instagram Stories

instagram_story

Facebook Stories

facebook_story

Messenger Stories

messenger_story

ريلز من Instagram

instagram_reels

ريلز من فيسبوك

facebook_facebook_reels

مقاطع الفيديو المُضمنة في المحتوى على فيسبوك

facebook_instream_video

الإعلانات على ريلز من فيسبوك

facebook_facebook_reels_overlay

نتائج البحث على فيسبوك

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=adTargetingCategory وclass=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=adTargetingCategory وclass=user_os.

القيم المدعومة الحالية:

  • Android
  • Windows
  • Windows Phone
  • iOS

المثال

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

iOS14 Impact

هل سيتأثر مضاعف عروض الأسعار للحملات الإعلانية في تحويل موقع الويب بتغييرات سياسة نظام التشغيل iOS 14؟

نعم، نتوقع فقدان الإشارة ومعدلات إسناد أقل نتيجة تغييرات نظام التشغيل iOS 14، مما يوفر عدد إشارات أقل لكل مجموعة إعلانية. على الرغم من أن غالبية الفئات التي يمكنك تقديم عروض أسعار عليها يجب أن تستمر في العمل كالمعتاد، فإن مضاعفات التكرار والجمهور المخصص وuser_bucket ستتأثر إذا استهدفت مستخدمي نظام التشغيل iOS 14.5، حيث إن تلك المضاعفات تعتمد على الأحداث التي تقاس بواسطة بيكسل فيسبوك أو واجهة API التحويلات. تأتي كل المضاعفات الأخرى من جانب بيانات الموقع ولا تعتمد على بيكسل فيسبوك أو واجهة API التحويلات.

user_recency

قم بتجميع المستخدمين حسب الوقت لأنهم يتمتعون بتشغيل بيكسل أو أحداث تطبيق. ويجب عليك تحديد مصادر الحدث المطلوب تتبعها ونوافذ الوقت.

المثال

يعرض هذا المثال كيفية تطبيق مضاعف عرض الأسعار 1.0 للمستخدمين الذين لديهم حدث تشغيل بيكسل أو أحداث التطبيقات في غضون 86400 ثانية، وما إلى ذلك.

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

تعاقب تقسيمات مضاعف الأسعار

يمكنك أيضًا تحديد مجموعات المستخدمين بتقسيمات متعددة عن طريق استبدال رقم النقطة العشرية في معاملة الضرب الحسابية لعروض الأسعار بمزيد من تحديدات التقسيم. فعلى سبيل المثال، المجموعة الإعلانية التي تتضمن عرض أسعار بمبلغ 5 دولارات أمريكية كحد أقصى ويبدو التكوين الأقل كما يلي:

  • عرض أسعار بمبلغ 4.5 دولارات أمريكية للمستخدمين من الذكور
  • عرض أسعار بمبلغ 3.5 دولارات أمريكية للمستخدمات اللاتي تتراوح أعمارهن بين 18 و25 عامًا
  • عرض أسعار بمبلغ 4.0 دولارًا أمريكيًا للمستخدمات اللاتي تتراوح أعمارهن بين 26 و35 عامًا
  • عرض أسعار بمبلغ 5.0 دولارات أمريكية لجميع المستخدمين الآخرين
{
  "user_groups": {
    "gender": {
      "male": 0.9,
      "female": {
        "age": {
          "18-25": 0.7,
          "26-35": 0.8
        }
      }
    }
  }
}

متطلبات الاستخدام

  • يمكن أن تتراوح قيمة مضاعف عرض الأسعار من 0.09 إلى 1.0.

عمليات استدعاء واجهة API

Get

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 (التحكم أ)، الحملة الإعلانية 1 - مجموعة إعلانية واحدة تتضمن عرض أسعار واحد لكل المستخدمين المستهدفين
  • الخلية 2 (التحكم ب)، الحملة الإعلانية 2 - مجموعات إعلانية متعددة حيث ننشئ مجموعة إعلانية واحدة لكل مجموعة مستخدمين. (يمكنك استخدام قواعد الجماهير المخصصة لموقع الويب/الهاتف المحمول للتقسيم استنادًا إلى معلمات البيكسل/التطبيق).
  • الخلية 3 (الاختبار)، الحملة الإعلانية 3 - مجموعة إعلانية واحدة تتضمن مضاعفات عروض الأسعار المختلفة لمجموعات مستخدمين مختلفة. تأكد من أن عرض الأسعار المعدل لكل مجموعة مستخدمين هنا هو نفسه عرض الأسعار على مستوى المجموعة الإعلانية بالنسبة للمجموعة الإعلانية المقابلة في الخلية 2.

إعداد اختبارات التقسيم

في هذه المرحلة، يجب إعداد اختبار التقسيم والمجموعات القياسية للتحقق من الأداء باستخدام معاملة الضرب الحسابية لعرض الأسعار. ونجري الاختبارات للأسبوعين الأول والثاني ولا يلزم تحديد الحد الأدنى للميزانية. إعداد اختبارات التقسيم كما يلي:

  • الخلية 1، التحكم أ يجب أن يحتوي على مجموعة إعلانية واحدة بمبلغ عرض أسعار واحد ويجب أن يستند الاستهداف إلى كل user_bucket.
  • الخلية 2، التحكم ب يجب أن يحتوي على مجموعات إعلانية متعددة مع مجموعة إعلانية واحدة لكل user_bucket. يجب أن تستهدف كل مجموعة إعلانية user_bucket منفصل وعرض أسعار مقابل. كما يمكنك استخدام قواعد الجماهير المخصصة على موقع الويب أو الهاتف المحمول بغرض تقسيم الجمهور استنادًا إلى المعلمات الأخرى لبيكسل Meta أو أحداث التطبيق. راجع الجماهير المخصصة على موقع الويب والجماهير المخصصة على تطبيق الهواتف المحمولة.
  • الخلية 3، الاختبار يحتوي على مجموعة إعلانية واحدة تتضمن الخاصية bid_adjustment لتحديد عروض الأسعار المختلفة لكل user_bucket. ويجب أن تتطابق معاملات الضرب الحسابية مع عروض أسعار المجموعة الإعلانية الفردية للخلية 2، التحكم ب.

لمزيد من المعلومات، راجع اختبار التقسيم.

إعداد حملة إعلانية اختبارية

قم بإعداد حملة إعلانية بالطريقة المُتبعة لإعداد الحملات الإعلانية العادية. تواصل مع ممثل 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_program1، يمكن تطبيق مضاعف عرض الأسعار 0.7
  • للأشخاص بالقيمة loyalty_program2، يمكن تطبيق مضاعف عرض الأسعار 1.0
  • بالنسبة إلى الذكور بالقيمة loyalty_program3، يمكن تطبيق مضاعف عرض الأسعار 1.0
  • بالنسبة إلى الإناث بالقيمة loyalty_program3، يمكن تطبيق مضاعف عرض الأسعار 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', })

بمجرد إنشاء المجموعات الإعلانية، يمكن تعيين bid_adjustments إلى المجموعة الإعلانية عبر API. يجب أن تبدو المعلمة كما يلي:

{
  "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 تم تلقيه لهذا المستخدم. ولكن إذا تم تحديد عدة مصادر أحداث (مثل: البيكسل والتطبيق) وتم تسجيل 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>