Bu dokümanda, Fleet Engine'e Giriş bölümündeki Planlanmış görevler ile ilgili giriş kılavuzunu ve bu bölümdeki Planlanmış görev nedir? başlıklı makaleyi okuduğunuz varsayılmaktadır.
Planlanmış görevler için Fleet Engine, farklı geniş görev kategorileri sunar:
- Gönderi görevleri: Gönderilerin teslim alınması ve teslim edilmesi de dahil olmak üzere sürüş görevleri için kullanılır.
- Kullanılamama görevleri: Sürücülerin müsait olmadığı zamanlarda (ör. zorunlu molalar) kullanılır.
- Planlı durak görevleri: Bırakma kutularında veya müşteri konumlarında sürüş dışı görevler (ör. bir binaya girme veya teslimat noktası bulma süresi) için kullanılır.
Bu belgede, sunucunuzda gönderim dışı görevlerin nasıl oluşturulacağı açıklanmaktadır. Gönderi görevi türleri için Gönderi görevleri oluşturma başlıklı makaleyi inceleyin.
Sürüş dışı görevler için görev alanları
Bu bölümde, hem kullanılamama hem de planlı durdurma görevleri için gereken görev alanları açıklanmaktadır.
Zorunlu görev alanları
Fleet Engine'da oluşturduğunuz her görev için zorunlu alanları doldurmanız gerekir. İsteğe bağlı alanlardan herhangi birini de doldurabilirsiniz. Fleet Engine diğer tüm alanları yoksayar ve görev oluşturma isteği atanmış bir deliveryVehicleId sağlıyorsa istisna oluşturur. Bir araca görev atamak için UpdateDeliveryVehicleRequest kullanın. Daha fazla bilgi için Görevleri güncelleme başlıklı makaleyi inceleyin.
| Alan | Değer |
|---|---|
type |
Görev türüyle eşleşen türe ayarlayın. Bu türlerden biri şunlardır:
|
state |
State.OPEN |
task_id |
Benzersiz görev kimliği. Bu, gönderinin takip numarası olmamalıdır. Sisteminizde görev kimlikleri yoksa evrensel olarak benzersiz bir tanımlayıcı (UUID) oluşturabilirsiniz. Ayrıntılar için Görev kimlikleri bölümüne bakın. |
tracking_id |
Yalnızca PICKUP veya DELIVERY görevleri:
Gönderiyi takip etmek için kullandığınız numara veya tanımlayıcı. Gönderi dışı görevler için bu alanı sağlamayın. |
planned_location |
Yalnızca PICKUP, DELIVERY veya SCHEDULED_STOP görevleri: Görevin tamamlanacağı konum. UNAVAILABLE görevleri için gerekli değildir. |
task_duration |
Görevi tamamlamak için eklenmesi beklenen süre. Örneğin, park yeri aramak veya teslimat noktasına yürümek için. |
İsteğe bağlı sevkiyat görevi alanları
| Alan | Değer |
|---|---|
target_time_window |
Görevin tamamlanması gereken zaman aralığı. Bu alan, yönlendirme davranışını etkilemez. |
task_tracking_view_config |
Yalnızca PICKUP veya DELIVERY görevleri:
Hangi veri öğelerinin hangi koşullarda son kullanıcılara gösterileceğini belirten,
görev takibi yapılandırması. |
attributes |
Özel görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır. |
Müsait olmama görevi oluşturma
Müsait olunmayan zamanları (ör. sürücü molaları) belirten bir görev oluşturabilirsiniz. Müsait olmama görevi oluşturmak için aşağıdaki kuralları uygulayın:
- Görev türünü
UNAVAILABLEolarak ayarlayın. - İzleme kimliği eklemeyin.
- Müsait olmama görevi için konum belirtmeniz zorunlu olmasa da konum belirtmeniz gün boyunca daha iyi TVS hesaplamaları yapılmasını sağlar.
Araç, yolculuk paylaşımı için UNAVAILABLE görevindeyken araç konumuna özel görünürlük kuralları uygulanır.
- Gönderi Takibi kitaplığıyla entegre edilmiş tüketici uygulamaları: Araç, müsaitlik dışı bir görevdeyken tüketici uygulamasının kullanıcıları, gönderilerinin durum bilgilerini görebilse de aracın konumunu göremez.
- Filo Takibi kitaplığıyla entegre filo takibi uygulamaları: Araç, müsaitlik dışı görevdeyken filo takibi uygulamasını kullanan filo yöneticileri, müsaitlik dışı görevler için araç konumunu görebilir.
Aşağıdaki örneklerde, Java gRPC kitaplığını kullanarak planlanmış bir müsait olmama görevinin nasıl oluşturulacağı veya CreateTask adresine nasıl HTTP REST isteği gönderileceği gösterilmektedir.
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
Sunucu ortamından müsait olmama görevi oluşturmak için CreateTask adresine bir HTTP REST çağrısı yapın:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığında, Bearer <token> değerine sahip bir Authorization alanı bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek gövdesi, Sürüş dışı görevler için görev alanları bölümünde açıklanan uygun alanları içeren bir Task varlığı içermelidir.
Örnek curl komutu:
# 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"
}
EOMPlanlanmış durdurma görevi oluşturma
Planlanmış bir durak için görev oluşturabilirsiniz. Örneğin, müşteri konumlarında sürüş dışı görevler, yakıt ikmali durakları veya bir sürücünün besleyici araçtan gönderi aldığı durumlar için görev oluşturabilirsiniz. Planlı durdurma görevi oluştururken aşağıdaki yönergeleri kullanın:
- Görev türünü şu şekilde ayarlayın:
- İzleme kimliği eklemeyin.
- İsteğe bağlı olarak bir konum belirtebilirsiniz.
Aşağıdaki örneklerde, Java gRPC kitaplığını kullanarak planlanmış bir müsait olmama görevinin nasıl oluşturulacağı veya CreateTask adresine nasıl HTTP REST isteği gönderileceği gösterilmektedir.
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
Sunucu ortamından planlı durdurma görevi oluşturmak için CreateTask adresine bir HTTP REST çağrısı yapın:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığında, Bearer <token> değerine sahip bir Authorization alanı bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek gövdesi bir Task varlığı içermelidir:
Örnek curl komutu:
# 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