Как настроить задачи

Предполагается, что вы знаете, как создавать задачи и работать с ними. В нем приведены конкретные примеры того, как настраивать задачи по доставке следующими способами:

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

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

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

Как задать целевой временной интервал

Целевое временное окно – это TimeWindow, в течение которого должна быть выполнена задача. Например, если вы сообщаете получателям доставки временной интервал доставки, вы можете использовать целевой временной интервал задачи, чтобы зафиксировать этот временной интервал и генерировать оповещения, или вы можете использовать его для анализа эффективности прошлых поездок.

Целевое временное окно состоит из времени начала и времени окончания и может быть задано для любого типа задачи. Целевое временное окно не влияет на поведение при построении маршрута.

В приведенных ниже примерах показано, как задать временное окно с помощью библиотеки Java gRPC или как отправить HTTP-запрос REST к UpdateTask. Это поле также можно задать при создании задачи.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String TASK_ID = "task-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
  Task task = Task.newBuilder()
    .setName(taskName)
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .build();

  // Task request
  UpdateTaskRequest updateTaskRequest =
    UpdateTaskRequest.newBuilder()  // No need for the header
        .setTask(task)
        .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
        .build();

  try {
    Task updatedTask = deliveryService.updateTask(updateTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

Чтобы задать временное окно задачи с помощью HTTP, вызовите PATCH и используйте updateMask, чтобы обновить параметр targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

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

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "targetTimeWindow": {
      "startTime": "2023-03-29T21:00:00Z",
      "endTime": "2023-03-29T23:00:00Z"
    }
  }
  EOM

Как настроить доступ к задачам

По умолчанию Fleet Engine предоставляет информацию о действиях, связанных с задачами, которая может быть показана как клиентам, получающим посылку, так и операторам автопарка, отслеживающим посылки. Например, можно указать, сколько остановок должно быть сделано до того, как клиенту будет отправлено уведомление о статусе доставки. Вы можете настроить эту информацию для каждой задачи, чтобы она лучше соответствовала вашей бизнес-модели.

В этом разделе описываются правила видимости отслеживаемых объектов на карте. Эти правила применяются к двум категориям объектов:

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

Правила видимости маркеров местоположения

Fleet Engine показывает маркеры местоположения для пункта доставки, указанного на карте, независимо от статуса доставки.

Правила видимости данных задач

В этом разделе описаны правила видимости данных о задачах по умолчанию. Настраивать можно только активные задачи для транспортного средства, то есть правила видимости можно применять только к задачам по получению и доставке.

Нельзя настраивать следующие задачи:

  • Запланированные остановки
  • Задачи, связанные с недоступностью
  • Неактивные задачи, связанные с автомобилями

Правила видимости задач о недоступности

По умолчанию транспортное средство не отображается на карте, если отслеживаемой задаче назначена хотя бы одна задача недоступности. Например, если водитель делает перерыв или заправляет автомобиль по пути к отслеживаемому грузу. Расчетное время прибытия и расчетное время выполнения задачи по-прежнему доступны. Это правило также нельзя изменить.

Видимость активных задач, связанных с автомобилем

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

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

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

Поля задач, связанных с автомобилями, для правил видимости
  • Ломаные линии маршрутов
  • Расчетное время прибытия
  • Расчетное время выполнения задачи
  • Оставшееся расстояние до задачи.
  • Оставшееся количество остановок
  • Местоположение автомобиля

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

Настройки доступа
  • Оставшееся количество остановок
  • Время до расчетного времени прибытия
  • Оставшееся расстояние
  • Показывать всегда
  • Никогда не показывается

Правила видимости ломаных линий маршрутов и местоположения транспортных средств

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

Чтобы обеспечить допустимое сочетание видимости ломаных линий маршрута и местоположения транспортного средства, следуйте приведенным ниже правилам.

Для ломаных линий маршрута и местоположения транспортного средства заданы одинаковые настройки видимости.

В этом случае и ломаная линия, и местоположение автомобиля задают одни и те же параметры, в том числе:

  • осталось остановок
  • время до расчетного времени прибытия
  • оставшееся расстояние;

Чтобы соблюдать правила, значение для видимости полилиний маршрута должно быть меньше или равно значению, заданному для видимости автомобиля. В этом примере оставшееся пороговое значение для полилинии равно 3, что меньше значения 5, указанного для транспортного средства. Это означает, что, когда отслеживаемый маршрут будет на расстоянии пяти остановок от местоположения задачи, транспортное средство появится, но маршрут для этого транспортного средства не появится, пока маршрут не будет на расстоянии трех остановок.

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

Ломаные линии маршрутов и местоположение транспортных средств задают разные варианты видимости.

Если для ломаных линий маршрута и местоположения транспортного средства заданы разные настройки видимости, местоположение транспортного средства будет видно, только если соблюдаются обе настройки. Видимость ломаной линии зависит от правил видимости транспортного средства:

  • Всегда видно. Ломаная линия маршрута должна использовать вариант видимости Всегда видно, если местоположение транспортного средства также использует вариант видимости Всегда видно.
  • Никогда не виден. Если для местоположения транспортного средства задано значение Никогда не виден, то для ломаной линии маршрута также должно быть задано значение Никогда не виден.

Пример:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

В этом примере местоположение транспортного средства видно, только если до остановки осталось не менее трех остановок И не менее 3000 метров.

Пример настройки доступа к задаче

В примерах ниже показано, как настроить задачу с помощью следующих правил видимости:

  • Показывать ломаные линии маршрута, если транспортное средство находится в пределах трех остановок.
  • Показывать расчетное время прибытия, если оставшееся расстояние до пункта назначения меньше 5000 метров.
  • Никогда не показывать количество оставшихся остановок.
  • Для остальных полей сохраняется видимость по умолчанию: они показываются, когда до задачи остается пять остановок.

Ознакомьтесь с информацией о TaskTrackingViewConfig для gRPC или REST.

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

REST

Чтобы задать окно конфигурации представления отслеживания задач с помощью HTTP, вызовите метод PATCH и используйте updateMask, чтобы обновить параметр taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

Пример:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

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