クーポンの統合に参加するパートナーは、まずは Merchant または Entity(パイロット版)ベースの統合ステップのアカウント設定を完了しておいてください。このガイドでは、クーポン統合の実装、テスト、リリースについて詳しく説明します。統合手順を行う前に、この概要とクーポン ポリシーをお読みください。
オファー
クーポン統合を行うと、特定の時間に特定のサービスに適用される販売者プロモーションや割引に関する構造化された情報を伝えることができます。クーポンは、実際のクーポン(割引率、割引など)、有効期間(特定の時間帯、曜日など)、該当する用途(特定のサービスでのみ利用可能)で構成されます。また、制限の複雑な組み合わせも含まれます。
クーポンの例:
- 12 月の水曜日と木曜日の午後 12 時~午後 5 時には前菜を半額
- 午後 6 時~午後 10 時に、母の日ディナーでデザート 1 品ご注文の方にデザートをもう 1 品無料で提供
- 毎週日曜日の午前 10 時~午後 2 時までブランチ アントレを 500 円引き
- プレミアム定期購入者の 5% 割引と、アプリ経由で支払うユーザーの 5% 割引を組み合わせた、10% 割引のウォークイン特典。
クーポンを統合に含めるには、Google の資格要件を満たすだけでなく、技術データモデルに適合している必要があります。Google のクーポン ポリシーで、統合がポリシーに準拠していることと、クーポンが技術的要件に合わない場合の対処方法をご確認ください。
クーポンの実装
クーポン統合は、毎日または高い精度を確保する頻度(つまり、鮮度を保つ)でアップロードされる 2 つのフィードで構成されます。
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 は 1 つの action_type にのみ属することができます。特典を複数のサービスタイプで共有できる場合は、サービスタイプごとに一意の ID を持つ重複する特典が作成されることが想定されます。必須。 |
offer_modes | enum(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 のフィールドは 1 つのみ設定できます。 |
max_discount_value | object(Money) | 利用できる最大割引額。例: 10% 割引(最大 100 ドル)。 | |
min_spend_value | object(Money) | 割引を利用するための最低購入額。たとえば、合計金額が 10, 000 円以上の場合は 10% 割引など。 | |
booking_cost | object(Money) | この特典の予約費用。たとえば、テーブルを $15 で予約すると、最終請求額から $100 割引されます。 | |
booking_cost_unit | enum(FeeUnit) | 予約費用の単位。(1 人あたり、1 回の取引あたりなど)。 | |
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 米ドルです。 | |
nanos | 数値 | 金額のナノ単位(10 のマイナス 9 乗)の数。値は -999,999,999 以上 +999,999,999 以下でなければなりません。units が正の場合、nanos は正またはゼロでなければなりません。units がゼロの場合、nanos には正数、0、または負数を指定できます。units が負の場合、nanos は負数または 0 を指定します。たとえば、$-1.75 は units = -1、nanos = -750,000,000 と表されます。 |
手数料
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | この oneOf のフィールドは 1 つのみ設定できます。 |
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 | enum(OfferCategory) の配列 | この特典と組み合わせることができる特典タイプのリスト。たとえば、この特典は他のクーポンと組み合わせることができます。combinable_with_other_offers が true で、このフィールドが設定されていない場合、すべてのタイプを組み合わせることができます。 | |
combinable_offer_ids | 文字列の配列 | この特典と組み合わせることができる offer_id のリスト。一部の特典は、特定の他の offer_ids(親特典と見なすことができます)とのみ組み合わせることができます。combinable_with_other_offers が true で、このフィールドが設定されていない場合、すべての特典 ID を組み合わせることができます。 | |
inclusions | オブジェクトの配列(OfferCondition) | 特典が有効になるために満たす必要のある条件のリスト(例: ノンアルコール飲料、食品)。 | |
exclusions | オブジェクトの配列(OfferCondition) | 特典が無効になる条件のリスト(例: ビュッフェ、セットメニュー、カクテル)。 | |
min_guest | 数値 | 特典を利用するために必要な最小人数。 | |
food_offer_restrictions | object(FoodOfferRestrictions) | 食品特典に固有の制限。 |
OfferCondition
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
description | 文字列 |
FoodOfferRestrictions
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
meal_types | enum(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 フィールドのゼロ以外の値は seconds フィールドと同じ符号にする必要があります。-999,999,999 ~+999,999,999 の範囲(両端を含む)にする必要があります。 |
利用規約
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
url | 文字列 | パートナーの利用規約の URL。 | |
restricted_to_certain_users | ブール値 | 特典が特定のユーザーに限定されているかどうか。 | |
terms_and_conditions | 文字列 | パートナーが提供する主な利用規約のテキスト。 | |
additional_terms_and_conditions | 文字列の配列 | パートナーの主な利用規約に加えて適用される利用規約。 |
ValidityPeriod
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
valid_period | object(ValidityRange) | 特典が有効な開始タイムスタンプと終了タイムスタンプ。これらの時間は異なる日を表す必要があります。つまり、開始時間は 00:00(1 日の始まり)、終了時間は有効期間が終了する日の 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 | 文字列 | UNIX エポック 1970-01-01T00:00:00Z からの UTC 時刻の秒数を表します。0001-01-01T00:00:00Z から 9999-12-31T23:59:59Z の範囲(両端を含む)にする必要があります。 | |
nanos | 数値 | 非負の小数以下の秒数(ナノ秒単位)。秒の値が負であり、小数点以下を含む場合でも nanos 値は非負である必要があります。この場合 nanos の値は時間を前方にカウントします。0 ~ 999,999,999 の範囲(両端を含む)になります。 |
TimeOfDayWindow
TimeWindow オブジェクトは、ユーザーの注文を確定または履行できる期間のリストを記述する複合エンティティです。
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
time_windows | object(TimeOfDayRange) | 必須 | 注文の受付/履行が可能な時間帯。必須。 |
day_of_week | enum(DayOfWeek) の配列 | ウィンドウが適用される曜日のリスト。設定されていない場合は、すべての曜日に適用されます。省略可。 |
TimeOfDayRange
左閉右開の時間帯。
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
open_time | object(TimeOfDay) | 期間の開始時刻を示す Time(この時刻を含む)。設定しない場合、00:00:00 になります。省略可。 | |
close_time | object(TimeOfDay) | 範囲の終了時刻(含まれない)を示す Time。設定されていない場合は、23:59:59 を意味します。省略可。 |
TimeOfDay
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
hours | 数値 | 1 日の時間(24 時間形式)。0 以上にする必要があります。通常は 23 以下にする必要があります。API ではビジネスの終了時間などのシナリオにおいて、値 "24:00:00" を許可することもできます。 | |
minutes | 数値 | 1 時間の分。0 以上 59 以下の値を指定する必要があります。 | |
seconds | 数値 | 1 分の秒数。0 以上にする必要があります。通常は 59 以下にする必要があります。API がうるう秒を許可する場合、値 60 が許可されます。 | |
nanos | 数値 | 秒の小数部分(ナノ秒単位)。0 以上 999,999,999 以下にする必要があります。 |
ValidTimeException
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
exceptional_period | object(ValidityRange) | 特典が無効になる開始タイムスタンプと終了タイムスタンプ。これらの時間は異なる日を表す必要があります。つまり、開始時間は 00:00(1 日の始まり)で、終了時間は例外期間が終了する日の 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 | Wednesday |
THURSDAY | 木曜日 |
FRIDAY | 金曜日 |
SATURDAY | 土曜日 |
SUNDAY | 日曜日 |
offer_specification
割引は、総額から差し引かれる割合または固定値にできます。次に例を示します。 1. 最終請求額から 10% 割引されます。2. 注文が $15 オフになります。販売者は、関連する仕様フィールドで「1 つ購入すると 1 つ無料」などのカスタム割引を提供することもできます。必須。
フィールド名 | タイプ | 要件 | 説明 |
---|---|---|---|
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 サーバーの使用方法についてのチュートリアルを参照し、記述子ファイルで name
を google.offer
に設定します。
アップロードの頻度
通常、Google では 1 日に 1 回のフィードのアップロードを想定しています。精度を常に高く保つため、貴社の側で特典を更新する頻度に応じて、アップロードの頻度を増減させることができます。Google の担当者にご相談ください。
データが Google に表示されるまでには数時間かかります。
クーポンのカテゴリ分け
OFFER_CATEGORY_BASE_OFFER
: 他の特典と組み合わせずに単独で利用できる特典。これには、次のものが含まれます。- 請求額全体に対する一律割引(例: 20% オフ)
- 定期購入の特典(例: メンバーシップで無料のデザート)
- レストランに他のベース オファーがない場合の支払い特典
- アドオン特典: 基本特典の利用を必要とする特典。これには、次の操作が含まれます。
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
(例: 特定のクレジット カードでさらに 10% オフ)OFFER_CATEGORY_ADD_ON_COUPON_OFFER
(例: 特定のクーポン コードでドリンク 1 杯無料)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% 割引特典は、
OFFER_CATEGORY_BASE_OFFER
とOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
のタグを付けた 2 つのコピーを送信し、PaymentInstrument
の詳細を含める必要があります。 - クーポンコード付きのドリンク無料特典は、
Coupon
の詳細を含めてOFFER_CATEGORY_ADD_ON_COUPON_OFFER
として送信する必要があります。
- クレジット カードの 5% 割引特典は、
レストランで、予約なしで来店した場合は 10% 割引、特定のクレジットカードで支払った場合は 5% 割引が適用され、両方を組み合わせることもできます。
- 10% のウォークイン特典は
OFFER_CATEGORY_BASE_OFFER
としてタグ付けする必要があります。 - クレジット カードの 5% オフ特典は 2 つのコピーを用意し、1 つは
OFFER_CATEGORY_BASE_OFFER
、もう 1 つはOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
としてタグ付けする必要があります。
- 10% のウォークイン特典は
レストランでは、平日のランチのみ 10% 割引、特定のクレジットカードで支払うといつでも 5% 割引になります。
- 10% オフの特典には、
ValidityPeriod
を設定して、平日のランチタイムのみに適用されるようにする必要があります。 - クレジット カードの 5% 割引特典は 2 部送付する必要があります。
- 1 つのコピーには、
PaymentInstrument
の詳細を含めてOFFER_CATEGORY_BASE_OFFER
のタグを付ける必要があります。ランチ 10% 割引が有効な場合は、平日のランチタイムを除外するようにValidityPeriod
を設定する必要があります - 1 つのコピーには、
PaymentInstrument
の詳細を含めてOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
のタグを付ける必要があります。
- 1 つのコピーには、
- このレストランの他のすべての支払い特典には、
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
のタグを付ける必要があります。
- 10% オフの特典には、
開発とリリースのプロセス
統合の過程において、パートナー ポータルでは開発ごとに情報やフィードバックが提供されます。開発プロセスは次の流れになります。
- 統合は最初にサンドボックス環境で開発されます。Google サンドボックス環境では、本稼働環境のエクスポートを(または本稼働環境データを直接)使用する必要があります。これにより、開発段階ですべてのエッジケースを検出することができます。また、Google によりデータ品質が評価され、データモデルに基づいた適切な支援を受けることができるようになります。
- Google サンドボックス環境で販売者、サービス、クーポンの完全なフィードを毎日定期的にアップロードすると、Google チームによる評価が行われます。Google チームにより承認されると、コードを本稼働環境にプッシュし、本稼働環境データを Goolge の本稼働環境に送信できるようになります。
- 本稼働環境の統合を完全にテストした後、Google チームによってもテストされます。すべてのテストが完了すると、統合が開始されます。
モニタリング
ユーザー エクスペリエンスを向上させるため、Google は、提供された特典が有効で正確であり、ポリシーの基準を満たしていることを、リリース前とリリース後に確認します。そのため、Google は人間による審査と自動システムによる審査を組み合わせて使用します。これらの審査の結果は、アクション センターの提案ダッシュボード(本番環境のみ)で確認できます。このモニタリングの結果は、提案のランキングに影響する可能性があります。
自動チェック(クローラー)
Google の品質チームがクローラーを実装します。クローラーは、ウェブブラウザを自動化してクリックを実行し、品質テストのみを目的として特典情報を抽出するスクリプトです。
クエリ数
たとえば、1 日に 5,000 回のチェックを送信することにした場合、1 日に 5,000 回(1 日を通して均等に分散、つまり約 17 秒に 1 回)、クローラーは通常のユーザーが行う次のすべてのアクションを実行します。
- Google 検索からパートナー リンクをクリックします。
- 特典情報を探します。
- 予約が必要な場合は、予約フローに進み、指定した時間に特典を利用できるかどうかを確認します(予約は行われません)。
ウェブ スクレイパーの検出
ウェブ スクレイパーが禁止されないように(禁止されると、ウェブ スクレイパーは特典を利用できないと判断する可能性があります)、システムでウェブ スクレイパーがいつでもページをクエリできるようにしてください。ウェブ スクレイパーを特定するには:
- ウェブ スクレイパーの User-Agent には「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 キャッシュ保存のドキュメントをご覧ください。