স্টপের স্ট্যাটাস আপডেট করুন

এই ডকুমেন্টটি নিম্নলিখিত বিষয়গুলি সম্পর্কে আপনার ধারণা আছে বলে ধরে নেয়:

  • [শিপমেন্ট টাস্ক তৈরি করুন][1]
  • [শিডিউল করা টাস্ক][3]-এর ভূমিকা, যা টাস্ক, স্টপ এবং গাড়ির মধ্যে সম্পর্ক বিস্তারিতভাবে কভার করে।

Fleet Engine Essentials-এর [শিডিউল করা টাস্ক][3] বিভাগে যেমন বলা হয়েছে, আপনি টাস্ক তৈরি করেন এবং কোনও গাড়ির স্টপের সাথে সেটি সম্পর্কিত করেন। এর মাধ্যমে টাস্ক এবং গাড়ি যেখানে থামবে বলে আশা করা হচ্ছে সেই লোকেশনের মধ্যে বাস্তব-জগতের সম্পর্ককে মডেল করা হয়, যাতে ড্রাইভার টাস্কটি সম্পূর্ণ করতে পারেন।

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

  • পথে: VehicleStop-এর জন্য STATE enum ENROUTE ব্যবহার করে বোঝায় যে গাড়ির ভ্রমণসূচীর তালিকায় পরবর্তী স্টপ হল এটি। টাস্কের দৃষ্টিকোণ থেকে, এর অর্থ হল স্টপের সাথে যুক্ত যেকোনও টাস্ক তালিকার পরবর্তী টাস্ক হিসেবে সম্পূর্ণ করতে হবে।
  • পৌঁছে গেছে: VehicleStop-এর জন্য STATE enum ARRIVED ব্যবহার করে গাড়িটি স্টপে পৌঁছে গেছে তা বোঝাতে। টাস্কের দৃষ্টিকোণ থেকে, এর অর্থ হল স্টপের সাথে যুক্ত যেকোনও টাস্কের উপর সক্রিয়ভাবে কাজ করা হচ্ছে।
  • সম্পূর্ণ হয়েছে: আপনি কোনও স্টপকে সম্পূর্ণ হিসেবে চিহ্নিত করতে, সেটিকে গাড়ির স্টপের তালিকা থেকে সরিয়ে দেন। আপনি এটি করলে, Fleet Engine অটোমেটিক সব সম্পর্কিত টাস্ক CLOSED হিসেবে চিহ্নিত করে। টাস্ক বন্ধ করার ব্যাপারে আরও জানতে, [টাস্ক চূড়ান্ত করা][4] দেখুন।

সার্ভার-সাইড অ্যাপ্রোচ ব্যবহার করে কীভাবে স্টপের স্ট্যাটাস আপডেট করতে হয় তা এই ডকুমেন্টে বর্ণনা করা হয়েছে। আপনি ড্রাইভারকে বিশ্বস্ত ডিভাইস ব্যবহার করে টাস্ক ম্যানেজ করার অনুমতি দিলে, ড্রাইভার অ্যাপ থেকেও এটি করতে পারবেন। রেস কন্ডিশন এড়াতে এবং single source of truth বজায় রাখতে শুধুমাত্র একটি পদ্ধতি ব্যবহার করুন।

গাড়ি স্টপেজে পৌঁছাচ্ছে

গাড়িটি পরবর্তী স্টপে নেভিগেশন শুরু করলে আপনার সিস্টেমের Fleet Engine-কে জানানো উচিত। এটি ETA ও রুট সংক্রান্ত গণনা উন্নত করে।

স্টপ আপডেট করার জন্য প্রয়োজনীয় ফিল্ড

বিজ্ঞপ্তির জন্য Fleet Engine এন্টিটির অন্যান্য সব ফিল্ড উপেক্ষা করে।

ফিল্ডভ্যালু
remainingVehicleJourneySegments বাকি থাকা গাড়ির স্টপের তালিকা, যেগুলির স্ট্যাটাস State.NEW হিসেবে চিহ্নিত করা আছে।

স্টপে যাওয়ার পথে উদাহরণ

