Mettre à jour les champs relatifs au véhicule de livraison

Ce document décrit les champs importants que vous pouvez mettre à jour lorsque vous créez et gérez des véhicules.

  • type : type de ce véhicule de livraison. Cela a un impact sur les itinéraires générés pour ce véhicule.
  • attributes[] : tableau d'options de type DeliveryVehicleAttribute. Utilisez-les pour définir des critères personnalisés pour les véhicules de votre service afin d'améliorer le comportement de filtrage lors de la recherche ou de la liste des véhicules.
 

Pour obtenir la liste complète des champs de véhicules, consultez :

Champ "Attributs du véhicule"

Utilisez le champ attributes pour créer des critères personnalisés permettant à vos consommateurs ou aux gestionnaires de flotte de trouver des véhicules dans votre flotte selon une plus grande variété de critères de recherche. Cela améliore la capacité de vos applications à fournir de meilleures correspondances de véhicules que celles que vous obtiendriez en utilisant des critères de recherche basés uniquement sur d'autres champs de véhicules. Chaque véhicule peut comporter au maximum 100 attributs, et chacun d'eux doit avoir une clé unique. Les valeurs peuvent être des chaînes, des valeurs booléennes ou des nombres.

Par exemple, vous pouvez déclarer un attribut personnalisé appelé zone pour différencier les zones de la ville dans lesquelles vos véhicules de livraison opèrent. Vous pouvez utiliser des valeurs de chaîne telles que 1B, 2C et 3A pour représenter différentes zones. Vous pouvez ensuite utiliser un filtre dans le suivi de parc pour n'afficher que les véhicules travaillant dans une zone spécifique à l'opérateur responsable de cette zone.

Toutefois, les valeurs des attributs personnalisés ne doivent pas nécessairement être uniques. Vous pouvez utiliser des critères tels que available-at-night et has-refrigeration. Chacun d'eux peut être un attribut personnalisé distinct qui utilise des valeurs booléennes. Un véhicule donné peut se voir attribuer ces trois attributs personnalisés, ainsi que l'attribut personnalisé zone défini sur la valeur de chaîne appropriée.

Mettre à jour les attributs du véhicule

Chaque clé attributes ne peut avoir qu'une seule valeur par véhicule. Vous déclarez des attributs de véhicule personnalisés à l'aide de attributes dans le masque de champ, puis vous fournissez des valeurs en fonction de la méthode ci-dessous.

Cette API UpdateDeliveryVehicle ne permet pas de mettre à jour un seul attribut. Lorsque vous utilisez cette méthode, toute utilisation du champ attributes dans le masque de champ entraîne la redéclaration de l'ensemble des attributs du véhicule. Cela entraîne l'écrasement de tout attribut préexistant qui n'est pas explicitement inclus dans le masque de champ. Si vous utilisez cette méthode pour déclarer un nouvel attribut personnalisé, vous devez également redéclarer chaque attribut personnalisé que vous souhaitez que le véhicule conserve. Si vous excluez attributes du masque de champ, cette méthode laisse les attributs personnalisés existants tels qu'ils ont été définis précédemment pour le véhicule. Si vous utilisez attributes dans le masque de champ, mais sans définir de valeurs, cela équivaut à supprimer tous les attributs personnalisés du véhicule.

Exemple de mise à jour des champs du véhicule

Cette section explique comment mettre à jour les champs de véhicule à l'aide de UpdateDeliveryVehicleRequest, qui inclut un update_mask pour indiquer les champs à mettre à jour. Pour en savoir plus, consultez la documentation Protocol Buffers sur les masques de champ.

Pour modifier des champs autres que last_location, vous devez disposer des droits d'administrateur Fleet Engine Delivery.

Exemple : définir un attribut personnalisé

Cet exemple spécifie un nouvel attribut : zone. Comme indiqué dans Mettre à jour les attributs de véhicule, la mise à jour du champ attributes à l'aide de cette approche nécessite que vous indiquiez tous les attributs personnalisés que vous souhaitez conserver. Par conséquent, l'exemple montre une valeur available-at-night écrite pour éviter qu'elle ne soit écrasée lors d'une opération de mise à jour qui spécifie le champ attributes.

Consultez la documentation de référence sur 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

Étape suivante