En este documento, se supone que leíste la guía introductoria sobre 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 usa para dirigir tareas, incluidos el retiro y la entrega de los envíos.
- Tareas de falta de disponibilidad: Úsalas para horarios en los que los conductores no están disponibles, como en los que se requieren recesos.
- Tareas de paradas programadas: Se usan para tareas sin conducir en buzones o ubicaciones de clientes, como el tiempo para entrar a un edificio o ubicar un punto de entrega.
En este documento, se explica cómo crear tareas de shipment en tu servidor. Para otros tipos de tareas, consulta Cómo crear otros tipos de tareas.
Campos de tareas de envío
En esta sección, se documentan los campos de tareas necesarios para las tareas de retiro y entrega.
Campos de tareas obligatorios
Para cada tarea que crees en Fleet Engine, debes proporcionarle los campos obligatorios y también puedes proporcionar cualquiera de los campos opcionales. Fleet Engine ignora todos los demás campos y arroja una excepción si una solicitud de creación de tarea 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 puede ser uno de los siguientes:
|
state |
State.OPEN |
task_id |
ID de tarea único. Este no debe ser el número de seguimiento del envío. Si no tienes ID de tareas en tu sistema, puedes generar un identificador único universal (UUID). Para obtener más información, consulta IDs de tareas. |
tracking_id |
Solo tareas de PICKUP o DELIVERY :
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. |
plannedLocation |
Solo tareas PICKUP , DELIVERY o SCHEDULED_STOP : La ubicación en la que se debe completar la tarea. No es obligatorio para las tareas de UNAVAILABLE . |
taskDuration |
Es el tiempo esperado para completar la tarea. Por ejemplo, busca estacionamiento o camina hasta la ubicación de transferencia. |
Campos opcionales de tareas de envío
Campo | Valor |
---|---|
targetTimeWindow |
Es el período durante el cual se debe completar la tarea. Este campo no afecta el comportamiento del enrutamiento. |
task_tracking_view_config |
Solo tareas de PICKUP o DELIVERY :
Es la configuración del seguimiento de tareas que especifica qué elementos de datos
son visibles para los usuarios finales y en qué circunstancias. |
attributes |
Una lista de atributos de tarea personalizados. Cada atributo debe tener una clave única. |
Crea una tarea de retiro de envío
Si deseas usar Fleet Engine para seguir la actividad de un conductor que recoge un envío, crea una tarea de retiro de envío. Esto implica configurar el atributo de tipo de tarea en PICKUP
. En el siguiente ejemplo, se muestra la recolección de un envío en el Grand Indonesia East Mall.
En los siguientes ejemplos, se muestra cómo crear una tarea de retiro de envío con la biblioteca gRPC de Java o cómo realizar una solicitud REST HTTP 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.PICKUP)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.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 a 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 retiro de envío 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 tu servidor emite <token> según los lineamientos descritos en Funciones de cuenta de servicio y Tokens web JSON.
El cuerpo de la solicitud debe contener una entidad Task
con los campos adecuados que se describen en Campos de tareas de envío.
Comando curl
de ejemplo
# Set $JWT, $PROJECT_ID, $TRACKING_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": "PICKUP",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Crear una tarea de entrega de envíos
Si deseas usar Fleet Engine para seguir la actividad de un conductor que entrega un envío, crea una tarea de entrega de envíos. Esto implica establecer el atributo de tipo de tarea en DELIVERY
. En el siguiente ejemplo, se ilustra una entrega de envío al Grand Indonesia East Mall.
En los siguientes ejemplos, se muestra cómo crear una tarea de retiro de envío con la biblioteca 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.DELIVERY)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.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 retiro de envío 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 tu servidor emite <token> según los lineamientos que se describen en Roles de cuenta de servicio y Tokens web JSON.
El cuerpo de la solicitud debe contener una entidad Task
:
Comando curl
de ejemplo
# Set $JWT, $PROJECT_ID, $TRACKING_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": "DELIVERY",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
```