Anuncios de hoteles: catálogos y lista

Para promocionar tu inventario de hoteles en Facebook, debes compartir con Facebook información sobre tus hoteles. Para ello, crea un catálogo de hoteles y complétalo con tus hoteles. Hay dos formas de completar tu catálogo y actualizarlo:

Puedes crear y administrar tus catálogos de hoteles en el administrador de ventas.

Si quieres usar la API para administrar tu catálogo, sigue estos pasos:

  1. Crea un catálogo de hoteles.
  2. Crea conjuntos de productos del catálogo de hoteles.
  3. Asocia el catálogo con los orígenes de eventos.

Listas de hoteles: subir tus hoteles a Facebook

Una lista de hoteles es un archivo con tu inventario de hoteles. Cada línea o artículo del archivo representa un hotel individual. Puedes usar una o más listas de hoteles, siempre que entre todas contengan tu inventario completo de hoteles.

Formatos de lista de hoteles compatibles

CSV

CSV de ejemplo | TSV de ejemplo (plano) | TSV de ejemplo (estilo JSON)

  • En la primera fila, deben enumerarse los nombres de los campos en el orden en el que se presentan los valores. Las filas siguientes proporcionan los valores correspondientes de cada hotel.
  • Los campos que contengan espacios en blanco o comas deben escribirse entre "comillas dobles".
  • Los campos anidados o de varios valores, como address, neighborhood o image, se pueden representar con valores cifrados mediante JSON o con un conjunto de columnas "planas" de texto sin formato y etiquetadas mediante sintaxis de ruta JSON, como address.city, neighborhood[0], image[0].url, image[0].tag[0] y image[0].tag[1]. Es posible utilizar ambas convenciones indistintamente en el mismo archivo.

XML

XML de ejemplo

  • Un nodo XML <listings> raíz incluye un conjunto de nodos <listing>, cada uno de los cuales representa un hotel.
  • El archivo debe comenzar con una etiqueta de declaración <?xml válida.

El analizador de listas detecta automáticamente codificaciones de texto UTF8, UTF16 o UTF32 y adopta de forma predeterminada el valor LATIN1 si encuentra secuencias de bytes imprevistas. Puedes proporcionar texto en valores de campo en cualquier idioma. Sin embargo, los nombres de los campos se deben proporcionar en inglés, exactamente como figura abajo.

Campos compatibles: anuncios de hoteles

Los siguientes campos compatibles están diseñados para los artículos que agregas a tu catálogo de productos.

Para los catálogos localizados, consulta los campos compatibles para anuncios de hoteles.

Campo y tipoDescripción

hotel_id

Tipo: cadena

Obligatorio.

Longitud máxima: 100

Identificador único del hotel dentro del catálogo. Este identificador se comparará con los valores de content_ids proporcionados en tus eventos hotel del píxel y de la app. Consejo: Para mejorar el rendimiento, evita usar un espacio para este campo de identificador único. No uses identificadores duplicados.

Ejemplo: FB_hotel_1234

room_id

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Escribe un identificador único para el tipo de habitación del hotel. Cantidad máx. de caracteres: 100 Ejemplo: FB_hotel_room_1234

name

Tipo: cadena

Obligatorio.

Nombre más habitual del hotel.

Ejemplo: Facebook Hotel

description

Tipo: cadena

Obligatorio.

Tamaño máximo: 5.000

Descripción breve del hotel.

Ejemplo: Only 30 minutes away from San Francisco.

checkin_date

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Fecha de entrada para estadía en el hotel. Puedes agregar hasta 180 días desde la fecha en que subes la lista. Usa la norma ISO-8601 (YYYY-MM-DD).

Ejemplo: 2017-08-01

length_of_stay

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Número de noches para estadía en el hotel.

Ejemplo: 7

base_price

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Precio base de la habitación del hotel por noche. Asegúrate de agregar el tipo de divisa al precio (por ejemplo, "USD" si se trata de dólares estadounidenses). El formato del precio debe ser el costo seguido del código de divisa ISO, con un espacio entre el costo y la divisa.

Ejemplo: 199.00 EUR

price

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Precio total de la estadía en el hotel sobre la base de checkin_date y length_of_stay. El formato del precio debe ser el costo seguido del código de divisa ISO, con un espacio entre el costo y la divisa.

Ejemplo: 1393.00 USD

tax

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Tasa impositiva aplicable al precio. El formato del precio debe ser el costo seguido del código de divisa ISO, con un espacio entre el costo y la divisa.

Ejemplo: 14.00 USD

fees

Tipo: cadena

Obligatorio si se agrega información de las habitaciones del hotel.

Tarifas aplicables al precio. El formato del precio debe ser el costo seguido del código de divisa ISO, con un espacio entre el costo y la divisa.

Ejemplo: 253.00 USD

url

