Versandaufgaben erstellen

In diesem Dokument wird davon ausgegangen, dass Sie den Einführungsleitfaden zu Geplanten Aufgaben im Abschnitt Einführung in Fleet Engine sowie Was ist eine geplante Aufgabe? in diesem Abschnitt gelesen haben.

Fleet Engine für geplante Aufgaben bietet verschiedene allgemeine Kategorien von Aufgaben:

  • Versandaufgaben: Für Fahraufgaben, einschließlich Abholung und Lieferung von Sendungen.
  • Nichtverfügbarkeitsaufgaben: Verwenden Sie diese für Zeiten, in denen Fahrer nicht verfügbar sind, z. B. für vorgeschriebene Pausen.
  • Aufgaben für geplante Stopps: Für Aufgaben, die nicht mit dem Fahren zusammenhängen, z. B. das Betreten eines Gebäudes oder das Suchen eines Zustellpunkts.

In diesem Dokument wird beschrieben, wie Sie auf Ihrem Server Versand-Aufgaben erstellen. Informationen zu anderen Aufgabentypen finden Sie unter Andere Aufgabentypen erstellen.

Felder für Versandaufgaben

In diesem Abschnitt werden die Aufgabenfelder dokumentiert, die sowohl für Abhol- als auch für Zustellaufgaben erforderlich sind.

Erforderliche Aufgabenfelder

Für jede Aufgabe, die Sie in Fleet Engine erstellen, müssen Sie die erforderlichen Felder angeben. Sie können auch optionale Felder angeben. Fleet Engine ignoriert alle anderen Felder und löst eine Ausnahme aus, wenn in einer Anfrage zum Erstellen einer Aufgabe ein zugewiesenes deliveryVehicleId angegeben ist. Verwenden Sie UpdateDeliveryVehicleRequest, um einem Fahrzeug Aufgaben zuzuweisen. Weitere Informationen finden Sie unter Aufgaben aktualisieren.

FeldWert
type

Legen Sie den Typ fest, der dem Aufgabentyp entspricht. Das ist einer der folgenden Werte:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Eindeutige Aufgaben-ID. Dies darf nicht die Tracking-Nummer für die Sendung sein. Wenn Sie in Ihrem System keine Aufgaben-IDs haben, können Sie eine universell eindeutige Kennung (Universally Unique Identifier, UUID) generieren. Weitere Informationen finden Sie unter Aufgaben-IDs.
tracking_id Nur PICKUP- oder DELIVERY-Aufgaben: Die Nummer oder Kennung, die Sie zum Nachverfolgen einer Sendung verwenden. Geben Sie dieses Feld nicht für Aufgaben an, die sich nicht auf den Versand beziehen.
planned_location PICKUP, DELIVERY oder SCHEDULED_STOP-Aufgaben: Der Ort, an dem die Aufgabe erledigt werden soll. Nicht erforderlich für UNAVAILABLE-Aufgaben.
task_duration Die geschätzte Zeit, die für die Ausführung der Aufgabe benötigt wird. Zum Beispiel, um einen Parkplatz zu suchen oder zum Übergabeort zu gehen.

Optionale Felder für Versandaufgaben

FeldWert
target_time_window Das Zeitfenster, in dem die Aufgabe erledigt werden soll. Dieses Feld hat keinen Einfluss auf das Routingverhalten.
task_tracking_view_config Nur PICKUP- oder DELIVERY-Aufgaben: Die Konfiguration für die Aufgabenverfolgung, in der angegeben wird, welche Datenelemente unter welchen Umständen für die Endnutzer sichtbar sind.
attributes Eine Liste benutzerdefinierter Aufgabenattribute. Jedes Attribut muss einen eindeutigen Schlüssel haben.

Abholaufgabe für Sendung erstellen

Wenn Sie Fleet Engine verwenden möchten, um die Aktivität eines Fahrers zu verfolgen, der eine Sendung abholt, erstellen Sie eine Aufgabe zum Abholen der Sendung. Dazu müssen Sie das Attribut „Aufgabentyp“ auf PICKUP festlegen. Das folgende Beispiel zeigt die Abholung einer Sendung in der Grand Indonesia East Mall.

Die folgenden Beispiele zeigen, wie Sie mit der Java-gRPC-Bibliothek eine Aufgabe zum Abholen von Sendungen erstellen oder eine HTTP-REST-Anfrage an CreateTask senden.

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.PICKUP)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .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 a 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

So erstellen Sie einen Abholauftrag für den Versand über eine Serverumgebung: Führen Sie einen HTTP-REST-Aufruf an CreateTask aus:

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

<id> ist eine eindeutige Kennung für die Aufgabe.

Der Anfrageheader muss ein Feld Authorization mit dem Wert Bearer <token> enthalten, wobei <token> von Ihrem Server gemäß den Richtlinien in Dienstkontorollen und JSON Web Tokens ausgestellt wird.

Der Anfragetext muss eine Task-Einheit mit den entsprechenden Feldern enthalten, die unter Felder für Versandaufgaben beschrieben sind.

Beispiel eines curl-Befehls:

 # Set $JWT, $PROJECT_ID, $TRACKING_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": "PICKUP",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM

Aufgabe für die Lieferung einer Sendung erstellen

Wenn Sie Fleet Engine verwenden möchten, um die Aktivität eines Fahrers zu verfolgen, der eine Sendung ausliefert, erstellen Sie eine Aufgabe für die Auslieferung der Sendung. Dazu müssen Sie das Attribut „Aufgabentyp“ auf DELIVERY festlegen. Das folgende Beispiel veranschaulicht die Lieferung einer Sendung an die Grand Indonesia East Mall.

Die folgenden Beispiele zeigen, wie Sie mit der Java-gRPC-Bibliothek eine Aufgabe zum Abholen von Sendungen erstellen oder eine HTTP-REST-Anfrage an CreateTask senden.

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.DELIVERY)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .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

So erstellen Sie einen Abholauftrag für den Versand über eine Serverumgebung: Führen Sie einen HTTP-REST-Aufruf an CreateTask aus:

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

<id> ist eine eindeutige Kennung für die Aufgabe.

Der Anfrageheader muss ein Feld Authorization mit dem Wert Bearer <token> enthalten, wobei <token> von Ihrem Server gemäß den Richtlinien in Dienstkontorollen und JSON Web Tokens ausgestellt wird.

Der Anfragetext muss eine Task-Einheit enthalten:

Beispiel eines curl-Befehls:

 # Set $JWT, $PROJECT_ID, $TRACKING_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": "DELIVERY",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM
 ```

Nächste Schritte