Ce document suppose que vous avez lu le guide d'introduction aux tâches planifiées dans la section Introduction à 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 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 chauffeurs ne sont pas disponibles, par exemple pour les pauses obligatoires.
- Tâches d'arrêt planifié : à utiliser pour les tâches qui ne nécessitent pas de conduire, par exemple dans 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 d'expédition sur votre serveur. Pour les autres types de tâches, consultez Créer d'autres types de tâches.
Champs de tâche d'expédition
Cette section décrit les champs de tâche nécessaires pour les tâches d'enlèvement et de livraison.
Champs de tâche 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 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 des tâches.
| Champ | Valeur |
|---|---|
type |
Définissez le type qui correspond au type de tâche, qui peut être l'un des suivants :
|
state |
State.OPEN |
task_id |
ID de tâche unique. Il ne doit pas s'agir du numéro de suivi de l'expédition. Si vous n'avez 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 |
PICKUP ou DELIVERY tâches uniquement :
numéro ou identifiant que vous utilisez pour suivre une expédition. Ne fournissez pas ce champ pour les tâches qui ne concernent pas une expédition. |
planned_location |
PICKUP, DELIVERY, ou
SCHEDULED_STOP tâches uniquement : lieu où la tâche doit être effectuée. Non requis pour
UNAVAILABLE tâches. |
task_duration |
Temps prévu à ajouter pour effectuer la tâche. Par exemple, pour chercher une place de parking ou se rendre à pied au lieu de remise. |
Champs facultatifs pour les tâches d'expédition
| Champ | Valeur |
|---|---|
target_time_window |
Plage horaire pendant laquelle la tâche doit être effectuée. Ce champ n'a pas d'incidence sur le comportement de routage. |
task_tracking_view_config |
PICKUP ou DELIVERY tâches uniquement :
configuration du suivi des tâches qui spécifie les éléments de données
visibles par les utilisateurs finaux et dans quelles circonstances. |
attributes |
Liste d'attributs de tâche personnalisés. Chaque attribut doit avoir une clé unique. |
Créer une tâche d'enlèvement d'expédition
Pour utiliser Fleet Engine afin de suivre l'activité d'un chauffeur qui enlève une expédition, créez une tâche d'enlèvement d'expédition. Pour cela, définissez l'attribut de type de tâche sur PICKUP. L'exemple suivant illustre un enlèvement d'expédition au centre commercial Grand Indonesia East Mall.
Les exemples suivants montrent comment créer une tâche d'enlèvement d'expédition à l'aide de la
bibliothèque Java gRPC ou comment effectuer une requête HTTP REST auprès de
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 d'enlèvement d'expédition à partir d'un environnement serveur, effectuez un appel HTTP REST auprès de 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 de 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â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"
}
}
EOMCréer une tâche de livraison d'expédition
Pour utiliser Fleet Engine afin de suivre l'activité d'un chauffeur qui livre une expédition, créez une tâche de livraison d'expédition. Pour cela, définissez l'attribut de type de tâche sur DELIVERY. L'exemple suivant illustre une livraison d'expédition au centre commercial Grand Indonesia East Mall.
Les exemples suivants montrent comment créer une tâche d'enlèvement d'expédition à l'aide de la
bibliothèque Java gRPC ou comment effectuer une requête HTTP REST auprès de
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 d'enlèvement d'expédition à partir d'un environnement serveur, effectuez un appel HTTP REST auprès de 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 de 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, $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
```