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

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

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

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

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

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

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

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

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

שדהערך
type

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

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
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

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