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

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

&lt;id&gt; הוא מזהה ייחודי של המשימה.

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

כדי ליצור משימה של עצירה מתוזמנת מסביבת שרת, שולחים ל-CreateTask קריאה ל-HTTP REST:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; הוא מזהה ייחודי של המשימה.

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

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