ההנחה במאמר הזה היא שאתם יודעים איך ליצור משימות ואיך להשתמש בהן. במאמר מופיעות דוגמאות ספציפיות להגדרת משימות משלוח בדרכים הבאות:
הגדרת חלון הזמנים ליעד של משימת משלוח: הגדרת חלון הזמנים להשלמת המשימה.
התאמה אישית של הרשאות הגישה למשימות: התאמה אישית של הרשאות הגישה לפעילויות שקשורות למשימות כדי להציג אותן ללקוחות או למנהלי צי רכב.
פרטים על השדות של משימות משלוח זמינים במאמר בנושא יצירת משימות משלוח. כשמעדכנים מידע נוסף על משימות קיימות, צריך לכלול גם את המזהה הרלוונטי של המשימה, בנוסף לשדות שמעדכנים עבור המשימות.
הגדרת חלון הזמן לטירגוט
חלון הזמן של היעד הוא TimeWindow שבמהלכו צריך להשלים את המשימה. לדוגמה, אם אתם מציינים חלון זמן למשלוח לנמענים, אתם יכולים להשתמש בחלון הזמן של המשימה כדי לתעד את חלון הזמן הזה וליצור התראות, או כדי לנתח את ביצועי הנסיעות הקודמות.
חלון הזמן של היעד מורכב משעת התחלה ושעת סיום, ואפשר להגדיר אותו לכל סוג של משימה. חלון הזמן של היעד לא משפיע על התנהגות הניתוב.
בדוגמאות הבאות מוצגות שתי דרכים להגדיר את חלון הזמן: באמצעות ספריית Java gRPC או באמצעות שליחת בקשת HTTP REST אל UpdateTask. אפשר גם להגדיר את השדה הזה בזמן יצירת המשימה.
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 ומשתמשים ב-updateMask כדי לעדכן את הפרמטר targetTimeWindow:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow
כאן <id> הוא מזהה ייחודי של המשימה. כותרת הבקשה צריכה להכיל שדה Authorization עם הערך Bearer <token>, כאשר <token> מונפק על ידי השרת שלכם בהתאם להנחיות שמתוארות במאמרים תפקידים בחשבון שירות ואסימוני JWT (JSON Web Token).
# 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 מספקת נראות של פעילויות שקשורות למשימות, שאפשר להציג אותן ללקוחות שמקבלים משלוח ולמנהלי צי רכב שעוקבים אחרי משלוחים. המידע הזה כולל את מספר התחנות לפני שליחת הודעה ללקוח לגבי סטטוס משלוח החבילה. אתם יכולים להתאים אישית את המידע הזה לכל משימה בנפרד, כדי שיתאים יותר למודל העסקי שלכם.
בקטע הזה מוסבר על כללי החשיפה של אובייקטים במעקב במפה. הכללים האלה חלים על שתי קטגוריות של אובייקטים:
- חשיפה של סמן המיקום
- חשיפת נתוני משימות למשימות פעילות שקשורות לרכבים, כמו קווים פוליגוניים וזמן הגעה משוער
כללי חשיפה של סמני מיקום
ב-Fleet Engine מוצגים סמני מיקום של מיקום המסירה של המשלוח במפה, ללא קשר למצב המסירה.
כללי הרשאות גישה לנתוני משימות
בקטע הזה מתוארים כללי ברירת המחדל לגבי נראות שחלים על נתוני המשימות. אפשר להתאים אישית רק משימות פעילות שקשורות לרכב, כלומר רק למשימות איסוף ומסירה אפשר להחיל כללי הרשאות גישה מותאמים אישית.
יכול להיות שלא תוכלו להתאים אישית את המשימות הבאות:
- עצירות מתוזמנות
- משימות שקשורות לזמינות
- משימות לא פעילות שקשורות לרכב
כללים להרשאות גישה למשימות של זמינות
כברירת מחדל, הרכב לא מופיע במפה אם לפחות משימה אחת של אי-זמינות מוקצית למשימה שבמעקב. לדוגמה, אם הנהג עושה הפסקה או שהרכב מתודלק בדרך למשלוח המעקב. עדיין אפשר לראות את שעת ההגעה המשוערת ואת הזמן המשוער לסיום המשימה. שוב, אי אפשר להתאים אישית את הכלל הזה.
הרשאות גישה למשימות פעילות שקשורות לרכבים
אובייקט TaskTrackingInfo מספק מספר רכיבי נתונים שאפשר להציג באמצעות הספרייה למעקב אחר משלוחים. כברירת מחדל, השדות האלה גלויים כשהמשימה מוקצית לרכב וכשהרכב נמצא במרחק של עד 5 תחנות מהמשימה. הגישה מסתיימת כשהמשימה מסתיימת או מבוטלת.
אתם יכולים להתאים אישית את הגדרות החשיפה לכל משימה בנפרד על ידי הגדרת TaskTrackingViewConfig במשימה כשיוצרים או מעדכנים את המשימה ב-Fleet Engine. כך נוצרים כללים שמאפשרים גישה לרכיבי נתונים בודדים.
בטבלה הבאה מפורטים השדות שאפשר להחיל עליהם כללי חשיפה.
| שדות של משימות שקשורות לרכב בכללי חשיפה |
|---|
|
בטבלה הזו מוצגות אפשרויות החשיפה שזמינות לשדות שמפורטים למעלה.
| אפשרויות של הרשאות גישה |
|---|
|
כללי חשיפה של קווים פוליגוניים של מסלולים ומיקום רכב
במסלול במעקב, החשיפה של קווים פוליגוניים של המסלול תלויה בחשיפה של הרכב. אם קו פוליגוני של מסלול גלוי במסלול פעיל שהרכב לא גלוי בו, עדיין אפשר להסיק את מיקום הרכב לפי הקצה של הקו הפוליגוני הגלוי. לכן, הגדרת החשיפה של קו המסלול צריכה להיות מגבילה כמו הגדרת החשיפה של הרכב או מגבילה יותר.
כדי לספק שילוב תקין של קווים פוליגוניים של מסלול ומיקום רכב, צריך לפעול לפי הכללים הבאים:
הקווים הפוליגוניים של המסלול ומיקום הרכב מציינים את אותן אפשרויות חשיפה
בתרחיש הזה, גם הקו הפוליגוני וגם מיקום הרכב מגדירים את אותן אפשרויות, כולל:
- מספר התחנות שנותרו
- משך הזמן עד להגעה המשוערת
- מרחק הנסיעה שנותר
כדי לעמוד בדרישות המדיניות, הערך של מאפיין הנראות של קווי המתאר של המסלול צריך להיות קטן או שווה לערך שמוגדר במאפיין הנראות של הרכב. בדוגמה הזו, ערך הסף של העצירה שנותרה עבור הקו המקוטע מוגדר כ-3, שהוא נמוך מהערך 5 שצוין עבור הרכב. כלומר, כשהמסלול המעקב מגיע למרחק של 5 תחנות ממיקום המשימה, הרכב מופיע, אבל המסלול של הרכב הזה מופיע רק כשהמסלול המעקב מגיע למרחק של 3 תחנות.
```js
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingStopCountThreshold": 5
},
}
```
הקווים הפוליגוניים של המסלול ומיקום הרכב מציינים את אפשרויות הגישה השונות
אם לקווים הפוליגוניים של המסלול ולמיקום הרכב יש אפשרויות שונות של הרשאות גישה, מיקום הרכב יהיה גלוי רק אם מתקיימים התנאים של שתי אפשרויות הגישה. שוב, החשיפה של הקו המקוטע כפופה לכללי החשיפה של הרכב:
- תמיד גלוי: אם מיקום הרכב מספק את אפשרות הניראות תמיד גלוי, קו פוליגוני של מסלול חייב להשתמש באפשרות הניראות תמיד גלוי.
- אף פעם לא גלוי: אם המיקום של הרכב מוגדר כאף פעם לא גלוי, גם קו המסלול צריך להיות מוגדר כאף פעם לא גלוי.
דוגמה:
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingDrivingDistanceMetersThreshold": 3000
},
}
בדוגמה הזו, מיקום הרכב גלוי רק אם מספר התחנות שנותרו הוא לפחות 3 וגם אם מרחק הנסיעה שנותר הוא לפחות 3,000 מטרים.
דוגמה להתאמה אישית של הרשאות הגישה למשימות
בדוגמאות הבאות אפשר לראות איך מגדירים משימה עם כללי הנראות הבאים:
- הצגת קווי המסלול אם הרכב נמצא במרחק של עד 3 עצירות.
- הצגת זמן ההגעה המשוער אם המרחק שנותר לנסיעה קצר מ-5,000 מטרים.
- אני לא רוצה לראות את מספר התחנות שנותרו.
- כל שדה אחר שומר על הגדרת ברירת המחדל של הנראות שלו, כלומר הוא מוצג כשהרכב נמצא במרחק של עד 5 תחנות מהמשימה.
מידע נוסף זמין במאמר TaskTrackingViewConfig בנושא gRPC או 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)
.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;
}
REST
כדי להגדיר את חלון ההגדרה של תצוגת מעקב המשימות באמצעות HTTP, קוראים ל-PATCH ומשתמשים ב-updateMask כדי לעדכן את הפרמטר taskTrackingViewConfig:
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