Mettre à jour les champs du véhicule

Ce document présente les champs de véhicule importants que vous pouvez mettre à jour lorsque vous créez et gérez des véhicules.

  • vehicle_state : détermine la disponibilité du véhicule pour de nouveaux trajets.
  • vehicle_type : champ obligatoire lors de la création d'un véhicule. Ce champ peut également servir de critère de filtrage pour les correspondances de véhicules. Pour en savoir plus sur la définition de ce champ, consultez Créer un véhicule.
  • attributes[] : tableau facultatif de type VehicleAttribute. Utilisez-les pour définir des critères personnalisés afin d'améliorer le comportement de filtrage lors de la recherche ou de l'affichage de véhicules.
 

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

Champ "État du véhicule"

Votre système peut définir l'état du véhicule sur OFFLINE ou ONLINE. Par exemple, vous pouvez définir l'état du véhicule sur ONLINE tous les jours à 9h et sur OFFLINE tous les jours à 17h.

Mode HORS CONNEXION Mode EN LIGNE
Utilisez OFFLINE pour indiquer qu'un véhicule n'accepte pas de nouveaux trajets. Notez que le véhicule peut toujours effectuer les trajets qui lui sont attribués lorsqu'il est dans cet état.
  • Un Vehicle créé à l'état ONLINE peut être immédiatement renvoyé en réponse aux requêtes SearchVehicles. Pour en savoir plus, consultez Rechercher des véhicules.
  • Les véhicules créés à l'état ONLINE doivent utiliser le champ last_location dans l'appel CreateVehicle.

Champ des attributs du véhicule

Utilisez le champ attributes du véhicule pour créer des critères personnalisés permettant à vos clients ou aux opérateurs de votre parc de trouver des véhicules dans votre parc à l'aide d'un plus grand nombre de critères de recherche. Cela améliore les capacités de vos applications à fournir de meilleures correspondances de véhicules par rapport à ce que vous obtiendriez en utilisant des critères de recherche basés uniquement sur d'autres champs de véhicule. Chaque véhicule peut comporter jusqu'à 100 attributs, et chacun d'eux doit avoir une clé unique. Les valeurs peuvent être des chaînes, des booléens ou des nombres.

Par exemple, vous pouvez déclarer un attribut personnalisé appelé class pour différencier vos véhicules de covoiturage en fonction de leur classe. Vous utiliseriez les valeurs de chaîne suivantes pour représenter les niveaux de classe de véhicule : ECONOMY, STANDARD et LUXURY.

Toutefois, les valeurs d'attributs personnalisés ne doivent pas nécessairement s'exclure mutuellement. Vous pouvez utiliser des critères tels que animaux acceptés, non-fumeur et capable d'effectuer des trajets plus longs. Chacun de ces éléments 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é class défini sur la valeur de chaîne appropriée.

L'utilisation d'attributs de cette manière peut vous fournir une grande variété de fonctionnalités utiles pour trouver des véhicules pour des trajets répondant à des besoins spécifiques. Pour savoir comment utiliser des attributs personnalisés comme filtres de requête, consultez Rechercher des véhicules.

Mettre à jour les attributs du véhicule

Vous pouvez mettre à jour les attributs d'un véhicule à l'aide de UpdateVehicle ou de UpdateVehicleAttributes. 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.

UpdateVehicle UpdateVehicleAttributes
Cette API 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 déclarer à nouveau chaque attribut personnalisé que vous souhaitez que le véhicule conserve. Si vous excluez attributes du masque de champ, cette méthode conserve 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. Cette méthode accepte une liste spécifique d'attributs à mettre à jour. La requête ne met à jour ou n'ajoute que les attributs spécifiés dans le masque de champ. Les attributs préexistants qui ne sont pas spécifiés restent inchangés.

Exemple de mise à jour des champs d'un véhicule

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

Les mises à jour de champs autres que last_location nécessitent des droits d'administrateur Fleet Engine à la demande.

Exemple : Activer un nouveau type de trajet et un attribut personnalisé

Cet exemple active les trajets back_to_back pour le véhicule et spécifie également un nouvel attribut : class. Comme indiqué précédemment dans Mettre à jour les attributs d'un véhicule, la mise à jour du champ attributes à l'aide de cette approche nécessite d'indiquer tous les attributs personnalisés que vous souhaitez conserver. Par conséquent, l'exemple montre une valeur cash_only écrite pour éviter qu'elle ne soit écrasée lors d'une opération de mise à jour qui spécifie le champ attributes.

Pour ne mettre à jour que la valeur d'une paire d'attributs clé-valeur, utilisez plutôt la méthode UpdateVehicleAttributes et n'incluez pas le champ attribute dans le masque de champ de la requête UpdateVehicle.

Consultez la documentation de référence sur providers.vehicles.update pour gRPC et 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

Étape suivante