Este documento pressupõe que você leu o guia introdutório sobre tarefas programadas na seção Introdução ao Fleet Engine e o artigo O que é uma tarefa programada? nesta seção.
O Fleet Engine para tarefas programadas oferece diferentes categorias amplas de tarefas:
- Tarefas de envio: usadas para tarefas de direção, incluindo coleta e entrega de envios.
- Tarefas de indisponibilidade: usadas para momentos em que os motoristas não estão disponíveis, como em intervalos obrigatórios.
- Tarefas de parada programada: usadas para tarefas que não envolvem direção em caixas de entrega ou locais de clientes, como 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 servidor. Para tipos de tarefas de envio, consulte Criar tarefas de envio.
Campos de tarefas para tarefas que não envolvem direção
Esta seção documenta os campos de tarefas necessários para tarefas de indisponibilidade e de parada programada.
Campos de tarefas obrigatórios
Para cada tarefa criada no Fleet Engine, você precisa fornecer os campos obrigatórios e também pode 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 é um destes:
|
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 tarefas no seu sistema, poderá gerar um identificador universalmente exclusivo (UUID). Para detalhes, consulte IDs de tarefas. |
tracking_id |
PICKUP ou DELIVERY tarefas apenas:
O número ou identificador que você está usando para rastrear um envio. Não
forneça esse campo para tarefas que não são de envio. |
planned_location |
PICKUP, DELIVERY, ou
SCHEDULED_STOP tarefas apenas: O
local onde a tarefa será concluída. Não é obrigatório para
UNAVAILABLE tarefas. |
task_duration |
O tempo esperado para concluir a tarefa. Por exemplo, para procurar estacionamento ou caminhar até o local de entrega. |
Campos opcionais de tarefas de envio
| Campo | Valor |
|---|---|
target_time_window |
O período em que a tarefa precisa ser concluída. Esse campo não afeta o comportamento de roteamento. |
task_tracking_view_config |
PICKUP ou DELIVERY tarefas apenas:
A configuração de rastreamento 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 tarefas personalizados. Cada atributo precisa ter uma chave exclusiva. |
Criar uma tarefa de indisponibilidade
Você pode criar uma tarefa indicando indisponibilidade, por exemplo, para intervalos de 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, isso oferece cálculos de ETA aprimorados ao longo do dia.
Regras de visibilidade especiais se aplicam ao local do veículo quando ele está em uma tarefa UNAVAILABLE para compartilhamento de viagens.
- Aplicativos para o consumidor integrados à biblioteca de rastreamento de envios: quando o veículo está em uma tarefa de indisponibilidade, os usuários do aplicativo para o consumidor não podem ver o local do veículo, mas ainda podem conferir as informações de status do envio.
- 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 o local 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 Papéis da conta de serviço e tokens da Web JSON.
O corpo da solicitação precisa conter uma entidade Task com os campos apropriados
descritos em Campos de tarefas para tarefas que não envolvem direção.
Exemplo de comando curl:
# 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
Você pode 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 envios de um veículo de alimentação. Ao criar uma tarefa de parada programada, siga estas diretrizes:
- Defina o tipo de tarefa como
- Não inclua um ID de acompanhamento.
- Você pode fornecer um local opcionalmente.
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 Papéis da conta de serviço e tokens da Web JSON.
O corpo da solicitação precisa conter uma entidade Task:
Exemplo de comando curl:
# 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