বহু-গন্তব্য ভ্রমণ তৈরি করুন

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কীভাবে একাধিক গন্তব্যের একটি ট্রিপ তৈরি করতে হয়, সঠিক ফিল্ডগুলো সেট করতে হয় এবং তা সম্পন্ন করার জন্য একটি যানবাহনকে বরাদ্দ করতে হয়। এটি ধরে নেয় যে আপনি ফ্লিট ইঞ্জিন সেট আপ করেছেন, যানবাহন তৈরি করেছেন, আপনার একটি কার্যকর ড্রাইভার অ্যাপ এবং ঐচ্ছিকভাবে, একটি কনজিউমার অ্যাপ রয়েছে। অন-ডিমান্ড ট্রিপের জন্য উপলব্ধ বিভিন্ন ট্রিপ সিনারিও সম্পর্কেও আপনার পরিচিতি থাকা উচিত। এর জন্য নিম্নলিখিত সম্পর্কিত গাইডগুলো দেখুন:

ট্রিপ তৈরির প্রাথমিক বিষয়াবলী

এই বিভাগে ফ্লিট ইঞ্জিনে একটি ট্রিপ তৈরি করার জন্য প্রয়োজনীয় অনুরোধের বিবরণ বর্ণনা করা হয়েছে। আপনি gRPC এবং REST ব্যবহার করে একটি তৈরির অনুরোধ পাঠাতে পারেন।

  • CreateTrip() মেথড: gRPC অথবা REST
  • CreateTripRequest বার্তা: শুধুমাত্র gRPC

ট্রিপ ফিল্ডস

ফ্লিট ইঞ্জিনে একটি ট্রিপ তৈরি করতে নিম্নলিখিত ফিল্ডগুলো ব্যবহার করুন। আপনি বিভিন্ন ধরণের ট্রিপের জন্য ভিন্ন ভিন্ন ফিল্ড ব্যবহার করতে পারেন: একক- বা একাধিক-গন্তব্য, পরপর, বা শেয়ার্ড পুলিং ট্রিপ। ট্রিপ তৈরি করার সময় আপনি ঐচ্ছিক ফিল্ডগুলো সরবরাহ করতে পারেন, অথবা পরে ট্রিপ আপডেট করার সময় সেগুলো সেট করতে পারেন।

ভ্রমণের ক্ষেত্র
নাম প্রয়োজন? বর্ণনা
অভিভাবক হ্যাঁ একটি স্ট্রিং যাতে প্রজেক্ট আইডি অন্তর্ভুক্ত থাকে। এই আইডিটি অবশ্যই আপনার সম্পূর্ণ ফ্লিট ইঞ্জিন ইন্টিগ্রেশন জুড়ে একই সার্ভিস অ্যাকাউন্ট রোলের জন্য ব্যবহৃত আইডি হতে হবে।
ট্রিপ_আইডি হ্যাঁ আপনার তৈরি করা একটি স্ট্রিং যা এই ট্রিপটিকে অনন্যভাবে শনাক্ত করে। রেফারেন্সে যেমন উল্লেখ করা হয়েছে, ট্রিপ আইডিগুলোর কিছু নির্দিষ্ট সীমাবদ্ধতা রয়েছে।
ভ্রমণের ধরণ হ্যাঁ আপনি যে ট্রিপ টাইপটি তৈরি করছেন, তার জন্য TripType-কে নিম্নলিখিত মানগুলিতে সেট করুন:
  • একক গন্তব্য : SHARED বা EXCLUSIVE হিসেবে সেট করুন।
  • একাধিক গন্তব্য : EXCLUSIVE এ সেট করা হয়েছে।
  • পরপর : EXCLUSIVE হিসেবে সেট করা হয়েছে।
  • শেয়ার্ড পুলিং : SHARED এ সেট করুন।
পিকআপ_পয়েন্ট হ্যাঁ যাত্রাটির উৎসস্থল।
মধ্যবর্তী গন্তব্যস্থল হ্যাঁ

