Tworzenie innych typów zadań

W tym dokumencie zakładamy, że znasz przewodnik wprowadzający do zaplanowanych zadań w sekcji Wprowadzenie do Fleet Engine oraz Co to jest zaplanowane zadanie? w tej sekcji.

Fleet Engine do zaplanowanych zadań udostępnia różne szerokie kategorie zadań:

  • Zadania związane z dostawami: służą do wykonywania zadań związanych z prowadzeniem pojazdu, w tym odbierania i dostarczania przesyłek.
  • Zadania związane z brakiem dostępności: używaj go, gdy kierowcy nie są dostępni, np. w sytuacjach, gdy wymagane są przerwy.
  • Zadania zaplanowanych zatrzymania: używaj w przypadku zadań niezwiązanych z prowadzeniem samochodu w skrzynkach referencyjnych lub lokalizacjach klientów, np. dotyczących czasu wejścia do budynku lub zlokalizowania punktu dostawy.

Z tego dokumentu dowiesz się, jak utworzyć na serwerze zadania niezwiązane z dostawą. Informacje o typach zadań związanych z dostawą znajdziesz w artykule Tworzenie zadań związanych z dostawą.

Pola zadania dotyczące zadań niezwiązanych z prowadzeniem

W tej sekcji opisano pola zadania wymagane w przypadku zadań dotyczących niedostępności i zaplanowanych zatrzymań.

Wymagane pola zadań

W przypadku każdego zadania, które tworzysz w Fleet Engine, musisz podać mu wymagane pola, a także dowolne z pól opcjonalnych. Fleet Engine ignoruje wszystkie pozostałe pola i zgłasza wyjątek, jeśli żądanie utworzenia zadania zawiera przypisany element deliveryVehicleId. Aby przypisać zadania do pojazdu, użyj funkcji UpdateDeliveryVehicleRequest. Więcej informacji znajdziesz w artykule o aktualizowaniu zadań.

PoleWartość
type

Ustaw typ zgodny z typem zadania, który może być jeden z tych:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Unikalny identyfikator zadania. Nie może to być numer śledzenia przesyłki. Jeśli nie masz identyfikatorów zadań w systemie, możesz wygenerować unikalny identyfikator uniwersalny (UUID). Szczegółowe informacje znajdziesz w artykule o identyfikatorach zadań.
tracking_id Tylko zadania PICKUP lub DELIVERY: numer lub identyfikator, którego używasz do śledzenia przesyłki. Nie wypełniaj tego pola w przypadku zadań, które nie dotyczą wysyłki.
plannedLocation PICKUP, DELIVERY lub SCHEDULED_STOP tylko zadania: lokalizacja, w której ma zostać wykonane zadanie. Nie jest wymagane w przypadku UNAVAILABLE zadań.
taskDuration Przewidywany czas potrzebny na wykonanie zadania. Możesz na przykład poszukać parkingu lub przejść do miejsca, w którym zawrzesz zamówienie.

Opcjonalne pola zadania dostawy

PoleWartość
targetTimeWindow Przedział czasu, w którym zadanie ma zostać wykonane. To pole nie ma wpływu na sposób kierowania.
task_tracking_view_config Tylko zadania PICKUP lub DELIVERY: konfiguracja śledzenia zadań określająca, które elementy danych są widoczne dla użytkowników w konkretnych okolicznościach.
attributes Lista niestandardowych atrybutów zadań. Każdy atrybut musi mieć unikalny klucz.

Tworzenie zadania dotyczącego niedostępności

Możesz utworzyć zadanie wskazujące niedostępność, np. dotyczące przerwy kierowcy. Aby utworzyć zadanie dotyczące niedostępności, postępuj zgodnie z tymi wskazówkami:

  • Ustaw typ zadania na UNAVAILABLE.
  • Nie podawaj identyfikatora śledzenia.
  • Nie musisz podawać lokalizacji w przypadku zadania dotyczącego niedostępności, ale dzięki temu możesz uzyskać ulepszone obliczenia czasu dojazdu w ciągu dnia.

Do lokalizacji pojazdu, gdy jest ona przypisana do zadania UNAVAILABLE polegającego na udostępnianiu trasy, mają zastosowanie specjalne reguły widoczności.

  • Aplikacje konsumenckie zintegrowane z biblioteką śledzenia przesyłki: gdy pojazd jest wykonywany w ramach zadania dotyczącego niedostępności, użytkownicy aplikacji dla klientów nie widzą jego lokalizacji, ale nadal mogą zobaczyć informacje o stanie wysyłki.
  • Aplikacje do śledzenia floty zintegrowane z biblioteką śledzenia floty: gdy pojazd jest wykonywany w ramach zadania dotyczącego niedostępności, menedżerowie floty, którzy korzystają z aplikacji do śledzenia floty, mogą zobaczyć lokalizację pojazdu na potrzeby zadań związanych z niedostępnością.

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie dotyczące niedostępności za pomocą biblioteki Java gRPC lub jak wysłać żądanie HTTP REST do CreateTask.

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.UNAVAILABLE)
    .setState(Task.State.OPEN)
    .setTaskDuration(
      Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Aby utworzyć zadanie dotyczące niedostępności w środowisku serwera, wykonaj wywołanie HTTP REST do interfejsu CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> to unikalny identyfikator zadania.

Nagłówek żądania musi zawierać pole Authorization o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługitokeny sieciowe JSON.

Treść żądania musi zawierać encję Task z odpowiednimi polami opisanymi w artykule Pola zadań dotyczące zadań nieprowadzących.

Przykładowe polecenie curl:

 # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "UNAVAILABLE",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "300s"
 }
 EOM

Tworzenie zaplanowanego zadania zatrzymania

Możesz utworzyć zadanie dla zaplanowanego przystanku, na przykład w przypadku zadań niezwiązanych z prowadzeniem pojazdu w miejscach obsługi klienta, przystanków na tankowanie lub w przypadku odbioru przesyłek z pojazdów zasilających. Podczas tworzenia zaplanowanego zadania zatrzymania postępuj zgodnie z tymi wskazówkami:

  • Ustaw typ zadania na
  • Nie podawaj identyfikatora śledzenia.
  • Możesz opcjonalnie podać lokalizację.

W przykładach poniżej pokazujemy, jak utworzyć zaplanowane zadanie dotyczące niedostępności za pomocą biblioteki gRPC Java lub jak wysłać żądanie HTTP REST do CreateTask.

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.SCHEDULED_STOP)
    .setState(Task.State.OPEN)
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTrip(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Aby utworzyć zaplanowane zadanie zatrzymania z otoczenia serwera, wykonaj wywołanie HTTP REST do CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; to unikalny identyfikator zadania.

Nagłówek żądania musi zawierać pole Authorization o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługitokeny sieciowe JSON.

Treść żądania musi zawierać element Task:

Przykład polecenia curl:

# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "SCHEDULED_STOP",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "600s"
 }
 EOM

Co dalej?