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

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

  • 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 בנושא מסכות שדות.

כדי לעדכן שדות שאינם 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

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