Konfigurowanie zadań

W tym dokumencie zakładamy, że wiesz, jak tworzyć zadania i z nich korzystać. Znajdziesz tu konkretne przykłady konfigurowania zadań związanych z dostawą na te sposoby:

  • Ustawianie docelowego okna czasowego dla zadania związanego z dostawą: ustaw okno czasowe , w którym zadanie ma zostać wykonane.

  • Dostosowywanie widoczności zadania: dostosuj widoczność działań związanych z zadaniem, aby wyświetlać je klientom lub operatorom floty.

Szczegółowe informacje o polach zadań związanych z dostawą znajdziesz w artykule Tworzenie zadań związanych z dostawą. Gdy aktualizujesz dodatkowe informacje o istniejących zadaniach, oprócz pól, które aktualizujesz w zadaniach, musisz też podać odpowiedni identyfikator zadania.

Ustawianie docelowego okna czasowego

Docelowe okno czasowe to TimeWindow, w którym zadanie powinno zostać wykonane. Jeśli na przykład informujesz odbiorców o oknie czasowym dostawy, możesz użyć docelowego okna czasowego zadania, aby zarejestrować to okno czasowe i generować alerty. Możesz też użyć go do analizowania skuteczności poprzednich przejazdów.

Docelowe okno czasowe składa się z godziny rozpoczęcia i godziny zakończenia i można je ustawić w przypadku każdego typu zadania. Docelowe okno czasowe nie wpływa na zachowanie związane z wyznaczaniem trasy.

Poniższe przykłady pokazują, jak ustawić okno czasowe za pomocą biblioteki Java gRPC library lub jak wysłać żądanie HTTP REST do UpdateTask. To pole możesz też ustawić podczas tworzenia zadania.

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

Aby ustawić okno czasowe zadania za pomocą protokołu HTTP, wywołaj PATCH i użyj updateMask, aby zaktualizować parametr targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

W tym przypadku <id> to unikalny identyfikator zadania. Nagłówek żądania musi zawierać pole Authorization z wartością Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w sekcji Role konta usługi i tokeny JSON Web.

# 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

Dostosowywanie widoczności zadania

Domyślnie Fleet Engine zapewnia wgląd w działania związane z zadaniem, które można wyświetlać zarówno klientom otrzymującym przesyłkę, jak i operatorom floty śledzącym przesyłki. Obejmuje to informacje takie jak liczba przystanków przed wysłaniem klientowi powiadomienia o stanie dostawy paczki. Możesz dostosować te informacje w przypadku każdego zadania, aby lepiej dopasować je do swojego modelu biznesowego.

W tej sekcji opisujemy reguły widoczności śledzonych obiektów na mapie. Te reguły dotyczą 2 kategorii obiektów:

  • Widoczność znacznika lokalizacji
  • Widoczność danych zadania w przypadku aktywnych zadań pojazdu, takich jak linie łamane i szacowany czas dotarcia

Reguły widoczności znacznika lokalizacji

Fleet Engine wyświetla znaczniki lokalizacji miejsca dostawy przesyłki na mapie niezależnie od stanu dostawy.

Reguły widoczności danych zadania

W tej sekcji opisujemy domyślne reguły widoczności, które mają zastosowanie do danych zadania. Możesz dostosować tylko aktywne zadania pojazdu, co oznacza, że tylko zadania odbioru i dostawy mogą stosować dostosowane reguły widoczności.

Nie można dostosować tych zadań:

  • Zaplanowane przystanki
  • Zadania niedostępności
  • Nieaktywne zadania pojazdu

Reguły widoczności zadań niedostępności

Domyślnie pojazd nie pojawia się na mapie, jeśli do śledzonego zadania przypisano co najmniej 1 zadanie niedostępności. Na przykład, jeśli kierowca robi sobie przerwę lub pojazd jest tankowany na trasie do śledzonej przesyłki. Szacowany czas dotarcia i szacowany czas ukończenia zadania są nadal dostępne. Tej reguły też nie można dostosować.

Widoczność aktywnych zadań pojazdu

Obiekt TaskTrackingInfo zawiera wiele elementów danych, które ty możesz udostępnić za pomocą biblioteki śledzenia przesyłek. Domyślnie te pola są widoczne, gdy zadanie jest przypisane do pojazdu i gdy pojazd znajduje się w odległości 5 przystanków od zadania. Widoczność kończy się, gdy zadanie zostanie ukończone lub anulowane.

