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

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

ট্রিপ তৈরির মৌলিক বিষয়

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

  • CreateTrip() পদ্ধতি: gRPC বা REST
  • CreateTripRequest বার্তা: শুধুমাত্র gRPC

ট্রিপ ক্ষেত্র

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

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

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

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

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

যাত্রীদের_সংখ্যা না ট্রিপে যাত্রীর সংখ্যা।
ড্রপঅফ_পয়েন্ট না ভ্রমণের গন্তব্য।
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;
}

একটি বহু-গন্তব্য ট্রিপ আপডেট করুন

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

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

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

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

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 , আপনাকে অবশ্যই ফ্লিট ইঞ্জিনে ট্রিপের অবস্থা আপডেট করতে হবে৷ ট্রিপ স্টেট সর্বদা 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;
}

এরপর কি