Аудитории динамической рекламы товаров

Объявления из каталога Advantage+ позволяют показывать людям рекламу в соответствии с их намерениями, которые определяются на разных устройствах. Вы можете собирать сигналы о намерениях пользователей из мобильных приложений и с сайтов, а затем с помощью этих данных формировать аудиторию для настройки таргетинга на потенциальных клиентов.

В этом документе рассматриваются следующие темы:

Шаг 1. Настройка сигналов пользователей для событий

Для сбора сигналов пользователей используйте События в приложении (для мобильного приложения) или пиксель Meta (для веб-сайта).

Если у вас есть приложение и вы показываете рекламу только на ПК, установите Facebook SDK. С его помощью можно регистрировать сигналы для расширения целевой аудитории.

События в приложении для мобильного приложения

Используя Facebook SDK для iOS и для Android, добавьте в приложение следующие события:

СобытиеСобытие в iOSСобытие в Android

Поиск

FBSDKAppEventNameSearched

EVENT_NAME_SEARCHED

Просмотр контента

FBSDKAppEventNameViewedContent

EVENT_NAME_VIEWED_CONTENT

Добавление в корзину

FBSDKAppEventNameAddedToCart

EVENT_NAME_ADDED_TO_CART

Покупка

// Отправить через logPurchase
[FBSDKAppEvents logPurchase:(double) currency:(NSString *) parameters:(NSDictionary *)];

EVENT_NAME_PURCHASED

В эти события должны содержать content_id (или массив JSON нескольких content_id).

В отличие от пикселя Meta Pixel, События в приложении не имеют параметра product_catalog_id. Поэтому необходимо связать каталог и приложение с помощью указанной ниже конечной точки external_event_sources.

Примеры

Событие "Добавить в корзину" в iOS:

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

Событие "Покупка" в iOS (два разных товара, с указанием количества):

[FBSDKAppEvents 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
);

Обратите внимание: чтобы сообщить ID товаров, с объявлениями из каталога Advantage+ можно использовать либо CONTENT_ID, либо CONTENT. Параметр CONTENT позволяет предоставить дополнительную информацию о товарах.

Использование партнера по мобильным измерениям

Для использования объявлений из каталога Advantage+ с партнером по мобильным измерениям (MMP) в процессе работы пользователя с вашим приложением должны активироваться отдельные требуемые события. Основные точки взаимодействия, которые следует отслеживать, — это поиск товара, просмотр товара, добавление позиции в корзину и покупка товаров. В MMP следует выбрать события, соответствующие следующим стандартным событиям объявлений из каталога Advantage+:

ИмяОписание

fb_mobile_search

Какой-либо пользователь ищет товар.

fb_mobile_content_view

Аккаунт из Центра аккаунтов просматривает товар.

fb_mobile_add_to_cart

Какой-либо пользователь добавил товар в корзину.

fb_mobile_purchase

Аккаунт из Центра аккаунтов покупается один или несколько товаров.

Кроме того, чтобы каждое событие регистрировалось как действительное объявление из каталога Advantage+, потребуются два дополнительных параметра. Они представляют ID просматриваемой, добавляемой в корзину или приобретаемой позиции, а также то, принадлежит ли этот ID товару или группе товаров. Возможные дополнительные параметры:

ИмяОписание

fb_content_id

строка

Требуется либо fb_content_id, либо fb_content.
ID товара или группы товаров ритейлера. Значением должна быть строка, содержащая массив ID в формате JSON. Для более точного таргетинга по возможности используйте ID товаров.

fb_content

строка

Требуется либо fb_content_id, либо fb_content.
Список объектов JSON, содержащий международный артикул EAN (если он имеется) или другой идентификатор товара или контента, а также данные о количестве товаров и ценах на них.


Поля id и quantity являются обязательными.
Пример:
"[{\"id\": \"1234\", \"quantity\": 2}, {\"id\": \"5678\", \"quantity\": 1}]"

fb_content_type

строка

Необязательно.
Значение product или product_group, которое должно быть синхронизировано с типом идентификаторов в параметре fb_content_id.


Если fb_content_type не указано, Meta будет сопоставлять событие с каждым товаром, который имеет такой же идентификатор, независимо от его типа.


Подробнее см. в разделе Выбор правильного значения content_type.

_valueToSum

строка

Необязательно.
Общая стоимость товаров.

