滞在日数(LoS)による料金設定

Travel Partner Prices API

Travel Partner Prices API は、宿泊施設の料金を Google に送信するための RESTful インターフェースを提供します。

サービス: travelpartnerprices.googleapis.com

このサービスを呼び出すには、Google が提供するクライアント ライブラリを使用することをおすすめします。アプリケーションで独自のライブラリを使用してこのサービスを呼び出す必要がある場合は、テクニカル アカウント マネージャー(TAM)に連絡して、このサービスの Discovery Document を取得してください。

サービス エンドポイント

サービス エンドポイントは、API サービスのネットワーク アドレスを指定するベース URL です。1 つのサービスに複数のサービス エンドポイントが存在することもあります。このサービスには次のサービス エンドポイントがあり、以下のすべての URI がこのサービス エンドポイントに関連しています。

https://travelpartnerprices.googleapis.com
メソッド
ingestLosPropertyPrices POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices

指定した宿泊施設の滞在日数別料金をアップロードします。

HTTP メッセージ本文として、JSON エンコードされた LoS 料金メッセージ(下記参照)が必要です。

account_id: この文字列の値は、Hotel Center の [アカウント設定] ページに表示されている [アカウント ID] の値です。

property_id: この要素の値は、ホテルリスト フィードのリスティング ID と一致する文字列にする必要があります。

API の認証

Travel Partner Prices API は、OAuth 2.0 を使用してアプリケーションを認証し、API にアクセスできるようにします。

OAUTH 2.0 の設定の手順に沿って、Travel Partner Prices API の認証を取得します。

Travel Partners Prices API の新しいプロジェクトを作成する場合は、Travel Partner API で提供されている手順と同様に、新しい Google Cloud コンソール プロジェクトへのアクセスを有効にする必要があります。

Travel Partner API で提供されている手順を参照し、「Travel Partner API」のすべてのインスタンスを「Travel Partner Prices API」に置き換えて、プロジェクトを有効にします。

Travel Partner Prices API のスコープは次のとおりです。 "https://travelpartnerprices.googleapis.com"

Travel Partner Prices API のアップロード パスは次のとおりです。 "/travel/lodging/uploads/accounts/<account_id>/property_data"

リクエスト

構文

LoS Prices メッセージでは、次の構文を使用します。

{
  "requestTime": YYYY-MM-DDTHH:mm:ss.SSSZ,
  "propertyPrices": {
    "arrivalDatePrices": [{
      "startDate": {
        "year": int
        "month": int
        "day": int
      }
      "endDate": {
        "year": int
        "month": int
        "day": int
      }
      "productPrices": [{
        "roomTypeId": "string"
        "ratePlanId": "string"
        "occupancyPrices": [{
          "adults": int
          "prices": [{
            "rateRuleId": "string"
            "currencyCode": "string"
            "rates": [night_1,night_2,...]
            "taxes": [night_1,night_2,...]
            "fees": [night_1,night_2,...]
          }]
        }]
      }]
    }]
  }
}

要素と属性

Length of Stay の料金メッセージには、次の要素と属性があります。

要素 発生回数 タイプ 説明
requestTime 1 string

LoS 料金メッセージが送信された時点(RFC 3339 形式の文字列)。

過去 24 時間以内の requestTime が付いた送信メッセージが処理され、処理されなかったものは破棄されます。

メッセージは、受信された順序に関係なく、requestTime の順で処理されます。たとえば、requestTime2019-05-03T14:09:00Z の料金の更新が、requestTime2019-05-03T14:10:00Z の同じ旅程のメッセージの後に受信された場合、後でタイムスタンプが付けられたメッセージが優先され、破棄されます。

RFC 3339 では、完全に指定された日時を YYYY-MM-DDThh:mm:ss.SSZ として指定する必要があります。タイムゾーンは必須です。UTC からの正または負の hh:mm オフセットとして指定するか、UTC の略語として Z を指定します。

秒の小数部分は省略可能で、ナノ秒の精度まで指定できます。たとえば、2017-01-15T01:30:15.01-08:00 は 2017 年 1 月 15 日 01:30 PST から 15.01 秒経過した時間をエンコードします。

propertyPrices 1 Object 宿泊施設の料金。この propertyPrices 内のすべての価格は、同じ宿泊施設に適用されます。

この要素は繰り返されません。複数のプロパティの料金を送信するには、複数の HTTP リクエスト(プロパティごとに少なくとも 1 つ)を行う必要があります。

arrivalDayPrices[] 1..n Object 到着日の料金。この arrivalDayPrices 内のすべての料金は、特定の宿泊施設に適用されますが、到着日が異なります。
startDate 1 Object productPrices は、startDateendDate のすべての到着日に適用されます。

到着日を 1 つだけ指定する場合(範囲を指定しない場合)は、startDateendDate の両方に到着日を入力します。

