Publicités pour les hôtels - Catalogues et fil

Pour promouvoir vos offres d’hôtels sur Facebook, vous devez partager les informations concernant vos hôtels avec Facebook. Pour ce faire, vous devez créer un catalogue d’hôtels, puis le remplir avec des hôtels. Il existe deux méthodes pour remplir votre catalogue et le mettre à jour :

Vous pouvez créer et gérer vos catalogues d’hôtels dans votre Gestionnaire des ventes.

Pour utiliser l’API à des fins de gestion de votre catalogue :

  1. Créez un catalogue d’hôtels
  2. Créez des ensembles de produits à partir de votre catalogue d’hôtels
  3. Associez le catalogue à vos sources d’évènements

Fils d’hôtels - Importer vos hôtels sur Facebook

Un fil d’hôtels est un fichier contenant vos offres d’hôtels. Chaque ligne ou élément du fichier représente un hôtel unique. Vous pouvez utiliser un ou plusieurs fils d’hôtels, tant que tous les fils réunis contiennent l’ensemble de vos offres d’hôtels.

Formats de fils d’hôtels pris en charge

CSV

Exemple de fichier CSV | Exemple de fichier TSV (simplifié) | Exemple de fichier TSV (style JSON)

  • La première ligne doit énumérer les noms des champs choisis dans l’ordre où les valeurs sont données. Les lignes suivantes fournissent ensuite les valeurs correspondantes pour chaque hôtel.
  • Les champs contenant des espaces ou des virgules doivent être placés entre "guillemets".
  • Les champs imbriqués ou à valeurs multiples, tels que address, neighborhood ou image, peuvent être représentés à l’aide de valeurs encodées au format JSON ou par un ensemble de colonnes en texte brut « simplifié » désignées par une syntaxe au format de chemin JSON, notamment address.city, neighborhood[0], image[0].url, image[0].tag[0], image[0].tag[1]. Les deux conventions peuvent être utilisées de manière interchangeable dans le même fichier.

XML

Exemple de fichier XML

  • Un nœud XML racine <listings> renferme un ensemble de nœuds <listing>, dont chacun représente un hôtel.
  • Le fichier doit commencer par un tag de déclaration <?xml valide.

L’analyseur de fil détecte automatiquement les encodages de texte UTF8, UTF16 ou UTF32 et il est défini sur LATIN1 par défaut s’il rencontre une séquence d’octets inattendue. Vous pouvez fournir du texte dans n’importe quelle langue dans les valeurs de champ. Toutefois, les noms de champs doivent être attribués exactement comme suit, en anglais.

Champs pris en charge — Publicités pour les hôtels

Les champs pris en charge mentionnés ci-dessous se rapportent aux éléments que vous ajoutez dans votre catalogue produits.

S’il s’agit de catalogues localisés, consultez les champs pris en charge pour les publicités pour les hôtels.

Champ et typeDescription

hotel_id

type : chaîne

Obligatoire.

Longueur max. : 100

Votre identifiant unique pour l’hôtel dans le catalogue. Nous ferons correspondre cet ID aux content_ids fournis dans l’application de votre hotel et les évènements de votre pixel. Conseil : Pour de meilleures performances, n’employez pas d’espace dans le champ de cet identifiant unique. N’utilisez pas d’ID en double.

Exemple : FB_hotel_1234

room_id

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

ID unique du type de chambre d’hôtel. Nombre max. de caractères : 100 Exemple : FB_hotel_room_1234

name

type : chaîne

Obligatoire.

Nom le plus communément attribué à l’hôtel.

Exemple : Facebook Hotel

description

type : chaîne

Obligatoire.

Taille max. : 5 000

Brève description de l’hôtel.

Exemple : Only 30 minutes away from San Francisco.

checkin_date

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Date de début du séjour à l’hôtel. Vous pouvez ajouter jusqu’à 180 jours à compter de la date d’importation du fil. Utilise la norme ISO-8601 (YYYY-MM-DD).

Exemple : 2017-08-01

length_of_stay

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Nombre de nuitées lors du séjour à l’hôtel.

Exemple : 7

base_price

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Prix de base de la chambre d’hôtel par nuitée. N’oubliez pas d’ajouter le type de devise au prix (par exemple, USD pour les dollars américains). Le format du prix doit être le suivant : coût suivi du code de devise ISO, avec un espace entre les deux.

Exemple : 199.00 EUR

price

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Prix total du séjour à l’hôtel en fonction de la checkin_date et de la length_of_stay. Le format du prix doit être le suivant : coût, suivi du code de devise ISO, avec un espace entre les deux.