শুধুমাত্র একাধিক গন্তব্যের ট্রিপের জন্য : পিকআপ এবং ড্রপ-অফের মাঝে ড্রাইভার যেসব মধ্যবর্তী গন্তব্যে যান, তার তালিকা। dropoff_point এর মতোই, এই ফিল্ডটিও UpdateTrip কল করে পরে সেট করা যেতে পারে, কিন্তু সংজ্ঞানুসারে একটি একাধিক গন্তব্যের ট্রিপে মধ্যবর্তী গন্তব্য অন্তর্ভুক্ত থাকে।

যানবাহন_ওয়েপয়েন্ট হ্যাঁ

শুধুমাত্র শেয়ার্ড-পুলিং ট্রিপের জন্য : এই ফিল্ডটি একাধিক ট্রিপের ওয়েপয়েন্টগুলোকে একসাথে সাজানো সমর্থন করে। এতে নির্ধারিত গাড়ির জন্য বাকি থাকা সমস্ত ওয়েপয়েন্ট, সেইসাথে এই ট্রিপের পিকআপ এবং ড্রপ-অফ ওয়েপয়েন্টগুলো থাকে। আপনি CreateTrip বা UpdateTrip কল করে এই ফিল্ডটি সেট করতে পারেন। এছাড়াও, আপনি UpdateVehicle কল করে waypoints ফিল্ডের মাধ্যমে গাড়ির ওয়েপয়েন্টগুলো আপডেট করতে পারেন। গোপনীয়তার কারণে, সার্ভিসটি GetTrip কলে এই তথ্য ফেরত দেয় না।

যাত্রীর সংখ্যা না যাত্রাপথে যাত্রীর সংখ্যা।
ড্রপঅফ_পয়েন্ট না ভ্রমণের গন্তব্য।
গাড়ির_আইডি না ট্রিপের জন্য বরাদ্দকৃত যানবাহনটির আইডি।

উদাহরণ: একাধিক গন্তব্য সহ একটি ভ্রমণ তৈরি করুন

নিম্নলিখিত অংশে দেখানো হয়েছে কীভাবে একটি পিকআপ পয়েন্ট, একটি ড্রপ-অফ পয়েন্ট এবং একটি মধ্যবর্তী গন্তব্য সহ একটি স্বতন্ত্র একাধিক গন্তব্যযুক্ত ট্রিপ তৈরি করতে হয়।

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;
}

একাধিক গন্তব্যের ভ্রমণ আপডেট করুন

আপনাকে অবশ্যই একটি ভেহিকেল আইডি দিয়ে ট্রিপটি কনফিগার করতে হবে, যাতে ফ্লিট ইঞ্জিন তার রুট বরাবর যানটিকে ট্র্যাক করতে পারে। ট্রিপ আপডেট করার বিষয়ে বিস্তারিত জানতে, ‘ট্রিপ আপডেট করুন এবং তাদের অবস্থা পরিচালনা করুন’ দেখুন।

ট্রিপ তৈরি করার সময় আপনি যদি নামার জায়গা বা মধ্যবর্তী গন্তব্যস্থল নির্দিষ্ট না করেন, তাহলে আপনি এই পর্যায়ে তা যেকোনো সময় করতে পারেন।

ভ্রমণের উদাহরণ আপডেট

নিম্নলিখিত অংশে দেখানো হয়েছে কীভাবে একটি ট্রিপ আপডেট করে মধ্যবর্তী গন্তব্যস্থলের তালিকা যোগ করতে এবং একটি যানবাহন আইডি সেট করতে হয়।

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;
}

একাধিক গন্তব্যের ট্রিপের অবস্থা পরিচালনা করুন

আপনি TripStatus এনুমারেশন ভ্যালুগুলোর মধ্যে একটি ব্যবহার করে একটি ট্রিপের অবস্থা নির্দিষ্ট করেন। যখন একটি ট্রিপের অবস্থা পরিবর্তিত হয়, উদাহরণস্বরূপ 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;
}

এরপর কী?