Atualizar campos de veículos

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

  • vehicle_state: determina a disponibilidade do veículo para novas viagens.
  • vehicle_type: campo obrigatório ao criar um veículo. O campo também pode servir como um critério de filtro para correspondências de veículos. Consulte Criar um veículo para mais detalhes sobre como definir esse campo.
  • attributes[]: uma matriz opcional do tipo VehicleAttribute. Use-os para definir critérios personalizados para melhorar o comportamento de filtragem ao pesquisar ou listar veículos.
 

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

Campo de estado do veículo

O sistema pode definir o estado do veículo como OFFLINE ou ONLINE. Por exemplo, você pode definir o estado do veículo como ONLINE todos os dias às 9h e OFFLINE todos os dias às 17h.

Modo off-line Modo on-line
Use OFFLINE para indicar que um veículo não está aceitando novas viagens. O veículo ainda pode concluir viagens atribuídas enquanto nesse estado.
  • Um Vehicle criado no estado ONLINE pode ser retornado imediatamente em resposta a consultas SearchVehicles. Consulte Pesquisar veículos para mais detalhes.
  • Os veículos criados no estado ONLINE precisam usar o campo last_location na chamada CreateVehicle.

Campo de atributos do veículo

Use o campo attributes do veículo para criar critérios personalizados que permitam que seus consumidores ou operadores de frota encontrem veículos na sua frota em uma variedade maior de critérios de pesquisa. Isso melhora os recursos dos seus apps para fornecer melhores correspondências de veículos em comparação com o uso de 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 class para diferenciar seus veículos de compartilhamento de viagens em níveis de classe. Você usaria os seguintes valores de string para representar os níveis de classe do veículo: ECONOMY, STANDARD e LUXURY.

No entanto, os valores de atributos personalizados não precisam ser mutuamente exclusivos. Você pode usar critérios como pet-friendly, non-smoking e able to take longer trips. Cada um deles pode ser um atributo personalizado separado que usa valores booleanos. Um determinado veículo pode receber todos esses três atributos personalizados, além do atributo personalizado class definido como o valor de string apropriado.

O uso de atributos dessa forma pode oferecer uma grande variedade de recursos úteis para encontrar veículos para viagens com necessidades específicas. Para instruções sobre como usar atributos personalizados como filtros de consulta, consulte Pesquisar veículos.

Atualizar atributos do veículo

É possível atualizar os atributos do veículo usando UpdateVehicle ou UpdateVehicleAttributes. Cada chave attributes pode ter apenas um valor por veículo. Declare atributos de veículo personalizados usando attributes na máscara de campo e fornecendo valores com base no método abaixo.

UpdateVehicle UpdateVehicleAttributes
Essa API não permite atualizar apenas um único atributo. Ao usar esse método, qualquer uso do attributes campo na máscara de campo resulta na declaração de todo o conjunto de atributos do veículo. Isso resulta na substituição de qualquer atributo preexistente que não esteja explicitamente incluído na máscara de campo. Se você usar esse método para declarar um novo atributo personalizado, você também precisará declarar novamente todos os atributos personalizados que o veículo precisa manter. Se você excluir o attributes na máscara de campo, então esse método 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. Esse método aceita uma lista específica de atributos a serem atualizados. A solicitação atualiza ou adiciona apenas os atributos especificados na máscara de campo. Os atributos preexistentes que não são especificados permanecem inalterados.

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

Esta seção mostra como atualizar campos de veículo usando UpdateVehicleRequest, que inclui uma update_mask para indicar quais campos atualizar. Consulte a documentação do Protocol Buffers sobre máscaras de campo para mais detalhes.

As atualizações de campos diferentes de last_location exigem privilégios de administrador do Fleet Engine On-demand.

Exemplo: ativar um novo tipo de viagem e um atributo personalizado

Este exemplo ativa viagens back_to_back para o veículo e também especifica um novo atributo: class. Conforme observado em Atualizar atributos do veículo anteriormente, a atualização do campo attributes usando essa abordagem exige que você indique todos os atributos personalizados que quer manter. Portanto, o exemplo mostra um valor cash_only gravado para preservá-lo de ser substituído durante uma operação de atualização que especifica o campo attributes.

Para atualizar apenas o valor de um par de atributos de chave-valor, use o UpdateVehicleAttributes método em vez disso e não inclua o attribute campo na máscara de campo para a UpdateVehicle solicitação.

Consulte a providers.vehicles.update referência para gRPC e 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

A seguir