fb_currency

строка

Необязательно.
Валюта, в которой совершается покупка.

Примечание. При совершении покупки рекомендуется передавать параметры _valueToSum и fb_currency.

Использование пикселя Meta для веб-сайтов

Если это применимо, на ваш веб-сайт должны быть добавлены следующие события:

  • Search;
  • ViewCategory;
  • ViewContent;
  • AddToCart;
  • Purchase.

Эти события необходимо отправлять со следующими параметрами данных:

ИмяОписание

content_ids

строка или строка[]

Требуется либо content_ids, либо contents.
ID товара или группы товаров ритейлера. Для более точного таргетинга по возможности используйте ID товаров.

contents

объект[]

Требуется либо content_ids, либо contents.
Список объектов JSON, который содержит один или несколько ID товара или группы товаров ритейлера, а также дополнительную информацию о товарах.


Поля id и quantity являются обязательными
Пример:. [{"id": "1234", "quantity": 2}, {"id": "5678", "quantity": 1}]

content_type

строка

Необязательно.
Знание product и product_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 (определенного размера, цвета и т. д.), используйте product для content_type и передавайте идентификаторы товаров (т. е. столбец id в ленте товаров) в content_ids. Для всех событий AddToCart и Purchase следует использовать параметр content_type=product, поскольку люди приобретают определенные товары. Человеку не нужна абстрактная рубашка неопределенного цвета и размера: он покупает рубашку с конкретными свойствами.

Если страница посвящена группе связанных продуктов, которые отличаются размером, цветом и т. д., но относятся к одной группе, используйте значение product_group и передавайте идентификаторы группы товаров (т. е. столбецitem_group_id в ленте товаров) в content_ids. Стандартная ситуация — страница ViewContent, когда пользователь ещё не выбрал размер. Не используйтеproduct_group с AddToCart или с Purchase.

Значение content_type должно соответствовать типу идентификатора в параметре content_ids или contents.

Когда вы передаете идентификатор определенных товаров (content_type=product), Meta может, исходя из информации о конкретных свойствах (размер, цвет и т. д.), рекомендовать покупателям актуальные товары, которые их интересуют. Мы всегда показываем товары, а не их группы, даже если content_type=product_group.

Если content_type не указано, Meta будет сопоставлять событие с каждым товаром, который имеет такой же идентификатор, независимо от его типа. Рекомендуется отправлять content_type, поскольку это позволит вам эффективнее контролировать то, какой конкретный идентификатор вы хотите сопоставить с событием.

Шаг 2. Связывание сигналов пользователей с каталогом товаров

Вам необходимо связать источники событий с каталогами товаров, чтобы эти данные передавались в Facebook для демонстрации соответствующей рекламы. Для этого откройте страницу каталога в Business Manager и нажмите кнопку Associate Event Source. Выберите приложение и пиксель, который будет получать события объявлений из каталога Advantage+.

Также можно выполнить вызов API POST со списком внешних источников событий в виде параметров строки запроса с кодировкой UTF-8:

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.

Создайте аудиторию товаров, выполнив вызов API POST к конечной точке /act_{ad-account-id}/product_audiences.

https://graph.facebook.com/v19.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 и не содержать события "Покупка". Аккаунт просматривает товары А и Б, а затем покупает товар Б. Если товары А и Б относятся к одной группе, аккаунт будет исключен из аудитории. Если же товары А и Б не входят в одну группу, аккаунт останется в аудитории, так как он инициировал событие ViewContent для товара A.

exclusions.retention_seconds

целое число

Обязательный параметр, если указано исключение.
Количество секунд для сохранения исключения.

exclusions.rule

объект[]

Обязательный параметр, если указано исключение.
Правило пользовательской аудитории с сайта, в котором указывается одно событие event.

Каждое правило должно содержать event с оператором eq либо в качестве правила верхнего уровня, либо в качестве части правила and верхнего уровня.

Если один и тот же объект event используется и в параметре inclusions, и в параметре exclusions, то проверки дополнительных параметров должны быть одинаковыми.

Примеры

Чтобы создать аудиторию, таргетированную на людей, которые просмотрели или добавили товары в корзину, но не купили их:

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/v19.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/v19.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 Custom Audiences. Параметры, которые изначально использовались для создания аудитории, можно получить с помощью параметра 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/v19.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>