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 sunar:
- 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 belgede, sunucunuzda nasıl kargo görevleri oluşturacağınız açıklanmaktadır. Diğer görev türleri için Diğer görev türlerini oluşturma başlıklı makaleyi inceleyin.
Kargo görevi alanları
Bu bölümde, hem teslim alma hem de teslimat 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 ve isteğe bağlı alanları da 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üre ayarlayın. Bu türlerden biri şunlardır:
|
state |
State.OPEN |
task_id |
Benzersiz görev kimliği. Bu numara, 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 |
Yalnızca PICKUP veya DELIVERY görevleri:
Bir gönderiyi izlemek için kullandığınız numara veya tanımlayıcı. Gönderim dışı görevler için bu alanı sağlamayın. |
planned_location |
Yalnızca 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 gereken tahmini 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 |
PICKUP veya DELIVERY görevleri yalnızca:
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. |
Kargo teslim alma görevi oluşturma
Bir gönderiyi alan sürücünün etkinliğini takip etmek için Fleet Engine'i kullanmak üzere bir kargo teslim alma görevi oluşturun. Bunun için görev türü özelliğini PICKUP
olarak ayarlamanız gerekir. Aşağıdaki örnekte, Grand Indonesia East Mall'dan kargo teslim alma işlemi gösterilmektedir.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak nasıl kargo teslim alma görevi 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.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
Sunucu ortamından kargo teslim alma 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ı Bearer <token> değeriyle birlikte bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web belirteçleri'nde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek gövdesi, Kargo görevi alanları bölümünde açıklanan uygun alanlara sahip bir Task
öğesi içermelidir.
Örnek curl
komutu:
# 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
Kargo teslimatı görevi oluşturma
Bir gönderiyi teslim eden sürücünün etkinliğini takip etmek için Fleet Engine'i kullanmak istiyorsanız kargo teslimatı görevi oluşturun. Bunun için görev türü özelliği DELIVERY
olarak ayarlanmalıdır. Aşağıdaki örnekte, Grand Indonesia East Mall'a yapılan bir kargo teslimatı gösterilmektedir.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak nasıl kargo teslim alma görevi 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.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
Sunucu ortamından kargo teslim alma 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ı Bearer <token> değeriyle birlikte bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web belirteçleri'nde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek metni bir Task
öğesi içermelidir:
Örnek curl
komutu:
# 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
```