Ceny zależne od długości pobytu

Travel Partner Prices API

Interfejs Travel Partner Prices API udostępnia interfejs RESTful do przesyłania cen obiektów do Google.

Usługa: travelpartnerprices.googleapis.com

Zalecamy wywołanie tej usługi przy użyciu dostarczonych przez Google bibliotek klienta. Jeśli aplikacja musi wywoływać tę usługę przy użyciu własnych bibliotek, skontaktuj się z zespołem ds. technicznej obsługi klienta, aby uzyskać dokument Discovery tej usługi.

Punkt końcowy usługi

Punkt końcowy usługi to podstawowy adres URL, który określa adres sieciowy usługi interfejsu API. Jedna usługa może mieć wiele punktów końcowych. Ta usługa ma następujący punkt końcowy i wszystkie wymienione identyfikatory URI odnoszą się do niego:

https://travelpartnerprices.googleapis.com
Metody
ingestLosPropertyPrices POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices

Prześlij podane ceny za długość pobytu w przypadku określonego obiektu.

Wymaga zakodowanej w formacie JSON wiadomości z cenami LoS (patrz poniżej) jako treści wiadomości HTTP.

account_id: ten ciąg znaków to wartość „Identyfikator konta” podana na stronie Ustawienia konta w Hotel Center.

property_id: wartość tego elementu musi być ciągiem znaków zgodnym z identyfikatorem oferty w pliku danych z listą hoteli.

Uwierzytelnianie interfejsu API

Interfejs Travel Partner Prices API używa protokołu OAuth 2.0 do uwierzytelniania aplikacji, dzięki czemu możesz uzyskiwać dostęp do interfejsów API.

Aby uzyskać autoryzację interfejsu Travel Partner Prices API, postępuj zgodnie z instrukcjami konfiguracji OAUTH 2.0.

Gdy tworzysz nowy projekt dla interfejsu Travel Partners Prices API, musisz włączyć dostęp do nowego projektu w konsoli Google Cloud. Jest to podobne do instrukcji podanych w interfejsie Travel Partner API.

Aby włączyć projekt, postępuj zgodnie z instrukcjami podanymi w przypadku interfejsu Travel Partner API i zastąp wszystkie wystąpienia „Travel Partner API” ciągiem „Travel Partner Prices API”.

Zakres interfejsu Travel Partner Prices API:"https://travelpartnerprices.googleapis.com"

Ścieżka przesyłania danych w przypadku interfejsu Travel Partner Prices API to: "/travel/lodging/uploads/accounts/<account_id>/property_data"

Żądania

Składnia

Wiadomość LoS Prices ma tę składnię:

{
  "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,...]
          }]
        }]
      }]
    }]
  }
}

Elementy i atrybuty

Wiadomość z cenami za długość pobytu zawiera te elementy i atrybuty:

Element Wystąpienia Typ Opis
requestTime 1 string

Moment wysłania wiadomości z ceną LoS, wyrażony jako ciąg znaków w formacie RFC 3339.

Wiadomości wysłane w ciągu ostatnich 24 godzin z symbolem requestTime są przetwarzane, a te, które nie zawierają tego symbolu, są odrzucane.

Wiadomości są przetwarzane w kolejności requestTime, niezależnie od kolejności ich otrzymania. Na przykład aktualizacja ceny z requestTime2019-05-03T14:09:00Z, która zostanie odebrana po wiadomości dotyczącej tych samych tras z requestTime2019-05-03T14:10:00Z, zostanie odrzucona na rzecz wiadomości z późniejszym znacznikiem czasu.

Standard RFC 3339 wymaga w pełni określonych dat i godzin w formacie YYYY-MM-DDThh:mm:ss.SSZ. Strefa czasowa jest wymagana i musi być podana jako dodatnie lub ujemne przesunięcie hh:mm względem czasu UTC albo Z jako skrót oznaczający czas UTC.

Ułamki sekund są opcjonalne i mogą być wyrażone z dokładnością do nanosekundy. Na przykład 2017-01-15T01:30:15.01-08:00 oznacza 15,01 sekundy po godzinie 1:30 czasu PST 15 stycznia 2017 r.

propertyPrices 1 Object ceny obowiązujące w obiekcie; Wszystkie ceny w tym propertyPrices dotyczą tej samej usługi.

Ten element nie jest powtarzany. Aby wysłać ceny dla wielu usług, musisz wysłać kilka żądań HTTP (co najmniej jedno na usługę).

arrivalDayPrices[] 1..n Object ceny dla daty przyjazdu. Wszystkie ceny w tym arrivalDayPrices dotyczą konkretnego obiektu, ale różnych dat przyjazdu.
startDate 1 Object productPrices obowiązuje w przypadku wszystkich dat przyjazdu między startDateendDate włącznie.

Jeśli chcesz podać tylko jedną datę przyjazdu (a nie zakres), wpisz ją w polach startDateendDate.

