Com os anúncios de catálogo Advantage+, você mostra anúncios com base na intenção de compra em todos os dispositivos. É possível coletar sinais da intenção do usuário nos apps para celular e em sites a fim de usar esses dados para criar um público de clientes em potencial para direcionamento.
Este documento abrange as seguintes etapas:
Para coletar sinais de usuário, use os Eventos para seu app para celular ou o Pixel da Meta para seu site.
Mesmo que você esteja veiculando anúncios apenas no desktop, é necessário instalar o SDK do Facebook se você tiver um app. Isso ajuda a capturar sinais e ampliar o público-alvo.
Adicione os seguintes eventos ao app usando o SDK do Facebook para iOS e Android:
Evento | Evento para iOS | Evento para Android |
---|---|---|
Pesquisar |
|
|
Visualizar conteúdo |
|
|
Adicionar ao carrinho |
|
|
Comprar | // Enviar pelo logPurchase |
|
Todos os eventos precisam incluir um content_id
(ou uma matriz JSON de content_id
s).
Diferentemente do Pixel da Meta, os eventos do app não têm o parâmetro product_catalog_id
. Por isso, você deve associar seu catálogo e o app com o ponto de extremidade external_event_sources
descrito abaixo.
Evento adicionar ao carrinho, no iOS:
[[FBSDKAppEvents shared] logEvent:FBSDKAppEventNameAddedToCart valueToSum:54.23 parameters:@{ FBSDKAppEventParameterNameCurrency : @"USD", FBSDKAppEventParameterNameContentType : @"product", FBSDKAppEventParameterNameContentID : @"123456789" } ];
Evento comprar, no iOS, com dois itens diferentes comprados com quantidade:
[[FBSDKAppEvents shared] logPurchase:21.97 currency:@"USD" parameters:@{ FBSDKAppEventParameterNameContent : @"[{\"id\":\"1234\",\"quantity\":2},{\"id\":\"5678\",\"quantity\":1}]", FBSDKAppEventParameterNameContentType : @"product" } ];
Evento comprar, no Android, com dois itens comprados com quantidade:
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 );
Evento comprar, no Android, com dois itens comprados:
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 );
Observe que CONTENT_ID
e CONTENT
podem ser usados com os anúncios de catálogo Advantage+ para relatar IDs de produtos. O parâmetro CONTENT
permitirá que você forneça mais informações sobre os produtos.
Para usar os anúncios de catálogo Advantage+ com um Parceiro de Métricas para Aplicativos (MMP, pelas iniciais em inglês), é preciso acionar eventos obrigatórios separados quando alguém usa seu app. Os principais pontos de interação que você deve rastrear são quando uma pessoa pesquisa produtos, visualiza um produto, adiciona um item ao carrinho e compra itens. Selecione os eventos no seu MMP que correspondem aos seguintes eventos-padrão de anúncios de catálogo Advantage+:
Nome | Descrição |
---|---|
| Alguém pesquisa produtos |
| Quando uma conta da Central de Contas visualiza um produto |
| Alguém adiciona um item ao carrinho |
| Uma conta da Central de Contas compra um ou mais itens |
Além disso, você precisa de dois parâmetros adicionais para que cada um dos eventos seja registrado como um evento de anúncios de catálogo Advantage+ válido. Esses dois parâmetros representam o ID do item visualizado, adicionado ao carrinho ou comprado e informa se o ID é de um produto ou de um grupo de produtos. Estes são os parâmetros adicionais disponíveis:
Nome | Descrição |
---|---|
string | É obrigatório usar |
string | É obrigatório usar Os campos |
string | Opcional. Caso nenhum Saiba mais em Como escolher o |
string | Opcional. |
string | Opcional. |
Observação: é recomendado enviar os parâmetros _valueToSum
e fb_currency
quando uma compra é efetuada.
Estes eventos precisam ser adicionados ao seu site, se aplicável:
Search
ViewCategory
ViewContent
AddToCart
Purchase
Os eventos devem ser enviados com os parâmetros de dados a seguir:
Nome | Descrição |
---|---|
string ou string[] | É obrigatório usar |
objeto[] | É obrigatório usar Os campos |
string | Opcional. Caso nenhum Saiba mais em Como escolher o |
string | Opcional. |
Abaixo, é apresentado um evento-padrão Search
. Recomendamos que você forneça de 5 a 10 itens em content_ids
dos seus principais resultados de pesquisa.
<!-- 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 -->
Abaixo, é apresentado um evento ViewCategory
. Recomendamos que você forneça de 5 a 10 itens em content_ids
dos seus principais resultados. Vale lembrar que ViewCategory
não é um evento-padrão. Por isso, a função trackCustom
é usada.
<!-- 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 & Accessories > Shoes', content_ids: ['1234', '2424', '1318', '6832'], // top 5-10 results content_type: 'product' }); </script> <!-- End Facebook Pixel Code -->
Abaixo, é apresentado um evento-padrão ViewContent
. Para mais informações sobre a configuração do pixel, acesse Pixel da 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 -->
O evento-padrão AddToCart
depende de como sua plataforma de comércio eletrônico controla a adição de itens ao carrinho. Se ela for realizada de forma dinâmica, o evento deve ser colocado em um controlador onclick
para ser acionado com o clique de um botão. Caso uma página separada seja carregada, o evento do pixel poderá ser acionado normalmente.
<!-- 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 -->
Se o evento precisar ser acionado com o clique de um botão e nenhuma página separada for carregada:
<!-- 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>
Um evento-padrão Purchase
com dois itens com quantidade:
<!-- 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 -->
Um evento-padrão Purchase
com dois itens:
<!-- 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
certoObservação: fb_content_type
é o tipo de conteúdo para dispositivos móveis.
Se a página for sobre um SKU específico (tamanho, cor etc.), use product
para content_type
e passe os IDs de produtos (ou seja, a coluna id
no feed de produtos) em content_ids
. Todos os eventos AddToCart
e Purchase
devem usar content_type=product
, porque as pessoas compram produtos específicos. As pessoas não compram uma camisa sem forma, tamanho e cor. Elas compram uma camisa específica, com tamanho e cor específicos.
Se a página for sobre um grupo de produtos relacionados que pertencem ao mesmo grupo e variam de acordo com tamanho, cor etc., use product_group
e passe os IDs do grupo de produtos (ou seja, a coluna item_group_id
no feed de produtos) em content_ids
. Um caso de uso comum é uma página ViewContent
na qual o usuário ainda não escolheu um tamanho. Não use product_group
com AddToCart
nem Purchase
.
É importante que o content_type
corresponda ao tipo de ID incluído no parâmetro content_ids
ou contents
.
Passar os IDs de produtos específicos (content_type=product
) permite que a Meta recomende produtos mais relevantes, pois saberá por qual variante específica (tamanho, cor e assim por diante) o usuário se interessou. Sempre mostraremos produtos (e não grupos de produtos), mesmo se content_type=product_group
.
Caso nenhum content_type
seja fornecido, a Meta fará a correspondência do evento a cada item com o mesmo ID, independentemente do tipo. O envio de content_type
é recomendado, pois dará mais controle sobre o ID específico que você quer corresponder ao evento.
É necessário associar as origens do evento com cada um dos catálogos de produtos para que o Facebook obtenha esses dados e mostre o produto correto no anúncio. Para isso, acesse sua Página do catálogo do Gerenciador de Negócios e clique no botão Associate Event Source. Selecione o app e o pixel que vão receber os eventos de anúncios de catálogo Advantage+.
Você também pode fazer uma chamada de API POST
com uma lista de origens de eventos externas como parâmetros de strings de consulta com codificação 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
Observação: é necessário ter permissões no catálogo, no pixel, no app e na empresa.
Nome | Descrição |
---|---|
| Obrigatório. |
A próxima etapa consiste em criar públicos de produto com base na atividade no seu app para celular e site. Escolha quais eventos usar e direcione anúncios usando os públicos de produto.
Para eventos do app padrão, o público será agregado nos nomes de anúncios de eventos do Pixel:
Search
ViewContent
AddToCart
Purchase
Use esses nomes nas regras do público, mesmo se incluir usuários do Android e iOS.
Crie um público de produto por meio de uma chamada de API POST
para o ponto de extremidade /act_{ad-account-id}/product_audiences
.
https://graph.facebook.com/v21.0
/act_AD_ACCOUNT_ID/product_audiences
Nome | Descrição |
---|---|
string | Obrigatório. |
string | Opcional. |
string numérica | Obrigatório. O conjunto de produtos direcionado a esse público. |
objeto JSON | Obrigatório. |
número inteiro | Obrigatório. |
objeto[] | Obrigatório. |
objeto JSON | Opcional. |
número inteiro | Obrigatório, se a exclusão estiver especificada. |
objeto[] | Obrigatório, se a exclusão estiver especificada. |
Cada regra precisa incluir o event
com o operador eq
como regra de nível superior ou como parte de uma regra and
de nível superior.
Se o mesmo event
for usado nas inclusões e exclusões, as verificações de parâmetros adicionais precisarão ser as mesmas.
Para criar um público e direcionar para as pessoas que visualizaram ou adicionaram produtos a um carrinho, mas não concluíram a compra:
curl -X POST \
-F 'name="Test Product Audience"' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'inclusions=[
{
"retention_seconds": 86400,
"rule": {
"event": {
"eq": "AddToCart"
}
}
},
{
"retention_seconds": 72000,
"rule": {
"event": {
"eq": "ViewContent"
}
}
}
]' \
-F 'exclusions=[
{
"retention_seconds": 172800,
"rule": {
"event": {
"eq": "Purchase"
}
}
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
Se você quer direcionar anúncios para pessoas que visualizaram um produto na web com um iPhone, mas não compraram em nenhum dispositivo, crie este público.
Isso pressupõe a inclusão do parâmetro userAgent
no Pixel da Meta.
curl -X POST \
-F 'name="Test Iphone Product Audience"' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'inclusions=[
{
"retention_seconds": 86400,
"rule": {
"and": [
{
"event": {
"eq": "AddToCart"
}
},
{
"userAgent": {
"i_contains": "iPhone"
}
}
]
}
}
]' \
-F 'exclusions=[
{
"retention_seconds": 172800,
"rule": {
"event": {
"eq": "Purchase"
}
}
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
Depois de criado, você pode recuperar o público do produto usando a API de Públicos Personalizados. É possível obter os parâmetros originais usados para a criação do público com o parâmetro data_source
.
O público de produto é um tipo específico de público personalizado gerado dinamicamente a partir dos eventos do produto. O act_{ad-account-id}/product_audiences
é um ponto de extremidade POST
para criar esses públicos.
Para recuperar o público personalizado:
curl -X GET \
-d 'fields="data_source,subtype"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/customaudiences
Para recuperar um público de produto específico:
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>