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

Ce document suppose que vous avez lu le guide d'introduction aux [tâches planifiées][1] dans la section Présentation de Fleet Engine, ainsi que [Qu'est-ce qu'une tâche planifiée ?][2] dans cette section.

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

  • Tâches d'expédition : à utiliser pour les tâches de conduite, y compris la collecte et la livraison des expéditions.
  • Tâches d'indisponibilité : à utiliser lorsque les conducteurs ne sont pas disponibles, par exemple pour les pauses obligatoires.
  • Tâches d'arrêt planifiées : à utiliser pour les tâches non liées à la conduite dans les boîtes de dépôt ou chez les clients, comme le temps nécessaire pour entrer dans un bâtiment ou trouver un point de livraison.

Ce document explique comment créer des tâches d'expédition sur votre serveur. Pour les autres 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 les tâches de retrait et de livraison.

Champs de tâches obligatoires

Pour chaque tâche que vous créez dans Fleet Engine, vous devez fournir les champs obligatoires et pouvez également fournir l'un des champs facultatifs. Fleet Engine ignore tous les autres champs et génère une exception si une demande de création de tâche fournit un deliveryVehicleId attribué. Pour attribuer des tâches à un véhicule, utilisez UpdateDeliveryVehicleRequest. Pour en savoir plus, consultez Mettre à jour des tâches.

ChampValeur
type

Définissez le type correspondant au type de tâche, qui est l'un des 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 de l'envoi. Si vous ne disposez pas d'ID de tâche dans votre système, vous pouvez générer un identifiant unique universel (UUID). Pour en savoir plus, consultez ID de tâche.
tracking_id Tâches PICKUP ou DELIVERY uniquement : Numéro ou identifiant que vous utilisez pour suivre un envoi. Ne fournissez pas ce champ pour les tâches autres que l'expédition.
planned_location Tâches PICKUP, DELIVERY ou SCHEDULED_STOP uniquement : lieu où la tâche doit être effectuée. Non requis pour les tâches UNAVAILABLE.
task_duration Temps prévu pour effectuer la tâche. Par exemple, pour chercher une place de parking ou vous rendre à l'emplacement de remise.

Champs facultatifs de la tâche d'expédition

ChampValeur
target_time_window Plage horaire pendant laquelle la tâche doit être effectuée. Ce champ n'a aucune incidence sur 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 visibles par les utilisateurs finaux dans certaines circonstances.
attributes Liste des attributs de tâches personnalisés. Chaque attribut doit avoir une clé unique.

Créer une tâche d'enlèvement d'un colis

Pour utiliser Fleet Engine afin de suivre l'activité d'un conducteur qui récupère un envoi, créez une tâche de retrait d'envoi. Pour ce faire, définissez l'attribut de type de tâche sur PICKUP. L'exemple suivant illustre l'enlèvement d'un colis au Grand Indonesia East Mall.

Les exemples suivants montrent comment créer une tâche d'enlèvement d'un colis à l'aide de la [bibliothèque gRPC Java][4] ou comment envoyer une requête HTTP REST à [CreateTask][5].

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'envoi à partir d'un environnement de serveur, effectuez un appel HTTP REST vers CreateTask :

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

<id> 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 conformément aux consignes décrites dans [Rôles du compte de service][6] et [Jetons Web JSON][7].

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

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 d'un colis

Pour utiliser Fleet Engine afin de suivre l'activité d'un conducteur livrant un colis, créez une tâche de livraison de colis. Pour ce faire, définissez l'attribut de type de tâche sur DELIVERY. L'exemple suivant illustre la livraison d'un colis au Grand Indonesia East Mall.

Les exemples suivants montrent comment créer une tâche d'enlèvement d'un colis à l'aide de la [bibliothèque gRPC Java][4] ou comment envoyer une requête HTTP REST à [CreateTask][5].

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'envoi à partir d'un environnement de serveur, effectuez un appel HTTP REST vers CreateTask :

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

<id> 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 conformément aux consignes décrites dans [Rôles de compte de service][6] et [Jetons Web JSON][7].

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

placeidtrips1 : /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2 : /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3 : /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4 : /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

Étape suivante

  • [Créer d'autres types de tâches][13]
  • [Modifier des tâches][3]

[1]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [2]: /maps/documentation/mobility/fleet-engine/journeys/tasks [3]: update-tasks [4]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks#java [5]: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/providers.tasks/create [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts [7]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt [8]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks#shipment_task_fields [13]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-other-tasks