Bu dokümanda, Fleet Engine'e Giriş bölümündeki [Planlanmış görevler][1] ile ilgili giriş kılavuzunu ve bu bölümdeki [Planlanmış görev nedir?][2] 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 teslim alma ve teslim etme gibi 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önderi görevlerinin nasıl oluşturulacağı 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'da oluşturduğunuz her görev için zorunlu alanları doldurmanız gerekir. İsteğe bağlı alanları da doldurabilirsiniz. Fleet Engine diğer tüm alanları yoksayar ve bir görev oluşturma isteği atanmış bir deliveryVehicleId sağlarsa 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ö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ğı 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ı gönderi 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. |
Gönderi teslim alma görevi oluşturma
Bir gönderiyi teslim alan sürücünün etkinliğini takip etmek için Filo Motoru'nu kullanmak istiyorsanız gönderi 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 kargo teslim alma işlemi gösterilmektedir.
Aşağıdaki örneklerde, [Java gRPC kitaplığını][4] kullanarak gönderi teslim alma görevi oluşturma veya [CreateTask][5] adresine HTTP REST isteği gönderme işlemleri 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 gönderi 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ığı, Bearer <token> değerine sahip bir Authorization alanı içermelidir. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][7] bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek gövdesi, [Kargo görevi alanları][8] bölümünde açıklanan uygun alanları içeren bir Task varlığı 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"
}
}
EOMKargo 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 teslimatı görevi oluşturun. Bu işlem, görev türü özelliğini DELIVERY olarak ayarlamayı içerir. Aşağıdaki örnekte, Grand Indonesia East Mall'a yapılan bir gönderi teslimatı gösterilmektedir.
Aşağıdaki örneklerde, [Java gRPC kitaplığını][4] kullanarak gönderi teslim alma görevi oluşturma veya [CreateTask][5] adresine HTTP REST isteği gönderme işlemleri 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 gönderi 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ığı, Bearer <token> değerine sahip bir Authorization alanı içermelidir. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][7] bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
İstek gövdesi 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
```placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place
Sırada ne var?
- [Diğer görev türlerini oluşturma][13]
- [Görevleri güncelleme][3]
[1]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [2]: /maps/documentation/mobility/fleet-engine/journeys/tasks [3]: update-tasks [4]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks#java [5]: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/providers.tasks/create [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts [7]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt [8]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks#shipment_task_fields [13]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-other-tasks