Promociona automáticamente tu inventario de viajes en Facebook. Los anuncios sobre viajes de Facebook aprovechan las señales de intención en todos los dispositivos para promocionar automáticamente las opciones de viajes pertinentes de tu inventario con contenido único en Facebook.
Los anuncios sobre viajes admiten anuncios sobre hoteles, anuncios sobre vuelos y anuncios sobre destinos.
En esta guía se supone lo siguiente:
Los anuncios sobre viajes admiten distintas estrategias de segmentación. Para conseguir distintos objetivos empresariales, combina la audiencia adecuada con el conjunto de productos apropiado:
Nueva segmentación: muestra hoteles, destinos o vuelos pertinentes a los usuarios que han visitado tu sitio web o tu aplicación en busca de hoteles, destinos o vuelos.
Ventas cruzadas y dirigidas: dirígete a usuarios que han comprado un vuelo con hoteles pertinentes, o bien haz una venta dirigida de embarque prioritario o selección de asiento.
Captación: amplía el alcance del anuncio y encuentra nuevos clientes. Para hacerlo, dirígete a audiencias potenciales.
Al crear anuncios sobre viajes, sigues el mismo proceso que al configurar cualquier otro tipo de anuncio de Facebook con la API:
Los anuncios sobre viajes utilizan el objetivo PRODUCT_CATALOG_SALES
. Especifica un catálogo de viajes en promoted_object
en el nivel de campaña:
use FacebookAds\Object\Campaign;
use FacebookAds\Object\Fields\CampaignFields;
use FacebookAds\Object\Values\CampaignObjectiveValues;
$campaign = new Campaign(null, 'act_<AD_ACCOUNT_ID>');
$campaign->setData(array(
CampaignFields::NAME => 'Product Catalog Sales Campaign',
CampaignFields::OBJECTIVE => CampaignObjectiveValues::PRODUCT_CATALOG_SALES,
CampaignFields::PROMOTED_OBJECT => array(
'product_catalog_id' => <PRODUCT_CATALOG_ID>,
),
));
$campaign->create(array(
Campaign::STATUS_PARAM_NAME => Campaign::STATUS_PAUSED,
));
from facebookads.adobjects.campaign import Campaign
campaign = Campaign(parent_id='act_<AD_ACCOUNT_ID>')
campaign[Campaign.Field.name] = 'Product Catalog Sales Campaign'
objective = Campaign.Objective.product_catalog_sales
campaign[Campaign.Field.objective] = objective
campaign[Campaign.Field.promoted_object] = {
'product_catalog_id': <PRODUCT_CATALOG_ID>,
}
campaign.remote_create(params={
'status': Campaign.Status.paused,
})
Campaign campaign = new AdAccount(act_<AD_ACCOUNT_ID>, context).createCampaign()
.setName("Product Catalog Sales Campaign Group")
.setObjective(Campaign.EnumObjective.VALUE_PRODUCT_CATALOG_SALES)
.setPromotedObject("{\"product_catalog_id\":\"" + <PRODUCT_CATALOG_ID> + "\"}")
.setStatus(Campaign.EnumStatus.VALUE_PAUSED)
.execute();
String campaign_id = campaign.getId();
curl \
-F 'name=Product Catalog Sales Campaign' \
-F 'objective=PRODUCT_CATALOG_SALES' \
-F 'promoted_object={"product_catalog_id":"<PRODUCT_CATALOG_ID>"}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/campaigns
Una vez que tienes la campaña y el campaign_id
, puedes crear el conjunto de anuncios. El conjunto de anuncios define las opciones de pujas y segmentación para los anuncios.
Para volver a segmentar a visitantes del sitio web o la aplicación, utiliza una audiencia dinámica del mismo tipo que el conjunto de productos que promocionas; por ejemplo, promociona un conjunto de hoteles a una audiencia de hoteles, un conjunto de vuelos a una audiencia de vuelos y un conjunto de destinos a una audiencia de destinos.
Para la venta cruzada y dirigida a usuarios que han comprado en tu sitio web o aplicación, utiliza una audiencia dinámica que contenga usuarios que hayan realizado una compra y preséntales opciones de viaje de otro catálogo; por ejemplo, dirígete a una audiencia de compra de vuelos con un conjunto de hoteles u otro conjunto de vuelos donde se destaque la selección de asiento.
OFFSITE_CONVERSIONS
con señales de intención más fuertes, como Purchase
o InitiateCheckout
. Consulta también Anuncios de catálogo de Advantage+, Segmentación de audiencia amplia.
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;
$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
AdSetFields::NAME => 'Product Catalog Sales Adset',
AdSetFields::BID_AMOUNT => 3000,
AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
AdSetFields::OPTIMIZATION_GOAL =>
AdSetOptimizationGoalValues::OFFSITE_CONVERSIONS,
AdSetFields::DAILY_BUDGET => 15000,
AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
AdSetFields::TARGETING => array(
TargetingFields::GEO_LOCATIONS => array(
'countries' => array('US'),
),
TargetingFields::DYNAMIC_AUDIENCE_IDS => array(<DYNAMIC_AUDIENCE_ID>),
),
AdSetFields::PROMOTED_OBJECT => array(
'product_set_id' => <PRODUCT_SET_ID>,
),
));
$adset->create(array(
AdSet::STATUS_PARAM_NAME => AdSet::STATUS_PAUSED,
));
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.targeting import Targeting
adset = AdSet(parent_id=ad_account_id)
adset[AdSet.Field.name] = 'Product Catalog Sales Adset'
adset[AdSet.Field.bid_amount] = 3000
adset[AdSet.Field.billing_event] = AdSet.BillingEvent.impressions
adset[AdSet.Field.optimization_goal] = \
AdSet.OptimizationGoal.offsite_conversions
adset[AdSet.Field.daily_budget] = 15000
adset[AdSet.Field.campaign_id] = campaign_id
adset[AdSet.Field.targeting] = {
Targeting.Field.geo_locations: {
Targeting.Field.countries: ['US'],
},
Targeting.Field.dynamic_audience_ids: [
dynamic_audience_id,
],
}
adset[AdSet.Field.promoted_object] = {
'product_set_id': product_set_id,
}
adset.remote_create()
AdSet adSet = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdSet()
.setName("Product Catalog Sales Adset")
.setBidAmount(3000L)
.setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
.setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_OFFSITE_CONVERSIONS)
.setDailyBudget(15000L)
.setCampaignId(<CAMPAIGN_ID>)
.setTargeting(
new Targeting()
.setFieldDynamicAudienceIds(Arrays.asList(<DYNAMIC_AUDIENCE_ID>))
.setFieldGeoLocations(
new TargetingGeoLocation()
.setFieldCountries(Arrays.asList("US"))
)
)
.setPromotedObject("{\"product_set_id\":\"" + <PRODUCT_SET_ID> + "\"}")
.setStatus(AdSet.EnumStatus.VALUE_PAUSED)
.execute();
String ad_set_id = adSet.getId();
curl \
-F 'name=Product Catalog Sales Adset' \
-F 'bid_amount=3000' \
-F 'billing_event=IMPRESSIONS' \
-F 'optimization_goal=OFFSITE_CONVERSIONS' \
-F 'daily_budget=15000' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={
"geo_locations": {"countries":["US"]},
"dynamic_audience_ids": ["<DYNAMIC_AUDIENCE_ID>"]
}' \
-F 'promoted_object={"product_set_id":"<PRODUCT_SET_ID>"}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adsets
Los anuncios sobre viajes no admiten las especificaciones integradas en el conjunto de anuncios. Primero debes crear una audiencia por separado.
Puedes utilizar etiquetas de plantilla en el contenido del anuncio para los anuncios sobre viajes. Cuando Facebook muestra el anuncio, reemplazamos las etiquetas de plantilla por las opciones de viaje reales de cada persona. Puedes utilizar etiquetas de plantilla en el propio anuncio y también en la URL que aparece al hacer clic en él.
Usa el campo template_url_spec
para especificar la URL que aparece al hacer clic en el anuncio. Si no lo haces, o si no podemos obtenerla al mostrar el anuncio, usaremos la URL del catálogo. En el caso de los anuncios sobre vuelos, este campo es obligatorio si no proporcionas ninguna URL en el catálogo.
Puedes mostrar un solo artículo o una secuencia con varios artículos. Para los anuncios de un solo artículo, puedes mostrar varias imágenes del mismo artículo en la secuencia, siempre que tu catálogo contenga varias imágenes para cada artículo. También puedes mostrar una combinación de imágenes estáticas y dinámicas. Para obtener más información sobre las opciones de contenido, consulta Anuncios de catálogo de Advantage+, Creación de una plantilla de contenido.
En el ejemplo siguiente se muestra cómo crear un contenido del anuncio por secuencia para los anuncios sobre hoteles. Los anuncios sobre destinos y los anuncios sobre vuelos tienen una configuración similar.
use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\Fields\AdCreativeLinkDataFields;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Values\AdCreativeCallToActionTypeValues;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\AdCreativeLinkData;
$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
AdCreativeObjectStorySpecFields::TEMPLATE_DATA =>
(new AdCreativeLinkData())->setData(array(
AdCreativeLinkDataFields::MESSAGE =>
'Book your upcoming stay in {{hotel.city}}',
AdCreativeLinkDataFields::NAME => '{{hotel.name | titleize}}',
AdCreativeLinkDataFields::LINK => '<LINK>',
AdCreativeLinkDataFields::DESCRIPTION =>
'{{hotel.description}}',
AdCreativeLinkDataFields::ADDITIONAL_IMAGE_INDEX => 0,
AdCreativeLinkDataFields::CALL_TO_ACTION => array(
'type' => AdCreativeCallToActionTypeValues::BOOK_TRAVEL,
),
)),
));
$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');
$creative->setData(array(
AdCreativeFields::NAME => 'Dynamic Ad Template Creative Sample',
AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
AdCreativeFields::TEMPLATE_URL_SPEC =>
array(
'config' => array(
'app_id' => '123456789012345',
),
'ios' => array(
'url' => 'example://home/hotel'.
'?id={{hotel.hotel_id | urlencode}}'.
'&startDate={{trip.checkin_date date_format:Y-m-d | urlencode}}'.
'&endDate={{trip.checkout_date date_format:Y-m-d | urlencode}}',
),
'web' => array(
'url' => 'http://www.example.com/hotel'.
'?id={{hotel.hotel_id | urlencode}}'.
'&startDate={{trip.checkin_date date_format:Y-m-d | urlencode}}'.
'&endDate={{trip.checkout_date date_format:Y-m-d | urlencode}}',
)
),
AdCreativeFields::PRODUCT_SET_ID => <PRODUCT_SET_ID>,
));
$creative->create();
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativeobjectstoryspec \
import AdCreativeObjectStorySpec
story = AdCreativeObjectStorySpec()
story[story.Field.page_id] = <PAGE_ID>
story[story.Field.template_data] = {
'message': 'Book your upcoming stay in {{hotel.city}}',
'name': '{{hotel.name | titleize}}',
'link': '<LINK>',
'description': '{{hotel.description}}',
'additional_image_index': 0,
'call_to_action': {
'type': 'BOOK_TRAVEL',
},
}
creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.name] = 'Dynamic Ad Template Creative Sample'
creative[AdCreative.Field.object_story_spec] = story
template_url = ('http://www.example.com/hotel.aspx?id={{hotel.hotel_id}}'
'&startDate={{trip.checkin_date date_format:Y-m-d}}'
'&endDate={{trip.checkout_date date_format:Y-m-d}}')
creative[AdCreative.Field.template_url] = template_url
creative[AdCreative.Field.product_set_id] = <PRODUCT_SET_ID>
creative.remote_create()
curl \
-F 'name=Dynamic Ad Template Creative Sample' \
-F 'object_story_spec={
"page_id": "<PAGE_ID>",
"template_data": {
"additional_image_index": 0,
"call_to_action": {"type":"BOOK_TRAVEL"},
"description": "{{hotel.description}}",
"link": "<LINK>",
"message": "Book your upcoming stay in {{hotel.city}}",
"name": "{{hotel.name | titleize}}"
}
}' \
-F 'template_url_spec={
"config": {"app_id":"123456789012345"},
"ios": {
"url": "example:\/\/home\/hotel?id={{hotel.hotel_id | urlencode}}&startDate={{trip.checkin_date date_format:Y-m-d | urlencode}}&endDate={{trip.checkout_date date_format:Y-m-d | urlencode}}"
},
"web": {
"url": "http:\/\/www.example.com\/hotel?id={{hotel.hotel_id | urlencode}}&startDate={{trip.checkin_date date_format:Y-m-d | urlencode}}&endDate={{trip.checkout_date date_format:Y-m-d | urlencode}}"
}
}' \
-F 'product_set_id=<PRODUCT_SET_ID>' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives
Para hacer una venta dirigida de otras opciones, por ejemplo, la selección de asiento o el embarque prioritario, a una audiencia que ha comprado vuelos:
PURCHASE
.recommender_settings
del contenido del anuncio, especifica los eventos PURCHASE
para recomendar anuncios.curl \ -F 'name=Advantage+ Catalog Ad Template Creative Up-sell Sample' \ -F 'object_story_spec={ "page_id": "<PAGE_ID>", "template_data": { "additional_image_index": 0, "call_to_action": {"type":"LEARN_MORE"}, "description": "{{flight.description}}", "link": "<LINK>", "message": "Book extra leg room on your flight from {{flight.origin_city}} to {{flight.destination_city}}", } }' \ -F 'template_url_spec={ "config": {"app_id":"<APP_ID>"}, "ios": { "url": "example:\/\/home\/flight?id={{flight.origin_airport}}&startDate={{trip.departing_departure_date date_format:Y-m-d | urlencode}}&endDate={{trip.returning_departure_date date_format:Y-m-d | urlencode}}" }, "web": { "url": "http:\/\/www.example.com\/flight?id={{flight.origin_airport}}&startDate={{trip.checkin_date date_format:Y-m-d | urlencode}}&endDate={{trip.returning_departure_date date_format:Y-m-d | urlencode}}" } }' \ -F 'product_set_id=<FLIGHT_SET_ID>' \ -F 'recommender_settings'={"preferred_events":["Purchase"]}\ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/VERSION/act_<AD_ACCOUNT_ID>/adcreatives
Las superposiciones permiten a los anunciantes añadir información sobre precios (como precio directo o porcentaje de descuento) para cada artículo de los anuncios de catálogo de Advantage+.
Puedes usar los siguientes tipos de superposición en función del tipo de catálogo que utilices en el conjunto de anuncios:
price
, strikethrough
y % off
price
price
Nota: Todas las etiquetas de plantilla relacionadas con precios de cada tipo de catálogo se admiten para las opciones de superposición anteriores. Para ver las etiquetas de plantilla de cada tipo de catálogo, consulta hoteles, destinos y vuelos.
La información sobre precios se extrae de forma dinámica de las columnas de precio y precio de venta de la lista. Los anunciantes pueden seleccionar entre las personalizaciones siguientes para la superposición de anuncios de catálogo de Advantage+:
TOP_LEFT
, TOP_RIGHT
, BOTTOM_LEFT
y BOTTOM_RIGHT
). Para el triángulo, solo se admiten TOP_LEFT
y TOP_RIGHT
.price
, strikethrough
y % off
. Nota: strikethrough
y % off
solo están disponibles para hoteles.Obtén más información sobre cómo añadir superposiciones.
curl \ -F 'name=Test Templates in Overlay' \ -F 'object_story_spec={ "page_id": "<PAGE_ID>", "template_data": { "description": "Description", "link": "<LINK>", "name": "Name: {{hotel.name}}", "message" : "Come visit {{hotel.city}}!", "image_overlay_spec": { "overlay_template":"pill_with_text", "text_font":"droid_serif_regular", "text_type":"strikethrough_price", "position":"top_left", "theme_color":"background_e50900_text_ffffff", "float_with_margin":"true", "text_template_tags": ["{{hotel.price round}}", "{{hotel.sale_price round}}"], } } }' \ -F 'product_set_id=<PRODUCT_SET_ID>' \ -F 'template_url=http://www.example.com' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v2.10/act_897427477067185/adcreatives
Para crear un anuncio, utiliza ad_set_id
y creative_id
.
curl -X POST \
-F 'name="My Ad"' \
-F 'adset_id="<AD_SET_ID>"' \
-F 'creative={
"creative_id": "<CREATIVE_ID>"
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/ads
Puedes generar una vista previa del contenido de Advantage+ para catálogo con la API de vistas previas del anuncio. Incluye el parámetro product_item_ids
para especificar qué artículos del catálogo se mostrarán en la vista previa.
Genera una vista previa del anuncio con la API de vistas previas del anuncio. Incluye el parámetro product_item_ids
para indicar los artículos del catálogo que se mostrarán en la vista previa, y los parámetros start_date
y end_date
para especificar fechas concretas.
curl -X GET \
-d 'ad_format="DESKTOP_FEED_STANDARD"' \
-d 'product_item_ids=[
"<PRODUCT_ITEM_ID>"
]' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<CREATIVE_ID>/previews
Nombre y tipo del campo | Descripción |
---|---|
Tipo: |
|
Tipo: | Representa la vista previa con la señal de la intención del usuario; p. ej., 2016-12-24.
|
Tipo: | Representa la vista previa con la señal de la intención del usuario (p. ej., 2017-01-01).
|
Para recuperar insights de anuncios para un objeto de viaje, como un hotel, realiza una llamada GET
a /insights
. Nota: Recuerda añadir product_id
al parámetro breakdown
.
En el caso de los hoteles y los destinos, se muestra el desglose de product id
para cada hotel_id
o destination_id
. En el caso de los vuelos, en el desglose product id
se muestra origin_airport:destination_airport
.
Para recuperar comentarios y "Me gusta" de anuncios de catálogo de Advantage+, utiliza la API de publicación dinámica.