Поиск задач

В этом документе описаны способы поиска информации о задачах на сервере или в браузере. Fleet Engine поддерживает два способа поиска задач:

  • Поиск задач. Вы можете искать задачи по следующим идентификаторам:

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

    Убедитесь, что вы понимаете разницу между идентификатором задачи и идентификатором отслеживания задачи. Но это не одно и то же. Подробнее об основных полях задачи…

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

Поиск задач

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

  • Поиск по идентификатору отслеживания должен соответствовать правилам, описанным в разделе Правила видимости для отслеживаемых объектов.

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

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

Вы можете найти задачу по ее идентификатору в среде сервера, используя gRPC или REST. В примерах ниже показано, как использовать библиотеку gRPC для Java или REST-запрос к GetTask.

gRPC

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

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task request
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
     .setName(taskName)
     .build();

 try {
   Task task = deliveryService.getTask(getTaskRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>

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

Пример команды curl:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

Поиск задач по идентификатору отслеживания

В примерах ниже показано, как искать задачи по идентификатору отслеживания отправления с помощью gRPC или HTTP REST-вызова GetTaskTrackingInfo.

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>

  • <tracking_id> – идентификатор отслеживания, связанный с задачей.

  • Заголовок запроса должен содержать поле Authorization со значением Bearer <token>, где <token> – токен с правильной ролью сервисного аккаунта. Подробнее о ролях сервисных аккаунтов…

  • Если поиск выполнен успешно, тело ответа содержит объект taskTrackingInfo.

Пример команды curl:

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/taskTrackingInfo/${TRACKING_ID}"

Получение списка задач

Для получения списка задач требуется широкий доступ к задачам. Просмотр списка задач доступен только доверенным пользователям. При отправке запросов на получение списка задач используйте токены аутентификации Delivery Fleet Reader или Delivery Admin. Подробнее о ролях сервисных аккаунтов…

Разбиение списков на страницы

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

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

Поля при составлении списка задач

Fleet Engine редактирует следующие поля при выводе списка задач:

  • VehicleStop.planned_location
  • VehicleStop.state
  • VehicleStop.TaskInfo.taskId

Используйте следующие форматы полей, основанные на предложениях по улучшению API Google:

Тип поля Формат Пример
Временная метка RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
Продолжительность Количество секунд, за которым следует s. task_duration = 120s
Перечисление Строка state = CLOSED AND type = PICKUP
Местоположение point.latitude и point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

Фильтровать задачи в списке

Вы можете отфильтровать список задач по большинству свойств. Синтаксис запросов фильтрации описан в AIP-160. Если запрос фильтра не указан, будут перечислены все задачи.

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

Свойства задач для фильтрации списков
  • type
  • attributes
  • tracking_id
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_duration_outcome
  • task_outcome
  • task_outcome_location
  • task_outcome_time

Полный список операторов запросов фильтрации приведен в AIP-160.

Примеры задач со списками

В примере ниже показано, как получить список задач для deliveryVehicleId и атрибута задачи с помощью библиотеки gRPC для Java и HTTP REST-запроса к ListTasks.

Успешный ответ может быть пустым. Пустой ответ означает, что с указанным deliveryVehicleId не связано никаких задач.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TRACKING_ID = "TID-7449w087464x5";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Tasks request
 String parent = "providers/" + PROJECT_ID;
 ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
     .setParent(parent)
     .setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
     .build();

 try {
   ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks

Чтобы применить фильтр к списку задач, добавьте параметр URL filter с экранированным запросом фильтра в качестве значения.

Заголовок запроса должен содержать поле Authorization со значением Bearer <token>, где <token> – токен с правильной ролью сервисного аккаунта. Подробнее о ролях сервисных аккаунтов…

При успешном поиске тело ответа имеет следующую структуру:

    // JSON representation
    {
      "tasks": [
        {
          object (Task)
        }
      ],
      "nextPageToken": string,
      "totalSize": integer
    }

Пример команды curl:

 # Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
 curl -H "Authorization: Bearer ${JWT}" \
   "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

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