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

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

בדוגמאות הבאות מוצגות שתי דרכים ליצור משימה של זמינות מתוזמנת: באמצעות ספריית 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> הוא מזהה ייחודי של המשימה.

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

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

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