कई मंज़िलों वाली यात्राएं बनाएं

इस दस्तावेज़ में, एक से ज़्यादा डेस्टिनेशन वाली यात्रा बनाने, सही फ़ील्ड सेट करने, और उसे पूरा करने के लिए किसी वाहन को असाइन करने का तरीका बताया गया है. इसमें यह माना जाता है कि आपने Fleet Engine सेट अप कर लिया है, वाहन बना लिए हैं, और आपके पास ड्राइवर ऐप्लिकेशन काम कर रहा है. साथ ही, आपके पास ग्राहक ऐप्लिकेशन भी है. इसके अलावा, आपको ऑन-डिमांड यात्राओं के लिए उपलब्ध अलग-अलग यात्रा के परिदृश्यों के बारे में भी पता होना चाहिए. इसके लिए, यहां दिए गए संबंधित गाइड देखें:

यात्रा बनाने की बुनियादी बातें

इस सेक्शन में, Fleet Engine में यात्रा बनाने के लिए ज़रूरी अनुरोध की जानकारी दी गई है. gRPC और REST, दोनों में से किसी एक का इस्तेमाल करके, यात्रा बनाने का अनुरोध किया जा सकता है.

  • CreateTrip() तरीका: gRPC या REST
  • CreateTripRequest मैसेज: gRPC सिर्फ़

यात्रा के फ़ील्ड

Fleet Engine में यात्रा बनाने के लिए, इन फ़ील्ड का इस्तेमाल करें. अलग-अलग तरह की यात्राओं के लिए, अलग-अलग फ़ील्ड का इस्तेमाल किया जा सकता है. जैसे, एक या एक से ज़्यादा डेस्टिनेशन वाली यात्राएं, बैक-टू-बैक यात्राएं या शेयर की जाने वाली पूलिंग यात्राएं. यात्रा बनाते समय, ज़रूरी नहीं वाले फ़ील्ड की जानकारी दी जा सकती है. इसके अलावा, यात्रा को अपडेट करते समय भी इनकी जानकारी दी जा सकती है.

यात्रा के फ़ील्ड
नाम ज़रूरी है? ब्यौरा
parent हां यह एक स्ट्रिंग है, जिसमें प्रोजेक्ट आईडी शामिल होता है. यह आईडी, आपके पूरे Fleet Engine इंटिग्रेशन में इस्तेमाल किए गए आईडी के जैसा होना चाहिए. साथ ही, सेवा खाते की भूमिकाएं भी एक जैसी होनी चाहिए.
trip_id हां यह एक स्ट्रिंग है, जिसे आपने बनाया है. इससे इस यात्रा की खास तौर पर पहचान होती है. रेफ़रंस में बताए गए, यात्रा के आईडी पर कुछ पाबंदियां लागू होती हैं.
trip_type हां जिस तरह की यात्रा बनाई जा रही है उसके लिए, TripType को इन वैल्यू पर सेट करें:
  • एक डेस्टिनेशन वाली यात्रा: इसे SHARED या EXCLUSIVE पर सेट करें.
  • एक से ज़्यादा डेस्टिनेशन वाली यात्रा: इसे EXCLUSIVE पर सेट करें.
  • बैक-टू-बैक यात्रा: इसे EXCLUSIVE पर सेट करें.
  • शेयर की जाने वाली पूलिंग यात्रा: इसे SHARED पर सेट करें.
pickup_point हां यह यात्रा की शुरुआत की जगह है.
इंटरमीडिएट डेस्टिनेशन हां

सिर्फ़ एक से ज़्यादा डेस्टिनेशन वाली यात्राएं: यह उन इंटरमीडिएट डेस्टिनेशन की सूची है जहां ड्राइवर, पिकअप और ड्रॉप-ऑफ़ के बीच जाता है. dropoff_point की तरह, इस फ़ील्ड को UpdateTrip को कॉल करके बाद में भी सेट किया जा सकता है. हालांकि, एक से ज़्यादा डेस्टिनेशन वाली यात्रा में, इंटरमीडिएट डेस्टिनेशन शामिल होते हैं.

vehicle_waypoints हां

सिर्फ़ शेयर की जाने वाली पूलिंग यात्राएं: इस फ़ील्ड में, एक से ज़्यादा यात्राओं के वेपॉइंट को इंटरलीव किया जा सकता है. इसमें, असाइन किए गए वाहन के लिए बाकी बचे सभी वेपॉइंट के साथ-साथ, इस यात्रा के पिकअप और ड्रॉप-ऑफ़ वेपॉइंट शामिल होते हैं. आप इस फ़ील्ड को CreateTrip या UpdateTrip को कॉल करके सेट कर सकते हैं. `UpdateVehicle` को कॉल करके, `waypoints` फ़ील्ड की मदद से वाहन के वेपॉइंट भी अपडेट किए जा सकते हैं. निजता की वजहों से, सेवा GetTrip कॉल पर यह जानकारी नहीं दिखाती.

