Actualizar campos de vehículos de entrega

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

  • type: Es el tipo de vehículo de reparto. Esto afecta las rutas generadas para este vehículo.
  • attributes[]: Es un array de opciones de tipo DeliveryVehicleAttribute. Úsalos para definir criterios personalizados para los vehículos de tu servicio y mejorar el comportamiento de filtrado cuando se buscan o se muestran vehículos.
 

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

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 zona para diferenciar en qué zona de la ciudad operan tus vehículos de reparto. Usarías valores de cadena como los siguientes para representar diferentes zonas: 1B, 2C y 3A. Luego, podrías usar un filtro en Fleet Tracking para mostrar solo los vehículos que trabajan en una zona específica al operador responsable de esa zona.

Sin embargo, los valores de los atributos personalizados no tienen que ser mutuamente excluyentes. Puedes usar criterios como available-at-night y has-refrigeration. 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 zone establecido en el valor de cadena adecuado.

Actualiza los atributos del vehículo

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.

Esta API de UpdateDeliveryVehicle 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 sobrescritura 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 atributo personalizado nuevo, 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 dejará 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.

Ejemplo de actualización de campos del vehículo

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

Las actualizaciones de campos que no sean last_location requieren privilegios de administrador de Fleet Engine Delivery.

Ejemplo: Establece un atributo personalizado

En este ejemplo, se especifica un atributo nuevo: zone. 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 available-at-night escrito para evitar que se sobrescriba durante una operación de actualización que especifica el campo attributes.

Consulta la referencia de 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

¿Qué sigue?