Bu belgede, 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 sağlar:
- Kargo görevleri: Kargo alma ve teslim etme gibi sürüş görevleri için kullanılır.
- Kullanılamazlık görevleri: Sürücülerin kullanılamadığı zamanlarda (ör. zorunlu molalar) kullanılır.
- Planlanmış durdurma görevleri: Bırakma kutularında veya müşteri konumlarında sürüş dışı görevler için kullanılır. Örneğin, binaya girme veya teslimat noktası bulma süresi.
Bu belge, sunucunuzda gönderim dışı görevlerin nasıl oluşturulacağını açıklamaktadır. Kargo görev türleri için Kargo 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ılamazlık hem de planlanmış durdurma görevleri için gereken görev alanları açıklanmaktadır.
Zorunlu görev alanları
Fleet Engine'de oluşturduğunuz her görev için gerekli alanları sağlamanız gerekir ve ayrıca isteğe bağlı alanlardan herhangi birini de sağlayabilirsiniz. Fleet Engine, diğer tüm alanları yoksayar ve bir görev oluşturma isteğinde atanmış bir deliveryVehicleId sağlanırsa 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ür olarak ayarlayın. Bu türlerden biri şunlardır:
|
state |
State.OPEN |
task_id |
Benzersiz görev kimliği. Bu, kargonun 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 başlıklı makaleyi inceleyin. |
tracking_id |
PICKUP veya DELIVERY görevleri yalnızca: Bir gönderiyi takip etmek için kullandığınız numara veya tanımlayıcı. Gönderim dışı görevler için bu alanı sağlamayın. |
planned_location |
PICKUP, DELIVERY veya SCHEDULED_STOP görevleri: Görevin tamamlanacağı yer. 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ı kargo 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örünür olduğunu belirten görev izleme yapılandırması. |
attributes |
Özel görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır. |
Kullanılamazlık görevi oluşturma
Kullanılamama durumunu belirten bir görev oluşturabilirsiniz (ör. sürücü molaları). Kullanılamazlık görevi oluşturmak için aşağıdaki yönergeleri kullanın:
- Görev türünü
UNAVAILABLEolarak ayarlayın. - İzleme kimliği eklemeyin.
- Bir müsait olmama görevi için konum sağlamanız gerekmez ancak konum sağladığınızda gün boyunca gelişmiş tahmini varış zamanı hesaplamaları elde edersiniz.
Yolculuk paylaşımı için UNAVAILABLE görevindeyken araç konumuna özel görünürlük kuralları uygulanır.
- Kargo Takibi kitaplığıyla entegre edilmiş tüketici uygulamaları: Araç, kullanılamazlık görevindeyken tüketici uygulamasının kullanıcıları, kargolarının durum bilgilerini görmeye devam edebilir ancak aracın konumunu göremez.
- Filo Takibi kitaplığıyla entegre edilmiş filo takibi uygulamaları: Araç, kullanılamazlık görevindeyken filo takibi uygulamasını kullanan filo yöneticileri, kullanılamazlık görevleri için araç konumunu görebilir.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak planlanmış bir müsait olmama görevinin nasıl oluşturulacağı veya CreateTask için 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 bir uygunsuzluk 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örevin benzersiz tanımlayıcısıdır.
İstek başlığında, Authorization alanı ve Bearer <token> değeri bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları'nda 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 alanlara sahip bir Task öğesi 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"
}
EOMZamanlanmış bir durdurma görevi oluşturun
Planlanmış bir durak için bir görev oluşturabilirsiniz; örneğin, müşteri lokasyonlarındaki sürüş dışı görevler, yakıt ikmal durakları veya bir sürücünün bir besleyici araçtan sevkiyat alması için. Zamanlanmış bir 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 konum bilgisi verebilirsiniz.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak planlanmış bir müsait olmama görevinin nasıl oluşturulacağı veya CreateTask için 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
Bir sunucu ortamından zamanlanmış bir 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örevin benzersiz tanımlayıcısıdır.
İstek başlığında, Authorization alanı ve Bearer <token> değeri bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları'nda açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek metni bir Task öğesi 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