GetTripOptions yöntemi

Bu yöntem, belirli bir gezi için üst düzey bilet grupları sağlar. Bunlar, aynı biletle rezerve edilebilen seçili hizmet sınıflarına sahip segment kümelerinin yanı sıra biletin tamamı için ücret ve müsaitlik bilgilerini içerir. Unutmayın:

GetTripOptionsRequest

Proto Tanımı

// Request sent to partners.
message GetTripOptionsRequest {
  // All segments together should form a single trip for which a ticket can be
  // booked.
  repeated ext.travel.transport.partner.SegmentKey segment_keys = 1;
}

JSON örneği

{
  "segment_keys": [
    {
      "ticketing_trip_id": "123456",
      "from_ticketing_stop_time_id": "ZRH-1234",
      "to_ticketing_stop_time_id": "LUZ-1235",
      "service_date": {
        "year": 2022,
        "month": 4,
        "day": 6
      },
      "boarding_time": {
        "year": 2022,
        "month": 4,
        "day": 6,
        "hours": 14,
        "minutes": 25,
        "seconds": 0,
        "nanos": 0,
        "utc_offset": "0s"
      },
      "arrival_time": {
        "year": 2022,
        "month": 4,
        "day": 6,
        "hours": 16,
        "minutes": 25,
        "seconds": 0,
        "nanos": 0,
        "utc_offset": "0s"
      }
    },
    {
      "ticketing_trip_id": "234567",
      "from_ticketing_stop_time_id": "LUZ-2759",
      "to_ticketing_stop_time_id": "WOL-2455",
      "service_date": {
        "year": 2022,
        "month": 4,
        "day": 6
      },
      "boarding_time": {
        "year": 2022,
        "month": 4,
        "day": 6,
        "hours": 18,
        "minutes": 13,
        "seconds": 0,
        "nanos": 0,
        "utc_offset": "0s"
      },
      "arrival_time": {
        "year": 2022,
        "month": 4,
        "day": 6,
        "hours": 20,
        "minutes": 13,
        "seconds": 0,
        "nanos": 0,
        "utc_offset": "0s"
      }
    }
  ]
}

GetTripOptionsResponse

Proto Tanımı

// Response received from partners.
message GetTripOptionsResponse {
  oneof response {
    TripOptionsResult trip_options_result = 1;
    TripOptionsError trip_options_error = 2;
  }
}

// A successful partner response.
message TripOptionsResult {
  // Note:
  // - A TripOption represents the fare for a combination of available service
  //   classes for the segments in the request.
  // - If the seats within a service class are sold at different fares of
  //   limited availability, a different TripOption instance with the same
  //   sequence of segments can be returned for each fare.

  // Partners should also include options that are unavailable because they are
  // fully booked, using the appropriate Unavailable message below.
  repeated TripOption trip_options = 1;
}


// A travel option for users covering the whole end-to-end journey with the
// partner.
message TripOption {
  // A series of Segments that cover the whole trip option, one for each
  // SegmentKey in the request.
  repeated Segment segments = 1;

  // This is the lowest standard fare of all seats with the specified segments.
  // This field is optional if the series of segments is unavailable.
  // This "standard fare" should be the lowest seat price where no age or other
  // booking restrictions apply. The currency should be the local currency of
  // the origin of the first segment.
  Fare lowest_standard_fare = 2;

  // The availability status for bookings of this trip option at the
  // lowest_standard_fare.
  Availability availability = 3;

  // This is used to receive optional extra data via the Travel Transport API
  // and pass it into the ticketing deep link.
  // Booking links should still work without the booking token, but the token
  // can be used to ensure price consistency between Google Search results and
  // the partner booking page.
  string booking_token = 4 [features.field_presence = EXPLICIT];
}

// A segment traveled on a single vehicle in a given Service Class.
message Segment {
  SegmentKey segment_key = 1;

  // The service class used on this segment.
  ServiceClass service_class = 2;
}

JSON örneği