নিম্নলিখিত উদাহরণগুলি দেখায় যে কীভাবে Fleet Engine-কে জানানো যায় যে একটি গাড়ি তার পরবর্তী স্টপে যাওয়ার পথে, [Java gRPC লাইব্রেরি][5] বা HTTP ব্যবহার করে UpdateDeliveryVehicle-এ REST কল।অন্য সব স্টপ নতুন হিসেবে চিহ্নিত করা হয়েছে।

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     // Next stop marked as ENROUTE
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.7749)
                    .setLongitude(122.4194)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
            .setState(VehicleStop.State.ENROUTE)))
     // All other stops marked as NEW
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.3382)
                    .setLongitude(121.8863)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
            .setState(VehicleStop.State.NEW)))
     .build();

 // DeliveryVehicle request
 UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
   UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
       .setName(vehicleName)
       .setDeliveryVehicle(deliveryVehicle)
       .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
       .build();

 try {
   DeliveryVehicle updatedDeliveryVehicle =
       deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

বিশ্রাম

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • রিকোয়েস্ট হেডারে অবশ্যই Authorization ফিল্ড থাকতে হবে যার ভ্যালু হবে Bearer <token>, যেখানে <token> আপনার সার্ভার ইস্যু করেছে [পরিষেবা অ্যাকাউন্ট রোল][6] এবং [JSON ওয়েব টোকেন][6]-এ বর্ণিত নির্দেশিকা অনুযায়ী।
  • অনুরোধের প্রধান অংশে অবশ্যই একটি DeliveryVehicle এন্টিটি থাকতে হবে:

curl কমান্ডের উদাহরণ:

 # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
 # environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "remainingVehicleJourneySegments": [
     {
       "stop": {
         "state": "ENROUTE",
         "plannedLocation": {
           "point": {
             "latitude": 37.7749,
             "longitude": -122.084061
           }
         },
         "tasks": [
           {
             "taskId": "${TASK1_ID}"
           }
         ]
       }
     },
     {
       "stop": {
         "state": "NEW",
         "plannedLocation": {
           "point": {
             "latitude": 37.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

গাড়ি স্টপে এসে পৌঁছেছে

কোনও গাড়ি স্টপে পৌঁছালে Fleet Engine-কে অবশ্যই জানাতে হবে।

স্টপ আপডেট করার জন্য প্রয়োজনীয় ফিল্ড

বিজ্ঞপ্তির জন্য Fleet Engine এন্টিটির অন্যান্য সব ফিল্ড উপেক্ষা করে।

ফিল্ডভ্যালু
remainingVehicleJourneySegments বাকি থাকা গাড়ির স্টপের তালিকা, যেগুলির স্ট্যাটাস State.NEW হিসেবে চিহ্নিত করা আছে।

স্টপে পৌঁছানোর উদাহরণ

[Java gRPC লাইব্রেরি][5] বা UpdateDeliveryVehicle-এ HTTP REST কল ব্যবহার করে, কোনও গাড়ি স্টপেজে পৌঁছেছে কিনা তা Fleet Engine-কে কীভাবে জানাবেন, তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে। অন্যান্য সব স্টপ নতুন হিসেবে চিহ্নিত করা হয়েছে।

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // Marking the arrival at stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.7749)
                     .setLongitude(122.4194)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
             .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.3382)
                     .setLongitude(121.8863)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
             .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(deliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("remaining_vehicle_journey_segments"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

বিশ্রাম

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • রিকোয়েস্ট হেডারে অবশ্যই Authorization ফিল্ড থাকতে হবে যার ভ্যালু হবে Bearer <token>, যেখানে <token> আপনার সার্ভার ইস্যু করেছে [পরিষেবা অ্যাকাউন্ট রোল][6] এবং [JSON ওয়েব টোকেন][6]-এ বর্ণিত নির্দেশিকা অনুযায়ী।
  • অনুরোধের প্রধান অংশে অবশ্যই একটি DeliveryVehicle এন্টিটি থাকতে হবে:

curl কমান্ডের উদাহরণ:

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "remainingVehicleJourneySegments": [
      {
        "stop": {
          "state": "ARRIVED",
          "plannedLocation": {
            "point": {
              "latitude": 37.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

গাড়ি কোনও জায়গায় থামলে

কোনও গাড়ি স্টপেজে পৌঁছালে Fleet Engine-কে অবশ্যই জানাতে হবে। এর ফলে, স্টপের সাথে যুক্ত সব টাস্ক CLOSED স্ট্যাটাসে সেট হয়ে যায়।

স্টপ আপডেট করার জন্য প্রয়োজনীয় ফিল্ড

বিজ্ঞপ্তির জন্য Fleet Engine এন্টিটির অন্যান্য সব ফিল্ড উপেক্ষা করে।

ফিল্ডভ্যালু
remainingVehicleJourneySegments বাকি থাকা গাড়ির স্টপের তালিকা, যেগুলির স্ট্যাটাস State.NEW হিসেবে চিহ্নিত করা আছে। তালিকার প্রথম স্টপের স্ট্যাটাস অবশ্যই State.ENROUTE হিসেবে চিহ্নিত থাকতে হবে।

স্টপের উদাহরণ সম্পূর্ণ করে

[Java gRPC লাইব্রেরি][5] বা UpdateDeliveryVehicle-এ HTTP REST কল ব্যবহার করে, কোনও গাড়ি স্টপেজে পৌঁছেছে কিনা তা Fleet Engine-কে কীভাবে জানাবেন, তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে। অন্যান্য সব স্টপ নতুন হিসেবে চিহ্নিত করা হয়েছে।

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // This stop has been completed and is commented out to indicate it
      // should be removed from the list of vehicle journey segments.
      // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
      //    .setStop(VehicleStop.newBuilder()
      //        .setPlannedLocation(LocationInfo.newBuilder()
      //            .setPoint(LatLng.newBuilder()
      //                .setLatitude(37.7749)
      //                .setLongitude(122.4194)))
      //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
      //        .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      // The next stop could be marked as ENROUTE if the vehicle has begun
      // its journey to the next stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.3382)
                     .setLongitude(121.8863)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
             .setState(VehicleStop.State.NEW)))
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(deliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("remaining_vehicle_journey_segments"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

বিশ্রাম

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • রিকোয়েস্ট হেডারে অবশ্যই Authorization ফিল্ড থাকতে হবে যার ভ্যালু হবে Bearer <token>, যেখানে <token> আপনার সার্ভার ইস্যু করেছে [পরিষেবা অ্যাকাউন্ট রোল][6] এবং [JSON ওয়েব টোকেন][6]-এ বর্ণিত নির্দেশিকা অনুযায়ী।
  • অনুরোধের প্রধান অংশে অবশ্যই একটি DeliveryVehicle এন্টিটি থাকতে হবে:

curl কমান্ডের উদাহরণ:

 # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
 # environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "remainingVehicleJourneySegments": [
     {
       "stop": {
         "state": "NEW",
         "plannedLocation": {
           "point": {
             "latitude": 37.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

এর পরে কী করতে হবে

  • [টাস্ক চূড়ান্ত করুন][৪]

[১]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks [৩]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [৪]: /maps/documentation/mobility/fleet-engine/journeys/tasks/finalize-tasks [৫]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks [৬]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts