Créer des tâches d'expédition

Dans ce document, nous partons du principe que vous avez lu le guide introductif pour Tâches planifiées dans la section Présentation de Fleet Engine Qu'est-ce qu'une tâche planifiée ? dans cette section.

Fleet Engine pour les tâches planifiées propose différentes grandes catégories de tâches:

  • Tâches de livraison: utilisez cette option pour les tâches de conduite, comme le retrait et la livraison de livraisons.
  • Tâches d'indisponibilité: utilisez ces tâches lorsque les conducteurs sont indisponibles, par exemple comme pour les pauses requises.
  • Tâches d'arrêt planifiées: utilisez cette option pour les tâches qui ne sont pas conducteurs dans les boîtes de dépôt ou dans les boîtes de réception des clients. des lieux, tels que l'heure d'entrer dans un bâtiment ou de localiser un point de livraison.

Ce document explique comment créer des tâches de livraison sur votre serveur. Autre types de tâches, consultez Créer d'autres types de tâches.

Champs de la tâche d'expédition

Cette section décrit les champs de tâches nécessaires pour le retrait et la livraison tâches.

Champs de tâche obligatoires

Pour chaque tâche que vous créez dans Fleet Engine, vous devez lui fournir les autorisations et peuvent également fournir tous les champs facultatifs. Fleet Engine ignore tous les autres champs et génère une exception si la création d'une tâche fournit un deliveryVehicleId attribué. Pour attribuer des tâches à un véhicule : utiliser UpdateDeliveryVehicleRequest. Pour en savoir plus, consultez Mettre à jour des tâches

ChampValeur
type

Définissez le type correspondant au type de tâche, parmi les suivants:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID de tâche unique. Il ne doit pas s'agir du numéro de suivi du colis. Si vous n'ont pas d'ID de tâche dans votre système, vous pouvez générer un (UUID). Pour en savoir plus, consultez ID des tâches.
tracking_id Tâches PICKUP ou DELIVERY uniquement: Numéro ou identifiant que vous utilisez pour suivre une livraison. À ne pas faire renseignez ce champ pour les tâches qui ne concernent pas les livraisons.
plannedLocation PICKUP, DELIVERY ou Tâches SCHEDULED_STOP uniquement: la lieu où la tâche doit être effectuée. Non requis pour UNAVAILABLE tâches.
taskDuration Temps estimé pour terminer la tâche. Par exemple, pour rechercher pour se garer ou marcher jusqu'au lieu de remise.

Champs facultatifs pour les tâches d'expédition

ChampValeur
targetTimeWindow La période pendant laquelle la tâche doit être terminée. Ce champ n'affecte pas le comportement de routage.
task_tracking_view_config Tâches PICKUP ou DELIVERY uniquement: Configuration du suivi des tâches qui spécifie les éléments de données sont visibles par les utilisateurs finaux et dans quelles circonstances.
attributes Liste d'attributs de tâches personnalisés. Chaque attribut doit avoir une clé unique.

Créer une tâche de retrait en livraison

Pour utiliser Fleet Engine afin de suivre l'activité d'un chauffeur qui récupère une livraison, créer une tâche de retrait en magasin. Cela implique de définir l'attribut type de tâche sur PICKUP L'exemple suivant illustre un retrait à une livraison à partir du Indonesia East Mall.

Les exemples suivants montrent comment créer une tâche de retrait à l'aide de la méthode bibliothèque gRPC Java, ou comment envoyer une requête HTTP REST à 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

Pour créer une tâche de retrait d'une livraison à partir d'un environnement de serveur, créez une requête REST HTTP appel à CreateTask:

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

&lt;id&gt; est un identifiant unique pour la tâche.

L'en-tête de requête doit contenir un champ Authorization avec la valeur Bearer <token>, où <token> est émis par votre serveur selon aux consignes décrites dans les sections Rôles de compte de service et JSON pour le Web de jetons.

Le corps de la requête doit contenir une entité Task avec les champs appropriés. décrits dans la section Champs de tâche d'expédition.

Exemple de commande 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

Créer une tâche de livraison

Pour utiliser Fleet Engine afin de suivre l'activité d'un livreur livrant une cargaison, créer une tâche de livraison. Cela implique de définir l'attribut type de tâche à DELIVERY. L'exemple suivant illustre une livraison à destination du Indonesia East Mall.

Les exemples suivants montrent comment créer une tâche de retrait à l'aide de la méthode bibliothèque gRPC Java, ou comment envoyer une requête HTTP REST à 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

Pour créer une tâche de retrait d'une livraison à partir d'un environnement de serveur, créez une requête REST HTTP appel à CreateTask:

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

&lt;id&gt; est un identifiant unique pour la tâche.

L'en-tête de requête doit contenir un champ Authorization avec la valeur Bearer <token>, où <token> est émis par votre serveur selon conformément aux consignes décrites dans Rôles de compte de service et JSON pour le Web de jetons.

Le corps de la requête doit contenir une entité Task:

Exemple de commande 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
 ```

Étape suivante