{
  "trip_options_result": {
    "trip_options": [
      {
        "segments": [
          {
            "segment_key": {
              "ticketing_trip_id": "123456",
              "from_ticketing_stop_time_id": "ZRH-1234",
              "to_ticketing_stop_time_id": "LUZ-1235",
              "service_date": {
                "year": 2022,
                "month": 4,
                "day": 6
              },
              "boarding_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 14,
                "minutes": 25,
                "seconds": 0,
                "utc_offset": "0s"
              },
              "arrival_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 16,
                "minutes": 25,
                "seconds": 0,
                "utc_offset": "0s"
              }
            },
            "service_class": {
              "type": "FIRST_CLASS"
            }
          },
          {
            "segment_key": {
              "ticketing_trip_id": "234567",
              "from_ticketing_stop_time_id": "LUZ-2759",
              "to_ticketing_stop_time_id": "WOL-2455",
              "service_date": {
                "year": 2022,
                "month": 4,
                "day": 6
              },
              "boarding_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 18,
                "minutes": 13,
                "seconds": 0,
                "utc_offset": "0s"
              },
              "arrival_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 20,
                "minutes": 13,
                "seconds": 0,
                "utc_offset": "0s"
              }
            },
            "service_class": {
              "type": "FIRST_CLASS"
            }
          }
        ],
        "lowest_standard_fare": {
          "total_amount": {
            "units": 15,
            "nanos": 0,
            "currency_code": "CHF"
          },
          "line_items": [
            {
              "line_item_type": "BASE_FARE",
              "amount": {
                "units": 13,
                "nanos": 950000000,
                "currency_code": "CHF"
              }
            },
            {
              "line_item_type": "SERVICE_CHARGE",
              "amount": {
                "units": 1,
                "nanos": 50000000,
                "currency_code": "CHF"
              }
            }
          ]
        },
        "availability": {
          "available": {
            "available_seat_count": 10,
            "total_seat_count": 30
          }
        }
      },
      {
        "segments": [
          {
            "segment_key": {
              "ticketing_trip_id": "123456",
              "from_ticketing_stop_time_id": "ZRH-1234",
              "to_ticketing_stop_time_id": "LUZ-1235",
              "service_date": {
                "year": 2022,
                "month": 4,
                "day": 6
              },
              "boarding_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 14,
                "minutes": 25,
                "seconds": 0,
                "utc_offset": "0s"
              },
              "arrival_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 16,
                "minutes": 25,
                "seconds": 0,
                "utc_offset": "0s"
              }
            },
            "service_class": {
              "type": "SECOND_CLASS"
            }
          },
          {
            "segment_key": {
              "ticketing_trip_id": "234567",
              "from_ticketing_stop_time_id": "LUZ-2759",
              "to_ticketing_stop_time_id": "WOL-2455",
              "service_date": {
                "year": 2022,
                "month": 4,
                "day": 6
              },
              "boarding_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 18,
                "minutes": 13,
                "seconds": 0,
                "utc_offset": "0s"
              },
              "arrival_time": {
                "year": 2022,
                "month": 4,
                "day": 6,
                "hours": 20,
                "minutes": 13,
                "seconds": 0,
                "utc_offset": "0s"
              }
            },
            "service_class": {
              "type": "SECOND_CLASS"
            }
          }
        ],
        "lowest_standard_fare": {
          "total_amount": {
            "units": 10,
            "nanos": 0,
            "currency_code": "CHF"
          },
          "line_items": [
            {
              "line_item_type": "BASE_FARE",
              "amount": {
                "units": 9,
                "nanos": 750000000,
                "currency_code": "CHF"
              }
            },
            {
              "line_item_type": "SERVICE_CHARGE",
              "amount": {
                "units": 0,
                "nanos": 250000000,
                "currency_code": "CHF"
              }
            }
          ]
        },
        "availability": {
          "available": {
            "available_seat_count": 44,
            "total_seat_count": 200
          }
        }
      }
    ]
  }
}

JSON Hatası Örneği

{
  "trip_options_error": {
    "error_type": "SEGMENT_KEY_NOT_FOUND",
    "error_message": "No matching segments found, no departures at 14:25"
  }
}

API Uygulama Notu:

Olası değişikliklerle ileriye dönük uyumluluk için segment anahtarlarında ek parametreler bulunursa bunları her zaman yanıtta döndürün. Aksi takdirde, parametreler için özel destek uygulayana kadar parametreleri yok sayın ve isteği parametreler yokmuş gibi değerlendirin.

Hata yanıtları

Aşağıdaki tabloda, bu yöntemle ilgili hata raporlama beklentileri açıklanmaktadır:

Hata Türü Yeniden denenebilir HTTP Durum Kodu Açıklama
SEGMENT_KEY_NOT_FOUND Hayır 404 Sağlanan SegmentKey değerlerinden birine karşılık gelen segment bulunamıyor.
TRIP_OPTION_CACHE_STALE Evet 404 İstenen gezi seçeneğiyle ilgili veriler iş ortağında güncel değildir ve Google'a sağlanabilmesi için yenilenmesi gerekir.
INTERNAL_ERROR Evet 500 Bu gezi alınırken beklenmeyen bir hata oluştu. Bu, iş ortağı tarafından düzeltilmesi gereken bir hata olduğunu gösterir.
SUBOPTIMAL_ITINERARY Hayır 404 Seyahat bulundu ancak iş ortağı bunu ideal olmayan bir seçenek olarak değerlendiriyor ve bu seyahat için bilet satmamayı tercih ediyor.
TICKETING_PROHIBITED Hayır 404 Seyahat bulundu ancak operatör veya demiryolu idaresi tarafından uygulanan genel bilet satışı kısıtlamaları nedeniyle iş ortağının bu seyahat için bilet satmasına izin verilmiyor.
BOOKING_WINDOW_NOT_SUPPORTED Hayır 404 İş ortağı, istenen tarih için seyahat planı fiyatlandırmasını desteklemiyor.

Daha fazla bilgi için TripOptionsErrorType sayfasını inceleyin.

HTTP yanıtlarında döndürülen durum kodu için Durum kodları ve hata işleme başlıklı makaleyi inceleyin.