Creare attività di spedizione

Questo documento presuppone che tu abbia letto la guida introduttiva alle Attività pianificate nella sezione Introduzione a Fleet Engine, nonché Che cos'è un'attività pianificata? in questa sezione.

Fleet Engine per le attività pianificate fornisce diverse categorie generali di attività:

  • Attività di spedizione: utilizzale per le attività di guida, inclusi il ritiro e la consegna di spedizioni.
  • Attività di non disponibilità: utilizzale per i periodi in cui i conducenti non sono disponibili, ad esempio per le pause obbligatorie.
  • Attività di sosta pianificata: utilizzale per attività non di guida presso cassette di deposito o sedi dei clienti, ad esempio il tempo per entrare in un edificio o individuare un punto di consegna.

Questo documento spiega come creare attività di spedizione sul server. Per altri tipi di attività, vedi Creare altri tipi di attività.

Campi dell'attività di spedizione

Questa sezione documenta i campi delle attività necessari per le attività di ritiro e consegna.

Campi dell'attività obbligatori

Per ogni attività creata in Fleet Engine, devi fornire i campi obbligatori e puoi anche fornire uno qualsiasi dei campi facoltativi. Fleet Engine ignora tutti gli altri campi e genera un'eccezione se una richiesta di creazione di un'attività fornisce un deliveryVehicleId assegnato. Per assegnare attività a un veicolo, utilizza UpdateDeliveryVehicleRequest. Per ulteriori informazioni, vedi Aggiornare le attività.

CampoValore
type

Impostato sul tipo che corrisponde al tipo di attività, ovvero uno dei seguenti:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID attività univoco. Non deve essere il numero di tracciamento della spedizione. Se non hai ID attività nel tuo sistema, puoi generare un identificatore univoco universale (UUID). Per informazioni specifiche, vedi ID attività.
tracking_id Solo attività PICKUP o DELIVERY: Il numero o l'identificatore che utilizzi per monitorare una spedizione. Non fornire questo campo per le attività non di spedizione.
planned_location PICKUP, DELIVERY o SCHEDULED_STOP solo attività: la posizione in cui deve essere completata l'attività. Non richiesto per le attività UNAVAILABLE.
task_duration Il tempo previsto per completare l'attività. Ad esempio, per cercare un parcheggio o raggiungere a piedi il punto di consegna.

Campi facoltativi dell'attività di spedizione

CampoValore
target_time_window La finestra temporale durante la quale deve essere completata l'attività. Questo campo non influisce sul comportamento di routing.
task_tracking_view_config Solo attività PICKUP o DELIVERY: La configurazione per il monitoraggio delle attività che specifica quali elementi di dati sono visibili agli utenti finali in quali circostanze.
attributes Un elenco di attributi personalizzati delle attività. Ogni attributo deve avere una chiave univoca.

Crea un'attività di ritiro della spedizione

Per utilizzare Fleet Engine per seguire l'attività di un autista che ritira una spedizione, crea un'attività di ritiro della spedizione. Ciò comporta l'impostazione dell'attributo del tipo di attività su PICKUP. L'esempio seguente illustra il ritiro di una spedizione dal centro commerciale Grand Indonesia East.

Gli esempi seguenti mostrano come creare un'attività di ritiro della spedizione utilizzando la libreria gRPC Java o come effettuare una richiesta HTTP REST a 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.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

Per creare un'attività di ritiro della spedizione da un ambiente server, effettua una chiamata HTTP REST a CreateTask:

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

<id> è un identificatore univoco per l'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> viene emesso dal server in base alle linee guida descritte in Ruoli dell'account di servizio e Token web JSON.

Il corpo della richiesta deve contenere un'entità Task con i campi appropriati descritti in Campi dell'attività di spedizione.

Esempio di comando curl:

 # 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

Crea un'attività di consegna della spedizione

Per utilizzare Fleet Engine per seguire l'attività di un autista che consegna una spedizione, crea un'attività di consegna della spedizione. Ciò comporta l'impostazione dell'attributo del tipo di attività su DELIVERY. L'esempio seguente illustra la consegna di una spedizione al Grand Indonesia East Mall.

Gli esempi seguenti mostrano come creare un'attività di ritiro della spedizione utilizzando la libreria gRPC Java o come effettuare una richiesta HTTP REST a 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.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

Per creare un'attività di ritiro della spedizione da un ambiente server, effettua una chiamata HTTP REST a CreateTask:

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

<id> è un identificatore univoco per l'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> viene emesso dal server in base alle linee guida descritte in Ruoli dell'account di servizio e Token web JSON.

Il corpo della richiesta deve contenere un'entità Task:

Esempio di comando curl:

 # 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
 ```

Passaggi successivi