Criar outros tipos de tarefas

Este documento pressupõe que você leu o guia introdutório para Tarefas agendadas também na seção Introdução ao Fleet Engine como O que é uma tarefa agendada? nesta seção.

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

  • Tarefas de envio: use para tarefas de condução, incluindo coleta e entrega remessas.
  • Tarefas de indisponibilidade: use para momentos em que os motoristas não estão disponíveis, como em intervalos obrigatórios.
  • Tarefas com paradas programadas: use para tarefas que não sejam a direção do carro em caixas de depósito ou clientes. locais, como tempo para entrar em um edifício ou localizar um ponto de entrega.

Neste documento, mostramos como criar tarefas que não são de envio no seu servidor. Para de tipos de tarefas de remessa, consulte Criar tarefas de remessa.

Campos de tarefas para tarefas que não são de direção

Esta seção documenta os campos de tarefas necessários para os casos de indisponibilidade e com paradas programadas.

Campos de tarefa obrigatórios

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

CampoValor
type

Defina com o tipo que corresponde ao tipo de tarefa, que pode ser um dos seguintes:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID exclusivo da tarefa. Esse não pode ser o número de rastreamento do envio. Se você não têm IDs de tarefas em seu sistema, é possível gerar um ID de (UUID). Para mais detalhes, consulte IDs de tarefas.
tracking_id Apenas tarefas PICKUP ou DELIVERY: O número ou identificador que você está usando para rastrear um envio. Não informe este campo para tarefas que não sejam de envio.
plannedLocation PICKUP, DELIVERY ou SCHEDULED_STOP apenas tarefas: o local onde a tarefa será concluída. Não é necessário para tarefas UNAVAILABLE.
taskDuration O tempo esperado para concluir a tarefa. Por exemplo, para procurar para estacionar ou caminhar até o local de transferência.

Campos de tarefas de envio opcionais

CampoValor
targetTimeWindow Janela de tempo em que a tarefa precisa ser concluída. Este campo não afeta o comportamento de roteamento.
task_tracking_view_config Apenas tarefas PICKUP ou DELIVERY: Configuração para o rastreamento de tarefas que especifica quais elementos de dados que são visíveis para os usuários finais em quais circunstâncias.
attributes Uma lista de atributos de tarefas personalizados. Cada atributo precisa ter uma chave exclusiva.

Criar uma tarefa de indisponibilidade

É possível criar uma tarefa indicando a 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 fornecer um local para uma tarefa de indisponibilidade, ao fazer isso, você aprimora os cálculos de HEC ao longo do dia.

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

  • Apps para consumidor integrados à biblioteca Shipment Tracking: quando o veículo está em uma tarefa de indisponibilidade, os usuários do app para o consumidor não podem ver o local do veículo, embora ainda possam ver as informações de status para na 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 a frota app de rastreamento poderá ver a localização do veículo para tarefas de indisponibilidade.

Os exemplos a seguir mostram como criar uma tarefa de indisponibilidade programada usando o a biblioteca Java gRPC 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, crie uma solicitação HTTP REST Chamada 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 seu servidor de acordo com as diretrizes descritas nos Papéis da conta de serviço e Tokens JSON da Web.

O corpo da solicitação precisa conter uma entidade Task com os campos apropriados descritos em Campos de tarefa para tarefas que não são de 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

Você pode criar uma tarefa para uma parada programada; por exemplo, para tarefas que não são de direção em locais de clientes, paradas de reabastecimento ou quando um motorista recebe remessas de um veículo alimentador. Ao criar uma tarefa com parada programada, use as seguintes diretrizes:

  • Defina o tipo de tarefa como
  • Não inclua um ID de acompanhamento.
  • Também é possível informar um local.

Os exemplos a seguir mostram como criar uma tarefa de indisponibilidade programada usando o a biblioteca Java gRPC 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 REST HTTP para CreateTask:

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

&lt;id&gt; é um identificador exclusivo para a tarefa.

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

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