Este documento pressupõe que você leu o guia introdutório sobre Tarefas agendadas na seção Introdução ao Fleet Engine, bem como O que é uma tarefa agendada? nesta seção.
O Fleet Engine para tarefas programadas oferece diferentes categorias de tarefas:
- Tarefas de envio: use para tarefas de direção, incluindo retirada e entrega de envios.
- Tarefas de indisponibilidade: use para momentos em que os motoristas não estão disponíveis, como em intervalos obrigatórios.
- Tarefas de parada programada: use para tarefas que não envolvem dirigir em caixas de coleta ou locais de clientes, como o tempo para entrar em um prédio ou localizar um ponto de entrega.
Este documento aborda como criar tarefas que não são de envio no seu servidor. Para tipos de tarefas de envio, consulte Criar tarefas de envio.
Campos de tarefas que não são de condução
Nesta seção, documentamos os campos de tarefa necessários para as tarefas de indisponibilidade e de parada programada.
Campos de tarefa obrigatórios
Para cada tarefa criada no Fleet Engine, é necessário preencher os campos obrigatórios
e, se quiser, os 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 é um dos seguintes:
|
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 sistema, gere um identificador universalmente exclusivo (UUID). Para mais detalhes, consulte IDs de tarefa. |
tracking_id |
Somente tarefas de PICKUP ou DELIVERY:
o número ou identificador que você está usando para rastrear uma remessa. 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 será concluída. Não é necessário para
tarefas UNAVAILABLE. |
task_duration |
O tempo esperado para concluir a tarefa. Por exemplo, para procurar estacionamento ou caminhar até o local de entrega. |
Campos opcionais de tarefa de envio
| Campo | Valor |
|---|---|
target_time_window |
A janela de tempo em que a tarefa precisa ser concluída. Esse campo não afeta o comportamento de roteamento. |
task_tracking_view_config |
Somente tarefas PICKUP ou DELIVERY:
A configuração para o rastreamento de planilhas de controle de tarefas que especifica quais elementos de dados
ficam visíveis para os usuários finais em quais circunstâncias. |
attributes |
Uma lista de atributos de tarefa personalizados. Cada atributo precisa ter uma chave exclusiva. |
Criar uma tarefa de indisponibilidade
É possível 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 rastreamento.
- Embora não seja necessário fornecer um local para uma tarefa de indisponibilidade, isso melhora os cálculos de HEC ao longo do dia.
Regras especiais de visibilidade se aplicam à localização do veículo quando ele está em uma tarefa UNAVAILABLE para compartilhamento de trajeto.
- Aplicativos para o consumidor integrados à biblioteca de rastreamento de remessas: quando o veículo está em uma tarefa de indisponibilidade, os usuários do aplicativo para o consumidor não podem ver a localização do veículo, mas ainda podem ver as informações de status da remessa.
- Apps de rastreamento de frotas integrados à biblioteca de rastreamento de frotas: quando o veículo está em uma tarefa de indisponibilidade, os gerentes de frota que usam o app de rastreamento de frotas 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 do Java ou como fazer uma solicitação REST HTTP 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 Papéis da conta de serviço e Tokens JSON Web.
O corpo da solicitação precisa conter uma entidade Task com os campos adequados
descritos em Campos de tarefas que não são de trajeto.
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"
}
EOMCriar uma tarefa de parada programada
É possível criar uma tarefa para uma parada programada, por exemplo, para tarefas que não envolvem dirigir nos locais dos clientes, para paradas de reabastecimento ou para quando um motorista recebe remessas de um veículo de alimentação. Ao criar uma tarefa de parada programada, use as seguintes diretrizes:
- Defina o tipo de tarefa como
- Não inclua um ID de rastreamento.
- Se quiser, informe um local.
Os exemplos a seguir mostram como criar uma tarefa de indisponibilidade programada usando
a biblioteca gRPC do Java ou como fazer uma solicitação REST HTTP 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 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