Cómo crear otros tipos de tareas

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 cuando los conductores no estén disponibles, por ejemplo, durante las pausas obligatorias.
  • 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 que no son de envío en tu servidor. Para ver los tipos de tareas de envío, consulta Crea tareas de envío.

Campos de tareas para tareas sin conducción

En esta sección, se documentan los campos de tareas necesarios para las tareas de indisponibilidad y las tareas de detención programadas.

Campos de tareas obligatorios

Para cada tarea que creas en Fleet Engine, debes proporcionarla con 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.

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. 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 información específica, 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: 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, busca estacionamiento o camina hasta la ubicación de transferencia.

Campos opcionales de la tarea 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: Es 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 tareas personalizados. Cada atributo debe tener una clave única.

Cómo crear una tarea de falta de disponibilidad

Puedes crear una tarea que indique que no hay disponibilidad, por ejemplo, para las pausas del conductor. Para crear una tarea de falta de disponibilidad, sigue estos 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 indisponibilidad, hacerlo proporciona cálculos mejorados de la hora de llegada estimada durante el día.

Se aplican reglas de visibilidad especiales a la ubicación del vehículo cuando está en una tarea UNAVAILABLE para compartir viajes.

  • Apps para consumidores integradas en la biblioteca de seguimiento de envíos: Cuando el vehículo está en una tarea de indisponibilidad, los usuarios de la app 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 flota integradas en la biblioteca de seguimiento de flota: Cuando el vehículo está en una tarea de falta de disponibilidad, los administradores de flota que usen la app de seguimiento de flota 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 programada de falta de disponibilidad 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.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 de REST HTTP 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 cuentas de servicio y Tokens web de JSON.

El cuerpo de la solicitud debe contener una entidad Task con los campos adecuados que se describen 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"
 }
 EOM

Cómo crear una tarea de detención programada

Puedes crear una tarea para una parada programada; por ejemplo, para tareas sin conducción en ubicaciones de clientes, paradas de recarga de combustible o cuando un conductor recibe envíos desde 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 programada de falta de disponibilidad 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.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 de REST HTTP 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 la 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, 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

¿Qué sigue?