Możesz dostosować konfigurację widoczności w przypadku każdego zadania, ustawiając TaskTrackingViewConfig w zadaniu podczas tworzenia lub aktualizowania zadania w Fleet Engine. Spowoduje to utworzenie reguł dotyczących dostępności poszczególnych elementów danych.

W tabeli poniżej znajdziesz pola, do których możesz zastosować reguły widoczności.

Pola zadań pojazdu w regułach widoczności
  • Linie łamane trasy
  • Szacowany czas dotarcia
  • Szacowany czas ukończenia zadania
  • Pozostała odległość do zadania
  • Pozostała liczba przystanków
  • Lokalizacja pojazdu

W tej tabeli znajdziesz opcje widoczności dostępne w przypadku pól wymienionych powyżej.

Opcje widoczności
  • Pozostała liczba przystanków
  • Czas do szacowanego czasu dotarcia
  • Pozostała odległość do przejechania
  • Zawsze widoczne
  • Nigdy nie widoczne

Reguły widoczności linii łamanych trasy i lokalizacji pojazdu

W przypadku śledzonej trasy widoczność linii łamanych trasy zależy od widoczności pojazdu. Jeśli linia łamana trasy jest widoczna na aktywnej trasie na której nie widać pojazdu, lokalizację pojazdu można nadal określić na podstawie końca widocznej linii łamanej. Dlatego widoczność linii łamanej trasy musi być tak samo lub bardziej restrykcyjna niż widoczność pojazdu.

Aby zapewnić prawidłowe połączenie widoczności linii łamanych trasy i lokalizacji pojazdu, postępuj zgodnie z tymi regułami.

Linie łamane trasy i lokalizacja pojazdu określają te same opcje widoczności

W tym scenariuszu zarówno linia łamana, jak i lokalizacja pojazdu mają ustawione te same opcje, które obejmują:

  • pozostała liczba przystanków,
  • czas do szacowanego czasu dotarcia na miejsce,
  • pozostała odległość do przejechania.

Aby zachować zgodność z regułami, wartość widoczności linii łamanych trasy musi być mniejsza lub równa wartości ustawionej dla widoczności pojazdu. W tym przykładzie próg pozostałych przystanków dla linii łamanej jest ustawiony na 3, czyli mniej niż wartość 5 określona dla pojazdu. Oznacza to, że gdy śledzona podróż osiągnie 5 przystanków od lokalizacji zadania, pojawi się pojazd, ale trasa tego pojazdu nie będzie widoczna, dopóki podróż nie będzie oddalona o 3 przystanki.

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

Linie łamane trasy i lokalizacja pojazdu określają różne opcje widoczności

Gdy linie łamane trasy i lokalizacja pojazdu mają różne opcje widoczności, lokalizacja pojazdu jest widoczna tylko wtedy, gdy spełnione są obie opcje widoczności. Widoczność linii łamanej zależy od reguł widoczności pojazdu:

  • Zawsze widoczne: linia łamana trasy musi używać opcji widoczności zawsze widoczne , gdy lokalizacja pojazdu też udostępnia tę samą opcję widoczności zawsze widoczne.
  • Nigdy nie widoczne: linia łamana trasy musi używać opcji widoczności nigdy nie widoczne , gdy lokalizacja pojazdu używa opcji widoczności nigdy nie widoczne.

Oto przykład:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

W tym przykładzie lokalizacja pojazdu jest widoczna tylko wtedy, gdy pozostała liczba przystanków wynosi co najmniej 3 ORAZ pozostała odległość do przejechania wynosi co najmniej 3000 metrów.

Przykład dostosowywania widoczności zadania

Poniższe przykłady pokazują, jak ustawić zadanie z tymi regułami widoczności:

  • Wyświetlaj linie łamane trasy, jeśli pojazd znajduje się w odległości 3 przystanków.
  • Wyświetlaj szacowany czas dotarcia, jeśli pozostała odległość do przejechania jest krótsza niż 5000 metrów.
  • Nigdy nie wyświetlaj pozostałej liczby przystanków.
  • Każde inne pole zachowuje domyślną widoczność, czyli jest wyświetlane, gdy pojazd znajduje się w odległości 5 przystanków od zadania.

Więcej informacji znajdziesz w sekcji TaskTrackingViewConfig w gRPC lub 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

Aby ustawić okno konfiguracji widoku śledzenia zadania za pomocą protokołu HTTP, wywołaj PATCH i użyj updateMask, aby zaktualizować parametr taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

Na przykład:

# 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

Co dalej?