이 문서에서는 Fleet Engine 소개 섹션의 예약된 태스크 소개 가이드와 이 섹션의 예약된 태스크란 무엇인가?를 읽었다고 가정합니다.
예약된 태스크용 Fleet Engine은 다음과 같은 다양한 광범위한 태스크 카테고리를 제공합니다.
- 배송 태스크: 배송 픽업 및 배송을 포함한 운전 태스크에 사용합니다.
- 사용 불가능 태스크: 필수 휴식 시간과 같이 운전기사가 사용할 수 없는 시간에 사용합니다.
- 예약된 정지 태스크: 건물에 들어가거나 배송 지점을 찾는 시간과 같이 드롭박스 또는 고객 위치에서 운전하지 않는 태스크에 사용합니다.
이 문서에서는 서버에서 배송 태스크를 만드는 방법을 설명합니다. 다른 태스크 유형은 다른 태스크 유형 만들기를 참고하세요.
배송 태스크 필드
이 섹션에서는 픽업 및 배송 태스크 모두에 필요한 태스크 필드를 설명합니다.
필수 태스크 필드
Fleet Engine에서 만드는 모든 태스크에 필수 필드를 제공해야 하며 선택적 필드를 제공할 수도 있습니다. Fleet Engine은 다른 모든 필드를 무시하고 태스크 생성 요청에서 할당된 deliveryVehicleId를 제공하는 경우 예외를 발생시킵니다. 차량에 태스크를 할당하려면 UpdateDeliveryVehicleRequest를 사용하세요. 자세한 내용은
태스크 업데이트를 참고하세요.
| 필드 | 값 |
|---|---|
type |
태스크 유형과 일치하는 유형으로 설정합니다. 다음 중 하나입니다.
|
state |
State.OPEN |
task_id |
고유 태스크 ID입니다. 배송의 운송장 번호가 아니어야 합니다. 시스템에 태스크 ID가 없는 경우 범용 고유 식별자 (UUID)를 생성할 수 있습니다. 자세한 내용은 태스크 ID를 참고하세요. |
tracking_id |
PICKUP 또는 DELIVERY 태스크만 해당:
배송을 추적하는 데 사용하는 번호 또는 식별자입니다. 배송 태스크가 아닌 태스크에는 이 필드를 제공하지 마세요. |
planned_location |
PICKUP, DELIVERY, 또는
SCHEDULED_STOP 태스크만 해당: 태스크가 완료될 위치입니다.
태스크에는 필요하지 않습니다.UNAVAILABLE |
task_duration |
태스크를 완료하는 데 추가할 예상 시간입니다. 예를 들어 주차 공간을 찾거나 전달 위치까지 걸어가는 경우입니다. |
선택적 배송 태스크 필드
| 필드 | 값 |
|---|---|
target_time_window |
태스크를 완료해야 하는 시간대입니다. 이 필드 는 경로 지정 동작에 영향을 미치지 않습니다. |
task_tracking_view_config |
PICKUP 또는 DELIVERY 태스크만 해당:
어떤 상황에서 최종 사용자에게 어떤 데이터 요소가 표시되는지 지정하는 태스크 추적 구성입니다. |
attributes |
맞춤 태스크 속성의 목록입니다. 각 속성에는 고유 키가 있어야 합니다. |
배송 픽업 태스크 만들기
Fleet Engine을 사용하여 배송을 픽업하는 운전기사의 활동을 추적하려면 배송 픽업 태스크를 만듭니다. 여기에는 태스크 유형 속성을 PICKUP으로 설정하는 것이 포함됩니다. 다음 예에서는 Grand Indonesia East Mall에서 배송 픽업을 보여줍니다.
다음 예에서는
Java gRPC 라이브러리를 사용하여 배송 픽업 태스크를 만드는 방법 또는
CreateTask에 HTTP REST 요청을 실행하는 방법을 보여줍니다.
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
서버 환경에서 배송 픽업 태스크를 만들려면 CreateTask에 HTTP REST 호출을 실행합니다.
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id>는 태스크의 고유 식별자입니다.
요청 헤더에는 Bearer <token> 값이 있는 Authorization 필드가 포함되어야 합니다. 여기서 <token>은 서비스 계정 역할 및 JSON 웹 토큰에 설명된 가이드라인에 따라 서버에서 발급합니다.
요청 본문에는 배송 태스크 필드에 설명된 적절한 필드가 있는 Task 항목이 포함되어야 합니다.
curl 명령어 예시:
# 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배송 태스크 만들기
Fleet Engine을 사용하여 배송을 배송하는 운전기사의 활동을 추적하려면 배송 태스크를 만듭니다. 여기에는 태스크 유형 속성을 DELIVERY로 설정하는 것이 포함됩니다. 다음 예에서는 Grand Indonesia East Mall에 배송을 보여줍니다.
다음 예에서는
Java gRPC 라이브러리를 사용하여 배송 픽업 태스크를 만드는 방법 또는
CreateTask에 HTTP REST 요청을 실행하는 방법을 보여줍니다.
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
서버 환경에서 배송 픽업 태스크를 만들려면 CreateTask에 HTTP REST 호출을 실행합니다.
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id>는 태스크의 고유 식별자입니다.
요청 헤더에는 Bearer <token> 값이 있는 Authorization 필드가 포함되어야 합니다. 여기서 <token>은 서비스 계정 역할 및 JSON 웹 토큰에 설명된 가이드라인에 따라 서버에서 발급합니다.
요청 본문에는 Task 항목이 포함되어야 합니다.
curl 명령어 예시:
# 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
```