number_of_passengers नहीं यह यात्रा में शामिल यात्रियों की संख्या है.
dropoff_point नहीं यह यात्रा की मंज़िल है.
vehicle_id नहीं यह यात्रा के लिए असाइन किए गए वाहन का आईडी है.

उदाहरण: एक से ज़्यादा डेस्टिनेशन वाली यात्रा बनाना

यहां दिए गए उदाहरण में, एक से ज़्यादा डेस्टिनेशन वाली ऐसी यात्रा बनाने का तरीका बताया गया है जिसमें पिकअप पॉइंट, ड्रॉप-ऑफ़ पॉइंट, और एक इंटरमीडिएट डेस्टिनेशन शामिल है.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip initial settings.
String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setNumberOfPassengers(1)
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .build();

// Create the Trip request.
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)  // Trip ID assigned by the Provider server.
    .setTrip(trip)       // Initial state is NEW.
    .build();

// Error handling.
try {
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:  // Trip already exists.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
LatLng

एक से ज़्यादा डेस्टिनेशन वाली यात्रा को अपडेट करना

आपको यात्रा को वाहन आईडी के साथ कॉन्फ़िगर करना होगा, ताकि Fleet Engine, वाहन को उसके रास्ते पर ट्रैक कर सके. यात्रा को अपडेट करने के बारे में ज़्यादा जानने के लिए, यात्राएं अपडेट करना और उनकी स्थिति मैनेज करना लेख पढ़ें.

अगर यात्रा बनाते समय, ड्रॉप-ऑफ़ या इंटरमीडिएट डेस्टिनेशन की जानकारी नहीं दी जाती है, तो इस समय दी जा सकती है.

यात्रा के अपडेट का उदाहरण

यहां दिए गए उदाहरण में, इंटरमीडिएट डेस्टिनेशन की सूची जोड़ने और वाहन आईडी सेट करने के लिए, यात्रा को अपडेट करने का तरीका बताया गया है.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

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

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("intermediate_destinations")
            .addPaths("vehicle_id")
            .build())
    .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 PERMISSION_DENIED:
      break;
  }
  return;
}
LatLng

एक से ज़्यादा डेस्टिनेशन वाली यात्राओं के लिए, यात्रा की स्थिति मैनेज करना

यात्रा की स्थिति बताने के लिए, TripStatus एनमरेशन की किसी एक वैल्यू का इस्तेमाल करें. जब किसी यात्रा की स्थिति बदलती है, तब आपको Fleet Engine में यात्रा की स्थिति अपडेट करनी होगी. उदाहरण के लिए, अगर स्थिति ENROUTE_TO_PICKUP से बदलकर ARRIVED_AT_PICKUP हो जाती है, तो आपको Fleet Engine में यात्रा की स्थिति अपडेट करनी होगी. यात्रा की स्थिति हमेशा NEW वैल्यू से शुरू होती है और COMPLETE या CANCELED वैल्यू पर खत्म होती है.

एक से ज़्यादा डेस्टिनेशन वाली यात्रा के लिए, आपको यात्रा की स्थिति को अपडेट करना होगा. इसके अलावा, हर बार जब आपका वाहन किसी इंटरमीडिएट डेस्टिनेशन पर पहुंचता है, तो आपको ये भी अपडेट करना होगा:

  • intermediateDestinationIndex
  • intermediateDestinationsVersion

इसके लिए, TripStatus एनमरेशन से ये वैल्यू इस्तेमाल करें.

  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE

इंटरमीडिएट डेस्टिनेशन वाली यात्रा का उदाहरण

यहां दिए गए उदाहरण में, एक से ज़्यादा डेस्टिनेशन वाली ऐसी यात्रा बनाने का तरीका बताया गया है जो अपने पिकअप पॉइंट से आगे बढ़ चुकी है और अब अपने पहले इंटरमीडिएट डेस्टिनेशन की ओर जा रही है.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

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

// Get the trip object from either the Fleet Engine or storage.
Trip trip = ;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Trip status cannot return to a previous state once it has passed.
    .setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)

    // Enroute to the first intermediate destination.
    .setIntermediateDestinationIndex(0)

    // You must provide an intermediate_destinations_version to ensure that you
    // have the same intermediate destinations list as the Fleet Engine.
    .setIntermediateDestinationsVersion(
         trip.getIntermediateDestinationsVersion())
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("trip_status")
            .addPaths("intermediate_destination_index")
            // intermediate_destinations_version must not be in the update mask.
            .build())
    .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:  // Either the trip status is invalid, or the
                               // intermediate_destinations_version doesn't
                               // match Fleet Engine's.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

आगे क्या करना है