다른 태스크 유형 만들기

이 문서에서는 Fleet Engine 소개 섹션의 예약된 태스크에 관한 소개 가이드와 이 섹션의 예약된 태스크란 무엇인가요?를 읽었다고 가정합니다.

예약된 태스크용 Fleet Engine은 다음과 같이 다양한 태스크 카테고리를 제공합니다.

  • Shipment tasks(배송 작업): 배송 상품 수령 및 배송을 비롯한 운전 작업에 사용합니다.
  • 사용 불가 작업: 필요한 휴식 시간과 같이 운전자를 사용할 수 없는 시간에 사용합니다.
  • 예약된 정지 작업: 건물에 들어가거나 배송 지점을 찾는 시간과 같이 우편함이나 고객 위치에서 운전 이외의 작업을 할 때 사용합니다.

이 문서에서는 서버에서 배송되지 않는 작업을 만드는 방법을 설명합니다. 배송 작업 유형은 배송 작업 만들기를 참고하세요.

운전 이외의 작업을 위한 작업 필드

이 섹션에서는 사용 불가 및 예약된 중지 작업 모두에 필요한 태스크 필드를 설명합니다.

필수 작업 입력란

Fleet Engine에서 만드는 모든 작업에는 필수 입력란을 제공해야 하며 선택 입력란도 제공할 수 있습니다. Fleet Engine은 다른 모든 필드를 무시하고 작업 생성 요청이 할당된 deliveryVehicleId를 제공하는 경우 예외를 발생시킵니다. 차량에 작업을 할당하려면 UpdateDeliveryVehicleRequest을 사용합니다. 자세한 내용은 작업 업데이트를 참고하세요.

필드
type

태스크 유형과 일치하는 유형으로 설정합니다. 다음 중 하나입니다.

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id 고유한 태스크 ID입니다. 배송의 운송장 번호가 아니어야 합니다. 시스템에 작업 ID가 없는 경우 범용 고유 식별자 (UUID)를 생성할 수 있습니다. 자세한 내용은 작업 ID를 참고하세요.
tracking_id PICKUP 또는 DELIVERY 작업만 해당: 발송 추적에 사용 중인 번호 또는 식별자입니다. 배송이 아닌 작업에는 이 필드를 입력하지 마세요.
plannedLocation PICKUP, DELIVERY 또는 SCHEDULED_STOP 작업만 해당: 작업을 완료할 위치입니다. UNAVAILABLE 작업에는 필요하지 않습니다.
taskDuration 태스크를 완료하는 데 추가로 예상되는 시간입니다. 예를 들어 주차장을 찾거나 전달 위치로 걸어가는 경우입니다.

선택적 배송 작업 필드

필드
targetTimeWindow 작업을 완료해야 하는 기간입니다. 이 필드는 라우팅 동작에 영향을 미치지 않습니다.
task_tracking_view_config PICKUP 또는 DELIVERY 작업만 해당: 어떤 상황에서 최종 사용자에게 표시되는 데이터 요소를 지정하는 작업 추적 구성입니다.
attributes 맞춤 작업 속성 목록입니다. 각 속성에는 고유한 키가 있어야 합니다.

서비스 중단 태스크 만들기

예를 들어 운전자 휴식 시간과 같이 사용 불가 상태를 나타내는 작업을 만들 수 있습니다. 사용 불가 태스크를 만들려면 다음 가이드라인을 따르세요.

  • 작업 유형을 UNAVAILABLE로 설정합니다.
  • 추적 ID는 포함하지 마세요.
  • 이용 불가 작업의 위치를 제공하지 않아도 되지만, 위치를 제공하면 하루 종일 향상된 ETA 계산이 제공됩니다.

차량 위치가 경로 공유 UNAVAILABLE 작업에 있는 경우 차량 위치에 특별한 공개 상태 규칙이 적용됩니다.

  • 배송 추적 라이브러리와 통합된 소비자 앱: 차량이 재고 없음 작업을 수행하는 경우 소비자 앱 사용자는 배송의 상태 정보를 계속 볼 수 있지만 차량 위치는 볼 수 없습니다.
  • 차량 추적 라이브러리와 통합된 차량 추적 앱: 차량이 비가용성 작업을 수행하는 경우 차량 추적 앱을 사용하는 차량 관리자는 비가용성 작업의 차량 위치를 볼 수 있습니다.

다음 예에서는 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.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

서버 환경에서 사용 불가 태스크를 만들려면 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, 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"
 }
 EOM

예약된 중지 작업 만들기

예를 들어 고객 위치에서 운전 이외의 작업을 수행하거나, 주유소에 들러야 하거나, 운전자가 피더 차량에서 배송 상품을 수령해야 하는 경우 등 정기 정차에 대한 작업을 만들 수 있습니다. 예약된 중지 작업을 만들 때는 다음 가이드라인을 따르세요.

  • 태스크 유형을 다음으로 설정합니다.
  • 추적 ID는 포함하지 마세요.
  • 원하는 경우 위치를 제공할 수 있습니다.

다음 예에서는 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.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

서버 환경에서 예약된 중지 작업을 만들려면 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, 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

다음 단계