호텔 광고 - 카탈로그 및 피드

Facebook에서 호텔 인벤토리를 홍보하려면 Facebook과 호텔에 관한 정보를 공유해야 합니다. 호텔 카탈로그를 만든 다음 호텔로 채우면 됩니다. 카탈로그를 채우고 업데이트하는 방법은 두 가지가 있습니다.

커머스 관리자에서 호텔 카탈로그를 만들고 관리할 수 있습니다.

API로 카탈로그를 관리하는 방법은 다음과 같습니다.

  1. 호텔 카탈로그를 만듭니다.
  2. 호텔 카탈로그에서 제품 세트를 만듭니다.
  3. 카탈로그를 이벤트 소스에 연결합니다.

호텔 피드 - Facebook에 호텔 업로드

호텔 피드는 호텔 인벤토리가 포함된 파일입니다. 파일의 모든 행 또는 항목이 단일 호텔을 나타냅니다. 전체 호텔 인벤토리가 피드에 포함되면 호텔 피드를 하나 이상 사용할 수 있습니다.

지원되는 호텔 피드 형식

CSV

CSV 샘플 | TSV 샘플(일반) | TSV 샘플(JSON 스타일)

  • 첫 번째 행에는 값이 제공되는 순서에 따라 선택된 필드 이름이 나열되어야 합니다. 그다음 행에서는 호텔별로 해당하는 값을 제공합니다.
  • 공백이나 쉼표가 포함된 필드는 "큰따옴표"로 묶어야 합니다.
  • 중첩 또는 다중값 필드(예: address, neighborhood 또는 image)는 JSON 인코딩된 값을 사용하거나 address.city, neighborhood[0], image[0].url, image[0].tag[0], image[0].tag[1] 등의 JSON 경로 구문을 사용하여 레이블이 지정된 '일반' 텍스트 열의 세트로 나타낼 수 있습니다. 같은 파일 내에서 두 규칙은 상호 교환 가능합니다.

XML

XML 샘플

  • 루트 <listings> XML 노드는 <listing> 노드 세트를 포함하며 각각이 하나의 호텔을 나타냅니다.
  • 파일은 유효한 <?xml 선언 태그로 시작해야 합니다.

피드 파서는 UTF8, UTF16 또는 UTF32 텍스트 인코딩을 자동으로 감지하고 예상치 못한 바이트 시퀀스를 만나면 LATIN1로 기본 설정됩니다. 필드 값은 원하는 언어로 입력할 수 있지만 필드 이름은 아래 표시된 것과 같이 영어로 지정해야 합니다.

지원되는 필드 — 호텔 광고

다음 지원되는 필드는 제품 카탈로그에 추가하는 항목을 위해 고안되었습니다.

현지화된 카탈로그는 호텔 광고에 지원되는 필드를 참조하세요.

필드 및 유형설명

hotel_id

유형: 문자열

필수 항목.

최대 길이: 100

카탈로그 내 호텔에 대한 고유 식별자입니다. 이 ID는 destination 앱과 픽셀 이벤트에 제공된 모든 content_ids와 일치합니다. : 성과를 개선하려면 이 고유 ID 필드에 공백을 사용하지 마세요. 중복 ID를 사용하지 마세요.

예: FB_hotel_1234

room_id

유형: 문자열

호텔 객실 정보를 추가하는 경우 필수 항목.

호텔 객실 유형에 고유한 ID를 입력합니다. 최대 문자 수: 100개 : FB_hotel_room_1234

name

유형: 문자열

필수 항목.

호텔의 가장 일반적인 이름입니다.

예: Facebook Hotel

description

유형: 문자열

필수 항목.

최대 크기: 5,000

호텔에 대한 간단한 설명입니다.

예: 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). 가격 형식은 비용 뒤에 ISO 통화 코드를 붙이고 비용과 통화 사이에 공백이 있어야 합니다.

예: 199.00 EUR

price

유형: 문자열

호텔 객실 정보를 추가하는 경우 필수 항목.

checkin_datelength_of_stay를 기반으로 한 호텔 총 투숙 요금입니다. 가격 형식은 비용 뒤에 ISO 통화 코드를 붙이고 비용과 통화 사이에 공백이 있어야 합니다.

예: 1393.00 USD

tax

유형: 문자열

호텔 객실 정보를 추가하는 경우 필수 항목.

가격에 적용되는 세율입니다. 가격 형식은 비용 뒤에 ISO 통화 코드를 붙이고 비용과 통화 사이에 공백이 있어야 합니다.

예: 14.00 USD

fees

유형: 문자열

호텔 객실 정보를 추가하는 경우 필수 항목.

가격에 적용되는 수수료입니다. 가격 형식은 비용 뒤에 ISO 통화 코드를 붙이고 비용과 통화 사이에 공백이 있어야 합니다.

예: 253.00 USD

url

유형: 문자열

필수 항목.

호텔 객실을 예약할 수 있는 외부 사이트 링크입니다. 광고 수준에서도 template_url_spec을 사용하여 URL을 지정할 수 있습니다. 광고 수준의 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를 기반으로 한 호텔 숙박의 1박 판매 가격입니다. 호텔의 정상 가격 할인을 광고하고자 할 때 사용합니다. 가격에 통화 유형을 추가하도록 합니다(예: 미화의 경우 USD). 호텔의 sale_pricebase_price보다 낮아야 합니다. 가격 형식은 비용 뒤에 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

유형: 개체

선택 사항.

