Créer d'autres types de tâches

Ce document suppose que vous avez lu le guide d'introduction aux tâches planifiées dans la section Présentation de Fleet Engine, ainsi que Qu'est-ce qu'une tâche planifiée ? 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 l'enlèvement et la livraison d'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 à des points de dépôt ou chez des 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 non liées à un envoi sur votre serveur. Pour les types de tâches d'expédition, consultez Créer des tâches d'expédition.

Champs de tâches pour les tâches autres que la conduite

Cette section décrit les champs de tâches nécessaires pour les tâches d'indisponibilité et d'arrêt planifié.

Champs obligatoires des tâches

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 requête 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 les tâches.

ChampValeur
type

Définissez le type qui correspond au type de tâche, qui peut être 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 votre système ne comporte pas d'ID de tâche, vous pouvez générer un identifiant unique universel (UUID). Pour en savoir plus, consultez ID de tâches.
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 à pied au lieu de remise.

Champs facultatifs des tâches d'expédition

ChampValeur
target_time_window Période 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 et les circonstances dans lesquelles ils le sont.
attributes Liste des attributs de tâches personnalisés. Chaque attribut doit avoir une clé unique.

Créer une tâche d'indisponibilité

Vous pouvez créer une tâche indiquant l'indisponibilité, par exemple pour les pauses des conducteurs. Pour créer une tâche d'indisponibilité, suivez les consignes suivantes :

  • Définissez le type de tâche sur UNAVAILABLE.
  • N'incluez pas d'ID de suivi.
  • Bien que vous n'ayez pas à fournir de lieu pour une tâche d'indisponibilité, cela permet d'améliorer les calculs de l'heure d'arrivée estimée tout au long de la journée.

Des règles de visibilité spécifiques s'appliquent à la position du véhicule lorsqu'il est associé à une tâche UNAVAILABLE pour le partage de trajet.

  • Applications grand public intégrées à la bibliothèque Shipment Tracking : lorsque le véhicule est en indisponibilité, les utilisateurs de l'application grand public ne peuvent pas voir sa position, mais ils peuvent toujours consulter les informations sur l'état de leur envoi.
  • Applications de suivi de flotte intégrées à la bibliothèque Fleet Tracking : lorsque le véhicule est associé à une tâche d'indisponibilité, les gestionnaires de flotte qui utilisent l'application de suivi de flotte peuvent voir la position du véhicule pour les tâches d'indisponibilité.

Les exemples suivants montrent comment créer une tâche d'indisponibilité planifiée à l'aide de la bibliothèque gRPC Java ou comment effectuer une requête HTTP REST vers 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.UNAVAILABLE)
    .setState(Task.State.OPEN)
    .setTaskDuration(
      Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
    .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 d'indisponibilité à partir d'un environnement de serveur, effectuez un appel HTTP REST à 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 la 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 et Jetons Web JSON.

Le corps de la requête doit contenir une entité Task avec les champs appropriés décrits dans Champs de tâches pour les tâches non liées à la conduite.

Exemple de commande curl :

 # Set $JWT, $PROJECT_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": "UNAVAILABLE",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "300s"
 }
 EOM

Créer une tâche d'arrêt planifié

Vous pouvez créer une tâche pour un arrêt planifié, par exemple pour des tâches non liées à la conduite sur les sites des clients, pour des arrêts de ravitaillement ou lorsqu'un chauffeur reçoit des colis d'un véhicule de collecte. Lorsque vous créez une tâche d'arrêt planifié, suivez les consignes suivantes :

  • Définissez le type de tâche sur
  • N'incluez pas d'ID de suivi.
  • Vous pouvez éventuellement indiquer un lieu.

Les exemples suivants montrent comment créer une tâche d'indisponibilité planifiée à l'aide de la bibliothèque gRPC Java ou comment effectuer une requête HTTP REST vers 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.SCHEDULED_STOP)
    .setState(Task.State.OPEN)
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTrip(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 d'arrêt planifié à partir d'un environnement de serveur, effectuez un appel HTTP REST à 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 la 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 et Jetons Web JSON.

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

Exemple de commande curl :

# Set $JWT, $PROJECT_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": "SCHEDULED_STOP",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "600s"
 }
 EOM

Étape suivante