Aggiorna i campi dei veicoli per la consegna

Questo documento illustra i campi importanti del veicolo che puoi aggiornare durante la creazione e la gestione dei veicoli.

  • type: il tipo di veicolo per le consegne. Questo influisce sui percorsi generati per questo veicolo.
  • attributes[]: un array di opzioni di tipo DeliveryVehicleAttribute. Utilizzali per definire criteri personalizzati per i veicoli nel tuo servizio, in modo da migliorare il comportamento di filtro durante la ricerca o l'elenco dei veicoli.
 

Per un elenco completo dei campi relativi ai veicoli, consulta:

Campo degli attributi del veicolo

Utilizza il campo attributes del veicolo per creare criteri personalizzati che consentano ai tuoi consumatori o operatori di flotta di trovare i veicoli della tua flotta in base a una gamma più ampia di criteri di ricerca. In questo modo, le tue app possono fornire corrispondenze di veicoli migliori rispetto a quelle che otterresti utilizzando criteri di ricerca basati esclusivamente su altri campi dei veicoli. Ogni veicolo può avere al massimo 100 attributi e ognuno deve avere una chiave univoca. I valori possono essere stringhe, booleani o numeri.

Ad esempio, puoi dichiarare un attributo personalizzato denominato zone per distinguere la zona della città in cui operano i tuoi veicoli per le consegne. Per rappresentare zone diverse, devi utilizzare valori stringa come i seguenti: 1B, 2C e 3A. Puoi quindi utilizzare un filtro in Fleet Tracking per mostrare solo i veicoli che operano in una zona specifica all'operatore responsabile di quella zona.

Tuttavia, i valori degli attributi personalizzati non devono essere univoci tra loro. Potresti utilizzare criteri come disponibile-di-notte e ha-refrigerazione. Ognuno di questi potrebbe essere un attributo personalizzato separato che utilizza valori booleani. A un determinato veicolo potrebbero essere assegnati tutti e tre questi attributi personalizzati, insieme all'attributo personalizzato zone impostato sul valore di stringa appropriato.

Aggiorna gli attributi del veicolo

Ogni chiave attributes può avere un solo valore per veicolo. Dichiari gli attributi personalizzati del veicolo utilizzando attributes nella maschera di campo e poi fornendo i valori in base al metodo riportato di seguito.

Questa API UpdateDeliveryVehicle non consente di aggiornare un solo attributo. Quando utilizzi questo metodo, qualsiasi utilizzo del campo attributes nella maschera di campo comporta la nuova dichiarazione dell'intero insieme di attributi del veicolo per il veicolo. In questo modo, gli attributi preesistenti non inclusi esplicitamente nella maschera di campo vengono sovrascritti. Se utilizzi questo metodo per dichiarare un nuovo attributo personalizzato, devi anche dichiarare nuovamente ogni attributo personalizzato che vuoi che il veicolo conservi. Se escludi attributes nella maschera di campo, questo metodo lascia gli attributi personalizzati esistenti come definiti in precedenza per il veicolo. Se utilizzi attributes nella maschera di campo, ma senza impostare valori, equivale a rimuovere tutti gli attributi personalizzati dal veicolo.

Esempio di aggiornamento dei campi del veicolo

Questa sezione mostra come aggiornare i campi del veicolo utilizzando UpdateDeliveryVehicleRequest, che include un update_mask per indicare quali campi aggiornare. Per maggiori dettagli, consulta la documentazione sui buffer di protocollo relativa alle maschere di campo.

Gli aggiornamenti ai campi diversi da last_location richiedono i privilegi di Fleet Engine Delivery Admin.

Esempio: imposta un attributo personalizzato

Questo esempio specifica un nuovo attributo: zone. Come indicato in precedenza nella sezione Aggiorna gli attributi del veicolo, l'aggiornamento del campo attributes con questo approccio richiede di indicare tutti gli attributi personalizzati che vuoi conservare. Pertanto, l'esempio mostra un valore available-at-night scritto per evitare che venga sovrascritto durante un'operazione di aggiornamento che specifica il campo attributes.

Consulta il riferimento 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

Passaggi successivi