Criar outros tipos de tarefas

Este documento pressupõe que você leu o guia introdutório sobre Tarefas programadas na seção Introdução ao Fleet Engine, bem como O que é uma tarefa programada? nesta seção.

O Fleet Engine para tarefas programadas oferece diferentes categorias gerais de tarefas:

  • Tarefas de envio: use para tarefas de direção, incluindo coleta e entrega de envios.
  • Tarefas de indisponibilidade: use para horários em que os motoristas não estão disponíveis, como intervalos obrigatórios.
  • Tarefas de parada programada: use para tarefas que não envolvem dirigir em caixas de entrega ou locais de clientes, como tempo para entrar em um prédio ou localizar um ponto de entrega.

Este documento explica como criar tarefas sem envio no seu servidor. Para tipos de tarefas de envio, consulte Criar tarefas de envio.

Campos de tarefa para atividades que não envolvem dirigir

Esta seção documenta os campos de tarefa necessários para indisponibilidade e tarefas de parada programada.

Campos obrigatórios da tarefa

Para cada tarefa criada no Fleet Engine, é necessário fornecer os campos obrigatórios e também os opcionais. O Fleet Engine ignora todos os outros campos e gera uma exceção se uma solicitação de criação de tarefa fornecer um deliveryVehicleId atribuído. Para atribuir tarefas a um veículo, use UpdateDeliveryVehicleRequest. Para mais informações, consulte Atualizar tarefas.

CampoValor
type

Defina como o tipo que corresponde ao tipo de tarefa, que é um dos seguintes:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID exclusivo da tarefa. Não pode ser o número de rastreamento do envio. Se você não tiver IDs de tarefa no seu sistema, gere um identificador universal exclusivo (UUID). Para mais detalhes, consulte IDs de tarefas.
tracking_id Somente tarefas PICKUP ou DELIVERY: O número ou identificador que você está usando para rastrear um envio. Não forneça esse campo para tarefas que não sejam de envio.
planned_location Somente tarefas PICKUP, DELIVERY ou SCHEDULED_STOP: o local em que a tarefa precisa ser concluída. Não é necessário para tarefas de UNAVAILABLE.
task_duration O tempo esperado para concluir a tarefa. Por exemplo, para procurar um estacionamento ou ir a pé até o local de entrega.

Campos opcionais da tarefa de envio

CampoValor
target_time_window O período em que a tarefa deve ser concluída. Esse campo não afeta o comportamento de roteamento.
task_tracking_view_config Somente tarefas do PICKUP ou DELIVERY: a configuração para o acompanhamento de tarefas que especifica quais elementos de dados ficam visíveis para os usuários finais e em quais circunstâncias.
attributes Uma lista de atributos de tarefa personalizados. Cada atributo precisa ter uma chave exclusiva.

Criar uma tarefa de indisponibilidade

Você pode criar uma tarefa indicando indisponibilidade, por exemplo, para intervalos do motorista. Para criar uma tarefa de indisponibilidade, siga estas diretrizes:

  • Defina o tipo de tarefa como UNAVAILABLE.
  • Não inclua um ID de acompanhamento.
  • Embora não seja necessário informar um local para uma tarefa de indisponibilidade, isso melhora os cálculos de ETA ao longo do dia.

Regras especiais de visibilidade se aplicam à localização do veículo quando ele está em uma tarefa de UNAVAILABLE para compartilhamento de trajeto.

  • Apps para consumidores integrados à biblioteca de rastreamento de remessas: quando o veículo está em uma tarefa de indisponibilidade, os usuários do app para consumidores não podem ver a localização do veículo, mas ainda podem conferir informações de status da remessa.
  • Apps de rastreamento de frota integrados à biblioteca de rastreamento de frota: quando o veículo está em uma tarefa de indisponibilidade, os gerentes de frota que usam o app de rastreamento de frota podem ver a localização do veículo para tarefas de indisponibilidade.

Os exemplos a seguir mostram como criar uma tarefa de indisponibilidade programada usando a biblioteca gRPC Java ou como fazer uma solicitação HTTP REST para CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.UNAVAILABLE)
    .setState(Task.State.OPEN)
    .setTaskDuration(
      Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Para criar uma tarefa de indisponibilidade em um ambiente de servidor, faça uma chamada HTTP REST para CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> é um identificador exclusivo da tarefa.

O cabeçalho da solicitação precisa conter um campo Authorization com o valor Bearer <token>, em que <token> é emitido pelo servidor de acordo com as diretrizes descritas em Funções da conta de serviço e Tokens da Web JSON.

O corpo da solicitação precisa conter uma entidade Task com os campos adequados descritos em Campos de tarefa para atividades que não envolvem direção.

Comando curl de exemplo:

 # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "UNAVAILABLE",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "300s"
 }
 EOM

Criar uma tarefa de parada programada

É possível criar uma tarefa para uma parada programada, por exemplo, para tarefas que não envolvem direção em locais de clientes, para paradas de reabastecimento ou para quando um motorista recebe entregas de um veículo de transporte. Ao criar uma tarefa de parada programada, use as seguintes diretrizes:

  • Defina o tipo de tarefa como
  • Não inclua um ID de acompanhamento.
  • Você pode informar um local, se quiser.

Os exemplos a seguir mostram como criar uma tarefa de indisponibilidade programada usando a biblioteca gRPC Java ou como fazer uma solicitação HTTP REST para CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.SCHEDULED_STOP)
    .setState(Task.State.OPEN)
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTrip(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Para criar uma tarefa de parada programada em um ambiente de servidor, faça uma chamada HTTP REST para CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> é um identificador exclusivo da tarefa.

O cabeçalho da solicitação precisa conter um campo Authorization com o valor Bearer <token>, em que <token> é emitido pelo servidor de acordo com as diretrizes descritas em Funções da conta de serviço e Tokens da Web JSON.

O corpo da solicitação precisa conter uma entidade Task:

Comando curl de exemplo:

# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "SCHEDULED_STOP",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "600s"
 }
 EOM

A seguir