יצירת סוגים אחרים של משימות

במסמך הזה אנו מניחים שקראתם את המדריך למשימות מתוזמנות בקטע מבוא ל-Fleet Engine, וגם את הקטע מהי משימה מתוזמנת? בקטע הזה.

ב-Fleet Engine למשימות מתוזמנות יש קטגוריות רחבות שונות של משימות:

  • משימות של משלוחים: משתמשים בהן למשימות נסיעה, כולל איסוף ומשלוח של משלוחים.
  • משימות של אי-זמינות: משתמשים בהן בזמנים שבהם הנהגים לא זמינים, למשל במהלך הפסקות נדרשות.
  • משימות עצירה מתוזמנות: משתמשים בהן למשימות שאינן נהיגה, למשל במיקומים של תיבות דואר או של לקוחות, כמו זמן הכניסה לבניין או איתור נקודת מסירה.

במסמך הזה נסביר איך יוצרים משימות לא של שליחה בשרת. למידע על סוגי המשימות של משלוחים, ראו יצירת משימות של משלוחים.

שדות של משימות שאינן קשורות לנהיגה

בקטע הזה מפורטים שדות המשימות הנדרשים גם למשימות של זמינות מוגבלת וגם למשימות של הפסקה מתוזמנת.

שדות חובה של משימות

בכל משימה שיוצרים ב-Fleet Engine, צריך לספק את השדות הנדרשים, ואפשר גם לספק את כל השדות האופציונליים. ‏Fleet Engine מתעלם מכל שדות ה-API האחרים, ומציג חריגה אם בקשת יצירת המשימה כוללת deliveryVehicleId שהוקצה. כדי להקצות משימות לרכב, משתמשים ב-UpdateDeliveryVehicleRequest. מידע נוסף זמין במאמר עדכון משימות.

שדהערך
type

מגדירים את הסוג שמתאים לסוג המשימה, שהוא אחד מהאפשרויות הבאות:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id מזהה משימה ייחודי. זה לא יכול להיות מספר המעקב של המשלוח. אם אין במערכת מזהי משימות, אפשר ליצור מזהה ייחודי אוניברסלי (UUID). למידע נוסף, ראו מזהי משימות.
tracking_id משימות PICKUP או DELIVERY בלבד: מספר או מזהה שמשמשים למעקב אחר משלוח. אין למלא את השדה הזה למשימות שלא קשורות למשלוח.
plannedLocation משימות מסוג PICKUP,‏ DELIVERY או SCHEDULED_STOP בלבד: המיקום שבו צריך להשלים את המשימה. לא נדרשת למשימות UNAVAILABLE.
taskDuration הזמן הצפוי להשלמת המשימה. לדוגמה, כדי לחפש חניה או ללכת למיקום המסירה.

שדות אופציונליים של משימות של משלוחים

שדהערך
targetTimeWindow חלון הזמן שבו המשימה צריכה להסתיים. השדה הזה לא משפיע על אופן הניתוב.
task_tracking_view_config משימות PICKUP או DELIVERY בלבד: ההגדרה למעקב אחר משימות, שמציינת אילו רכיבי נתונים גלויים למשתמשי הקצה ובאילו נסיבות.
attributes רשימה של מאפייני משימות מותאמים אישית. לכל מאפיין צריך להיות מפתח ייחודי.

יצירת משימה של זמן לא זמין

אתם יכולים ליצור משימה שמציינת חוסר זמינות, למשל, הפסקות של הנהגים. כדי ליצור משימה של זמן לא זמין, פועלים לפי ההנחיות הבאות:

  • מגדירים את סוג המשימה כ-UNAVAILABLE.
  • אין לכלול מזהה לצורכי מעקב.
  • אתם לא חייבים לציין מיקום למשימות שלא זמינות, אבל כדאי לעשות זאת כדי לקבל חישובים משופרים של זמני הגעה משועריים במהלך היום.

כללי חשיפה מיוחדים חלים על מיקום הרכב כשמשתפים את המסלול במשימת UNAVAILABLE.

  • אפליקציות של צרכנים שמשתמשות בספרייה של מעקב אחר משלוחים: כשהרכב במשימת 'אין זמינות', משתמשים באפליקציה של הצרכן לא יכולים לראות את מיקום הרכב, אבל הם עדיין יכולים לראות את פרטי הסטטוס של המשלוח.
  • אפליקציות למעקב אחרי צי רכב שמשולבות בספריית המעקב אחרי צי הרכב: כשהרכב במשימת 'לא זמין', מנהלי הצי שמשתמשים באפליקציה למעקב אחרי צי הרכב יוכלו לראות את מיקום הרכב במשימות 'לא זמין'.

בדוגמאות הבאות מוסבר איך ליצור משימה מתוזמנת של זמן לא זמין באמצעות ספריית gRPC של Java, או איך לשלוח בקשת 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> הוא מזהה ייחודי של המשימה.

כותרת הבקשה חייבת לכלול את השדה 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

יצירת משימה של עצירה מתוזמנת

אפשר ליצור משימה לעצירה מתוזמנת, למשל למשימות שאינן נסיעה במיקומי לקוחות, לעצירות לתדלוק או למקרה שבו נהג מקבל משלוחים מרכב מאסף. כשיוצרים משימה מתוזמנת להפסקה, מומלץ לפעול לפי ההנחיות הבאות:

  • מגדירים את סוג המשימה כ-
  • אין לכלול מזהה לצורכי מעקב.
  • אפשר גם לציין מיקום.

בדוגמאות הבאות מוסבר איך ליצור משימה מתוזמנת של זמן לא זמין באמצעות ספריית gRPC של Java, או איך לשלוח בקשת 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> הוא מזהה ייחודי של המשימה.

כותרת הבקשה חייבת לכלול את השדה 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

המאמרים הבאים