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

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

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

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

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

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

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

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

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

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

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

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

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

לעדכונים בשדות שאינם last_location נדרש מסירה ב-Fleet Engine הרשאות אדמין.

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

בדוגמה הזו מצוין מאפיין חדש: 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

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