Как создавать задания других типов

Предполагается, что вы уже прочитали вводное руководство по запланированным задачам в разделе Введение в Fleet Engine, а также статью Что такое запланированная задача? в этом разделе.

Fleet Engine для запланированных задач предоставляет различные широкие категории задач:

  • Задачи по доставке. Используются для задач, связанных с вождением, включая получение и доставку грузов.
  • Задачи недоступности. Используйте их, когда водители недоступны, например во время обязательных перерывов.
  • Запланированные задачи на остановках. Используйте для задач, не связанных с вождением, в пунктах выдачи или у клиентов, например для времени, необходимого, чтобы войти в здание или найти пункт доставки.

В этом документе рассказывается, как создавать на сервере задачи, не связанные с доставкой. Подробнее о создании задач на доставку…

Поля задач, не связанных с вождением

В этом разделе описаны поля задач, необходимые как для задач недоступности, так и для задач запланированной остановки.

Обязательные поля задачи

Для каждой задачи, создаваемой в Fleet Engine, необходимо указать обязательные поля. Также можно указать необязательные поля. Fleet Engine игнорирует все остальные поля и выдает исключение, если в запросе на создание задачи указано назначенное значение deliveryVehicleId. Чтобы назначить задачи транспортному средству, используйте UpdateDeliveryVehicleRequest. Подробнее о том, как обновить задачи…

ПолеЗначение
type

Укажите тип, соответствующий типу задачи:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Уникальный идентификатор задачи. Это не должен быть номер отслеживания отправления. Если в вашей системе нет идентификаторов задач, вы можете сгенерировать универсальный уникальный идентификатор (UUID). Подробнее об идентификаторах задач…
tracking_id Только для задач PICKUP и DELIVERY. Номер или идентификатор, который вы используете для отслеживания отправления. Не указывайте это поле для задач, не связанных с доставкой.
planned_location Только для задач PICKUP, DELIVERY или SCHEDULED_STOP. Место, где должна быть выполнена задача. Не требуется для задач UNAVAILABLE.
task_duration Ожидаемое время, которое нужно добавить для выполнения задачи. Например, чтобы найти парковку или дойти до места передачи.

Необязательные поля задачи доставки

ПолеЗначение
target_time_window Временной интервал, в течение которого задача должна быть выполнена. Это поле не влияет на маршрутизацию.
task_tracking_view_config Только для задач PICKUP или DELIVERY. Конфигурация для отслеживания задач, которая определяет, какие элементы данных видны конечным пользователям и при каких обстоятельствах.
attributes Список настраиваемых атрибутов задач. У каждого атрибута должен быть уникальный ключ.

Как создать задачу, связанную с недоступностью

Вы можете создать задачу, указывающую на недоступность, например для перерывов водителя. Чтобы создать задачу, связанную с недоступностью, следуйте приведенным ниже инструкциям.

  • Установите тип задачи UNAVAILABLE.
  • Не добавляйте идентификатор отслеживания.
  • Хотя указывать местоположение для задачи недоступности необязательно, это позволяет точнее рассчитывать расчетное время прибытия в течение дня.

К местоположению транспортного средства, выполняющего задачу UNAVAILABLE, применяются особые правила видимости.

  • Пользовательские приложения, интегрированные с библиотекой Shipment Tracking. Когда транспортное средство выполняет задачу недоступности, пользователи приложения не видят его местоположение, но могут видеть информацию о статусе доставки.
  • Приложения для отслеживания автопарка, интегрированные с библиотекой Fleet Tracking. Когда транспортное средство выполняет задачу, связанную с недоступностью, менеджеры автопарка, использующие приложение для отслеживания автопарка, смогут видеть местоположение транспортного средства для задач, связанных с недоступностью.

В примерах ниже показано, как создать задачу о запланированном периоде недоступности с помощью библиотеки gRPC для Java или как отправить HTTP REST-запрос в 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

Чтобы создать задачу о недоступности из серверной среды, выполните вызов HTTP REST к CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> – уникальный идентификатор задачи.

Заголовок запроса должен содержать поле Authorization со значением Bearer <token>, где <token> – токен, выданный вашим сервером в соответствии с инструкциями, приведенными в разделах Роли сервисных аккаунтов и Веб-токены JSON.

Тело запроса должно содержать объект Task с соответствующими полями, описанными в разделе Поля задач, не связанных с вождением.

Пример команды 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"
 }
 EOM

Как создать задачу запланированной остановки

Вы можете создать задачу для запланированной остановки, например для выполнения задач, не связанных с вождением, в местоположениях клиентов, для остановок на заправку или для получения водителем грузов из фидерного транспортного средства. При создании задачи запланированной остановки следуйте приведенным ниже рекомендациям.

  • Установите тип задачи
  • Не добавляйте идентификатор отслеживания.
  • При желании вы можете указать местоположение.

В примерах ниже показано, как создать задачу о запланированной недоступности с помощью библиотеки gRPC для Java или как выполнить HTTP REST-запрос к 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

Чтобы создать задачу запланированной остановки из серверной среды, выполните вызов HTTP REST к CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> – уникальный идентификатор задачи.

Заголовок запроса должен содержать поле Authorization со значением Bearer <token>, где <token> – токен, выданный вашим сервером в соответствии с инструкциями, приведенными в разделах Роли сервисных аккаунтов и Веб-токены JSON.

Тело запроса должно содержать объект Task:

Пример команды 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

Дальнейшие действия