Znajdowanie zadań

W tym dokumencie opisujemy, jak znaleźć informacje o zadaniach na serwerze lub w przeglądarce. Fleet Engine obsługuje 2 sposoby wyszukiwania zadań:

  • Wyszukiwanie zadań: zadania możesz wyszukiwać według tych identyfikatorów:

    • Identyfikator zadania: używany przez użytkowników, takich jak operatorzy floty, którzy mają dostęp do pełnego widoku danych zadania.
    • Identyfikator śledzenia: używany przez oprogramowanie klienta do przekazywania użytkownikowi ograniczonych informacji, np. kiedy przesyłka ma dotrzeć do jego domu.

    Pamiętaj o różnicy między identyfikatorem zadania a identyfikatorem śledzenia zadania. Są to jednak różne rzeczy. Zobacz Podstawowe pola zadania w przewodniku po zaplanowanych zadaniach.

  • Wyświetlanie listy zadań: szeroki dostęp do zadań, przeznaczony tylko dla zaufanych użytkowników.

Wyszukiwanie zadań

W tej sekcji opisano, jak wyszukiwać zadania według identyfikatora zadania lub identyfikatora śledzenia. Wymagania:

  • Wyszukiwanie według identyfikatora śledzenia musi być zgodne z regułami widoczności opisanymi w artykule Reguły widoczności śledzonych obiektów.

  • Aby ograniczyć zagrożenia dla bezpieczeństwa, używaj jak najwęższego tokena. Jeśli na przykład używasz tokena klienta dostawy, wszystkie wywołania zwracają tylko informacje istotne dla tego użytkownika, takie jak nadawca lub odbiorca przesyłki. Fleet Engine usuwa wszystkie inne informacje w odpowiedziach. Więcej informacji o tokenach znajdziesz w artykule na temat tokenów sieciowych JSON.

Wyszukiwanie zadania według identyfikatora zadania

Zadanie możesz wyszukać według jego identyfikatora w środowisku serwera za pomocą gRPC lub REST. Poniższe przykłady pokazują, jak używać biblioteki gRPC w języku Java lub żądania REST do wywołania metody 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> to unikalny identyfikator zadania.
  • <taskId> to identyfikator zadania, które chcesz wyszukać.
  • Nagłówek żądania musi zawierać pole Authorization z wartością Bearer <token>, gdzie <token> jest wystawiany przez serwer zgodnie z wytycznymi opisanymi w sekcjach Role konta usługi i Tokeny sieciowe JSON.
  • Treść żądania musi być pusta.
  • Jeśli wyszukiwanie się powiedzie, treść odpowiedzi będzie zawierać encję zadania.

Przykładowe polecenie 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}"

Wyszukiwanie zadań według identyfikatora śledzenia

Poniższe przykłady pokazują, jak wyszukiwać zadania według identyfikatora śledzenia przesyłki za pomocą gRPC lub wywołania HTTP REST do 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> to identyfikator śledzenia powiązany z zadaniem.

  • Nagłówek żądania musi zawierać pole Authorization z wartością Bearer <token>, gdzie <token> ma prawidłową rolę konta usługi. Zobacz Role konta usługi.

  • Jeśli wyszukiwanie się powiedzie, treść odpowiedzi będzie zawierać encję taskTrackingInfo.

Przykładowe polecenie 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}"

Wyświetlenie listy zadań

Wyświetlanie listy zadań wymaga szerokiego dostępu do zadań. Wyświetlanie listy zadań jest przeznaczone tylko dla zaufanych użytkowników. Podczas wysyłania żądań wyświetlenia listy zadań używaj tokenów uwierzytelniania czytnika floty dostaw lub administratora dostaw. Więcej informacji znajdziesz w artykule o rolach kont usługi.

Dzielenie list na strony

Listy zadań są podzielone na strony. Rozmiar strony można określić w żądaniach wyświetlenia listy zadań. Jeśli określono rozmiar strony, liczba zwracanych zadań nie przekracza określonego rozmiaru strony. Jeśli nie podano rozmiaru strony, używana jest odpowiednia wartość domyślna. Jeśli żądany rozmiar strony przekracza wewnętrzną wartość maksymalną, używana jest ta wartość.

Lista zadań może zawierać token do odczytu następnej strony wyników. Aby pobrać następną stronę, ponownie wyślij to samo żądanie wraz z tokenem strony. Gdy zwrócony token strony jest pusty, nie ma już żadnych zadań do pobrania.

Pola podczas wyświetlania listy zadań

Podczas wyświetlania listy zadań Fleet Engine ukrywa te pola:

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

Używaj tych formatów pól opartych na propozycjach ulepszeń interfejsów API Google:

Typ pola Format Przykład
Sygnatura czasowa RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
Czas trwania Liczba sekund, po której następuje s task_duration = 120s
Typ wyliczeniowy Ciąg znaków state = CLOSED AND type = PICKUP
Lokalizacja point.latitude i point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

Filtrowanie zadań na liście

Możesz filtrować zadania na liście według większości właściwości zadań. Składnię zapytania filtra znajdziesz w artykule AIP-160. Jeśli nie podasz zapytania filtra, wyświetlą się wszystkie zadania.

W tabeli poniżej znajdziesz prawidłowe właściwości zadań, których możesz używać do filtrowania:

Właściwości zadań do filtrowania list
  • type
  • attributes
  • tracking_id
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_duration_outcome
  • task_outcome
  • task_outcome_location
  • task_outcome_time

Pełną listę operatorów zapytań filtrujących znajdziesz w artykule AIP-160.

Przykłady zadań związanych z listami

Poniższy przykład pokazuje, jak wyświetlić listę zadań dla deliveryVehicleId i atrybutu zadania za pomocą biblioteki gRPC w języku Java oraz wywołania HTTP REST do ListTasks.

Odpowiedź informująca o powodzeniu może być pusta. Pusta odpowiedź oznacza, że z podanym deliveryVehicleId nie są powiązane żadne zadania.

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

Aby zastosować filtr do wyświetlanych zadań, dodaj parametr adresu URL „filter” z zapytaniem filtra z kodowaniem URL jako wartością.

Nagłówek żądania musi zawierać pole Authorization z wartością Bearer <token>, gdzie <token> ma prawidłową rolę konta usługi. Zobacz Role konta usługi.

Jeśli wyszukiwanie się powiedzie, treść odpowiedzi będzie miała taką strukturę:

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

Przykładowe polecenie 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}"

Co dalej?