Tipo: cadena

Obligatorio.

Enlace al sitio externo en el que puedes reservar una habitación. También puedes especificar una URL en el nivel del anuncio mediante template_url_spec. Las URL del nivel del anuncio tienen prioridad sobre las URL de la lista.

Ejemplo: https://www.facebook.com/hotel

image[0].url

Tipo: objeto

Consulta los parámetros de objeto de imagen.

image[0].tag

Tipo: objeto

Consulta los parámetros de objeto de imagen.

brand

Tipo: cadena

Obligatorio.

Nombre de la marca de la cadena de hoteles.

Ejemplo: Hilton

address

Tipo: objeto

Consulta los parámetros de objetos de dirección.

neighborhood[0]

Tipo: cadena

Obligatorio.

Número máx. de comunidades permitidas: 20

Comunidad en la que está ubicado el hotel. Si hay más de una comunidad, agrega una columna para cada una, y usa la sintaxis de ruta JSON en cada nombre de columna para indicar el número de comunidades.

Ejemplo: Belle Haven

latitude

Tipo: flotante

Obligatorio.

Latitud del hotel.

Ejemplo: 37.484100

longitude

Tipo: flotante

Obligatorio.

Longitud del hotel.

Ejemplo: -122.148252

sale_price

Tipo: cadena

Opcional.

Precio de venta por noche de estadía en el hotel, sobre la base de checkin_date y length_of_stay. Úsalo cuando quieras anunciar descuentos sobre el precio normal del hotel. Asegúrate de agregar el tipo de divisa al precio (por ejemplo, USD para dólares estadounidenses). Verifica que el valor de sale_price de un hotel sea menor que el valor de base_price. El formato del precio debe ser el costo seguido del código de divisa ISO, con un espacio entre el costo y la divisa.

Ejemplo: 149.00 USD

guest_ratings.score

Tipo: objeto

Consulta los parámetros de objetos de calificación de huéspedes.

guest_ratings.rating_system

Tipo: objeto

Consulta los parámetros de objetos de calificación de huéspedes.

star_rating

Tipo: flotante

Consulta los parámetros de objetos de calificación de huéspedes.

loyalty_program

Tipo: cadena

Opcional.

Programa de fidelización que usas con el objetivo de obtener puntos para la estadía en el hotel.

Ejemplo: Premium program

margin_level

Tipo: entero

Opcional.

Indicador de rentabilidad del hotel, valor de 1 a 10.

Ejemplo: 9

phone

Tipo: cadena

Opcional.

Número de teléfono principal del hotel.

Ejemplo: +61 296027455

applink

Tipo: objeto

Opcional.

Enlace profundo que dirige a la página de detalles del hotel en tu app para celulares mediante App Links. Puedes especificar enlaces profundos en orden de prioridad, de mayor a menor:

  1. En el nivel del anuncio mediante template_url_spec.
  2. Aquí en la lista, mediante un objeto de App Links.
  3. Al agregar metaetiquetas de App Links a tu sitio web.

Obtén más información sobre los enlaces profundos del producto.

priority

Tipo: entero

Opcional.

Un indicador de la prioridad del hotel; valor de 0 (prioridad más baja) a 5 (prioridad más alta). Ejemplo: 5

category

Tipo: cadena

Opcional.

El tipo de propiedad. La categoría puede ser cualquier tipo de descripción interna. Ejemplo: Resort, Day Room

number_of_rooms

Tipo: entero

Opcional.

Número total de habitaciones/unidades en este listado de hoteles.

Ejemplo: 150

status

Tipo: cadena

Controla si un artículo está activo o archivado en tu catálogo. Las personas solo pueden ver los artículos activos en tus anuncios, tiendas o cualquier otro canal. Valores admitidos: active, archived. Los artículos aparecen activos de manera predeterminada. Más información sobre archivar artículos.


Ejemplo: 5287


Nota: Algunas plataformas asociadas, como Shopify, pueden sincronizar artículos en tu catálogo con un estado llamado preparación, que se comporta similar a archived.

Anteriormente, este campo se llamaba visibility. Si bien seguimos admitiendo el nombre de campo anterior, te recomendamos que uses el nuevo.

custom_label_0
custom_label_1
custom_label_2
custom_label_3
custom_label_4

Tipo: cadena

Límite máximo de caracteres: 100

Hasta cinco campos personalizados con cualquier información adicional en función de la cual quieras filtrar los artículos al crear conjuntos. Por ejemplo, puedes usar un campo personalizado para indicar todos los artículos que forman parte de las rebajas de verano y, luego, filtrar esos artículos en un conjunto. Este campo admite cualquier valor de texto, incluso números.


Ejemplo: Summer Sale

Este campo es compatible con las listas complementarias.

custom_number_0
custom_number_1
custom_number_2
custom_number_3
custom_number_4

