Bu dokümanda, Fleet Engine'a 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: Kargoların teslim alınması ve teslim edilmesi dahil olmak üzere sürüş görevleri için kullanın.
- Kullanılabilirlik dışı görevler: Sürücüler müsait olmadığında (ör. zorunlu aralarda) kullanın.
- Planlanmış durak görevleri: Kargo kutularında veya müşteri konumlarında sürüş dışı görevler için kullanın (ör. bir binaya girme veya teslimat noktasını bulma zamanı).
Bu dokümanda, sunucunuzda gönderi görevlerinin nasıl oluşturulacağı ele alınmaktadır. Diğer görev türleri için Diğer görev türleri oluşturma başlıklı makaleyi inceleyin.
Gönderim 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'da oluşturduğunuz her görev için gerekli alanları sağlamanız gerekir. İsteğe bağlı alanlardan herhangi birini de sağlayabilirsiniz. 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
değerini 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 ayarlanır. Bu türlerden biri şunlardır:
|
state |
State.OPEN |
task_id |
Benzersiz görev kimliği. Bu, gönderimin 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 |
PICKUP veya yalnızca DELIVERY görevleri:
Bir gönderimi takip etmek için kullandığınız numara veya tanımlayıcı. Gönderim dışı görevler için bu alanı belirtmeyin. |
plannedLocation |
Yalnızca PICKUP , DELIVERY veya SCHEDULED_STOP görevlerinde: Görevin tamamlanacağı konum. UNAVAILABLE görevlerinde gerekli değildir. |
taskDuration |
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ı gönderim görevi alanları
Alan | Değer |
---|---|
targetTimeWindow |
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 izleme yapılandırması. |
attributes |
Özel görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır. |
Kargo alma görevi oluşturma
Kargoyu teslim alan bir sürücünün etkinliğini takip etmek için Fleet Engine'ı kullanmak istiyorsanız kargo teslim alma görevi oluşturun. Bu işlem, görev türü özelliğini PICKUP
olarak ayarlamayı içerir. Aşağıdaki örnekte, Grand Indonesia East Mall'dan bir gönderimin alınması gösterilmektedir.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak kargo alma görevinin nasıl oluşturulacağı veya CreateTask
adresine HTTP REST isteği nasıl 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
Bir sunucu ortamından kargo alma görevi oluşturmak için CreateTask
adresine 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 üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON Web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek metni, Gönderi 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
Gönderi teslimatı görevi oluşturma
Gönderi teslim eden bir sürücünün etkinliğini takip etmek için Fleet Engine'ı kullanmak istiyorsanız gönderi teslimi görevi oluşturun. Bu işlem, görev türü özelliğinin DELIVERY
olarak ayarlanmasını içerir. Aşağıdaki örnekte, Grand Indonesia East Mall'a yapılan bir gönderim gösterilmektedir.
Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak kargo alma görevinin nasıl oluşturulacağı veya CreateTask
adresine HTTP REST isteği nasıl 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
Bir sunucu ortamından kargo alma görevi oluşturmak için CreateTask
adresine 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 üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON Web jetonları bölümü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
```