ホテル広告 - カタログとフィード

Facebookでホテルインベントリーを宣伝するには、ホテルの情報をFacebookに提供する必要があります。提供するには、ホテルカタログを作成し、ホテルを入力します。カタログの情報を設定したり更新したりする方法として、次の2種類があります。

ホテルカタログは、コマースマネージャで作成、管理できます。

APIを使用してカタログを管理するには、次のようにします。

  1. ホテルカタログを作成する
  2. ホテルカタログから製品セットを作成する
  3. カタログとイベントソースを関連付ける

ホテルフィード - ホテルをFacebookにアップロードする

ホテルフィードとは、ホテルインベントリーを持つファイルです。ファイル内のラインまたはアイテムはそれぞれ、1つのホテルを表しています。すべてのフィードを合わせるとすべてのホテルインベントリーが格納される場合に限り、1つ以上のホテルフィードを使用できます。

サポートされているホテルフィード形式

CSV

CSVサンプル | TSVサンプル(フラット) | TSVサンプル(JSONスタイル)

  • 先頭行には、選択したフィールドの名前を値の入力順に記述します。その後の行では、各ホテルの対応する値が提供されます。
  • 空白やコンマを含むフィールドは二重引用符("")で囲む必要があります。
  • ネストされたフィールドや複数値フィールド(addressneighborhoodimageなど)は、JSONエンコードされた値か、JSONパス構文を使用してラベリングされた「フラット」なプレーンテキスト列を使用して表されます(address.cityneighborhood[0]image[0].urlimage[0].tag[0]image[0].tag[1]など)。両方の表現方法を同じファイルで同時に使用できます。

XML

XMLサンプル

  • ルート<listings> XMLノードで囲まれる一連の<listing>ノードの1つ1つが、それぞれ1つのホテルを表します。
  • ファイルの先頭に、有効な<?xml宣言タグを置く必要があります。

フィード分析ツールは、テキストエンコーディングのUTF8UTF16UTF32を自動検出し、予期せぬバイトシーケンスが発生した場合、デフォルトのLATIN1にします。フィールド値には任意の言語でテキストを提供できますが、フィールド名は英語で、以下のものをそのまま使用する必要があります。

対応フィールド — ホテルの広告

以下に示す対応フィールドは、商品カタログに追加するアイテムを対象として設計されています。

カタログのローカライゼーションについては、ホテル広告で利用できるフィールドをご覧ください。

フィールドと型説明

hotel_id

型: 文字列

必須

最大長: 100

カタログ内で各ホテルを区別するための固有の識別情報です。このIDは、hotelアプリやピクセルイベントで指定されるcontent_idsと照合されます。ヒント: パフォーマンスを改善するために、このユニークIDフィールドにはスペースを使用しないでください。重複したIDは使用しないでください。

例: FB_hotel_1234

room_id

型: 文字列

ホテルの客室情報を追加する場合は必須

ホテルの客室タイプに固有IDを入力します。最大文字数: 100 : FB_hotel_room_1234

name

型: 文字列

必須

最も一般的なホテルの呼称。

例: Facebook Hotel

description

型: 文字列

必須

最大サイズ: 5000

ホテルについての簡潔な説明。

例: Only 30 minutes away from San Francisco.

checkin_date

型: 文字列

ホテルの客室情報を追加する場合は必須

ホテル滞在のためのチェックイン日付。フィードがアップロードされた日から最大180日分を追加できます。ISO-8601標準規格(YYYY-MM-DD)を使用。

例: 2017-08-01

length_of_stay

型: 文字列

ホテルの客室情報を追加する場合は必須

ホテル滞在の泊数。

例: 7

base_price

型: 文字列

ホテルの客室情報を追加する場合は必須

ホテル客室1泊当たりの基本料金。料金には必ず通貨の種類を指定してください(例: 米国ドルの場合USD)。価格のフォーマットは、金額の後にスペースを1個空けてISO通貨コードを指定します。

