Atualizar campos de veículos de entrega

Este documento abrange campos importantes do veículo que você pode ao criar e gerenciar veículos.

  • type: o tipo de veículo de entrega. Isso afeta trajetos gerados para este veículo.
  • attributes[]: uma matriz de opções do tipo. DeliveryVehicleAttribute. Usar a fim de definir critérios personalizados para veículos no seu serviço a fim de aprimorar ao pesquisar ou listar veículos.
 

Para conferir uma lista completa dos campos do veículo, consulte:

Campo de atributos do veículo

Use o campo attributes do veículo para criar critérios personalizados e ativar consumidores ou operadores de frota para encontrar veículos da sua frota em um diversos critérios de pesquisa. Isso melhora a capacidade dos aplicativos de fornecer melhores correspondências de veículos do que você usaria com critérios de pesquisa com base apenas em outros campos de veículos. Cada veículo pode ter no máximo 100 atributos, e cada um deve 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ê use valores de string como o seguinte para representar zonas diferentes: 1B, 2C e 3A. É possível usar um filtro no rastreamento de frota para mostrar apenas veículos que trabalham em uma zona específica para o operador responsável por ela.

No entanto, os valores de atributos personalizados não precisam ser mutuamente exclusivos. Talvez você use critérios como available-at-night e has-refrigeration. Cada um desses poderia ser um atributo personalizado separado que usa valores booleanos. Um determinado veículo possam ser atribuídos esses três atributos personalizados juntamente com o atributo zone atributo personalizado definido como o valor de string apropriado.

Atualizar atributos do veículo

Cada chave attributes pode ter apenas um valor por veículo. Você declara atributos personalizados do veículo usando attributes na máscara de campo e fornecendo valores com base no método abaixo.

A API UpdateDeliveryVehicle não permite atualizar apenas um . Com esse método, qualquer uso do campo attributes na máscara de campo resulta na redeclaração de todo o conjunto de atributos do veículo para o veículo. Isso resulta na substituição de qualquer atributo preexistente explicitamente incluído na máscara de campo. Se você usar esse método para declarar um novo atributo personalizado, também é necessário declarar novamente todos os atributos personalizados de um veículo retido. Se você excluir o attributes na máscara de campo, esse deixa os atributos personalizados existentes conforme definido 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 dos campos do veículo

Nesta seção, mostramos como atualizar os campos do veículo usando UpdateDeliveryVehicleRequest, que inclui um update_mask para indicar quais campos atualizar. Consulte a documentação do Buffers de protocolo máscaras de campo para mais detalhes.

As atualizações em campos diferentes de last_location exigem a entrega do mecanismo de frota Privilégios de administrador.

Exemplo: definir atributo personalizado

Este exemplo especifica um novo atributo: zone. Conforme observado em Atualize os atributos do veículo antes, atualizando 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 preservá-lo sejam substituídos durante uma operação de atualização que especifica o 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