টাস্ক চূড়ান্ত করুন

এই ডকুমেন্ট ধরে নেয় যে আপনি টাস্ক তৈরি ও ব্যবহার করার পদ্ধতি জানেন। এটি কীভাবে শিপমেন্ট টাস্ক সম্পূর্ণ করতে হয় তার জন্য নিম্নলিখিত নির্দিষ্ট উদাহরণ প্রদান করে:

  • টাস্ক বন্ধ করা: শিপমেন্ট টাস্ক বন্ধ করলে সেটির স্ট্যাটাস CLOSED-এ পরিবর্তিত হয় এবং বোঝায় যে টাস্কটি আর অ্যাক্টিভ নেই।

  • টাস্কের ফলাফল সেট করা: কোনও টাস্ক সম্পূর্ণ হয়ে গেলে, আপনি সেটির ফলাফল SUCCEEDED বা FAILED হিসেবে সেট করে সেটি চূড়ান্ত করেন। জার্নি শেয়ারিংয়ে ডেলিভারির ফলাফল দেখাতে এবং Fleet Engine পরিষেবার জন্য সঠিক বিলিং নিশ্চিত করতে, কোনও টাস্ক সম্পূর্ণ করার ক্ষেত্রে এটি একটি গুরুত্বপূর্ণ অংশ।

টাস্ক বন্ধ করা

আপনি নিম্নলিখিত উপায়ে কোনও টাস্ক বন্ধ করতে পারবেন:

  • গাড়ির স্টপ স্ট্যাটাস আপডেট করুন। আপনি গাড়ি থেকে স্টপ সরিয়ে দেন, যার ফলে স্টপের সাথে যুক্ত সব টাস্ক বন্ধ হয়ে যায়। বিবরণের জন্য স্টপের স্ট্যাটাস আপডেট করা দেখুন।
  • গাড়ির স্টপের তালিকা থেকে টাস্কটি সরিয়ে দিন। এর মধ্যে স্টপের জন্য টাস্কের তালিকা আপডেট করা হয়, তবে সম্পূর্ণ হয়ে যাওয়া টাস্ক আর তালিকায় থাকে না। টাস্ক আপডেট করুন বিকল্পে টাস্কের ক্রম আপডেট করা দেখুন।
  • টাস্কের স্ট্যাটাস CLOSED হিসেবে সেট করুন। এটি শুধুমাত্র সেইসব টাস্কের ক্ষেত্রে করা যাবে যেগুলি গাড়িতে অ্যাসাইন করা হয়নি। এই বিভাগে এই পদ্ধতি দেখানো হয়েছে।

আপনি কোনও টাস্ক বন্ধ করে দিলে, সেটি আর খুলতে নাও পারেন।

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

টাস্ক বন্ধ করার জন্য টাস্ক ফিল্ড

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

প্রয়োজনীয় ফিল্ড ভ্যালু
state State.CLOSED

সরাসরি টাস্ক বন্ধ করা

gRPC-তে বা UpdateTask-এ HTTP REST অনুরোধ কল ব্যবহার করে, অ্যাসাইন না করা টাস্ক কীভাবে বন্ধ করা যায় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • অনুরোধের হেডারে Authorization ফিল্ড থাকতে হবে যার ভ্যালু হল Bearer <token>, যেখানে <token> হল আপনার সার্ভারের ইস্যু করা টোকেন যা পরিষেবা অ্যাকাউন্টের ভূমিকা এবং JSON ওয়েব টোকেনে বর্ণিত নির্দেশিকা অনুযায়ী ইস্যু করা হয়।
  • অনুরোধের বডিতে আপনাকে অবশ্যই একটি Task এন্টিটি অন্তর্ভুক্ত করতে হবে

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

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

টাস্কের ফলাফল সেট করা

কোনও টাস্কের আসল ফলাফল দেখাতে, আপনি বন্ধ করা টাস্কের ফলাফল SUCCEEDED অথবা FAILED-এ সেট করেন। টাস্কের ফলাফল সেট করার আগে সেটি অবশ্যই বন্ধ করতে হবে। Fleet Engine শুধুমাত্র SUCCEEDED স্ট্যাটাস সহ ডেলিভারি টাস্কের জন্য চার্জ করে।