Tipo: entero

Hasta cinco campos personalizados con cualquier información adicional relacionada con números que quieras usar para filtrar los artículos al crear conjuntos. Este campo te permite filtrar por intervalos de números (es mayor que y es menor que) cuando crees un conjunto. Por ejemplo, puedes usar este campo para indicar el año en que se inauguró un hotel y, luego, filtrar un rango de años en un conjunto.


Este campo admite números enteros entre 0 y 4294967295. No admite números negativos, números decimales ni puntos, como -2, 5,5 o 10.000.


Ejemplo: 2022

Parámetros de objetos de imagen


Nombre y tipo de campoDescripción

url

Tipo: cadena

Obligatorio.

Máximo de artículos: 20.

Enlace de URL a la imagen del artículo que aparecerá en los anuncios. Sigue estas especificaciones de imágenes:

  • Todas las imágenes deben estar en formato JPG, GIF o PNG.

  • Para anuncios por secuencias y anuncios de colección: las imágenes se muestran en formato cuadrado (1:1). El tamaño mínimo de la imagen es de 500 x 500 píxeles. Recomendamos 1024 x 1024 píxeles para obtener la mejor calidad.

  • Para anuncios de una sola imagen: las imágenes se muestran en la relación de aspecto 1.91:1. El tamaño mínimo de la imagen es de 500 x 500 píxeles. Recomendamos 1200 x 628 píxeles para obtener la mejor calidad.

  • Si tienes varias imágenes, agrega una columna para cada una y usa la sintaxis de ruta JSON en el nombre de cada columna para indicar el número de imágenes.

Ejemplo: image[0].url; image[1].url

Ejemplo: https://www.facebook.com/facebook_hotel.jpg

tag

Tipo: cadena

Opcional.

Etiqueta agregada a la imagen que muestra el contenido de la imagen. Puede haber varias etiquetas asociadas a una imagen.

Ejemplos: Fitness Center, Swimming Pool, suite

INSTAGRAM_STANDARD_PREFERRED: permite a los anunciantes etiquetar una imagen específica en su lista como la imagen predeterminada que se usará para Instagram. Esta etiqueta distingue mayúsculas de minúsculas.


Parámetros de objetos de dirección

Los campos anidados o con varios valores, como address, pueden representarse con valores con código JSON o con un conjunto de columnas de texto sin formato "aplanadas", etiquetadas con sintaxis de ruta JSON, como address.region. Es posible utilizar ambas convenciones indistintamente en el mismo archivo.


Nombre y tipo de campoDescripción

addr1 (address.addr1)

Tipo: objeto

Obligatorio.

Dirección postal principal del hotel.

Ejemplo: 1600 Pennsylvania Avenue

address.addr2

Tipo: objeto

Opcional.

Dirección postal secundaria del hotel.

Ejemplo: Apartment 1

address.addr3

Tipo: objeto

Opcional.

Dirección postal terciaria del hotel.

Ejemplo: Downstairs

address.city_id (city_id)

Tipo: cadena

Opcional.

Valor para usar en la URL del enlace profundo (template_url) del contenido del anuncio.

Ejemplo: 12345

address.city (city)

Tipo: cadena

Obligatorio.

Ciudad donde se ubica el hotel.

Ejemplo: New York

address.region (region)

Tipo: cadena

Obligatorio.

Estado, condado, provincia donde se ubica el hotel.

Ejemplo: California

address.country (country)

Tipo: cadena

Obligatorio.

Ciudad donde se ubica el hotel.

Ejemplo: United States

address.postal_code (postal_code)

Tipo: cadena

Obligatorio para los países que tienen un sistema de código postal.

Código postal del hotel.

Ejemplos: 94125, NW1 3FG

Parámetros de objetos de calificación de huéspedes.


Nombre y tipo de campoDescripción

guest_ratings.score (score)

Tipo: objeto

Opcional.

Número total de personas que opinaron sobre tu hotel. Si se especifica, también debes proporcionar score, max_score, number_of_reviewers y rating_system.

Ejemplo: 9.0/10

guest_ratings.number_of_reviewers (number_of_reviewers) tipo: entero

Opcional.

Número total de personas que calificaron este hotel.

Ejemplo: 5287

guest_ratings.rating_system (rating_system)

Tipo: cadena

Opcional.

Sistema que usas para las opiniones de los huéspedes.

Ejemplos: Expedia, TripAdvisor

max_score

Tipo: entero

Obligatorio.

Valor máximo para la puntuación de la calificación del hotel. Debe ser mayor o igual que 0, y menor o igual que 100.

Ejemplo: 10

API del hotel: crear y administrar hoteles de forma directa

Puedes usar la API de hoteles para agregar, editar y eliminar hoteles directamente en tu catálogo. Utiliza la referencia de la API de hoteles para obtener más información sobre cómo administrar hoteles mediante la API.

