Crear tareas de envío

En este documento, se asume que ya leíste la guía introductoria a También Tareas programadas en la sección Introducción a Fleet Engine 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 las tareas de conducción, incluidas la recogida y entrega de entre los envíos.
  • Tareas de falta de disponibilidad: Usa esta opción para los horarios en los que los conductores no están disponibles, como al igual que con los descansos requeridos.
  • Tareas detenidas programadas: Se usan para tareas sin conducir en buzones o clientes. locales, como la hora de 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 ver 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 el retiro y la entrega tareas.

Campos de tareas obligatorios

Para cada tarea que crees en Fleet Engine, debes proporcionarle campos y también puede proporcionar cualquiera de los campos opcionales. Fleet Engine Ignora todos los demás campos y arroja una excepción si la creación de una tarea proporciona un deliveryVehicleId asignado. Para asignar tareas a un vehículo, usa UpdateDeliveryVehicleRequest. Para obtener más información, consulta Actualiza tareas.

CampoValor
type

Establece el tipo que coincida con el tipo de tarea, que puede ser uno de los siguientes:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID de tarea único. Este no debe ser el número de seguimiento del envío. Si IDs de tareas en tu sistema, puedes generar un ID único único (UUID). Para obtener información específica, consulta IDs de tareas.
tracking_id Solo tareas PICKUP o DELIVERY: Es el número o identificador que utiliza para realizar el seguimiento de un envío. Qué no debes hacer proporcionar este campo para tareas no relacionadas con el envío.
plannedLocation Solo tareas PICKUP, DELIVERY o SCHEDULED_STOP: Es la ubicación en la que se debe completar la tarea. No se requiere para UNAVAILABLE tareas.
taskDuration Es el tiempo esperado para completar la tarea. Por ejemplo, para buscar para estacionar o caminar hasta el lugar de transferencia.

Campos opcionales de tareas de envío

CampoValor
targetTimeWindow 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 PICKUP o DELIVERY: La configuración del seguimiento de tareas que especifica qué elementos de datos son visibles para los usuarios finales en qué circunstancias.
attributes Una lista de atributos de tarea personalizados. Cada atributo debe tener una clave única.

Crear una tarea de retiro de envío

Para usar Fleet Engine para seguir la actividad de un conductor que recoge un envío, crear una tarea de retiro de envíos. 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íos con el biblioteca gRPC de Java o cómo hacer 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íos desde un entorno de servidor, crea una solicitud REST HTTP llamada 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 con los campos correspondientes que se describe 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

Para utilizar Fleet Engine para seguir la actividad de un conductor que entrega un envío, crear una tarea de entrega de envíos. Esto implica configurar el atributo tipo de tarea a DELIVERY. En el siguiente ejemplo, se muestra la entrega de un envío al Grand Indonesia East Mall.

En los siguientes ejemplos, se muestra cómo crear una tarea de retiro de envíos con el biblioteca gRPC de Java o cómo hacer 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.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íos desde un entorno de servidor, crea una solicitud REST HTTP llamada 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>, donde tu servidor emite <token> según de acuerdo con los lineamientos descritos en Roles de cuentas de servicio y JSON Web tokens.

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
 ```

¿Qué sigue?