En este documento, se supone que leíste la guía introductoria sobre las tareas programadas en la sección Introducción a Fleet Engine , así como ¿Qué es una tarea programada? en esta sección.
Fleet Engine para tareas programadas proporciona diferentes categorías amplias de tareas:
- Tareas de envío: Se usan para tareas de conducción, incluida la recolección y la entrega de envíos.
- Tareas de falta de disponibilidad: Se usan para los momentos en que los conductores no están disponibles, como con los descansos obligatorios.
- Tareas de detención programada: Se usan para tareas que no son de conducción en buzones o ubicaciones de clientes, como el tiempo para ingresar a un edificio o ubicar un punto de entrega.
En este documento, se explica cómo crear tareas que no sean de envío en tu servidor. Para conocer los tipos de tareas de envío, consulta Cómo crear tareas de envío.
Campos de tareas para tareas que no son de conducción
En esta sección, se documentan los campos de tareas necesarios para las tareas de falta de disponibilidad y de detención programada.
Campos de tareas obligatorios
Para cada tarea que crees en Fleet Engine, debes proporcionar los campos obligatorios y también puedes proporcionar cualquiera de los campos opcionales. Fleet Engine ignora todos los demás campos y genera una excepción si una solicitud de creación de tareas proporciona un deliveryVehicleId asignado. Para asignar tareas a un vehículo, usa UpdateDeliveryVehicleRequest. Para obtener más información, consulta
Cómo actualizar tareas.
| Campo | Valor |
|---|---|
type |
Establece el tipo que coincida con el tipo de tarea, que es uno de los siguientes:
|
state |
State.OPEN |
task_id |
Es el ID de tarea único. No debe ser el número de seguimiento del envío. Si no tienes IDs de tareas en tu sistema, puedes generar un identificador único universal (UUID). Para obtener detalles, consulta IDs de tareas. |
tracking_id |
PICKUP o DELIVERY tareas solamente:
Es el número o identificador que usas para hacer un seguimiento de un envío. No proporciones este campo para tareas que no sean de envío. |
planned_location |
PICKUP, DELIVERY, o
SCHEDULED_STOP tareas solamente: Es la
ubicación en la que se completará la tarea. No es obligatorio para
UNAVAILABLE tareas. |
task_duration |
Es el tiempo esperado que se agregará para completar la tarea. Por ejemplo, para buscar estacionamiento o caminar hasta la ubicación de entrega. |
Campos de tareas de envío opcionales
| Campo | Valor |
|---|---|
target_time_window |
Es el período durante el cual se debe completar la tarea. Este campo no afecta el comportamiento de enrutamiento. |
task_tracking_view_config |
PICKUP o DELIVERY tareas solamente:
Es la configuración para el seguimiento de tareas que especifica qué elementos de datos
son visibles para los usuarios finales en qué circunstancias. |
attributes |
Es una lista de atributos de tareas personalizados. Cada atributo debe tener una clave única. |
Crea una tarea de falta de disponibilidad
Puedes crear una tarea que indique la falta de disponibilidad; por ejemplo, para los descansos de los conductores. Para crear una tarea de falta de disponibilidad, usa los siguientes lineamientos:
- Establece el tipo de tarea en
UNAVAILABLE. - No incluyas un ID de seguimiento.
- Aunque no es necesario que proporciones una ubicación para una tarea de falta de disponibilidad, hacerlo proporciona cálculos de ETA mejorados durante todo el día.
Se aplican reglas de visibilidad especiales a la ubicación del vehículo cuando está en una tarea UNAVAILABLE para compartir el viaje.
- Aplicaciones para consumidores integradas con la biblioteca de Shipment Tracking: Cuando el vehículo está en una tarea de falta de disponibilidad, los usuarios de la aplicación para consumidores no pueden ver la ubicación del vehículo, aunque sí pueden ver la información de estado de su envío.
- Apps de seguimiento de flotas integradas con la biblioteca de Fleet Tracking: Cuando el vehículo está en una tarea de falta de disponibilidad, los administradores de flotas que usan la app de seguimiento de flotas podrán ver la ubicación del vehículo para las tareas de falta de disponibilidad.
En los siguientes ejemplos, se muestra cómo crear una tarea de falta de disponibilidad programada con
la biblioteca de gRPC de Java o cómo realizar una solicitud HTTP REST a
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 crear una tarea de falta de disponibilidad desde un entorno de servidor, realiza una llamada HTTP REST a CreateTask:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> es un identificador único para la tarea.
El encabezado de la solicitud debe contener un campo Authorization con el valor Bearer <token>, en el que <token> es emitido por tu servidor según los lineamientos descritos en Roles de cuentas de servicio y tokens web JSON.
El cuerpo de la solicitud debe contener una entidad Task con los campos adecuados
descritos en Campos de tareas para tareas que no son de conducción.
Comando curl de ejemplo:
# 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"
}
EOMCrea una tarea de detención programada
Puedes crear una tarea para una detención programada; por ejemplo, para tareas que no son de conducción en ubicaciones de clientes, para detenciones de reabastecimiento de combustible o para cuando un conductor recibe envíos de un vehículo alimentador. Cuando crees una tarea de detención programada, usa los siguientes lineamientos:
- Establece el tipo de tarea en
- No incluyas un ID de seguimiento.
- De manera opcional, puedes proporcionar una ubicación.
En los siguientes ejemplos, se muestra cómo crear una tarea de falta de disponibilidad programada con
la biblioteca de gRPC de Java o cómo realizar una solicitud HTTP REST a
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 crear una tarea de detención programada desde un entorno de servidor, realiza una llamada HTTP REST a CreateTask:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> es un identificador único para la tarea.
El encabezado de la solicitud debe contener un campo Authorization con el valor Bearer <token>, en el que <token> es emitido por tu servidor según los lineamientos descritos en Roles de cuentas de servicio y tokens web JSON.
El cuerpo de la solicitud debe contener una entidad Task:
Comando curl de ejemplo:
# 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