Поиск задач

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

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

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

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

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

Как искать задачи

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

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

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

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

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

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