Las siguientes secciones solo te resultarán relevantes si quieres administrar tus catálogos mediante esta API.

Crear un catálogo de hoteles mediante la API

Un catálogo de hoteles es un contenedor para tu inventario de hoteles. Para usar la API de catálogos, asegúrate de tener el nivel de acceso de la API de marketing apropiado y de aceptar las Condiciones del servicio. Para ello, crea tu primer catálogo mediante el administrador comercial.

Para crear un catálogo de hoteles para anuncios de hoteles, configura vertical en hotels:

curl -X POST \
  -F 'name="Test Hotel Catalog"' \
  -F 'vertical="hotels"' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v10.0/BUSINESS_ID/owned_product_catalogs

Subir la lista de hoteles mediante la API

Una vez que hayas creado el catálogo, deberás subir tus listas de hoteles a Facebook. Usa la API para crear un objeto de lista por cada lista que quieras subir. Admitimos subidas directas y programadas.

Filtrar el catálogo de hoteles por conjuntos de hoteles

Documentos de referencia

Un conjunto de hoteles es un subconjunto de tu catálogo. Para configurar anuncios de hoteles, necesitas un conjunto de hoteles. Por lo tanto, necesitas crear al menos uno.

Los conjuntos de hoteles se definen mediante filtros que se aplican al catálogo de hoteles. Por ejemplo, puedes crear un conjunto de hoteles donde todos los hoteles tengan un filtro star_rating mayor que 3. Nota: También puedes crear un conjunto de hoteles sin filtros. En ese caso, el conjunto de hoteles incluirá todos los hoteles de tu catálogo.

Para crear un conjunto de hoteles que incluya todos los hoteles que contengan la "marca de muestra" mencionada en el campo brand, sigue estos pasos:

curl -X POST \ -F 'name="Test Hotel Set"' \ -F 'filter={ "brand": { "i_contains": "sample brand" } }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/<PRODUCT_CATALOG_ID>/product_sets
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const ProductCatalog = bizSdk.ProductCatalog; const ProductSet = bizSdk.ProductSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<PRODUCT_CATALOG_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 Hotel Set', 'filter' : {'brand':{'i_contains':'sample brand'}}, }; const product_sets = (new ProductCatalog(id)).createProductSet( fields, params ); logApiCallResult('product_sets api call complete.', product_sets);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\ProductCatalog; use FacebookAds\Object\ProductSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<PRODUCT_CATALOG_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Test Hotel Set', 'filter' => array('brand' => array('i_contains' => 'sample brand')), ); echo json_encode((new ProductCatalog($id))->createProductSet( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.productcatalog import ProductCatalog from facebook_business.adobjects.productset import ProductSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PRODUCT_CATALOG_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Test Hotel Set', 'filter': {'brand':{'i_contains':'sample brand'}}, } print ProductCatalog(id).create_product_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 = \"<PRODUCT_CATALOG_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new ProductCatalog(id, context).createProductSet() .setName(\"Test Hotel Set\") .setFilter(\"{\\"brand\\":{\\"i_contains\\":\\"sample brand\\"}}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PRODUCT_CATALOG_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end product_catalog = FacebookAds::ProductCatalog.get(id) product_sets = product_catalog.product_sets.create({ name: 'Test Hotel Set', filter: {'brand':{'i_contains':'sample brand'}}, })

El parámetro filter se compone de los siguientes operadores y datos:

OperadoresTipo de filtro

i_contains

Contiene una subcadena. El operador distingue mayúsculas de minúsculas.

i_not_contains

No contiene una subcadena. El operador distingue mayúsculas de minúsculas.

i_contains

Contiene una subcadena. El operador distingue mayúsculas de minúsculas.

not_contains

No contiene una subcadena. El operador distingue mayúsculas de minúsculas.

eq

Igual a. El operador distingue mayúsculas de minúsculas.

neq

No es igual a. El operador distingue mayúsculas de minúsculas.

lt

Menor que. Solo para campos numéricos.

lte

Menor o igual que. Solo para campos numéricos.

gt

Mayor que. Solo para campos numéricos.

gte

Mayor o igual que. Solo para campos numéricos.

DatosDatos que se filtran

hotel_id

Identificador único del hotel dentro del catálogo.

brand

Marca de la cadena de hoteles.

base_price_amount

Precio base por noche en el hotel. El precio está expresado en centavos (4999 representa $49,99).

sale_price_amount

Precio de oferta por noche en el hotel. El precio está expresado en centavos (4.999 representa 49,99 USD).

currency

Divisa

city

Ciudad donde se ubica el hotel.

country

País del hotel.

name

Nombre más habitual del hotel.

star_rating

Calificación con estrellas del hotel. Los valores válidos van de 1 a 5 y deben ser múltiplos de 0,5.