Konfigurowanie zadań

W tym dokumencie zakładamy, że wiesz, jak tworzyć zadania i jak 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, musisz też podać odpowiedni identyfikator zadania oraz pola, które aktualizujesz.

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 je zarejestrować i wygenerować 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ć dla 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

Tutaj <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 mogą być wyświetlane 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 przypisane jest 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 wykonane lub anulowane.

Możesz dostosować konfigurację widoczności w przypadku każdego zadania, ustawiając TaskTrackingViewConfig w zadaniu podczas jego tworzenia lub aktualizowania 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 dotyczące reguł 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 ograniczona 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 widoczna , gdy lokalizacja pojazdu też zapewnia tę samą opcję widoczności zawsze widoczna.
  • Nigdy nie widoczne: linia łamana trasy musi używać opcji widoczności nigdy nie widoczna, gdy lokalizacja pojazdu używa opcji widoczności nigdy nie widoczna.

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?