모바일 앱에서 앱 링크를 통해 호텔 상세 정보 페이지에 바로 연결되는 딥 링크입니다. 다음과 같이 우선순위의 내림차순으로 딥 링크를 지정할 수 있습니다.

  1. 광고 수준에서 template_url_spec 사용
  2. 여기 피드에서 앱 링크 개체 사용
  3. 웹사이트에 앱 링크 메타 태그 추가

제품 딥 링크에 대해 자세히 알아보세요.

priority

유형: 정수

선택 사항.

호텔 우선순위 지표(0(가장 낮은 우선순위)~5(가장 높은 우선순위)의 값)입니다. 예: 5

category

유형: 문자열

선택 사항.

숙박 시설의 유형입니다. 이 카테고리는 원하는 모든 유형의 내부 설명이 될 수 있습니다. 예: Resort, Day Room

number_of_rooms

유형: 정수

선택 사항.

이 호텔 품목의 객실/호 합계입니다.

예: 150

status

유형: 문자열

카탈로그에서 품목이 활성화되어 있거나 보관되어 있는지 여부를 관리합니다. 활성 상태의 품목만 광고, Shop 또는 기타 채널에서 사용자에게 노출됩니다. 지원되는 값: active, archived. 항목은 기본적으로 활성화되어 있습니다. 품목 보관에 대해 자세히 알아보세요.


예: active


참고: 일부 파트너 플랫폼(예: Shopify)은 준비 상태의 카탈로그에 품목을 동기화할 수 있습니다. 이는 archived와 동일하게 동작합니다.

이 필드의 이름은 이전에 visibility였습니다. 이전의 필드 이름도 지원하지만 새 이름을 사용하는 것이 좋습니다.

이미지 개체 매개변수


필드 이름 및 유형설명

url

유형: 문자열

필수 항목.

최대 항목 수: 20

광고에 표시되는 항목의 이미지 URL 링크입니다. 다음과 같은 이미지 사양을 준수하세요.

  • 모든 이미지는 JPG, GIF 또는 PNG 형식이어야 합니다.

  • 슬라이드 광고 및 컬렉션 광고의 경우 이미지가 정사각형(1:1) 형식으로 표시됩니다. 최소 이미지 크기는 500x500픽셀입니다. 최상의 이미지 품질을 위해서는 1,024 x 1,024픽셀을 사용하는 것이 좋습니다.

  • 단일 이미지 광고의 경우 이미지가 1.91:1 화면 비율로 표시됩니다. 최소 이미지 크기는 500 x 500픽셀입니다. 최상의 이미지 품질을 위해서는 1,200 x 628픽셀을 사용하는 것이 좋습니다.

  • 이미지가 두 개 이상인 경우 각각에 대해 열을 추가하고 각 열 이름에 JSON 경로 구문을 사용하여 이미지 개수를 표시하세요.

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

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

tag

유형: 문자열

선택 사항.

이미지 내용을 나타내기 위해 이미지에 붙이는 태그입니다. 하나의 이미지에 여러 개의 태그를 연결할 수 있습니다.

예: Fitness Center, Swimming Pool, suite

INSTAGRAM_STANDARD_PREFERRED - 광고주가 해당 피드의 특정 이미지를 Instagram에 사용할 기본 이미지로 태그할 수 있습니다. 이 태그는 대소문자를 구분합니다.


주소 개체 매개변수

중첩 또는 다중값 필드(예: address)는 JSON 인코딩된 값을 사용하거나 address.region 등 JSON 경로 구문을 사용하여 레이블이 지정된 '일반' 텍스트 열의 세트로 나타낼 수 있습니다. 같은 파일 내에서 두 규칙은 상호 교환 가능합니다.


필드 이름 및 유형설명

addr1(address.addr1)

유형: 개체

필수 항목.

호텔의 첫 번째 도로 주소입니다.

예: 1600 Pennsylvania Avenue

address.addr2

유형: 개체

선택 사항.

호텔의 두 번째 도로 주소입니다.

예: Apartment 1

address.addr3

유형: 개체

선택 사항.

호텔의 세 번째 도로 주소입니다.

예: 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)

유형: 개체

선택 사항.

호텔에 후기를 작성한 총 사용자 수입니다. 이 값을 지정할 경우 score, max_score, number_of_reviewersrating_system도 제공해야 합니다.

예: 9.0/10

guest_ratings.number_of_reviewers(number_of_reviewers) 유형: 정수

선택 사항.

이 호텔을 평가한 총 사용자 수입니다.

예: 5287

guest_ratings.rating_system(rating_system)

유형: 문자열

선택 사항.

고객 후기 작성에 사용하는 시스템입니다.

예: Expedia, TripAdvisor

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를 사용하여 업로드할 모든 피드에 대해 피드 개체를 만드세요. 예약된 업로드와 직접 업로드가 가능합니다.

호텔 카탈로그를 호텔 세트로 필터링

호텔 세트는 카탈로그의 일부분입니다. 호텔 광고를 설정하려면 호텔 세트가 필요합니다. 따라서 호텔 세트를 하나 이상 만들어야 합니다.

호텔 세트는 호텔 카탈로그에 적용되는 필터에 의해 정의됩니다. 예를 들어 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/v19.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박 기본 가격입니다. 가격은 센트 단위로 표시됩니다(4999는 $49.99를 나타냄).

sale_price_amount

해당 호텔의 1박 판매 가격입니다. 가격은 센트 단위로 표시됩니다(4999는 $49.99를 나타냄).

currency

통화

city

호텔이 위치한 도시입니다.

country

호텔의 국가입니다.

name

호텔의 가장 일반적인 이름입니다.

star_rating

호텔의 별 평점입니다. 올바른 값은 1~5 사이이며 0.5의 배수이어야 합니다.