টাস্কের ফলাফল সংক্রান্ত বিবরণ

এছাড়াও, টাস্কের ফলাফল সম্পর্কে অতিরিক্ত বিবরণ টাস্ক থেকে পাওয়া যায়। আপনি এগুলি সরাসরি সেট করতে পারবেন এবং Fleet Engine আপনার সেটিংস মেনে চলবে:

  • টাস্কের ফলাফল সংক্রান্ত লোকেশন: Fleet Engine অটোমেটিক টাস্কের ফলাফল সংক্রান্ত লোকেশন, গাড়ির শেষবার জানা লোকেশন দিয়ে পূরণ করে দেয়। আপনি চাইলে এর পরিবর্তে এটি প্রদান করতে পারেন।
  • টাস্কের ফলাফল সংক্রান্ত সময়: Fleet Engine এই ফিল্ডটি পূরণ করে না, তবে এটি আপনার সেট করার জন্য উপলভ্য।

task_outcome_location এবং task_outcome_time সেট করার জন্য আপনি নিম্নলিখিত যেকোনও পদ্ধতি ব্যবহার করতে পারেন:

  • টাস্কের ফলাফল সেট করা একই অনুরোধে সেগুলি আপডেট করুন।
  • টাস্কের ফলাফল সেট করার পরে সেগুলি পরে আপডেট করুন।
  • সেগুলি সেট করার পরে আবার পরিবর্তন করুন।

Fleet Engine টাস্কের ফলাফল সম্পর্কিত নিম্নলিখিত আপডেটগুলি প্রতিরোধ করে:

  • টাস্কের ফলাফল একবার SUCCEEDED বা FAILED হিসেবে সেট করা হয়ে গেলে, আপনি তা আর পরিবর্তন করতে পারবেন না।
  • আউটকাম সেট করা নেই এমন টাস্কের জন্য আপনি টাস্কের ফলাফল লোকেশন বা ফলাফল সময় সেট করতে পারবেন না।

ফলাফল সেট করার জন্য টাস্ক ফিল্ড

টাস্কের ফলাফল সেট করার সময় প্রয়োজনীয় ও ঐচ্ছিক ফিল্ড সম্পর্কে এই বিভাগে বলা হয়েছে। আপডেট করার জন্য Fleet Engine এন্টিটির অন্যান্য ফিল্ড উপেক্ষা করে।

প্রয়োজনীয় ফিল্ড ভ্যালু
taskOutcome Outcome.SUCCEEDED বা Outcome.FAILED

ঐচ্ছিক ফিল্ডভ্যালু
taskOutcomeLocation যে লোকেশনে টাস্কটি সম্পূর্ণ করা হয়েছে। সেট করা না থাকলে, Fleet Engine এটি ডিফল্ট হিসেবে গাড়ির শেষ লোকেশন হিসেবে সেট করে।
taskOutcomeTime টাস্কটি সম্পূর্ণ হওয়ার টাইমস্ট্যাম্প।

টাস্কের ফলাফল সংক্রান্ত উদাহরণ

Java gRPC লাইব্রেরি এবং HTTP REST কল ব্যবহার করে UpdateTask-এ টাস্কের ফলাফল SUCCEEDED হিসেবে সেট করা এবং টাস্কটি যেখানে সম্পূর্ণ করা হয়েছে সেই লোকেশন সেট করার পদ্ধতি নিচের উদাহরণে দেখানো হয়েছে।

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • অনুরোধের হেডারে Authorization ফিল্ড থাকতে হবে যার ভ্যালু হল Bearer <token>, যেখানে <token> হল আপনার সার্ভারের ইস্যু করা টোকেন যা পরিষেবা অ্যাকাউন্টের ভূমিকা এবং JSON ওয়েব টোকেনে বর্ণিত নির্দেশিকা অনুযায়ী ইস্যু করা হয়।
  • অনুরোধের বডিতে অবশ্যই একটি Task এন্টিটি থাকতে হবে।
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

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