Exemple : 1393.00 USD

tax

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Taux de taxe applicable au prix. Le format du prix doit être le suivant : coût, suivi du code de devise ISO, avec un espace entre les deux.

Exemple : 14.00 USD

fees

type : chaîne

Obligatoire si des informations sur la chambre d’hôtel sont ajoutées.

Frais applicables au prix. Le format du prix doit être le suivant : coût, suivi du code de devise ISO, avec un espace entre les deux.

Exemple : 253.00 USD

url

type : chaîne

Obligatoire.

Lien vers le site externe sur lequel vous pouvez réserver une chambre d’hôtel. Vous pouvez également indiquer une URL au niveau des publicités avec la template_url_spec. Les URL au niveau des publicités prévalent sur les URL du fil.

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

image[0].url

type : objet

Consultez la section Paramètres de l’objet image.

image[0].tag

type : objet

Consultez la section Paramètres de l’objet image.

brand

type : chaîne

Obligatoire.

Nom de marque de la chaîne hôtelière.

Exemple : Hilton

address

type : objet

Consultez Paramètres de l’objet image.

neighborhood[0]

type : chaîne

Obligatoire.

Nombre de quartiers max. autorisés : 20

Quartier dans lequel se trouve l’hôtel. S’il existe plusieurs quartiers, ajoutez une colonne pour chacun d’eux et utilisez la syntaxe de chemin d’accès JSON dans le nom de chaque colonne pour indiquer le nombre de quartiers.

Exemple : Belle Haven

latitude

type : virgule flottante

Obligatoire.

Latitude de l’hôtel.

Exemple : 37.484100

longitude

type : virgule flottante

Obligatoire.

Longitude de l’hôtel.

Exemple : -122.148252

sale_price

type : chaîne

Facultatif.

Prix de vente par nuitée du séjour à l’hôtel en fonction de la checkin_date et de la length_of_stay. Lorsque vous souhaitez promouvoir des remises sur le prix standard proposé par l’hôtel. N’oubliez pas d’ajouter le type de devise au prix (par exemple, USD pour les dollars américains). Vérifiez que le sale_price d’un hôtel est inférieur à son base_price. Le format du prix doit être le suivant : coût suivi du code de devise ISO, avec un espace entre les deux.

Exemple : 149.00 USD

guest_ratings.score

type : objet

Consultez la section Paramètres de l’objet d’évaluation client.

guest_ratings.rating_system

type : objet

Consultez la section Paramètres de l’objet d’évaluation client.

star_rating

type : virgule flottante

Consultez la section Paramètres de l’objet d’évaluation client.

loyalty_program

type : chaîne

Facultatif.

Programme de fidélité utilisé pour gagner des points lors d’un séjour à l’hôtel.

Exemple : Premium program

margin_level

type : nombre entier

Facultatif.

Indicateur de rentabilité de l’hôtel ; valeur comprise entre 1 et 10.

Exemple : 9

phone

type : chaîne

Facultatif.

Numéro de téléphone principal de l’hôtel.

Exemple : +61 296027455

applink

type : objet

Facultatif.

Ajoutez un lien profond direct vers la page de détails de l’hôtel dans votre app mobile à l’aide des App Links. Vous pouvez préciser des liens profonds dans l’ordre de prévalence, du plus élevé au plus bas :

  1. Au niveau des publicités avec la template_url_spec
  2. Dans le fil avec un objet Applink
  3. En ajoutant des tags méta App Link sur votre site web.

En savoir plus sur les liens profonds vers des produits.

priority

type : nombre entier

Facultatif.

Indicateur de priorité de l’hôtel ; valeur comprise entre 0 (priorité la plus faible) et 5 (priorité la plus élevée). Exemple : 5

category

type : chaîne

Facultatif.

Type de propriété. La catégorie peut désigner tout type de description interne souhaitée. Exemple : Resort, Day Room

number_of_rooms

type : nombre entier

Facultatif.

Nombre total de chambres/unités dans cette annonce d’hôtel.

Exemple : 150

status

type : chaîne

Détermine si un article est actif ou archivé dans votre catalogue. Seuls les articles actifs peuvent être vus par les internautes dans vos publicités, vos boutiques ou tout autre moyen de communication. Valeurs prises en charge : active, archived. Les articles sont actifs par défaut. En savoir plus sur l’archivage d’articles.


Exemple : active


Remarque : certaines plateformes partenaires comme Shopify peuvent synchroniser des articles dans votre catalogue avec le statut staging, qui est équivalent au statut archived.

