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

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

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