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

מסמך זה מניח שקראת את מדריך המבוא כדי משימות מתוזמנות גם בקטע Introduction to 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) לשיתוף טיולים.

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

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

כדי ליצור משימת unavailability מסביבת שרת, צריך ליצור REST מסוג HTTP שיחה אל CreateTask:

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

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

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

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

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

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

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

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