এই ডকুমেন্টে ধরে নেওয়া হয়েছে যে আপনি টাস্ক তৈরি ও ব্যবহার করার পদ্ধতি বোঝেন। এটি নিম্নলিখিত উপায়ে শিপমেন্ট টাস্ক কনফিগার করার জন্য নির্দিষ্ট উদাহরণ প্রদান করে:
শিপমেন্ট টাস্কের জন্য টার্গেট টাইম উইন্ডো সেট করুন: টাস্ক সম্পূর্ণ করার জন্য সময়সীমা সেট করুন।
টাস্কের দৃশ্যমানতা কাস্টমাইজ করা: গ্রাহক বা ফ্লিট অপারেটরদের দেখানোর জন্য টাস্ক অ্যাক্টিভিটির দৃশ্যমানতা কাস্টমাইজ করুন।
শিপমেন্ট টাস্কের ফিল্ড সম্পর্কে আরও জানতে শিপমেন্ট টাস্ক তৈরি করা দেখুন। আগে থেকে থাকা টাস্কের ব্যাপারে অতিরিক্ত তথ্য আপডেট করার সময়, টাস্কের জন্য আপডেট করা ফিল্ডের পাশাপাশি আপনাকে টাস্কের জন্য প্রাসঙ্গিক শনাক্তকারীও অন্তর্ভুক্ত করতে হবে।
টার্গেট টাইম উইন্ডো সেট করা
টার্গেট টাইম উইন্ডো হল TimeWindow যার মধ্যে টাস্কটি সম্পূর্ণ করতে হবে। যেমন, আপনি যদি ডেলিভারি প্রাপকদের ডেলিভারির সময়সীমা জানান, তাহলে আপনি এই সময়সীমা ক্যাপচার করতে এবং সতর্কতা তৈরি করতে টাস্ক টার্গেট সময়সীমা ব্যবহার করতে পারেন অথবা আপনি অতীতের ট্রিপ পারফর্ম্যান্স বিশ্লেষণ করতে এটি ব্যবহার করতে পারেন।
টার্গেট টাইম উইন্ডোতে একটি শুরুর সময় ও একটি শেষের সময় থাকে এবং এটি যেকোনও টাস্কের ক্ষেত্রে সেট করা যায়। টার্গেট টাইম উইন্ডো রাউটিংয়ের আচরণকে প্রভাবিত করে না।
Java 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)
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
.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;
}
REST
HTTP ব্যবহার করে টাস্কের টাইম উইন্ডো সেট করতে, PATCH কল করুন এবং
targetTimeWindow প্যারামিটার আপডেট করতে updateMask ব্যবহার করুন:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow
এখানে <id> হল টাস্কের জন্য অনন্য শনাক্তকারী। অনুরোধের হেডারে Authorization ফিল্ড থাকতে হবে, যার ভ্যালু হল Bearer <token>। <token> হল আপনার সার্ভার দ্বারা ইস্যু করা টোকেন, যা পরিষেবা অ্যাকাউন্টের ভূমিকা এবং JSON ওয়েব টোকেনে বর্ণিত নির্দেশিকা অনুযায়ী ইস্যু করা হয়।
# 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=targetTimeWindow" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOMটাস্কের দৃশ্যমানতা কাস্টমাইজ করুন
ডিফল্ট হিসেবে, Fleet Engine টাস্ক অ্যাক্টিভিটি সম্পর্কে দৃশ্যমানতা প্রদান করে যা পরে শিপমেন্ট গ্রহণকারী গ্রাহক এবং শিপমেন্ট ট্র্যাক করা ফ্লীট অপারেটর উভয়কেই দেখানো যেতে পারে। এর মধ্যে এমন তথ্য অন্তর্ভুক্ত থাকে যা গ্রাহককে তার প্যাকেজ ডেলিভারির স্ট্যাটাস সম্পর্কে বিজ্ঞপ্তি পাঠানোর আগে স্টপের সংখ্যা নির্দেশ করে। আপনার বিজনেস মডেলের সাথে আরও ভালোভাবে মানানসই করে তুলতে, আপনি টাস্ক-ভিত্তিক এই তথ্য কাস্টমাইজ করতে পারবেন।
এই বিভাগে ম্যাপে ট্র্যাক করা অবজেক্টের দৃশ্যমানতা সংক্রান্ত নিয়মাবলী বর্ণনা করা হয়েছে। এইসব নিয়ম দুই ধরনের অবজেক্টের ক্ষেত্রে প্রযোজ্য:
- লোকেশন মার্কারের দৃশ্যমানতা
- অ্যাক্টিভ ভেহিকল টাস্কের জন্য টাস্ক ডেটার দৃশ্যমানতা, যেমন পলিলাইন ও ETA
লোকেশন মার্কারের দৃশ্যমানতা সংক্রান্ত নিয়ম
ডেলিভারির অবস্থা যাই হোক না কেন, Fleet Engine ম্যাপে দেখানো শিপমেন্ট ডেলিভারি লোকেশনের জন্য লোকেশন মার্কার দেখায়।
টাস্ক ডেটা দৃশ্যমানতা সংক্রান্ত নিয়ম
এই বিভাগে টাস্ক ডেটার ক্ষেত্রে প্রযোজ্য ডিফল্ট দৃশ্যমানতা সংক্রান্ত নিয়ম বর্ণনা করা হয়েছে। আপনি শুধুমাত্র অ্যাক্টিভ থাকা গাড়ির টাস্ক কাস্টমাইজ করতে পারবেন, যার অর্থ হল শুধুমাত্র পিক-আপ ও ড্রপ-অফ টাস্কে কাস্টমাইজ করা দৃশ্যমানতার নিয়ম প্রযোজ্য হতে পারে।
নিম্নলিখিত টাস্ক কাস্টমাইজ করা নাও যেতে পারে:
- শিডিউল করা স্টপ
- অনুপলভ্যতা সংক্রান্ত টাস্ক
- ইনঅ্যাক্টিভ ভেইকেল টাস্ক
অনুপলভ্য টাস্কের দৃশ্যমানতা সংক্রান্ত নিয়ম
ডিফল্ট হিসেবে, ট্র্যাক করা টাস্কে অন্তত একটি অনুপলভ্যতা টাস্ক অ্যাসাইন করা থাকলে, ম্যাপে গাড়িটি দেখা যায় না। যেমন, যদি ট্র্যাক করা শিপমেন্টের পথে ড্রাইভার বিরতি নেন বা গাড়িতে ফুয়েল ভরানো হয়। পৌঁছানোর আনুমানিক সময় এবং টাস্ক সম্পূর্ণ করার আনুমানিক সময় এখনও উপলভ্য। আবার, আপনি এই নিয়ম কাস্টমাইজ করতে পারবেন না।
অ্যাক্টিভ গাড়ির টাস্কের দৃশ্যমানতা
TaskTrackingInfo অবজেক্টে একাধিক ডেটা এলিমেন্ট থাকে যা আপনি
শিপমেন্ট ট্র্যাকিং লাইব্রেরি ব্যবহার করে দৃশ্যমান করতে পারেন। সাধারণত, টাস্কটি ভেইকেলে অ্যাসাইন করা হলে এবং ভেইকেলটি
টাস্কের ৫টি স্টপের মধ্যে থাকলে এইসব ফিল্ড
দেখা যায়। টাস্ক সম্পূর্ণ বা বাতিল করা হলে
ভিজিবিলিটি শেষ হয়ে যায়।
Fleet Engine-এ টাস্ক তৈরি বা আপডেট করার সময় টাস্কে
TaskTrackingViewConfig সেট করে আপনি টাস্ক-ভিত্তিক দৃশ্যমানতা কনফিগারেশন কাস্টমাইজ করতে পারেন।
এর ফলে, উপলভ্য থাকার জন্য আলাদা আলাদা ডেটা এলিমেন্টের জন্য
নিয়ম তৈরি হয়।
নিম্নলিখিত সারণীতে সেইসব ফিল্ড দেখানো হয়েছে যেগুলিতে আপনি দৃশ্যমানতার নিয়ম প্রয়োগ করতে পারবেন।
| দৃশ্যমানতা সংক্রান্ত নিয়মের জন্য গাড়ির টাস্ক ফিল্ড |
|---|
|
এই টেবিলে উপরে তালিকাভুক্ত ফিল্ডের জন্য উপলভ্য দৃশ্যমানতা বিকল্প দেখানো হয়েছে।
| দৃশ্যমানতা সংক্রান্ত বিকল্প |
|---|
|
রুট পলিলাইন ও গাড়ির লোকেশন দৃশ্যমানতা সংক্রান্ত নিয়ম
ট্র্যাক করা রুটের ক্ষেত্রে, রুটের পলিলাইন দৃশ্যমানতা গাড়ির দৃশ্যমানতার উপর নির্ভর করে। কোনও অ্যাক্টিভ রুটে যদি রুট পলিলাইন দেখা যায় যেখানে গাড়িটি দেখা যাচ্ছে না, সেক্ষেত্রেও গাড়ির লোকেশন দৃশ্যমান পলিলাইনের শেষ থেকে অনুমান করা যেতে পারে। তাই, রুট পলিলাইন দৃশ্যমানতা অবশ্যই গাড়ির দৃশ্যমানতার মতো বা তার চেয়ে বেশি সীমাবদ্ধ হতে হবে।
সঠিক রুট পলিলাইন / গাড়ির লোকেশন দৃশ্যমানতার কম্বিনেশন প্রদান করতে এইসব নিয়ম অনুসরণ করুন।
রুট পলিলাইন ও গাড়ির লোকেশন একই দৃশ্যমানতার বিকল্প নির্দিষ্ট করে
এই পরিস্থিতিতে, পলিলাইন ও গাড়ির লোকেশন, দু'টিই একই বিকল্প সেট করে, যার মধ্যে এগুলি অন্তর্ভুক্ত:
- বাকি স্টপের সংখ্যা
- ETA পর্যন্ত সময়সীমা
- বাকি ড্রাইভিং দূরত্ব
নিয়ম মেনে চলতে, রুট পলিলাইন দৃশ্যমানতার ভ্যালু অবশ্যই গাড়ির দৃশ্যমানতার জন্য সেট করা ভ্যালুর চেয়ে কম বা সমান হতে হবে। এই উদাহরণে, পলিলাইনের জন্য বাকি থাকা স্টপ থ্রেশহোল্ড ৩-এ সেট করা আছে, যা গাড়ির জন্য নির্দিষ্ট করা ৫-এর মানের থেকে কম। এর অর্থ হল, ট্র্যাক করা জার্নি টাস্ক লোকেশন থেকে ৫টি স্টপেজে পৌঁছালে, গাড়িটি দেখা যাবে, কিন্তু জার্নি ৩টি স্টপেজে না পৌঁছানো পর্যন্ত সেই গাড়ির রুট দেখা যাবে না।
```js
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingStopCountThreshold": 5
},
}
```
রুটের পলিলাইন ও গাড়ির লোকেশন বিভিন্ন দৃশ্যমানতার বিকল্প নির্দিষ্ট করে
রুটের পলিলাইন ও গাড়ির লোকেশনের জন্য আলাদা দৃশ্যমানতা বিকল্প থাকলে, গাড়ির লোকেশন তখনই দেখা যাবে যখন দুটি দৃশ্যমানতা বিকল্পই পূরণ হবে। আবার, পলিলাইন দৃশ্যমানতা গাড়ির দৃশ্যমানতা সংক্রান্ত নিয়মের উপর নির্ভর করে:
- সবসময় দৃশ্যমান: কোনও রুটের পলিলাইনকে অবশ্যই সবসময় দৃশ্যমান দৃশ্যমানতা বিকল্প ব্যবহার করতে হবে, যখন গাড়ির লোকেশনও সেই একই সবসময় দৃশ্যমান দৃশ্যমানতা বিকল্প প্রদান করে।
- কখনও দেখা যাবে না: কোনও গাড়ির লোকেশন কখনও দেখা যাবে না দৃশ্যমানতা বিকল্প ব্যবহার করলে, রুট পলিলাইনকে অবশ্যই কখনও দেখা যাবে না দৃশ্যমানতা বিকল্প ব্যবহার করতে হবে।
একটি উদাহরণ নিচে দেওয়া হল:
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingDrivingDistanceMetersThreshold": 3000
},
}
এই উদাহরণে, গাড়ির লোকেশন তখনই দেখা যাবে যদি বাকি স্টপের সংখ্যা কমপক্ষে ৩ এবং বাকি ড্রাইভিং দূরত্ব কমপক্ষে ৩০০০ মিটার হয়।
টাস্কের দৃশ্যমানতা কাস্টমাইজ করার উদাহরণ
নিচে দেওয়া উদাহরণ থেকে কীভাবে নিম্নলিখিত দৃশ্যমানতা সংক্রান্ত নিয়ম মেনে টাস্ক সেট করতে হয় তা জানুন:
- গাড়ি ৩টি স্টপের মধ্যে থাকলে রুটের পলিলাইন দেখাও।
- বাকি ড্রাইভিং দূরত্ব ৫০০ মিটারের কম হলে ETA দেখান।
- বাকি স্টপের সংখ্যা কখনও দেখাবে না।
- অন্যান্য প্রতিটি ফিল্ডের ডিফল্ট দৃশ্যমানতা বজায় থাকে, অর্থাৎ টাস্কের ৫টি স্টপের মধ্যে গাড়িটি থাকলে সেগুলি দেখানো হয়।
gRPC বা REST-এর জন্য TaskTrackingViewConfig দেখুন।
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)
.setTaskTrackingViewConfig(
TaskTrackingViewConfig.newBuilder()
.setRoutePolylinePointsVisibility(
VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
.setEstimatedArrivalTimeVisibility(
VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
.setRemainingStopCountVisibility(
VisibilityOption.newBuilder().setNever(true)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
.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;
}
বিশ্রাম
HTTP ব্যবহার করে টাস্ক ট্র্যাকিং ভিউ কনফিগার উইন্ডো সেট করতে, PATCH কল করুন এবং
taskTrackingViewConfig প্যারামিটার আপডেট করতে updateMask ব্যবহার করুন:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig
যেমন:
# 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=taskTrackingViewConfig" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"estimatedArrivalTimeVisibility": {
"remainingDrivingDistanceMetersThreshold": 5000
},
"remainingStopCountVisibility": {
"never": true
}
}
}
EOM