শেয়ার্ড পুলিং ট্রিপ তৈরি করুন

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

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

এই বিভাগটি ফ্লিট ইঞ্জিনে একটি ট্রিপ তৈরি করার জন্য প্রয়োজনীয় অনুরোধের বিবরণ বর্ণনা করে। আপনি 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 না ভ্রমণের জন্য নির্ধারিত গাড়ির আইডি।

উদাহরণ: একটি শেয়ার্ড পুলিং ট্রিপ তৈরি করুন

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

// Vehicle with VEHICLE_ID ID is already created and it is assigned Trip A.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "shared-trip-A";
static final String VEHICLE_ID = "your-vehicle-id";
static final String TRIP_A_ID = "trip-a-id";
static final String TRIP_B_ID = "trip-b-id";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

LatLng tripBPickup =
    LatLng.newBuilder().setLatitude(-12.12314).setLongitude(88.142123).build();
LatLng tripBDropoff =
    LatLng.newBuilder().setLatitude(-14.12314).setLongitude(90.142123).build();

TerminalLocation tripBPickupTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBPickup).build();
TerminalLocation tripBDropoffTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBDropoff).build();

// TripA already exists and it's assigned to a vehicle with VEHICLE_ID ID.
Trip tripB = Trip.newBuilder()
    .setTripType(TripType.SHARED)
    .setVehicleId(VEHICLE_ID)
    .setPickupPoint(tripBPickupTerminalLocation)
    .setDropoffPoint(tripBDropoffTerminalLocation)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripBPickupTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripBDropoffTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

// Create Trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_B_ID)
    .setTrip(tripB)
    .build();

try {
  // createdTrip.remainingWaypoints will contain shared-pool waypoints.
  // [tripB.pickup, tripA.dropoff, tripB.dropoff]
  Trip createdTrip = tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

শেয়ার্ড পুলিং ট্রিপ আপডেট করুন

ফ্লিট ইঞ্জিনে তৈরি যেকোন ট্রিপকে অবশ্যই একটি গাড়ির জন্য বরাদ্দ করতে হবে যাতে ফ্লিট ইঞ্জিন ট্রিপের ETA গণনা করতে এবং এটি ট্র্যাক করতে পারে। আপনি ট্রিপ তৈরির সময় বা পরে যখন আপনি ট্রিপ আপডেট করবেন তখন আপনি এটি করতে পারেন।

শেয়ার্ড পুলিং ট্রিপের জন্য, আপনাকে অবশ্যই ট্রিপের গাড়ির ওয়েপয়েন্ট ( Trip.vehicle_waypoints ) এর সংগ্রহে দেখা না হওয়া ওয়েপয়েন্টের জন্য একটি অর্ডার নির্দিষ্ট করতে হবে। ফ্লিট ইঞ্জিন শেয়ার্ড-পুলের সমস্ত ট্রিপের জন্য স্বয়ংক্রিয়ভাবে ট্রিপ ওয়েপয়েন্ট আপডেট করতে এই তালিকাটি ব্যবহার করে।

উদাহরণস্বরূপ, দুটি শেয়ার্ড-পুল ট্রিপ বিবেচনা করুন, ট্রিপ এ এবং ট্রিপ বি :

  • ট্রিপ A এর ড্রপ-অফ অবস্থানের পথে।
  • ট্রিপ বি তারপর একই গাড়িতে যোগ করা হয়।

ট্রিপ B- এর জন্য একটি UpdateTripRequest এ, আপনি vehicleId সেট করেছেন এবং Trip.vehicle_waypoints সর্বোত্তম ওয়েপয়েন্ট অর্ডারে সেট করেছেন: B পিকআপA ড্রপ-অফB ড্রপ-অফ

  • getVehicle() কে কল করলে remainingWaypoints ফিরে আসে যাতে রয়েছে:
    B পিকআপA ড্রপ-অফB ড্রপ-অফ
  • হয় getTrip() অথবা ট্রিপ A-এর জন্য onTripRemainingWaypointsUpdated কলব্যাক remainingWaypoints ফেরত দেয় যাতে রয়েছে:
    B পিকআপএকটি ড্রপ-অফ
  • হয় getTrip() অথবা ট্রিপ B- এর জন্য onTripRemainingWaypointsUpdated কলব্যাক remainingWaypoints ফেরত দেয় যাতে রয়েছে:
    B পিকআপA ড্রপ-অফB ড্রপ-অফ

উদাহরণ

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

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_A_ID = "share-trip-A";
static final String TRIP_B_ID = "share-trip-B";
static final String VEHICLE_ID = "Vehicle";

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

// Get Trip A and Trip B objects from either the Fleet Engine or storage.
Trip tripA = …;
Trip tripB = …;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId(VEHICLE_ID)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getPickupPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getDropoffPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

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

// Error handling. If Fleet Engine has both a trip and vehicle with the IDs,
// and if the credentials validate, and if the given vehicle_waypoints list
// is valid, 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:          // Either the trip or vehicle does not exist.
      break;
    case PERMISSION_DENIED:
      break;
    case INVALID_REQUEST:    // vehicle_waypoints is invalid.
      break;
  }
  return;
}

এরপর কি