Para seguir este documento, é necessário ler o guia introdutório sobre Tarefas agendadas na seção Introdução ao Fleet Engine e 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 direção, incluindo coleta e entrega de envio.
- Tarefas de indisponibilidade: use quando os motoristas estiverem indisponíveis, como em pausas obrigatórias.
- Tarefas de parada programadas: use para tarefas que não exigem direção em pontos de entrega ou locais de clientes, como o tempo para entrar em um edifício ou localizar um ponto de entrega.
Este documento explica como criar tarefas não relacionadas a envios no servidor. Para tipos de tarefas de envio, consulte Criar tarefas de envio.
Campos de tarefas para tarefas que não são de direção
Esta seção documenta os campos de tarefa necessários para tarefas de interrupção programadas e de indisponibilidade.
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. 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.
Campo | Valor |
---|---|
type |
Defina o tipo que corresponde ao tipo de tarefa, que pode ser:
|
state |
State.OPEN |
task_id |
ID exclusivo da tarefa. Esse número não pode ser o número de rastreamento do envio. Se você não tem IDs de tarefas no seu sistema, pode gerar um identificador universalmente exclusivo (UUID). Para 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 este campo para tarefas que não sejam de envio. |
plannedLocation |
Somente tarefas PICKUP , DELIVERY ou
SCHEDULED_STOP : o
local em que a tarefa será concluída. Não é necessário para
tarefas UNAVAILABLE . |
taskDuration |
O tempo esperado para concluir a tarefa. Por exemplo, para procurar estacionamento ou caminhar até o local de entrega. |
Campos de tarefa de remessa opcionais
Campo | Valor |
---|---|
targetTimeWindow |
A janela de tempo em que a tarefa deve ser concluída. Esse campo não afeta o comportamento de roteamento. |
task_tracking_view_config |
Somente tarefas PICKUP ou DELIVERY :
a configuração de rastreamento de tarefas que especifica quais elementos de dados
são visíveis para os usuários finais e 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 rastreamento.
- Embora você não precise informar um local para uma tarefa de indisponibilidade, isso melhora os cálculos de ETA ao longo do dia.
Regras de visibilidade especiais são aplicadas ao local do veículo quando ele está em uma tarefa UNAVAILABLE
para compartilhamento de trajeto.
- Apps de consumo integrados à biblioteca de rastreamento de remessas: quando o veículo está em uma tarefa de indisponibilidade, os usuários do app de consumo não conseguem ver a localização do veículo, mas ainda podem ver as informações de status do remessa.
- Apps de rastreamento de frotas integrados à biblioteca Fleet Tracking: quando o veículo está em uma tarefa de indisponibilidade, os gerentes de frota que usam o app de rastreamento de frotas podem conferir 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 do 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 do servidor, faça uma chamada REST
HTTP 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 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
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
É possível criar uma tarefa para uma parada programada, por exemplo, para tarefas que não envolvem direção em locais de clientes, paradas para reabastecimento ou quando um motorista recebe envios de um veículo alimentador. Ao criar uma tarefa de parada programada, use as seguintes diretrizes:
- Defina o tipo de tarefa como
- Não inclua um ID de rastreamento.
- Você pode fornecer um local.
Nos exemplos a seguir, mostramos como criar uma tarefa de indisponibilidade programada usando 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>
<id> é um identificador exclusivo da 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