Seyahatleri güncelleme ve durumlarını yönetme

Bu dokümanda, bir geziyi nasıl güncelleyeceğiniz ve durumunu nasıl yöneteceğiniz açıklanmaktadır. Bu işlem, bir gezi için alakalı alanları ayarlamak üzere alan maskesi kullanmayı içerir. Bu sitede açıklandığı gibi Fleet Engine'ı kurduğunuz ve bir seyahate atanmış bir araçla çalıştığınız varsayılır.

Gezi güncellemesiyle ilgili temel bilgiler

Sisteminiz, bir geziyi güncellemek için aşağıdaki durumlarda Fleet Engine'ı kullanır:

  • Bir gezi oluşturulduktan sonra geziye araç atarken.
  • Yolculuğun durumu değiştiğinde (ör. araç yol noktalarından geçtiğinde).
  • Yolcu sayısı ve bırakma noktası gibi seyahat alanlarını güncellediğinizde

Bir geziyi güncellemek için gRPC ve REST'i kullanarak istek gönderin.

  • UpdateTrip() yöntemi: gRPC veya REST
  • UpdateTripRequest mesajı: Yalnızca gRPC

Fleet Engine: Hizmet hesabı rolleri bölümünde açıklandığı gibi, projenizin hizmet hesabı için uygun kimlik bilgilerini kullanın.

Gezi alanlarını güncelleme

Tek hedefli gezi oluşturma bölümündeki Gezi alanları bölümünde açıklanan gezi alanlarından herhangi birini güncelleyebilirsiniz. Örneğin, bir gezi oluşturduktan sonra önce bir araç bulup geziyi gerçekleştirecek araçla ilişkilendirmek için gezi vehicle_id alanını güncellemek yaygın bir uygulamadır.

Alan maskeleri kullanma

Alan maskeleri, API çağırıcılarının bir istekte bulunması veya güncellemesi gereken alanları listelemesi için bir yoldur. FieldMask kullanmak gereksiz çalışmalardan kaçınır ve performansı artırır. Fleet Engine, tüm kaynaklardaki alanları güncellemek için alan maskelerini kullanır.

Geziyi araç kimliğiyle güncelleme

Fleet Engine'ın aracı rotasında izleyebilmesi için bir geziyi araç kimliğiyle yapılandırmanız gerekir. Aşağıdaki kod örneğinde, seyahatin araç kimliğiyle nasıl güncelleneceği gösterilmektedir.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest =
    UpdateTripRequest.newBuilder()      // No need for the header.
        .setName(tripName)
        .setTrip(trip)
        .setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
        .build();

// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:                    // Neither the trip nor vehicle exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Seyahatler için seyahat durumunu yönetme

TripStatus listeleme değerlerinden birini kullanarak seyahatin durumunu belirtirsiniz. Bir seyahatin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP yerine ARRIVED_AT_PICKUP) Fleet Engine'da seyahat durumunu güncelleyebilirsiniz. Gezi yaşam döngüsü her zaman NEW olan bir durum değeriyle başlar ve COMPLETE veya CANCELED olan bir değerle biter.

Örnek gezi güncellemesi

Aşağıda, Fleet Engine'da art arda yapılan bir yolculuğun durum bilgisinin nasıl güncelleneceği gösterilmektedir.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip settings to be updated.
Trip trip = Trip.newBuilder()
    .setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
    .build();

// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
    .build();

// Error handling.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case FAILED_PRECONDITION:  // The given trip status is invalid.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Gezileri güncellemeyle ilgili diğer örnekleri Diğer gezi türleri bölümünde bulabilirsiniz.

Gezi hatalarını işleme

Mevcut gezileri güncellerken veya bulurken DEADLINE_EXCEEDED hatasıyla karşılaşabilirsiniz. Bu durumda Fleet Engine'ın durumu bilinmez. Bu sorunu incelemek için önce güncellemeye veya izlemeye çalıştığınız seyahat kimliğini kullanarak CreateTrip'yi tekrar arayın. Bu işlem sonucunda 201 (CREATED) veya 409 (CONFLICT) yanıtı döndürülür. İkinci durumda, önceki istek DEADLINE_EXCEEDED'ten önce başarılı olmuştur.

Android veya iOS için Tüketici SDK'sındaki ağ hatalarının listesini inceleyin.

Sırada ne var?