例: 199.00 EUR

price

型: 文字列

ホテルの客室情報を追加する場合は必須

checkin_datelength_of_stayに基づくホテル滞在の合計料金。価格のフォーマットは、金額の後にスペースを1個空けてISO通貨コードを指定します。

例: 1393.00 USD

tax

型: 文字列

ホテルの客室情報を追加する場合は必須

料金に適用される税率。価格のフォーマットは、金額の後にスペースを1個空けてISO通貨コードを指定します。

例: 14.00 USD

fees

型: 文字列

ホテルの客室情報を追加する場合は必須

価格に適用される手数料。価格のフォーマットは、金額の後にスペースを1個空けてISO通貨コードを指定します。

例: 253.00 USD

url

型: 文字列

必須

ホテルの部屋を予約できる外部サイトへのリンク。URLは、template_url_specを使用することにより、広告レベルでも指定できます。広告レベルのURLのほうが、フィードのURLよりも優先されます。

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

image[0].url

型: オブジェクト

画像オブジェクトのパラメーターをご覧ください。

image[0].tag

型: オブジェクト

画像オブジェクトのパラメーターをご覧ください。

brand

型: 文字列

必須

ホテルチェーンのブランド名。

例: Hilton

address

型: オブジェクト

住所オブジェクトのパラメーターをご覧ください。

neighborhood[0]

型: 文字列

必須

地域の最大数: 20

ホテル所在地の地域。地域が複数ある場合は、地域ごとにカラムを追加し、各カラム名にJSONパス構文を使用して、地域の数を指定します。

例: Belle Haven

latitude

型: 浮動小数

必須

ホテル所在地の緯度。

例: 37.484100

longitude

型: 浮動小数

必須

ホテル所在地の経度。

例: -122.148252

sale_price

型: 文字列

任意

checkin_datelength_of_stayに基づく、ホテル滞在一泊の販売価格。これは、ホテルの通常価格からの割引について宣伝する場合に使用します。価格には必ず通貨の種類を指定してください(例えば、米ドルの場合USD)。ホテルのsale_priceがそのホテルのbase_priceより低いことを確認してください。価格のフォーマットは、金額の後にスペースを1個空けてISO通貨コードを指定します。

例: 149.00 USD

guest_ratings.score

型: オブジェクト

ゲスト評価オブジェクトのパラメーターをご覧ください。

guest_ratings.rating_system

型: オブジェクト

ゲスト評価オブジェクトのパラメーターをご覧ください。

star_rating

型: 浮動小数

ゲスト評価オブジェクトのパラメーターをご覧ください。

loyalty_program

型: 文字列

任意

ホテル滞在によるポイント獲得のために使用するロイヤルティプログラム。

例: Premium program

margin_level

型: 整数

任意

ホテルの収益性を示す指標。値の範囲は1から10まで。

例: 9

phone

型: 文字列

任意

ホテルのメイン電話番号。

例: +61 296027455

applink

型: オブジェクト

任意

App Linksを使用して、モバイルアプリ内のホテルの詳細ページに直接遷移するディープリンク。次のようにディープリンクを指定できます(優先順位の高い順)。

  1. template_url_specを使用して、広告レベルで指定
  2. アプリリンクオブジェクトを使用して、このフィードで指定する
  3. アプリリンクのメタタグをウェブサイトに追加して指定。

製品ディープリンクについて、詳細をご確認ください。

priority

型: 整数

任意

ホテルの優先度の指標。値は0(優先度最低)から5(優先度最高)まで。例: 5

category

型: 文字列

任意

プロパティのタイプ。カテゴリとしては内部説明の任意のタイプが可能です。例: ResortDay Room

number_of_rooms

型: 整数

任意

このホテルリストに含まれるルーム/ユニットの合計数。

例: 150

status

型: 文字列

