Atualizar campos de veículos de entrega

Este documento aborda campos importantes do veículo que podem ser atualizados ao criar e gerenciar veículos.

  • type: o tipo do veículo de entrega. Isso afeta as rotas geradas para esse veículo.
  • attributes[]: uma matriz de opções do tipo DeliveryVehicleAttribute. Use-os para definir critérios personalizados para veículos no seu serviço e melhorar o comportamento de filtragem ao pesquisar ou listar veículos.
 

Para uma lista completa de campos de veículos, consulte:

Campo de atributos do veículo

Use o campo attributes do veículo para criar critérios personalizados que permitam aos seus consumidores ou operadores de frota encontrar veículos na sua frota em uma variedade maior de critérios de pesquisa. Isso melhora a capacidade dos seus apps de oferecer correspondências de veículos melhores do que você teria usando critérios de pesquisa baseados apenas em outros campos de veículos. Cada veículo pode ter no máximo 100 atributos, e cada um deles precisa ter uma chave exclusiva. Os valores podem ser strings, booleanos ou números.

Por exemplo, você pode declarar um atributo personalizado chamado zone para diferenciar em qual zona da cidade seus veículos de entrega operam. Você usaria valores de string como os seguintes para representar diferentes zonas: 1B, 2C e 3A. Em seguida, use um filtro no rastreamento de frota para mostrar apenas os veículos que trabalham em uma zona específica ao operador responsável por ela.

No entanto, os valores de atributos personalizados não precisam ser mutuamente exclusivos. Você pode usar critérios como available-at-night e has-refrigeration. Cada um deles pode ser um atributo personalizado separado que usa valores booleanos. Um determinado veículo pode receber todos os três atributos personalizados, além do atributo personalizado zona definido como o valor de string apropriado.

Atualizar atributos do veículo

Cada chave attributes pode ter apenas um valor por veículo. Declare atributos personalizados de veículo usando attributes na máscara de campo e forneça valores com base no método abaixo.

Essa API UpdateDeliveryVehicle não permite atualizar apenas um único atributo. Ao usar esse método, qualquer uso do campo attributes na máscara de campo resulta na declaração de todo o conjunto de atributos do veículo para o veículo. Isso resulta na substituição de qualquer atributo preexistente não incluído explicitamente na máscara de campo. Se você usar esse método para declarar um novo atributo personalizado, também será necessário declarar novamente todos os atributos personalizados que você quer que o veículo mantenha. Se você excluir o attributes na máscara de campo, esse método vai deixar os atributos personalizados atuais como definidos anteriormente para o veículo. Se você usar attributes na máscara de campo, mas sem definir valores, isso será equivalente a remover todos os atributos personalizados do veículo.

Exemplo de atualização de campos de veículo

Esta seção mostra como atualizar campos de veículos usando UpdateDeliveryVehicleRequest, que inclui um update_mask para indicar quais campos atualizar. Consulte a documentação dos buffers de protocolo sobre máscaras de campo para mais detalhes.

As atualizações em campos diferentes de last_location exigem privilégios de administrador de entregas do Fleet Engine.

Exemplo: definir atributo personalizado

Este exemplo especifica um novo atributo: zone. Como observado em Atualizar atributos do veículo, atualizar o campo attributes usando essa abordagem exige que você indique todos os atributos personalizados que quer manter. Portanto, o exemplo mostra um valor available-at-night gravado para evitar que ele seja substituído durante uma operação de atualização que especifica o campo attributes.

Consulte a referência 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

A seguir