startDate.year 1 integer Rok startDate. Wartość musi mieścić się w przedziale od 1 do 9999.
startDate.month 1 integer Miesiąc roku. Musi mieścić się w przedziale od 1 do 12.
startDate.day 1 integer Dzień miesiąca. Wartość musi mieścić się w zakresie od 1 do 31 i być prawidłowa w przypadku danego roku i miesiąca.
endDate 0..1 Object Ceny produktów są stosowane do wszystkich dat przyjazdu między startDateendDate włącznie.

Jeśli chcesz podać tylko jedną datę przyjazdu (a nie zakres), możesz pominąć parametr endDate.

endDate.year 1 integer Rok endDate. Wartość musi mieścić się w przedziale od 1 do 9999.
endDate.month 1 integer Miesiąc roku. Musi mieścić się w przedziale od 1 do 12.
endDate.day 1 integer Dzień miesiąca. Wartość musi mieścić się w zakresie od 1 do 31 i być prawidłowa w przypadku danego roku i miesiąca.
productPrices[] 1..n Object Ceny produktu. Wszystkie ceny w tym productPrices dotyczą konkretnej kombinacji obiektu i daty przyjazdu, ale różnych produktów.
roomTypeId 0..1 string Unikalny identyfikator pokoju, do którego odnosi się ta cena. Użyj tego identyfikatora, aby dopasować dane pakietu pokoju do danych przesłanych w parametrze roomdata. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
ratePlanId 0..1 string Unikalny identyfikator danych pakietu, do którego odnosi się ta cena. Użyj tego identyfikatora, aby dopasować dane pakietu pokoju do danych przesłanych w ramach parametru packagedata. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
occupancyPrices[] 1..n Object ceny za pobyt, Wszystkie ceny w tym occupancyPrices dotyczą konkretnego obiektu, daty przyjazdu i kombinacji produktów, ale różnych liczb gości.
adults 1 integer Maksymalna liczba gości, których można zarezerwować w pokoju, w tym osoby dorosłe i dzieci. Ta wartość jest ustawiana dla wszystkich stawek w odpowiednim polu occupancyPrices i musi być dodatnią liczbą całkowitą z zakresu od 1 do 99.

Uwaga: aby wysłać dane o zajętości w przypadku więcej niż 4 osób dorosłych, skontaktuj się z zespołem pomocy.

prices[] 1..n Object Ceny za długość pobytu. Wszystkie ceny w prices dotyczą konkretnej kombinacji obiektu, daty przyjazdu, produktu i liczby osób.
rateRuleId 0..1 string W przypadku cen warunkowych ten identyfikator dopasowuje cenę do definicji w pliku definicji reguł dotyczących cen. Limit znaków w tym polu wynosi 40.
currencyCode 1 string Trzyliterowy kod waluty, w której podane są wartości ratestaxes. np. "USD" w przypadku dolarów amerykańskich.
rates[] 30 float Składnik ceny za pobyt o określonej długości, który stanowi stawka podstawowa.

Jeśli podana jest odpowiednia wartość taxes, stawka ta nie obejmuje podatku. Łączna cena to suma odpowiedniej stawki i podatku.

Wartość w indeksie n odpowiada długości pobytu n+1.

Musisz przesyłać pełny zestaw 30 cen LoS naraz. Jeśli wyślesz mniej niż 30 cen LoS, wszystkie podane ceny LoS zostaną przetworzone w normalny sposób, a pozostałe stawki będą niedostępne do poziomu LoS 30. Jeśli wyślesz więcej niż 30 stawek,wszystkie stawki powyżej 30. zostaną odrzucone.

Niedostępne długości pobytu powinny być oznaczone symbolem 0.

taxes[] 30 float Składnik podatkowy cen za długość pobytu.

Wartość w indeksie n odpowiada długości pobytu n+1.

fees[] 30 float Składnik opłaty w cenach za długość pobytu.

Wartość w indeksie n odpowiada długości pobytu n+1.

Przykład

Stawki i podatki na podstawie długości pobytu

W tym przykładzie pokazujemy, jak ustawić minimalną długość pobytu na 2 noce w przypadku jednej daty zameldowania i brak dostępności w przypadku innej daty zameldowania. Jeśli ustawisz startDate od 1 września 2023 r. bez podania endDate, oznacza to, że określasz stawki tylko dla jednej daty i możesz pominąć endDate.

Tablica occupancyPrices ustawiona na 2 umożliwia ustawianie różnych stawek przy różnym obłożeniu. Dlatego brak wolnych miejsc w dniu 09.04.23 r. ogranicza dostępność rates.

Wyświetlany zakres taxes jest obliczany jako 10% stawki.

Tablica fees pokazuje opłatę za sprzątanie w wysokości 50 USD za pobyt.

Jeśli cała data zameldowania jest niedostępna – 3.9.2023, musisz wyraźnie wysłać datę i pominąć znaki rates, taxesproductPrices, aby wskazać, że w wybranym dniu nie ma dostępności.

{
  "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
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

Treść odpowiedzi

W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:

Zapis JSON
        {
          "name": "string"
        }
        
Pola
name Nazwa zasobu PropertyPrices, który został zmodyfikowany. ma postać:
accounts/{account}/properties/{property}.