쿠폰 통합에 참여하는 파트너는 시작하기 전에 판매자 또는 법인 (파일럿) 기반 통합 단계의 계정 설정을 완료해야 합니다. 쿠폰 통합의 구현, 테스트, 출시는 이 가이드에 자세히 설명되어 있습니다. 통합 단계를 진행하기 전에 이 개요와 쿠폰 정책을 읽어보세요.
쿠폰
쿠폰 통합을 사용하면 특정 시점에 특정 서비스에 적용되는 판매자 프로모션 및 할인에 대해 체계적으로 정리된 정보를 전달할 수 있습니다. 혜택은 실제 혜택 (할인율, 금액 할인 등), 유효 기간(특정 시간, 요일 등), 적용 가능한 용도 (특정 서비스에만 혜택을 사용할 수 있음) 및 복잡한 제한사항 조합으로 구성됩니다.
쿠폰의 예:
- 12월 수요일, 목요일 오후 12시~오후 5시 전채 요리 50% 할인
- 어머니날 저녁 식사, 오후 6시부터 오후 10시까지 디저트 하나를 사시면 하나가 무료
- 매주 일요일 오전 10시~오후 2시 브런치 주요리 5달러 할인
- 프리미엄 구독자 5% 할인 및 사용자가 앱을 통해 결제하는 경우 5% 할인과 함께 사용할 수 있는 워크인 혜택으로 10% 할인
쿠폰이 통합에 포함되려면 Google의 자격요건을 충족하고 기술 데이터 모델 내에 들어가야 합니다. 쿠폰 정책을 검토하여 통합이 정책을 준수하는지 확인하고 기술 요구사항을 충족하지 않는 쿠폰 처리 방법에 대한 안내를 확인하세요.
쿠폰 구현
쿠폰 통합은 매일 또는 높은 정확성을 보장하는 빈도로 업로드되는 두 개의 피드로 구성됩니다 (즉, 오래된 정보가 줄어듦).
OfferFeed
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
data | 객체 배열(Offer) |
혜택
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
offer_id | 문자열 | 필수 | 혜택의 고유 ID입니다. 필수입니다. |
entity_ids | 문자열 배열 | 이 혜택에 참여하는 판매자 목록입니다. | |
add_on_offer_applicable_to_all_entities | 부울 | true인 경우 이 혜택은 애그리게이터의 모든 항목에 적용됩니다. 부가기능 혜택에만 적용됩니다. | |
offer_source | enum(OfferSource) | 필수 | 혜택은 애그리게이터, 개별 판매자 또는 서드 파티가 부가기능으로 제공할 수 있습니다. 필수입니다. |
action_type | enum(ActionType) | 필수 | 혜택을 제공하는 서비스입니다. offer_id는 하나의 action_type에만 속할 수 있습니다. 혜택을 여러 서비스 유형에서 공유할 수 있는 경우 각 서비스 유형에 대해 고유한 ID가 있는 중복 혜택이 생성되어야 합니다. 필수입니다. |
offer_modes | 열거형 배열(OfferMode) | 필수 | 혜택을 이용할 수 있는 방법(예: 방문, 예약, 온라인)입니다. 필수입니다. |
offer_category | enum(OfferCategory) | 필수 | 혜택의 카테고리입니다. 필수입니다. |
source_assigned_priority | 숫자 | 소스에서 할당한 혜택의 우선순위 수준을 나타내는 음수가 아닌 정수 ([1~100], 1이 가장 높은 우선순위)입니다. 동일한 판매자에 대해 여러 혜택이 제공되는 경우 혜택 순위 지정에 사용되는 신호입니다. 0은 우선순위가 설정되지 않았음을 나타냅니다. | |
offer_details | object(OfferDetails) | 필수 | 할인, 예약 비용 등 혜택의 세부정보입니다. 필수입니다. |
offer_restrictions | object(OfferRestrictions) | 필수 | 혜택이 제한되는 방식을 설명합니다(예: 정기 결제/결제 수단이 필요한지, 이 혜택을 다른 혜택과 결합할 수 있는지(및 어떤 유형인지) 등). 필수입니다. |
coupon | object(Coupon) | 쿠폰의 세부정보입니다. offer_category(혜택_카테고리): OFFER_CATEGORY_ADD_ON_COUPON_OFFER에 필요합니다. | |
payment_instrument | object(PaymentInstrument) | 결제 수단의 세부정보입니다. offer_category가 OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER인 경우 필수입니다. | |
subscription | object(Subscription) | 정기 결제의 세부정보입니다. offer_category가 OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER인 경우 필수입니다. | |
terms | object(Terms) | 필수 | 혜택 이용약관입니다. 필수입니다. |
validity_periods | 객체 배열(ValidityPeriod) | 필수 | 혜택의 유효 기간입니다. 시작 시간, 종료 시간, 요일 등 혜택이 유효한 기간을 설명합니다. 필수입니다. |
offer_url | 문자열 | 판매자의 혜택 페이지 URL입니다. offer_category가 OFFER_CATEGORY_BASE_OFFER인 경우 필수입니다. | |
image_url | 문자열 | 판매자의 혜택 이미지 URL입니다. |
OfferDetails
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
offer_display_text | 문자열 | 필수 | 상품 제공업체가 검색 결과 페이지에서 고객에게 표시하고자 하는 상품 텍스트입니다. 필수입니다. |
| oneOf(offer_specification) | 필수 | 이 oneOf의 필드 중 하나만 설정할 수 있습니다. |
max_discount_value | object(Money) | 이용할 수 있는 최대 할인입니다. 예: 최대 100달러까지 10% 할인 | |
min_spend_value | object(Money) | 할인을 받기 위한 최소 지출 금액입니다. 예를 들어 총 가격이 100달러 이상인 경우 10% 할인됩니다. | |
booking_cost | object(Money) | 이 혜택을 예약하는 데 드는 비용입니다. 예를 들어 테이블을 $15에 예약하면 최종 청구액에서 $100가 할인됩니다. | |
booking_cost_unit | enum(FeeUnit) | 예약 비용의 단위입니다. 예를 들어 사용자별, 거래별로 설정할 수 있습니다. | |
convenience_fee | object(Fee) | ||
booking_cost_adjustable | 부울 | 예약 비용이 조정 가능한지 여부입니다. 즉, 예약 비용이 최종 청구서에서 차감됩니다. 예를 들어 예약 시 저녁 식사 30% 할인과 같은 혜택을 제공할 수 있습니다. 15달러를 예약하는 데 드는 비용이며 최종 청구서에 적용됩니다. 따라서 최종 청구액은 총 지출액 - 30% - $15입니다. | |
additional_fees | 객체 배열(AdditionalFee) | 사용자에게 청구되는 추가 수수료입니다. 예: 편의성, 처리 등 |
Money
금액과 통화 유형을 나타냅니다.
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
currency_code | 문자열 | ISO 4217에 정의된 3자리 통화 코드입니다. | |
units | 문자열 | 금액의 전체 단위입니다.
예를 들어 currencyCode 가 "USD" 이면 1단위는 1달러(USD)입니다. | |
nanos | 숫자 | 금액의 나노 (10^-9) 단위 수입니다.
이 값은 -999,999,999~+999,999,999(끝값 포함) 사이여야 합니다.
units 가 양수이면 nanos 는 양수 또는 0이어야 합니다.
units 가 0이면 nanos 는 양수, 0 또는 음수일 수 있습니다.
units 가 음수이면 nanos 는 음수 또는 0이어야 합니다.
예를 들어 $-1.75는 units =-1 및 nanos =-750,000,000으로 나타냅니다. |
수수료
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | 이 oneOf의 필드 중 하나만 설정할 수 있습니다. |
MoneyRange
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
name | 문자열 | 필수 | 추가 수수료의 이름입니다. 예: 편의 수수료, 처리 수수료 등 필수입니다. |
fee | object(Fee) |
OfferRestrictions
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
combinable_with_other_offers | 부울 | 이 혜택을 다른 혜택과 함께 사용할 수 있는지 여부입니다. true인 경우 파트너는 이 혜택과 결합할 수 있는 혜택을 지정할 수 있습니다. combinable_offer_categories와 combinable_offer_ids가 모두 설정된 경우 위의 조건 중 하나와 일치하는 혜택은 조합 가능합니다. | |
combinable_offer_categories | 열거형 배열(OfferCategory) | 이 혜택과 결합할 수 있는 혜택 유형 목록입니다. 예를 들어 이 혜택은 다른 쿠폰과 함께 사용할 수 있습니다. combinable_with_other_offers가 true이고 이 필드가 설정되지 않은 경우 모든 유형을 결합할 수 있습니다. | |
combinable_offer_ids | 문자열 배열 | 이 혜택과 함께 사용할 수 있는 offer_id 목록입니다. 일부 혜택은 특정 다른 offer_id (상위 혜택으로 간주될 수 있음)와만 결합될 수 있습니다. combinable_with_other_offers가 true이고 이 필드가 설정되지 않은 경우 모든 혜택 ID를 결합할 수 있습니다. | |
inclusions | 객체 배열(OfferCondition) | 혜택이 유효하려면 충족해야 하는 조건 목록입니다 (예: 무알코올 음료, 음식) | |
exclusions | 객체 배열(OfferCondition) | 혜택을 무효화하는 조건 목록 (예: 뷔페, 콤보 혜택, 칵테일) | |
min_guest | 숫자 | 혜택을 이용하는 데 필요한 최소 인원수입니다. | |
food_offer_restrictions | object(FoodOfferRestrictions) | 음식 혜택에만 적용되는 제한사항입니다. |
OfferCondition
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
description | 문자열 |
FoodOfferRestrictions
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
meal_types | 열거형 배열(MealType) | 혜택이 적용될 수 있는 식사 유형입니다(예: 점심 또는 저녁). 설정하지 않으면 혜택이 모든 식사 유형에 적용될 수 있습니다. | |
restricted_to_certain_courses | 부울 | 혜택이 특정 과정에만 적용될 수 있는지 여부입니다. |
쿠폰
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
text | 문자열 | 혜택 제공업체가 사용자에게 표시하고자 하는 쿠폰 텍스트입니다. | |
code | 문자열 | 필수 | 혜택을 사용하기 위해 필요한 쿠폰 코드입니다. 필수입니다. |
PaymentInstrument
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
items | 객체 배열(PaymentInstrumentItem) | 필수 | 혜택을 이용하는 데 사용할 수 있는 결제 수단 목록입니다. 필수입니다. |
provider_name | 문자열 | 필수 | 결제 수단 제공업체의 이름입니다. 은행 파트너, 은행 이름 등이 될 수 있습니다. 예를 들면 American Express, HDFC, ICICI가 있습니다. 필수입니다. |
PaymentInstrumentItem
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
type | enum(PaymentInstrumentType) | 필수 | 결제 수단 유형입니다. 필수입니다. |
name | 문자열 | 필수 | 신용카드 이름과 같은 결제 수단 항목의 이름입니다. 예: HDFC Infinia, American Express Platinum 필수입니다. |
구독
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
name | 문자열 | 필수 | 구독 이름입니다. 필수입니다. |
subscription_auto_added | 부울 | 사용자가 이 혜택을 이용할 때 정기 결제가 자동으로 추가되는지 여부입니다. | |
cost | object(Money) | 필수 | 구독 비용입니다. 필수입니다. |
subscription_duration | object(Duration) | 필수 | 구독이 subscription_cost로 유효한 기간입니다. 필수입니다. |
terms_and_conditions_url | 문자열 | 이 정기 결제와 관련된 파트너의 이용약관 URL입니다. |
기간
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
seconds | 문자열 | 시간 범위의 부호가 있는 초입니다. -315,576,000,000~+315,576,000,000(포함) 사이여야 합니다. 참고: 이 범위는 60초/분 * 60분/시간 * 24시간/일 * 365.25일/년 * 10,000년에서 계산됩니다. | |
nanos | 숫자 | 시간 범위의 나노초 단위의 초수입니다. 1초 미만의 지속 시간은 0 seconds 필드와 양수 또는 음수 nanos 필드로 표현됩니다. 1초 이상의 기간의 경우 nanos 필드의 0이 아닌 값은 seconds 필드와 부호가 같아야 합니다. -999,999,999~+999,999,999(포함) 사이여야 합니다. |
약관
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
url | 문자열 | 파트너의 이용약관 URL입니다. | |
restricted_to_certain_users | 부울 | 혜택이 특정 사용자에게만 제공되는지 여부입니다. | |
terms_and_conditions | 문자열 | 파트너가 제공한 기본 T&C 텍스트입니다. | |
additional_terms_and_conditions | 문자열 배열 | 파트너의 기본 이용약관 외 추가 이용약관 |
ValidityPeriod
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
valid_period | object(ValidityRange) | 혜택이 유효한 시작 및 종료 타임스탬프입니다. 이 시간은 서로 다른 날짜를 나타내야 합니다. 즉, 시작 시간은 00:00(하루 시작)이어야 하고 종료 시간은 유효 기간이 끝나는 날짜의 00:00 (제외)이어야 합니다. | |
time_of_day | 객체 배열(TimeOfDayWindow) | 특정 날짜의 유효한 시간 간격과 혜택을 사용할 수 있는 요일을 지정합니다.
예를 들면 다음과 같습니다.
월요일: 오전 10시~오후 5시
화요일: 오전 10시~오후 2시
화요일: 오후 5시~오후 7시
수, 목, 금, 토, 일: 오후 3시~오후 7시
설정되지 않은 경우 valid_period 내에서 언제든지 혜택을 이용할 수 있음을 의미합니다. | |
time_exceptions | 객체 배열(ValidTimeException) | 위의 valid_period 및 valid_time_of_week에 대한 예외를 지정합니다. |
ValidityRange
종료-시작 타임스탬프 범위입니다.
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
valid_from_time | object(Timestamp) | 필수 | 범위의 시작 시간입니다 (해당 값 포함). 필수입니다. |
valid_through_time | object(Timestamp) | 범위의 종료 시간 (해당 값 제외)입니다. 설정되지 않은 경우 이 기간이 끝나지 않음을 의미합니다. 선택사항입니다. |
타임스탬프
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
seconds | 문자열 | 유닉스 시간 1970-01-01T00:00:00Z 이후 UTC 시간의 초 단위로 표현합니다. 범위는 0001-01-01T00:00:00Z~9999-12-31T23:59:59Z(포함)이어야 합니다. | |
nanos | 숫자 | 나노초 단위의 음수가 아닌 초수입니다. 음수의 초수 값에는 시간에 반영되는 음수가 아닌 나노초 값이 있어야 합니다. 0~999,999,999(포함) 사이의 값이어야 합니다. |
TimeOfDayWindow
TimeWindow 객체는 사용자의 주문이 접수되거나 처리될 수 있는 기간 목록을 설명하는 복합 항목입니다.
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
time_windows | object(TimeOfDayRange) | 필수 | 주문을 접수/처리할 수 있는 기간입니다. 필수입니다. |
day_of_week | 열거형 배열(DayOfWeek) | 기간이 적용되는 요일 목록입니다. 설정되지 않은 경우 모든 요일에 적용됩니다. 선택사항입니다. |
TimeOfDayRange
종료-시작 기간입니다.
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
open_time | object(TimeOfDay) | 범위의 시작 시간을 나타내는 시간입니다 (포함). 설정하지 않으면 00:00:00을 의미합니다. 선택사항입니다. | |
close_time | object(TimeOfDay) | 범위의 하루 종료 시간을 나타내는 시간입니다 (제외). 설정하지 않으면 23:59:59를 의미합니다. 선택사항입니다. |
TimeOfDay
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
hours | 숫자 | 24시간 형식의 시간입니다. 0 이상이어야 하며 일반적으로 23 이하여야 합니다. API는 비즈니스 종료 시간과 같은 시나리오에서 '24:00:00' 값을 허용하도록 선택할 수 있습니다. | |
minutes | 숫자 | 시간의 분입니다. 0 이상, 59 이하여야 합니다. | |
seconds | 숫자 | 분의 초입니다. 0 이상이어야 하며 일반적으로 59 이하여야 합니다. API가 윤초를 허용하는 경우 값에 60을 사용할 수 있습니다. | |
nanos | 숫자 | 나노초 단위의 초수입니다. 0 이상, 999,999,999 이하여야 합니다. |
ValidTimeException
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
exceptional_period | object(ValidityRange) | 혜택이 유효하지 않은 시작 및 종료 타임스탬프입니다. 이 시간은 서로 다른 날짜를 나타내야 합니다. 즉, 시작 시간은 예외 기간이 끝나는 날짜의 00:00(하루 시작)이어야 하고 종료 시간은 00:00 (제외)이어야 합니다. |
OfferSource
이름 | 설명 |
---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
이름 | 설명 |
---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_DINING |
OfferMode
이름 | 설명 |
---|---|
OFFER_MODE_OTHER | |
OFFER_MODE_WALK_IN | |
OFFER_MODE_FREE_RESERVATION | |
OFFER_MODE_PAID_RESERVATION | |
OFFER_MODE_ONLINE_ORDER |
OfferCategory
혜택의 카테고리입니다. 기본 혜택은 모든 고객에게 제공되는 표준 혜택입니다(예: 100달러 이상 지출 시 10% 할인). 쿠폰 또는 결제 수단으로 제한된 기본 혜택에는 해당 필드가 설정됩니다. ADD_ON_PAYMENT_OFFER와 같은 애드온 x 혜택도 있습니다. 이러한 혜택은 다른 혜택에 추가하여 추가 할인을 받을 수 있습니다.
이름 | 설명 |
---|---|
OFFER_CATEGORY_UNSPECIFIED | |
OFFER_CATEGORY_BASE_OFFER | |
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER | |
OFFER_CATEGORY_ADD_ON_COUPON_OFFER | |
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER |
FeeUnit
이름 | 설명 |
---|---|
FEE_UNIT_UNSPECIFIED | |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
이름 | 설명 |
---|---|
FEE_TYPE_UNSPECIFIED | |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
MealType
이름 | 설명 |
---|---|
MEAL_TYPE_UNSPECIFIED | |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
이름 | 설명 |
---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET |
DayOfWeek
요일을 나타냅니다.
이름 | 설명 |
---|---|
DAY_OF_WEEK_UNSPECIFIED | 요일이 지정되지 않습니다. |
MONDAY | 월요일 |
TUESDAY | 화요일 |
WEDNESDAY | 수요일 |
THURSDAY | 목요일 |
FRIDAY | 금요일 |
SATURDAY | 토요일 |
SUNDAY | 일요일 |
offer_specification
할인은 총 금액에서 차감되는 백분율 또는 고정 금액일 수 있습니다. 예를 들면 다음과 같습니다. 1. 최종 청구액 10% 할인 2. 주문 시 15달러 할인 판매자는 관련 사양 필드를 통해 '하나 구매 시 하나 무료'와 같은 맞춤 할인도 제공할 수 있습니다. 필수입니다.
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
discount_percent | 숫자 |
| 할인된 청구서의 비율입니다. [0, 100] 전체 식사에 적용되는 1+1 또는 50% 할인 혜택(예: 1+1 뷔페, 전체 청구서 1+1, 세트 메뉴 1+1)의 경우 이 값을 50으로 설정할 수 있습니다. |
discount_value | object(Money) |
| 할인의 고정 값입니다. |
other_offer_detail_text | 문자열 |
| 할인을 설명하는 자유 형식 텍스트입니다. 특정 1+1 혜택 (예: 1+1 음료, +1 메인 요리, 1+1 선택 메뉴 항목)의 경우 여기에 세부정보를 설명해야 합니다. |
비용
필드 이름 | 유형 | 요구사항 | 설명 |
---|---|---|---|
amount | object(Money) |
| |
amount_range | object(MoneyRange) |
|
피드 업로드
쿠폰 피드는 Generic
피드 SFTP 서버에 업로드해야 합니다. 일반 피드 SFTP 서버 사용 방법 가이드의 안내를 따르고 설명자 파일에서 google.offer
로 설정된 name
를 사용하세요.
업로드 빈도
일반적으로 Google에서는 하루에 1회 피드 업로드를 예상합니다. 일관되게 높은 정밀도를 유지하기 위해 귀사의 혜택 업데이트 빈도에 따라 빈도가 증가하거나 감소할 수 있습니다. Google 담당자에게 문의하세요.
데이터가 Google에 표시되기까지 몇 시간이 걸립니다.
분류 제공
OFFER_CATEGORY_BASE_OFFER
: 다른 혜택과 결합하지 않고 독립적으로 사용할 수 있는 혜택입니다. 여기에는 다음이 포함됩니다.- 전체 청구서에 대한 고정 할인 (예: 20% 할인)
- 구독 혜택 (예: 멤버십으로 무료 디저트 제공)
- 레스토랑에 다른 기본 혜택이 없는 경우의 결제 혜택
- 부가기능 혜택: 기본 혜택을 사용해야 하는 혜택입니다. 여기에는 다음이 포함됩니다.
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
(예: 특정 신용카드 사용 시 추가 10% 할인)OFFER_CATEGORY_ADD_ON_COUPON_OFFER
(예: 특정 쿠폰 코드를 사용하면 음료 무료)OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER
(예: 구독자 10% 추가 할인)
기타 고려사항:
- 레스토랑에 기본 혜택이 설정되어 있지 않으면 추가 혜택이 표시되지 않습니다.
기본 혜택이 없는 경우 다른 혜택에 추가하지 않고도 사용할 수 있는 결제, 정기 결제 또는 쿠폰 혜택은
OFFER_CATEGORY_BASE_OFFER
로 태그해야 합니다.- 유형에 따라
PaymentInstrument
,Subscription
또는Coupon
의 관련 데이터를 설정해야 합니다. - 파트너는 기본 혜택과 부가 혜택으로 모두 작동하는 시나리오를 포함하기 위해 이러한 혜택을 각각 2개씩 제공해야 합니다. 그런 다음
entity_ids
또는add_on_offer_applicable_to_all_entities
을 사용하여 여러 레스토랑에 부가 혜택 카피를 설정할 수 있습니다.
- 유형에 따라
- 중복 가능한 기본 혜택이 여러 개 있는 레스토랑의 경우 모든 기본 혜택에
OFFER_CATEGORY_BASE_OFFER
태그를 지정해야 하며, 결제, 구독 또는 쿠폰 혜택인 기본 혜택은 관련 부가 혜택 유형으로 추가로 전송해야 합니다. ValidityPeriod
은 활성 기본 혜택이 없는 경우에만 부가기능 혜택을 기본 혜택으로 활성화하는 데 사용해야 합니다.
예시 시나리오:
특정 신용카드로 결제 시 5% 할인, 특정 쿠폰 코드 사용 시 무료 음료를 제공하는 식당
- 신용카드 5% 할인 혜택은 2개의 사본으로 전송해야 합니다. 하나는
OFFER_CATEGORY_BASE_OFFER
로 태그하고 다른 하나는OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
로 태그하며PaymentInstrument
세부정보를 포함합니다. - 쿠폰 코드 혜택이 포함된 무료 음료는
Coupon
세부정보가 포함된OFFER_CATEGORY_ADD_ON_COUPON_OFFER
로 전송해야 합니다.
- 신용카드 5% 할인 혜택은 2개의 사본으로 전송해야 합니다. 하나는
한 레스토랑에서 예약 없이 방문하는 고객에게는 10% 할인을 제공하고 특정 신용카드로 결제하는 고객에게는 5% 할인을 제공하며, 두 할인 혜택은 함께 적용할 수 있습니다.
- 10% 오프라인 매장 방문 혜택은
OFFER_CATEGORY_BASE_OFFER
로 태그해야 합니다. - 신용카드 5% 할인 혜택에는 사본이 2개 있어야 하며, 하나는
OFFER_CATEGORY_BASE_OFFER
로 태그되고 다른 하나는OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
로 태그되어야 합니다.
- 10% 오프라인 매장 방문 혜택은
레스토랑에서 평일 점심에만 10% 할인을 제공하고 특정 신용카드로 결제 시 언제든지 5% 할인을 제공합니다.
- 10% 할인 혜택에는 평일 레스토랑의 점심시간에만 적용됨을 나타내기 위해
ValidityPeriod
이 설정되어 있어야 합니다. - 신용카드 5% 할인 혜택은 2부로 전송해야 합니다.
- 한 사본에는
PaymentInstrument
세부정보가 포함된OFFER_CATEGORY_BASE_OFFER
태그가 지정되어야 합니다. 점심 할인 혜택이 활성 상태일 때 평일 점심시간을 제외하도록ValidityPeriod
를 설정해야 합니다. - 한 사본에는
PaymentInstrument
세부정보가 포함된OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
태그가 지정되어야 합니다.
- 한 사본에는
- 이 음식점의 다른 모든 결제 혜택은
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
로 태그해야 합니다.
- 10% 할인 혜택에는 평일 레스토랑의 점심시간에만 적용됨을 나타내기 위해
개발 및 출시 과정
통합 과정 내내 파트너 포털에서 개발 과정을 기반으로 정보와 의견을 제공합니다. 개발 과정은 다음과 같습니다.
- 통합은 샌드박스 환경에서 먼저 개발됩니다. Google 샌드박스 환경에서 프로덕션 (또는 직접 프로덕션 데이터)의 내보내기를 사용해야 합니다. 이렇게 하면 개발 단계에서 모든 예외 사례를 포착하고 Google에서 데이터 품질을 평가한 후 데이터 모델을 기반으로 더 나은 지원을 제공할 수 있습니다.
- Google 샌드박스 환경에서 전체 및 일일 판매자, 서비스, 거래 피드를 업로드하면 Google팀에서 피드를 평가합니다. Google 팀에서 승인하면 코드를 프로덕션으로 푸시하고 프로덕션 데이터를 Google 프로덕션 환경으로 전송할 수 있습니다.
- 프로덕션 통합 테스트를 완료하면 Google팀도 테스트합니다. 모든 테스트가 완료되면 통합이 출시됩니다.
모니터링
Google에서는 우수한 사용자 환경을 제공하기 위해 출시 전후로 제공된 혜택이 유효하고 정확하며 Google 정책 기준을 충족하는지 확인합니다. 이를 위해 Google에서는 사람의 검토와 자동 검토를 모두 활용합니다. 이러한 검토 결과는 작업 센터의 혜택 대시보드에서 확인할 수 있습니다 (프로덕션만 해당). 이 모니터링의 결과는 제품의 순위에 영향을 미칠 수 있습니다.
자동 검사 (크롤러)
Google 품질팀에서 크롤러를 구현합니다. 크롤러는 웹브라우저를 자동화하여 클릭을 실행하고 품질 테스트 목적으로만 혜택 정보를 추출하는 스크립트입니다.
쿼리 수
예를 들어 하루에 5, 000회의 확인을 보내기로 결정한 경우, 하루에 5, 000회 (하루에 균등하게 분배, 즉 약 17초마다 한 번) 크롤러가 일반 사용자가 수행하는 다음 작업을 모두 수행합니다.
- Google 검색에서 시작하여 파트너 링크를 클릭합니다.
- 혜택 정보를 찾습니다.
- 혜택에 예약이 필요한 경우 예약 흐름으로 계속 진행하여 지정된 시간에 혜택을 사용할 수 있는지 확인합니다 (예약은 진행되지 않음).
웹 스크레이퍼 감지
웹 스크레이퍼가 차단되지 않도록 (이로 인해 혜택을 사용할 수 없다고 결론을 내릴 수 있음) 시스템에서 Google 웹 스크레이퍼가 언제든지 페이지를 쿼리하도록 허용해야 합니다. Google 웹 스크레이퍼를 식별하려면 다음을 확인하세요.
- 웹 스크레이퍼 사용자 에이전트에는 'Google-Offers' 문자열이 포함됩니다.
- 예: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- 'Googlebot 및 기타 Google 크롤러 확인'에 권장된 대로 역방향 DNS를 사용하여 호출이 Google에서 이루어졌는지 확인할 수도 있습니다.
구체적인 사례에서 역방향 DNS 확인은
google-proxy-***-***-***-***.google.com
패턴을 따릅니다.
기술적 동작
캐싱
파트너 웹사이트의 부하를 줄이기 위해 Google 크롤러는 일반적으로 응답에 있는 모든 표준 HTTP 캐싱 헤더를 따르도록 구성됩니다. 즉, 올바르게 구성된 웹사이트의 경우 거의 변경되지 않는 콘텐츠 (예: JavaScript 라이브러리)를 반복적으로 가져오지 않습니다. 캐싱을 구현하는 방법에 관한 자세한 내용은 이 HTTP 캐싱 문서를 참고하세요.