В этом документе предполагается, что вы знаете, как создавать и использовать задачи. В ней приведены конкретные примеры настройки задач доставки следующими способами:
Задайте целевой временной интервал для задачи доставки. Укажите временной интервал, в течение которого задача должна быть выполнена.
Настройка видимости задач. Вы можете настроить видимость действий, связанных с задачами, для клиентов или операторов автопарка.
Подробные сведения о полях задач по доставке приведены в разделе Создание задач по доставке. При обновлении дополнительной информации о существующих задачах необходимо также указать соответствующий идентификатор задачи в дополнение к полям, которые вы обновляете для задач.
Как задать целевой временной интервал
Целевой временной интервал – это 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, указанного для транспортного средства. Это означает, что когда отслеживаемый маршрут находится в 5 остановках от места выполнения задачи, транспортное средство появляется, но маршрут для этого транспортного средства не появляется, пока до него не останется 3 остановки.
```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