Actualizar campos de vehículos

En este documento, se describen los campos importantes del vehículo que puedes actualizar cuando creas y administras vehículos.

  • vehicle_state: Determina la disponibilidad del vehículo para viajes nuevos.
  • vehicle_type: Es un campo obligatorio cuando se crea un vehículo. El campo también puede servir como criterio de filtro para las coincidencias de vehículos. Consulta Crea un vehículo para obtener detalles sobre cómo configurar este campo.
  • attributes[]: Es un array opcional de tipo VehicleAttribute. Úsalos para definir criterios personalizados y mejorar el comportamiento de filtrado cuando busques o enumeres vehículos.
 

Para obtener una lista completa de los campos de vehículos, consulta los siguientes recursos:

Campo de estado del vehículo

Tu sistema puede establecer el estado del vehículo en OFFLINE o ONLINE. Por ejemplo, puedes establecer el estado del vehículo en ONLINE todos los días a las 9 a.m. y en OFFLINE todos los días a las 5 p.m.

Modo SIN CONEXIÓN Modo ONLINE
Usa OFFLINE para indicar que un vehículo no acepta viajes nuevos. Ten en cuenta que el vehículo aún puede completar los viajes asignados mientras se encuentra en este estado.
  • Un objeto Vehicle creado en el estado ONLINE puede devolverse de inmediato en respuesta a las consultas de SearchVehicles. Consulta Cómo buscar vehículos para obtener más detalles.
  • Los vehículos creados en el estado ONLINE deben usar el campo last_location en la llamada CreateVehicle.

Campo de atributos del vehículo

Usa el campo attributes del vehículo para crear criterios personalizados que permitan a tus clientes o a los operadores de la flota encontrar vehículos en tu flota con una mayor variedad de criterios de búsqueda. Esto mejora las capacidades de tus apps para proporcionar mejores coincidencias de vehículos que las que obtendrías si usaras criterios de búsqueda basados únicamente en otros campos de vehículos. Cada vehículo puede tener hasta 100 atributos, y cada uno debe tener una clave única. Los valores pueden ser cadenas, booleanos o números.

Por ejemplo, podrías declarar un atributo personalizado llamado class para diferenciar tus vehículos de viajes compartidos según los niveles de clase. Usarías los siguientes valores de cadena para representar los niveles de clase de vehículo: ECONOMY, STANDARD y LUXURY.

Sin embargo, los valores de los atributos personalizados no tienen que ser mutuamente excluyentes. Puedes usar criterios como admite mascotas, no fumador y puede hacer viajes más largos. Cada uno de estos podría ser un atributo personalizado independiente que use valores booleanos. A un vehículo determinado se le podrían asignar los tres atributos personalizados junto con el atributo personalizado class establecido en el valor de cadena adecuado.

Usar los atributos de esta manera puede proporcionarte una amplia variedad de funciones útiles para encontrar vehículos para viajes con necesidades específicas. Si deseas obtener instrucciones para usar atributos personalizados como filtros de búsqueda, consulta Cómo buscar vehículos.

Actualiza los atributos del vehículo

Puedes actualizar los atributos del vehículo con UpdateVehicle o UpdateVehicleAttributes. Cada clave attributes solo puede tener un valor por vehículo. Declaras atributos de vehículos personalizados con attributes en la máscara de campo y, luego, proporcionas valores según el siguiente método.

UpdateVehicle UpdateVehicleAttributes
Esta API no permite actualizar solo un atributo. Cuando se usa este método, cualquier uso del campo attributes en la máscara de campo hace que se vuelva a declarar el conjunto completo de atributos del vehículo. Esto genera una sobreescritura de cualquier atributo preexistente que no se incluya de forma explícita en la máscara de campo. Si usas este método para declarar un nuevo atributo personalizado, también debes volver a declarar todos los atributos personalizados que quieras que conserve el vehículo. Si excluyes attributes en la máscara de campo, este método deja los atributos personalizados existentes tal como se definieron anteriormente para el vehículo. Si usas attributes en la máscara de campo, pero sin establecer valores, esto equivale a quitar todos los atributos personalizados del vehículo. Este método acepta una lista específica de atributos para actualizar. La solicitud actualiza o agrega solo los atributos especificados en la máscara de campo. Los atributos preexistentes que no se especifican permanecen sin cambios.

Ejemplo de actualización de campos del vehículo

En esta sección, se muestra cómo actualizar los campos del vehículo con UpdateVehicleRequest, que incluye un update_mask para indicar qué campos se deben actualizar. Para obtener más información, consulta la documentación de Protocol Buffers sobre máscaras de campo.

Las actualizaciones de campos que no sean last_location requieren privilegios de administrador de Fleet Engine On-demand.

Ejemplo: Habilita un nuevo tipo de viaje y un atributo personalizado

En este ejemplo, se habilitan los viajes de back_to_back para el vehículo y también se especifica un atributo nuevo: class. Como se indicó anteriormente en Actualiza los atributos del vehículo, actualizar el campo attributes con este enfoque requiere que indiques todos los atributos personalizados que deseas conservar. Por lo tanto, el ejemplo muestra un valor cash_only escrito para evitar que se sobrescriba durante una operación de actualización que especifica el campo attributes.

Para actualizar solo el valor de un par de atributos clave-valor, usa el método UpdateVehicleAttributes y no incluyas el campo attribute en la máscara de campo para la solicitud UpdateVehicle.

Consulta la referencia de providers.vehicles.update para gRPC y 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

¿Qué sigue?