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

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

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

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

  • পথে : VehicleStop এর জন্য STATE enum-টি ENROUTE ব্যবহার করে বোঝায় যে, যানবাহনের যাত্রাপথের তালিকায় স্টপটি পরবর্তী। কাজের দৃষ্টিকোণ থেকে, এর অর্থ হলো স্টপটির সাথে সম্পর্কিত যেকোনো কাজ সম্পন্ন করার জন্য তালিকায় পরবর্তী স্থানে রয়েছে।
  • পৌঁছেছে : VehicleStop এর জন্য STATE enum-টি ARRIVED ব্যবহার করে বোঝায় যে যানবাহনটি স্টপে এসে পৌঁছেছে। টাস্কের দৃষ্টিকোণ থেকে, এর অর্থ হলো স্টপটির সাথে সম্পর্কিত যেকোনো টাস্ক সক্রিয়ভাবে সম্পন্ন করা হচ্ছে।
  • সম্পন্ন : গাড়ির স্টপের তালিকা থেকে কোনো স্টপ সরিয়ে দিয়ে আপনি সেটিকে সম্পন্ন হিসেবে চিহ্নিত করেন। আপনি যখন এটি করেন, ফ্লিট ইঞ্জিন স্বয়ংক্রিয়ভাবে এর সাথে সম্পর্কিত সমস্ত টাস্ককে বন্ধ (CLOSED) হিসেবে চিহ্নিত করে। টাস্ক বন্ধ করা সম্পর্কে আরও বিস্তারিত জানতে, টাস্ক চূড়ান্তকরণ (Finalize tasks) দেখুন।

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

যানবাহনটি থামার পথে রয়েছে।

যানবাহনটি যখন পরবর্তী গন্তব্যের দিকে যাত্রা শুরু করবে, তখন আপনার সিস্টেম ফ্লিট ইঞ্জিনকে অবহিত করবে। এর ফলে আনুমানিক পৌঁছানোর সময় (ETA) এবং পথের হিসাব উন্নত হয়।

আপডেট বন্ধ করার জন্য প্রয়োজনীয় ক্ষেত্রসমূহ

ফ্লিট ইঞ্জিন নোটিফিকেশনের জন্য এনটিটির অন্য সব ফিল্ড উপেক্ষা করে।

মাঠ মূল্য
remainingVehicleJourneySegments অবশিষ্ট যানবাহন থামানোর তালিকা, যেখানে রাজ্যগুলোকে State.NEW হিসেবে চিহ্নিত করা হয়েছে।

থামার পথে উদাহরণ

নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কিভাবে জাভা gRPC লাইব্রেরি অথবা UpdateDeliveryVehicle এ একটি HTTP REST কল ব্যবহার করে ফ্লিট ইঞ্জিনকে জানানো যায় যে একটি যানবাহন তার পরবর্তী স্টপের পথে রয়েছে। অন্য সব স্টপকে নতুন হিসেবে চিহ্নিত করা হয়।

জিআরপিসি

 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> টি আপনার সার্ভার দ্বারা Service account roles and JSON Web tokens -এ বর্ণিত নির্দেশিকা অনুসারে ইস্যু করা হয়।
  • অনুরোধের মূল অংশে অবশ্যই একটি 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

যানবাহনটি স্টপে এসে পৌঁছায়

কোনো যানবাহন স্টপে পৌঁছালে ফ্লিট ইঞ্জিনকে অবশ্যই অবহিত করতে হবে।

আপডেট বন্ধ করার জন্য প্রয়োজনীয় ক্ষেত্রসমূহ

ফ্লিট ইঞ্জিন নোটিফিকেশনের জন্য এনটিটির অন্য সব ফিল্ড উপেক্ষা করে।

মাঠ মূল্য
remainingVehicleJourneySegments অবশিষ্ট যানবাহন থামানোর তালিকা, যেখানে রাজ্যগুলোকে State.NEW হিসেবে চিহ্নিত করা হয়েছে।

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

নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কিভাবে জাভা gRPC লাইব্রেরি অথবা UpdateDeliveryVehicle এ একটি HTTP REST কল ব্যবহার করে ফ্লিট ইঞ্জিনকে জানানো যায় যে একটি যানবাহন স্টপে এসে পৌঁছেছে। অন্য সব স্টপকে নতুন হিসেবে চিহ্নিত করা হয়।

জিআরপিসি

  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> টি আপনার সার্ভার দ্বারা Service account roles and JSON Web tokens -এ বর্ণিত নির্দেশিকা অনুসারে ইস্যু করা হয়।
  • অনুরোধের মূল অংশে অবশ্যই একটি 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

যানবাহনটি থেমে যায়

কোনো যানবাহন থামার পর ফ্লিট ইঞ্জিনকে অবশ্যই অবহিত করতে হবে। এর ফলে থামার সাথে সম্পর্কিত সমস্ত কাজ বন্ধ (CLOSED) অবস্থায় চলে যায়।

আপডেট বন্ধ করার জন্য প্রয়োজনীয় ক্ষেত্রসমূহ

ফ্লিট ইঞ্জিন নোটিফিকেশনের জন্য এনটিটির অন্য সব ফিল্ড উপেক্ষা করে।

মাঠ মূল্য
remainingVehicleJourneySegments অবশিষ্ট যানবাহন থামার স্থানগুলোর তালিকা, যেখানে রাজ্যগুলোকে State.NEW হিসেবে চিহ্নিত করা হয়েছে। তালিকার প্রথম থামার স্থানটির রাজ্যকে অবশ্যই State.ENROUTE হিসেবে চিহ্নিত করতে হবে।

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

নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কিভাবে জাভা gRPC লাইব্রেরি অথবা UpdateDeliveryVehicle এ একটি HTTP REST কল ব্যবহার করে ফ্লিট ইঞ্জিনকে জানানো যায় যে একটি যানবাহন স্টপে এসে পৌঁছেছে। অন্য সব স্টপকে নতুন হিসেবে চিহ্নিত করা হয়।

জিআরপিসি

  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> টি আপনার সার্ভার দ্বারা Service account roles and JSON Web tokens -এ বর্ণিত নির্দেশিকা অনুসারে ইস্যু করা হয়।
  • অনুরোধের মূল অংশে অবশ্যই একটি 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

এরপর কী?