Ce champ était auparavant appelé visibility. Même si l’ancien nom du champ est encore pris en charge, nous vous recommandons d’utiliser le nouveau nom.

custom_label_0
custom_label_1
custom_label_2
custom_label_3
custom_label_4

type : chaîne

Nombre maximal de caractères : 100

Jusqu’à cinq champs personnalisés pour toute information supplémentaire que vous souhaitez utiliser pour filtrer des articles quand vous créez des ensembles. Par exemple, vous pouvez utiliser un champ personnalisé pour indiquer tous les salons qui bénéficient des promotions estivales, puis intégrer ces articles dans un ensemble. Ce champ peut contenir n’importe quelle valeur de texte, y compris des chiffres.


Exemple : Summer Sale

Ce champ est pris en charge par des flux de produits supplémentaires.

custom_number_0
custom_number_1
custom_number_2
custom_number_3
custom_number_4

type : nombre entier

Jusqu’à cinq champs personnalisés pour toute information numérique supplémentaire que vous souhaitez utiliser pour filtrer des articles quand vous créez des ensembles. Ce champ permet de filtrer par plages de nombres (supérieur à et inférieur à) lorsque vous créez un ensemble. Par exemple, vous pouvez indiquer l’année d’ouverture d’un hôtel, puis filtrer sur un intervalle d’années dans un ensemble.


Ce champ peut contenir des nombres entiers compris entre 0 et 4 294 967 295. Les nombres négatifs, les nombres décimaux ou les virgules, comme -2, 5,5 ou 10,000, ne sont pas acceptés.


Exemple : 2022

Paramètres de l’objet image


Nom du champ et typeDescription

url

type : chaîne

Obligatoire.

Éléments max. : 20.

Lien URL vers l’image de l’élément qui apparaîtra dans vos publicités. Suivez ces spécifications pour les images :

  • Toutes les images doivent être au format JPG, GIF ou PNG.

  • Pour les publicités carrousel et collection : les images s’affichent au format carré (1:1). La taille d’image minimale est de 500 x 500 pixels. Nous recommandons 1 024 × 1 024 pixels pour une qualité optimale.

  • Pour les publicités à image unique : les images s’affichent selon les proportions 1.91:1. La taille d’image minimale est de 500 × 500 pixels. Nous recommandons 1 200 × 628 pixels pour une qualité optimale.

  • Si vous avez plusieurs images, ajoutez des colonnes supplémentaires pour chacune d’entre elles et utilisez la syntaxe au format de chemin JSON dans chaque nom de colonne pour indiquer le nombre d’images.

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

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

tag

type : chaîne

Facultatif.

Tag ajouté à l’image qui montre ce qu’il y a dans l’image. Plusieurs tags peuvent être associés à une image.

Exemples : Fitness Center, Swimming Pool, suite

INSTAGRAM_STANDARD_PREFERRED - Permet aux annonceurs de marquer une image spécifique dans leur fil comme image par défaut à utiliser pour Instagram. Ce tag est sensible à la casse.


Paramètres de l’objet adresse

Les champs imbriqués ou à valeurs multiples, tels que address, peuvent être représentés à l’aide de valeurs encodées au format JSON ou par un ensemble de colonnes en texte brut "simplifié" désignées au moyen de la syntaxe d’un chemin d’accès JSON par exemple, address.region. Les deux conventions peuvent être utilisées de manière interchangeable dans le même fichier.


Nom du champ et typeDescription

addr1 (address.addr1)

type : objet

Obligatoire.

Adresse postale principale de l’hôtel.

Exemple : 1600 Pennsylvania Avenue

address.addr2

type : objet

Facultatif.

Deuxième adresse postale de l’hôtel.

Exemple : Apartment 1

address.addr3

type : objet

Facultatif.

Troisième adresse postale de l’hôtel.

Exemple : Downstairs

address.city_id (city_id)

type : chaîne

Facultatif.

Valeur à utiliser dans l’URL du lien profond (template_url) dans le contenu publicitaire.

Exemple : 12345

address.city (city)

type : chaîne

Obligatoire.

Ville dans laquelle se trouve l’hôtel.

Exemple : New York

address.region (region)

type : chaîne

Obligatoire.

État, département ou province dans lequel se trouve l’hôtel.

Exemple : California

address.country (country)

type : chaîne

Obligatoire.

Pays dans lequel se trouve l’hôtel.

Exemple : United States

address.postal_code (postal_code)

type : chaîne

Obligatoire pour les pays ayant un système de code postal.

Code postal de l’hôtel.

Exemples : 94125, NW1 3FG

Paramètres de l’objet d’évaluation client


Nom du champ et typeDescription

guest_ratings.score (score)

type : objet

Facultatif.

Nombre total de personnes qui ont évalué votre hôtel. Si elles sont indiquées, vous devez également fournir les informations score, max_score, number_of_reviewers et rating_system.

Exemple : 9.0/10

guest_ratings.number_of_reviewers (number_of_reviewers) type : nombre entier

Facultatif.

Nombre total de personnes qui ont noté cet hôtel.

Exemple : 5287

guest_ratings.rating_system (rating_system)

type : chaîne

Facultatif.

Système utilisé pour les évaluations des clients.

Exemples : Expedia, TripAdvisor

max_score

type : nombre entier

Obligatoire.

Valeur maximale de l’indice d’appréciation de l’hôtel. Doit être supérieure ou égale à 0 et inférieure ou égale à 100.

Exemple : 10

API Hotel - Créer et gérer vos hôtels directement

L’API Hotel vous permet d’ajouter, de modifier et de supprimer directement des hôtels dans votre catalogue. Utilisez la documentation de référence de l’API Hotel pour savoir comment gérer les hôtels à l’aide de l’API.

Les sections suivantes ne sont pertinentes que si vous gérez vos catalogues à l’aide de cette API.

Créer un catalogue d’hôtels à l’aide de l’API

Un catalogue d’hôtels est un contenant pour vos offres d’hôtels. Pour utiliser l’API Catalog, vérifiez que vous disposez du niveau d’accès adéquat à l’API Marketing et que vous avez accepté les conditions de service en créant votre premier catalogue à l’aide de Business Manager.

Pour créer un catalogue d’hôtels pour vos publicités pour les hôtels, définissez vertical sur 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

Importer vos fils d’hôtels via l’API

Une fois que vous avez créé le catalogue, vous devez importer votre ou vos fils d’hôtels sur Facebook. Utilisez l’API pour créer un objet de flux pour chaque flux de produits que vous souhaitez importer. Nous prenons en charge les importations planifiées et directes.

Filtrer le catalogue d’hôtels pour afficher les ensembles d’hôtels

Un ensemble d’hôtels est un sous-ensemble de votre catalogue. Pour configurer des publicités pour les hôtels, vous devez disposer d’un ensemble d’hôtels. Vous devez donc tout d’abord en créer un :

Les ensembles d’hôtels sont définis par des filtres appliqués au catalogue d’hôtels. Par exemple, vous pouvez créer un ensemble d’hôtels avec tous les hôtels ayant une star_rating supérieure à 3. Remarque : Vous pouvez également créer un ensemble d’hôtels sans aucun filtre. Dans ce cas, l’ensemble d’hôtels contiendra tous les hôtels de votre catalogue.

Pour créer un ensemble d’hôtels contenant tous les hôtels ayant la mention « sample brand » dans le champ brand :

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'}}, })

Le paramètre filter est composé des opérateurs et données suivants :

OpérateursLe type de filtre

i_contains

Contient une sous-chaîne. L’opérateur n’est pas sensible à la casse.

i_not_contains

Ne contient pas de sous-chaîne. L’opérateur n’est pas sensible à la casse.

contains

Contient une sous-chaîne. L’opérateur n’est pas sensible à la casse.

not_contains

Ne contient pas de sous-chaîne. L’opérateur n’est pas sensible à la casse.

eq

Égal à. L’opérateur n’est pas sensible à la casse.

neq

Non égal à. L’opérateur n’est pas sensible à la casse.

lt

Inférieur à. Pour les champs numériques uniquement.

lte

Inférieur ou égal à. Pour les champs numériques uniquement.

gt

Supérieur à. Pour les champs numériques uniquement.

gte

Supérieur ou égal à. Pour les champs numériques uniquement.

DonnéesDonnées filtrées.

hotel_id

Votre identifiant unique pour l’hôtel dans le catalogue.

brand

La marque de la chaîne hôtelière.

base_price_amount

Prix de base de la nuitée pour cet hôtel. Le prix est indiqué en cents (par exemple, 4999 signifie 49,99 $).

sale_price_amount

Prix de vente par nuitée pour cet hôtel. Le prix est indiqué en cents (par exemple, 4999 signifie 49,99 $).

currency

Devise

city

Ville dans laquelle se trouve l’hôtel.

country

Pays dans lequel se trouve l’hôtel.

name

Le nom le plus communément attribué à l’hôtel.

star_rating

Appréciation étoilée de l’hôtel. Les valeurs valides sont comprises entre 1 et 5 et doivent être des multiples de 0,5.