カタログのアイテムがアクティブなのかアーカイブ済みなのかを制御します。アクティブなアイテムだけが、広告、ショップ、その他のチャネルで表示されます。使用できる値: activearchived。アイテムは、デフォルトではactiveになっています。詳しくは、アイテムのアーカイブをご覧ください。


例: active


: Shopifyなど一部のパートナープラットフォームでは、stagingというステータスを使用して、アイテムをカタログに同期することがあります。これは、archivedと同じ動作です。

以前、このフィールドはvisibilityと呼ばれていました。このフィールド名もまだ使えますが、新しい名前の使用をおすすめします。

custom_label_0
custom_label_1
custom_label_2
custom_label_3
custom_label_4

型: 文字列

最大文字数:100

セットを作成するときにアイテムを絞り込む条件に指定する追加情報用のカスタムフィールド(最大5つ)です。例えば、カスタムフィールドを使用して、夏のセールで扱う全客室を指定してから、セットに絞り込むことができます。このフィールドは、数字を含むすべてのテキスト値をサポートします。


例: Summer Sale

このフィールドは補足フィードでサポートされています。

custom_number_0
custom_number_1
custom_number_2
custom_number_3
custom_number_4

型: 整数

追加の数字関連の情報用のカスタムフィールド(最大5つ)です。セットを作成する場合にアイテムを絞り込む条件として利用します。このフィールドを使って、セットを作成するときに数字の範囲(次より大きいおよび次より小さい)を指定して絞り込むことができます。例えば、このフィールドを使ってホテルが営業を開始した年を示し、特定の年範囲にセットを絞り込むことができます。


このフィールドには、0~4294967295の整数を入力できます。-2、5.5、10,000など、負の数、小数、コンマは使用できません。


例: 2022

画像オブジェクトのパラメーター


フィールド名と型説明

url

型: 文字列

必須

最大アイテム数: 20。

広告に表示するアイテムの画像へのURLリンク。下記の画像仕様に従ってください。

  • すべての画像は、JPG、GIF、PNGのいずれかの形式でなければなりません。

  • カルーセル広告とコレクション広告の場合: 画像は、正方形(1:1)フォーマットで表示されます。最小の画像サイズは500x500ピクセルです。最高の画質で表示するには、1024 x 1024ピクセルをおすすめします。

  • シングル画像広告: 画像は1.91:1のアスペクト比で表示されます。最小の画像サイズは500 x 500ピクセルです。最高の画質で表示するには、1200 x 628ピクセルをおすすめします。

  • 複数の画像がある場合、それぞれにカラムを追加し、各カラム名にはJSONパス構文を使用して、その数の画像を指定します。

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

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

tag

型: 文字列

任意

画像の内容を示すために画像に付加されるタグ。1枚の画像に複数のタグを付けることもできます。

例: Fitness Center, Swimming Pool, suite

INSTAGRAM_STANDARD_PREFERRED - 広告主が、それぞれのフィード内の特定の画像に、それがInstagram用に使用するデフォルトの画像であることを示すタグを付けられるようにします。このタグは大文字/小文字が区別されます。


住所オブジェクトのパラメーター

addressなどのネストされたフィールドや複数値フィールドは、JSONエンコード値、またはJSONパス構文を使ってラベリングされた「フラット」なプレーンテキスト列を使用して表されます(例: address.region)。両方の表現方法を同じファイルで同時に使用できます。


フィールド名と型説明

addr1 (address.addr1)

型: オブジェクト

必須

ホテルの住所の主要部分。

例: 1600 Pennsylvania Avenue

address.addr2

型: オブジェクト

任意

ホテルの住所の2番目の部分。

例: Apartment 1

address.addr3

型: オブジェクト

任意

ホテルの住所の3番目の部分。

例: Downstairs

address.city_id (city_id)

型: 文字列

任意

広告クリエイティブのディープリンクURL(template_url)に使用する値。

例: 12345

address.city (city)

型: 文字列

必須

ホテルの所在地の市区町村。

例: New York

address.region (region)

型: 文字列

必須

