Promociona automáticamente tu inventario de viajes en Facebook. Los anuncios de viajes de Facebook utilizan las señales de intención de multidispositivo con la finalidad de promocionar de forma automática opciones de viajes adecuadas del inventario con contenido único en Facebook.
Los anuncios de viajes admiten anuncios de hoteles, anuncios de vuelos y anuncios de destinos.
En esta guía se asume lo siguiente:
Los anuncios de viajes admiten diferentes estrategias de segmentación. Puedes promover diferentes objetivos comerciales combinando el público adecuado con el conjunto de productos más indicado:
Retargeting: muestra hoteles, destinos o vuelos adecuados personas que visitaron tu sitio web o tu app en busca de hoteles, destinos o vuelos.
Venta dirigida y cruzada: dirígete a personas que compraron un vuelo con hoteles determinados o realiza una venta dirigida de embarque prioritario o la selección del asiento.
Clientes potenciales: aumenta el alcance del anuncio y encuentra nuevos clientes dirigiéndote a un público potencial.
Cuando creas anuncios de viajes, sigues el mismo procedimiento que cuando configuras cualquier otro tipo de anuncio de Facebook con la API:
Los anuncios de viajes usan el objetivo PRODUCT_CATALOG_SALES
. Especifica un catálogo de viajes en promoted_object
en el nivel de la 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 tengas la campaña y el campaign_id
, puedes crear el conjunto de anuncios. El conjunto de anuncios define las opciones de puja y segmentación de los anuncios.
Para volver a dirigirte a los visitantes de un sitio web o app, utiliza un público dinámico del mismo tipo que el conjunto de productos que promocionas; por ejemplo, promociona un conjunto de hoteles entre un público que busca hoteles, un conjunto de vuelos entre un público que busca vuelos y un conjunto de destinos entre un público que busca destinos.
Para hacer ventas cruzadas y dirigidas a las personas que compraron en tu sitio web o app, utiliza un público dinámico que incluya a las personas que realizaron una compra y promociona opciones de viajes de otro catálogo, p. ej., dirígete a un público de compra de vuelos con un conjunto de hoteles u otro conjunto de vuelos y destaca la selección del asiento.
OFFSITE_CONVERSIONS
con señales de intención más fuertes como Purchase
o InitiateCheckout
. Consulta también Anuncios del catálogo Advantage+, Segmentación de público amplio
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 de viajes no admiten especificaciones directas de segmentación de público dinámico en el conjunto de anuncios. Primero debes crear un público por separado.
Puedes utilizar etiquetas de plantilla en el contenido del anuncio para los anuncios de viajes. Cuando Facebook muestre tu anuncio, se reemplazarán las etiquetas de plantilla con las opciones de viaje reales de una persona. Puedes usar etiquetas de plantilla en el propio anuncio o en la URL que ven las personas cuando hacen clic en el anuncio.
Usa el campo template_url_spec
para especificar la URL que aparece después de que alguien hace clic en el anuncio. Si no la proporcionas, o no podemos obtenerla cuando representamos un anuncio, se mostrará la URL del catálogo. En los anuncios para vuelos, este campo es obligatorio si no proporcionas una URL en el catálogo.
Puedes mostrar un solo artículo o una secuencia con varios artículos. Para anuncios de un solo artículo, puedes mostrar varias imágenes del mismo artículo en la secuencia, si el catálogo contiene varias imágenes de cada artículo. También puedes mostrar una combinación de tarjetas estáticas y dinámicas. Para obtener más información sobre las opciones de contenido, consulta Anuncios del catálogo Advantage+, Creación de una plantilla de contenido.
En el siguiente ejemplo se muestra cómo crear un contenido por secuencia para anuncios de hoteles. Los anuncios de destinos y los anuncios de 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 realizar una venta dirigida de opciones como la selección de asiento o un embarque prioritario a un público que compró vuelos:
PURCHASE
.recommender_settings
del contenido del anuncio, especifica los eventos PURCHASE
con el fin de 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
Con las superposiciones, los anunciantes pueden agregar información sobre precios (como precio directo o porcentaje de descuento) en los elementos de los anuncios del catálogo Advantage+.
Puedes usar los siguientes tipos de superposiciones según el tipo de catálogo que se utilizó en el conjunto de anuncios:
price
, strikethrough
y % off
price
price
Nota: Todas las etiquetas de plantilla relacionadas con los precios de cada tipo de catálogo son compatibles con las opciones de superposición anteriores. Para ver las etiquetas de plantilla de los tipos de catálogo, consulta hoteles, destinos y vuelos.
La información de precios se extrae dinámicamente de las columnas de precio y precio de venta del feed. Los anunciantes pueden seleccionar las siguientes personalizaciones para la superposición de anuncios del catálogo Advantage+:
TOP_LEFT
, TOP_RIGHT
, BOTTOM_LEFT
y BOTTOM_RIGHT
. En el caso del triángulo, solo se admiten TOP_LEFT
y TOP_RIGHT
.price
, strikethrough
y % off
. Nota: strikethrough
y % off
solo se encuentran disponibles para hoteles.Obtén más información sobre cómo agregar 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 el anuncio, usa 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+ del catálogo con la API de vistas previas de anuncios. Incluye el parámetro product_item_ids
para especificar los elementos del catálogo que se mostrarán en la vista previa.
Genera una vista previa del anuncio con la API de vistas previas de anuncios. Incluye product_item_ids
para especificar qué elementos del catálogo se deben mostrar en la vista previa, y start_date
y end_date
para especificar las fechas.
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 de campo | Descripción |
---|---|
Tipo: |
|
Tipo: | Genera la vista previa con la señal de intención del usuario, p. ej., 2016-12-24.
|
Tipo: | Genera la vista previa con la señal de intención del usuario, p. ej., 2017-01-01.
|
Para recuperar las estadísticas de anuncios de un objeto de un viaje, como un hotel, haz una llamada GET
a /insights
. Nota: Recuerda agregar product_id
al parámetro breakdown
.
En el caso de hoteles y destinos, el desglose del product id
se muestra para cada hotel_id
o destination_id
. Para los vuelos, el desglose product id
muestra origin_airport:destination_airport
.
Para recuperar comentarios y Me gusta de anuncios del catálogo Advantage+, usa la API de publicación dinámica.