עדכון שדות הרכב

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

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

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

שדה מצב הרכב

המערכת יכולה להגדיר את מצב הרכב ל-OFFLINE או ל-ONLINE. לדוגמה, אפשר להגדיר את מצב הרכב ל-ONLINE בכל יום בשעה 9:00 ול-OFFLINE בכל יום בשעה 17:00.

מצב אופליין מצב ONLINE
משתמשים ב-OFFLINE כדי לציין שכלי רכב לא מקבל נסיעות חדשות. חשוב לזכור שהרכב עדיין יכול להשלים נסיעות שהוקצו לו במצב הזה.
  • Vehicle שנוצר במצב ONLINE עשוי להוחזר באופן מיידי בתגובה לשאילתות SearchVehicles. למידע נוסף, אפשר לעיין במאמר חיפוש כלי רכב.
  • ברכב שנוצר במצב ONLINE צריך להשתמש בשדה last_location בקריאה CreateVehicle.

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

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

לדוגמה, אפשר להצהיר על מאפיין מותאם אישית בשם class כדי להבדיל בין כלי הרכב של שירותי הנסיעה המשותפת לפי רמות הכיתה. כדי לייצג את רמות סיווג הרכב, משתמשים בערכי המחרוזות הבאים: ECONOMY, ‏ STANDARD ו-LUXURY.

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

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

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

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

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

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

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

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

דוגמה: הפעלת סוג נסיעה חדש ומאפיין מותאם אישית

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

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

אפשר לעיין במסמך העזרה providers.vehicles.update לגבי gRPC ו-REST.

gRPC

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.ONLINE)
    .addAllAttributes(ImmutableList.of(
        VehicleAttribute.newBuilder().setKey("class").setValue("ECONOMY").build(),
        VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
    .setBackToBackEnabled(true)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_state")
        .addPaths("attributes")
        .addPaths("back_to_back_enabled"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

REST

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "ONLINE",
    "attributes": [
      {"key": "class", "value": "LUXURY"},
      {"key": "cash_only", "value": "false"}
    ],
    "backToBackEnabled": true
}
EOM

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