המסמך הזה מבוסס על ההנחה שקראתם את המדריך למתחילים בנושא משימות מתוזמנות בקטע מבוא ל-Fleet Engine, וגם את המאמר מהי משימה מתוזמנת? בקטע הזה.
ב-Fleet Engine למשימות מתוזמנות יש קטגוריות רחבות שונות של משימות:
- משימות משלוח: משמשות למשימות נהיגה, כולל איסוף ומסירה של משלוחים.
- משימות של חוסר זמינות: משמשות לזמנים שבהם הנהגים לא זמינים, כמו הפסקות נדרשות.
- משימות עצירה מתוזמנות: משמשות למשימות שלא קשורות לנהיגה בתיבות דואר או במיקומי לקוחות, כמו הזמן שלוקח להיכנס לבניין או לאתר נקודת מסירה.
במאמר הזה מוסבר איך ליצור בשרת משימות שלא קשורות למשלוחים. למידע על סוגי משימות משלוח, ראו יצירת משימות משלוח.
שדות של משימות שלא קשורות לנהיגה
בקטע הזה מתוארים שדות המשימה שנדרשים גם למשימות של חוסר זמינות וגם למשימות של עצירות מתוזמנות.
שדות חובה במשימות
לכל משימה שיוצרים ב-Fleet Engine, צריך למלא את שדות החובה, ואפשר גם למלא את השדות האופציונליים. מערכת Fleet Engine מתעלמת מכל שאר השדות, ומחזירה חריגה אם בקשה ליצירת משימה כוללת deliveryVehicleId שהוקצה. כדי להקצות משימות לרכב, משתמשים ב-UpdateDeliveryVehicleRequest. איך מעדכנים משימות?
| שדה | ערך |
|---|---|
type |
צריך להגדיר את הסוג שתואם לסוג המשימה, שהוא אחד מהבאים:
|
state |
State.OPEN |
task_id |
מזהה משימה ייחודי. זה לא יכול להיות מספר המעקב של המשלוח. אם אין לכם מזהי משימות במערכת, אתם יכולים ליצור מזהה ייחודי אוניברסלי (UUID). לפרטים, ראו מזהי משימות. |
tracking_id |
משימות מסוג PICKUP או DELIVERY בלבד:
המספר או המזהה שמשמשים למעקב אחרי משלוח. אל תציינו את השדה הזה במשימות שאינן משלוחים. |
planned_location |
משימות מסוג PICKUP, DELIVERY או SCHEDULED_STOP בלבד: המיקום שבו צריך להשלים את המשימה. לא נדרש למשימות של UNAVAILABLE. |
task_duration |
הזמן המשוער להשלמת המשימה. לדוגמה, כדי לחפש חנייה או ללכת למיקום של העברת החבילה. |
שדות אופציונליים של משימות משלוח
| שדה | ערך |
|---|---|
target_time_window |
חלון הזמן שבו צריך להשלים את המשימה. השדה הזה לא משפיע על אופן הניתוב. |
task_tracking_view_config |
PICKUP או DELIVERY משימות בלבד:
ההגדרה של מעקב אחר משימות, שקובעת אילו רכיבי נתונים
גלויים למשתמשי הקצה ובאילו נסיבות. |
attributes |
רשימה של מאפייני משימות בהתאמה אישית. לכל מאפיין צריך להיות מפתח ייחודי. |
יצירת משימה של חוסר זמינות
אתם יכולים ליצור משימה שמציינת חוסר זמינות, למשל, להפסקות של הנהגים. כדי ליצור משימה של חוסר זמינות, צריך לפעול לפי ההנחיות הבאות:
- מגדירים את סוג המשימה בתור
UNAVAILABLE. - אל תכללו מזהה לצורכי מעקב.
- לא חובה לציין מיקום למשימת חוסר זמינות, אבל אם תעשו את זה, החישובים של זמן ההגעה המשוער יהיו מדויקים יותר במהלך היום.
כללי חשיפה מיוחדים חלים על מיקום הרכב כשהוא במשימת UNAVAILABLE לשיתוף נסיעה.
- אפליקציות למשתמשים שמשולבות עם הספרייה Shipment Tracking: כשהרכב נמצא במשימה של חוסר זמינות, המשתמשים באפליקציה לא יכולים לראות את מיקום הרכב, אבל הם עדיין יכולים לראות את פרטי הסטטוס של המשלוח שלהם.
- אפליקציות למעקב אחרי צי רכבים שמשולבות עם הספרייה Fleet Tracking: כשהרכב נמצא במשימה שמוגדרת כלא זמינה, מנהלי צי הרכבים שמשתמשים באפליקציה למעקב אחרי צי הרכבים יוכלו לראות את מיקום הרכב במשימות שמוגדרות כלא זמינות.
בדוגמאות הבאות מוסבר איך ליצור משימה מתוזמנת של חוסר זמינות באמצעות ספריית Java gRPC או איך לשלוח בקשת HTTP REST אל CreateTask.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.UNAVAILABLE)
.setState(Task.State.OPEN)
.setTaskDuration(
Duration.newBuilder().setSeconds(60 * 60)) // 1hr break
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
REST
כדי ליצור משימת חוסר זמינות מסביבת שרת, מבצעים קריאת HTTP REST אל CreateTask:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> הוא מזהה ייחודי של המשימה.
ה-request header חייב להכיל את השדה Authorization עם הערך Bearer <token>, כאשר <token> מונפק על ידי השרת שלכם בהתאם להנחיות שמתוארות בקטעים תפקידים של חשבונות שירות ואסימוני אינטרנט מסוג JSON.
גוף הבקשה חייב להכיל ישות Task עם השדות המתאימים שמתוארים בקטע שדות של משימות שאינן נהיגה.
פקודת curl לדוגמה:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "UNAVAILABLE",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "300s"
}
EOMיצירת משימה מתוזמנת לעצירה
אפשר ליצור משימה לעצירה מתוזמנת, למשל למשימות שלא קשורות לנהיגה במיקומים של לקוחות, לעצירות לתדלוק או למקרים שבהם נהג מקבל משלוחים מרכב הזנה. כשיוצרים משימה של עצירה מתוזמנת, צריך לפעול לפי ההנחיות הבאות:
- הגדרת סוג המשימה כ-
- אל תכללו מזהה לצורכי מעקב.
- אפשר גם להוסיף מיקום.
בדוגמאות הבאות מוסבר איך ליצור משימה מתוזמנת של חוסר זמינות באמצעות ספריית Java gRPC או איך לשלוח בקשת HTTP REST אל CreateTask.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.SCHEDULED_STOP)
.setState(Task.State.OPEN)
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent)
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTrip(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
REST
כדי ליצור משימת עצירה מתוזמנת מסביבת שרת, שולחים קריאת HTTP REST אל CreateTask:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> הוא מזהה ייחודי של המשימה.
ה-request header חייב להכיל את השדה Authorization עם הערך Bearer <token>, כאשר <token> מונפק על ידי השרת שלכם בהתאם להנחיות שמתוארות בקטעים תפקידים של חשבונות שירות ואסימוני אינטרנט מסוג JSON.
גוף הבקשה חייב להכיל ישות Task:
פקודת curl לדוגמה:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "SCHEDULED_STOP",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "600s"
}
EOM