|
En este documento, se describen los campos importantes de los vehículos que puedes actualizar cuando creas y administras 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 consumidores o administradores de flotas encontrar vehículos de tu flota con una variedad más amplia 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 un máximo de 100
atributos, y cada uno debe tener una clave única. Los valores pueden ser cadenas,
booleanos o números.
Por ejemplo, puedes declarar un atributo personalizado llamado zone para
diferenciar en qué zona de la ciudad operan tus vehículos de entrega. Usarías
valores de cadena como los siguientes para representar diferentes zonas: 1B,
2C y 3A. Luego, podrías usar un filtro en el seguimiento de flotas 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 estos 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. Declara
atributos personalizados de vehículos con attributes en la máscara de campo y, luego,
proporciona valores según el método que se indica a continuación.
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 un reemplazo 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 cada atributo personalizado que quieras que conserve el vehículo. Si excluyes attributes en la máscara de campo, este método deja los atributos personalizados existentes como se definieron antes para el vehículo.
Si usas attributes en la máscara de campo, pero sin establecer valores, equivale a quitar todos los atributos personalizados del vehículo.
Ejemplo de actualización de campos de vehículos
En esta sección, se muestra cómo actualizar los campos de un vehículo con
UpdateDeliveryVehicleRequest, que incluye un update_mask para indicar
qué campos se deben actualizar. Consulta la documentación de búferes de protocolo sobre
máscaras de campo para obtener más detalles.
Las actualizaciones de campos que no sean last_location requieren privilegios de administrador de entrega de Fleet Engine.
Ejemplo: Establece un atributo personalizado
En este ejemplo, se especifica un atributo nuevo: zone. Como se indicó antes en
Actualiza los atributos del vehículo, para actualizar el campo attributes con
este enfoque, debes indicar todos los atributos personalizados que deseas conservar.
Por lo tanto, en el ejemplo, se muestra un valor available-at-night escrito para evitar que se reemplace 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