ホテルの所在地の都道府県、州、郡、地域。

例: California

address.country (country)

型: 文字列

必須

ホテルの所在地の国。

例: United States

address.postal_code (postal_code)

型: 文字列

郵便番号のシステムがある国の場合、必須

ホテルの所在地の郵便番号。

例: 94125, NW1 3FG

ゲスト評価オブジェクトのパラメーター


フィールド名と型説明

guest_ratings.score (score)

型: オブジェクト

任意

ホテルのレビューをした人の合計数。これを指定した場合、scoremax_scorenumber_of_reviewers、およびrating_systemも指定する必要があります。

例: 9.0/10

guest_ratings.number_of_reviewers (number_of_reviewers) 型: 整数

任意

このホテルを評価した人の合計数。

例: 5287

guest_ratings.rating_system (rating_system)

型: 文字列

任意

ゲストレビューアーのために使用するシステム。

例: ExpediaTripAdvisor

max_score

型: 整数

必須

ホテルの評価スコアの最大値です。0以上100以下でなければなりません。

例: 10

ホテルAPI - ホテルの作成/管理を直接実行する

ホテルAPIを使用することにより、カタログ内のホテルを直接追加、編集、削除できます。APIを使用してホテルを管理する方法について詳しくは、ホテルAPIリファレンスをご覧ください。

以下のセクションは、このAPIを使用してカタログを管理する場合のみ、使用します。

APIを使用してホテルカタログを作成する

ホテルカタログはホテルインベントリーのコンテナです。カタログAPIを使用するには、適切なマーケティングAPIアクセスレベルを持っていること、およびビジネスマネージャで最初のカタログを作成することにより利用規約に同意していることを確認してください。

ホテル広告用のホテルカタログを作成するには、verticalhotelsに設定します。

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

APIでホテルフィードをアップロードする

カタログを作成したら、次はホテルフィードをFacebookにアップロードする必要があります。APIを使用して、アップロードする各フィードのフィードオブジェクトを作成します。Metaでは、日付を指定したアップロードと直接アップロードをサポートしています。

ホテルカタログを絞り込んでホテルセットを作成する

参考ドキュメント

ホテルセットはカタログのサブセットです。ホテルの広告を設定するには、ホテルセットが必要です。そのため、少なくとも1つのホテルセットを作成する必要があります。

ホテルセットは、ホテルカタログに適用されるフィルターで定義します。例えば、star_ratingが3より大きいすべてのホテルを含むホテルセットを作成できます。: フィルターを使用せずにホテルセットを作成することもできます。この場合、ホテルセットにはカタログ内のすべてのホテルが含まれます。

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

filterパラメーターは、次の演算子とデータで構成されます。

演算子フィルターのタイプ

i_contains

サブ文字列を含む。大文字と小文字を区別しない。

i_not_contains

サブ文字列を含まない。大文字と小文字を区別しない。

contains

サブ文字列を含む。大文字と小文字を区別しない。

not_contains

サブ文字列を含まない。大文字と小文字を区別しない。

eq

次に等しい。大文字と小文字を区別しない。

neq

次と等しくない。大文字と小文字を区別しない。

lt

次より小さい。数値フィールドのみ。

lte

次以下。数値フィールドのみ。

gt

次より大きい。数値フィールドのみ。

gte

次以上。数値フィールドのみ。

データフィルター処理されるデータ。

hotel_id

カタログ内で各ホテルを区別するための固有の識別情報です。

brand

ホテルチェーンのブランド名です。

base_price_amount

このホテルの1泊の基準価格。価格の単位はセントです(4,999は$49.99です)。

sale_price_amount

このホテルの1泊の販売価格です。価格の単位はセントです(4,999は$49.99です)。

currency

通貨

city

ホテルが所在する市区町村です。

country

ホテルが所在する国です。

name

各ホテルに通常使用される名前です。

star_rating

ホテルのスター評価です。有効値は1~5で、0.5の倍数である必要があります。