עדכון השדות של כלי הרכב למשלוח

במסמך הזה מפורטים שדות חשובים של רכבים שאפשר לעדכן כשיוצרים רכבים ומנהלים אותם.

  • ‫type: סוג כלי המסירה הזה. זה משפיע על המסלולים שנוצרים לרכב הזה.
  • ‫attributes[]: מערך אפשרויות מסוג DeliveryVehicleAttribute. אפשר להשתמש בהן כדי להגדיר קריטריונים מותאמים אישית לרכבים בשירות שלכם, וכך לשפר את התנהגות הסינון כשמחפשים רכבים או מציגים אותם ברשימה.
 

רשימה מלאה של שדות הרכב מופיעה במאמרים הבאים:

השדה של מאפייני הרכב

אפשר להשתמש בשדה attributes רכב כדי ליצור קריטריונים מותאמים אישית שיאפשרו ללקוחות או למנהלי צי רכב למצוא רכבים בצי הרכב שלכם על סמך מגוון רחב יותר של קריטריונים לחיפוש. כך משפרים את היכולות של האפליקציות לספק התאמות טובות יותר של כלי רכב בהשוואה למה שהיה מתקבל משימוש בקריטריוני חיפוש שמבוססים רק על שדות אחרים של כלי רכב. לכל רכב יכולים להיות עד 100 מאפיינים, ולכל אחד מהם צריך להיות מפתח ייחודי. הערכים יכולים להיות מחרוזות, ערכים בוליאניים או מספרים.

לדוגמה, אפשר להצהיר על מאפיין מותאם אישית בשם zone כדי להבחין בין האזורים בעיר שבהם פועלים כלי הרכב שלכם למשלוחים. כדי לייצג אזורים שונים, אפשר להשתמש בערכים מסוג מחרוזת כמו 1B, 2C ו-3A. אחר כך אפשר להשתמש במסנן במעקב אחר צי הרכב כדי להציג למפעיל שאחראי על אזור מסוים רק את כלי הרכב שפועלים באזור הזה.

עם זאת, ערכי מאפיינים מותאמים אישית לא צריכים להיות ייחודיים. אפשר להשתמש בקריטריונים כמו available-at-night ו-has-refrigeration. כל אחד מהם יכול להיות מאפיין מותאם אישית נפרד שמשתמש בערכים בוליאניים. לרכב מסוים אפשר להקצות את כל שלושת המאפיינים המותאמים אישית האלה, יחד עם המאפיין המותאם אישית zone שמוגדר לערך המחרוזת המתאים.

עדכון מאפייני הרכב

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

אי אפשר לעדכן רק מאפיין אחד באמצעות ה-API הזה,‏ UpdateDeliveryVehicle. כשמשתמשים בשיטה הזו, כל שימוש בשדה attributes במסכת השדות גורם להצהרה מחדש של כל קבוצת מאפייני הרכב. כתוצאה מכך, כל מאפיין קיים שלא נכלל במפורש במסכת השדות יימחק. אם משתמשים בשיטה הזו כדי להצהיר על מאפיין מותאם אישית חדש, צריך גם להצהיר מחדש על כל מאפיין מותאם אישית שרוצים שהרכב ישמור. אם לא כוללים את attributes במסכת השדות, השיטה הזו משאירה את המאפיינים הקיימים של הרכב כפי שהוגדרו קודם. אם משתמשים ב-attributes במסכת השדות, אבל בלי להגדיר ערכים, זה שווה ערך להסרת כל המאפיינים המותאמים אישית של הרכב.

דוגמה לעדכון שדות של רכב

בקטע הזה מוסבר איך לעדכן שדות של רכבים באמצעות UpdateDeliveryVehicleRequest, שכולל update_mask כדי לציין אילו שדות לעדכן. פרטים נוספים מופיעים במסמכי התיעוד בנושא Protocol Buffers על field masks.

כדי לעדכן שדות אחרים מלבד last_location, צריך הרשאות של אדמין של Fleet Engine Delivery.

דוגמה: הגדרת מאפיין מותאם אישית

בדוגמה הזו מצוין מאפיין חדש: zone. כמו שצוין קודם במאמר עדכון מאפייני רכב, כשמעדכנים את השדה attributes בשיטה הזו צריך לציין את כל המאפיינים המותאמים אישית שרוצים לשמור. לכן בדוגמה מוצג ערך available-at-night שנכתב כדי לשמור אותו ולא לדרוס אותו במהלך פעולת עדכון שבה מצוין השדה attributes.

לפרטים נוספים, אפשר לעיין במאמר בנושא providers.deliveryVehicles.patch.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
      .addAllAttributes(ImmutableList.of(
          DeliveryVehicleAttribute.newBuilder().setKey("zone").setValue("1B").build(),
          DeliveryVehicleAttribute.newBuilder().setKey("available-at-night").setValue("true").build()))
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(myDeliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("attributes"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=attributes" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
      "attributes": [
        {"key": "zone", "value": "1B"},
        {"key": "available-at-night", "value": "true"}
      ]
  }
  EOM

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