startDate.year 1 integer startDate の年。1 ~ 9999 の範囲で指定する必要があります。
startDate.month 1 integer 1 年の中の月。1~12 である必要があります。
startDate.day 1 integer 1 月の中の日付。1 ~ 31 で、その年と月で有効な値にする必要があります。
endDate 0..1 Object productPrices は、startDateendDate のすべての到着日に適用されます(両日を含む)。

到着日を 1 つだけ指定する場合(範囲を指定しない場合)、endDate は省略できます。

endDate.year 1 integer endDate の年。1 ~ 9999 の範囲で指定する必要があります。
endDate.month 1 integer 1 年の中の月。1~12 である必要があります。
endDate.day 1 integer 1 月の中の日付。1 ~ 31 で、その年と月で有効な値にする必要があります。
productPrices[] 1..n Object 商品の価格。この productPrices 内のすべての料金は、特定の宿泊施設と到着日の組み合わせに適用されますが、商品は異なります。
roomTypeId 0..1 string この料金が参照する客室の一意の ID。この ID を使用して、条件の組み合わせのデータと roomdata で送信した内容を一致させます。詳しくは、条件の組み合わせのメタデータをご覧ください。
ratePlanId 0..1 string この料金が参照しているパッケージ データの一意の ID。この ID を使用して、条件の組み合わせのデータと packagedata で送信した内容を一致させます。詳しくは、条件の組み合わせのメタデータをご覧ください。
occupancyPrices[] 1..n Object 宿泊人数別の料金。この occupancyPrices 内のすべての料金は、特定の宿泊施設、到着日、商品との組み合わせに適用されますが、宿泊人数は異なります。
adults 1 integer 客室ごとに予約できる最大宿泊客数(大人と子どもを含む)。この値は、対応する occupancyPrices フィールド内のすべてのレートに設定され、1 ~ 99 の正の整数にする必要があります。

注: 5 人以上の大人の宿泊人数を送信するには、サポートチームにお問い合わせください。

prices[] 1..n Object 滞在日数に応じた料金。prices 内のすべての料金は、特定の宿泊施設、到着日、商品、宿泊人数に適用されます。
rateRuleId 0..1 string 限定価格の場合、この ID は料金ルール定義ファイルの定義と一致します。このフィールドには 40 文字まで入力できます。
currencyCode 1 string ratestaxes が提供される 3 文字の通貨コード。たとえば、米ドルの場合は "USD" です。
rates[] 30 float 滞在日数の料金の基本料金コンポーネント。

対応する taxes 値が指定されている場合、このレートには税金は含まれません。合計料金は、関連する料金と税金の合計です。

インデックス n の値は、n+1 の滞在期間に対応します。

30 個の料金からなる LoS セット全体を一度に送信する必要があります。30 個未満の LoS 価格を送信した場合、指定されたすべての LoS 価格が通常どおり処理され、残りのレートは LoS 30 まで利用できません。30 件を超える料金を送信すると、30 件目を超える料金はすべて破棄されます。

利用できない宿泊日数は 0 で表す必要があります。

taxes[] 30 float 滞在日数の価格の税額部分。

インデックス n の値は、n+1 の滞在期間に対応します。

fees[] 30 float 滞在日数の料金の料金コンポーネント。

インデックス n の値は、n+1 の滞在期間に対応します。

LOS に基づく料金と税金

次の例は、1 つのチェックイン日の最低宿泊日数を 2 に設定し、別のチェックイン日の空室状況をなしに設定する方法を示しています。endDate を指定せずに 2023 年 9 月 1 日から startDate を設定した場合、1 日のみの料金を指定することになり、endDate を省略できます。

2 に設定された occupancyPrices 配列を使用すると、宿泊人数ごとに異なる料金を設定できます。そのため、2023 年 9 月 4 日に空きがない場合、利用可能な rates が制限されます。

表示されている taxes 配列は、レートの 10% として計算されます。

表示されている fees 配列は、1 滞在あたり 50 ドルの清掃料金を適用します。

チェックイン日全体(2023 年 9 月 3 日)が予約不可の場合は、日付を明示的に送信し、ratestaxesproductPrices を省略して、リクエストされた日付の予約不可であることを示します。

{
  "requestTime": "2023-08-10T12:15:222",
  "propertyPrices": {
    "arrivalDatePrices": [
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 1
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "startDate": {
          "year": 2023,
          "month": 9,
          "day": 3
        },
        "productPrices": [
          {
            "occupancyPrices": [
              {
                "adults": 2,
                "prices": [
                  {
                    "currencyCode": "USD",
                    "rates": [
                      0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "taxes": [
                      0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ],
                    "fees": [
                      0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

レスポンスの本文

成功した場合、レスポンスの本文には次の構造のデータが含まれます。

JSON 表現
        {
          "name": "string"
        }
        
フィールド
name 変更された PropertyPrices のリソース名。形式は
accounts/{account}/properties/{property} です。