배송 추적을 위한 Fleet Engine 시작하기

배송의 첫 마일과 마지막 마일에서 전체 이동 활동을 모델링하세요. Fleet Engine Deliveries API를 사용할 수 있습니다 Android용 Driver SDK를 사용하여 이 API를 사용할 수 있습니다. HTTP REST 또는 gRPC 호출을 사용하여 직접 실행할 수 있습니다

초기 설정

Google Cloud 콘솔에서 Fleet Engine Deliveries API를 구성합니다.

설정 확인

서비스 계정을 만든 후 설정이 완료되었는지 확인 배송 수단을 만들 수 있습니다 즉시 설정 확인 문제 해결에 필요한 일반적인 승인 문제를 해결했는지 프로젝트를 설정하는 것입니다 설정을 확인하는 방법에는 두 가지가 있습니다.

클라이언트 라이브러리

원시 gRPC 또는 REST에 대한 개발자 환경을 개선하려면 클라이언트 라이브러리를 사용해 볼 수 있습니다. 대상 서버 애플리케이션에 대한 클라이언트 라이브러리를 가져오는 방법에 대한 안내는 클라이언트 라이브러리.

이 문서의 Java 예에서는 개발자가 gRPC에 익숙하다고 가정합니다.

데이터 구조

Fleet Engine Deliveries API는 두 가지 데이터 구조를 사용하여 수령 및 배달을 모델링합니다. 배송량:

  • 배송 상품을 운송하는 데 사용되는 배송 운송 수단입니다.
  • 배송 수령 및 배송 작업

또한 작업을 사용하여 운전자 중단 및 예정된 정류장 모델링 하루 종일

배송 차량

창고에서 배송 위치로 배송품을 운송하는 배송 차량 승차 위치에서 차고지에 이르는 과정을 거치는 것입니다. 경우에 따라 수령 위치에서 배송 위치로 직접 배송품을 운송합니다.

드라이버 SDK를 사용하여 Fleet Engine에서 DeliveryVehicle 객체 만들기 배송 및 차량 추적을 위해 위치 업데이트를 전송할 수 있습니다.

작업

차량이 하루 동안 수행하는 동작의 경우 액션 유형:

  • 수령 및 배송의 경우 배송 작업을 할당합니다.
  • 휴식이 필요한 경우와 같이 운전자가 부재 중일 때는 비가용성 작업을 할당합니다.
  • 드롭박스 또는 고객 위치에서 운전 이외의 작업에 해당하는 작업 할당 예약 중지 작업.

할당하는 각 할 일에는 고유한 태스크 ID가 있어야 하지만 태스크는 동일한 작업 ID를 공유할 수 있습니다. 추적 ID가 있는지 확인합니다. Fleet Engine에서 도착예정시간을 계산하는 경우 각 작업에 대해 모든 작업과 작업의 순서를 예측을 하도록 예약됩니다. 작업 ID에 대한 자세한 내용은 다음을 참조하세요. 작업 ID 가이드라인

Fleet Engine에서 작업을 만들려면 드라이버 SDK 작업 관리자를 사용하세요.

배송 작업

배송 상품 수령 및 배송을 위한 배송 작업 만들기 다음 정보를 포함해야 합니다.

  • 수령 또는 배달 위치입니다.
  • 운송장 번호 또는 ID
  • 작업을 완료하는 데 필요한 추가 시간을 고려하여 체류 시간은 주차하거나 핸드오프 장소까지 걸어갈 수 있습니다.
  • 고유한 작업 ID입니다. 작업 ID 가이드라인을 참고하세요.

자세한 내용은 다음 항목을 참조하세요.

Android

iOS

사용할 수 없는 작업

비가용성 작업에는 차량을 이용할 수 없는 기간이 포함됩니다. 픽업 또는 배달(예: 차량 또는 운전자에 주유를 위한 휴식 시간) 휴식을 취할 수 있습니다.

다음 정보를 사용하여 비가용성 태스크를 만듭니다.

  • 광고 시점의 길이입니다.
  • 원하는 경우 광고 시점의 위치입니다. 자동 완성을 위해 이렇게 하면 보다 정확한 예상 도착 시간을 확인할 수 있습니다. 하루 종일

자세한 내용은 다음 항목을 참조하세요.

Android

iOS

예약된 중지 작업

운송 차량에 필요한 정류장을 모델링하기 위해 예약된 정차 작업을 만듭니다. 만들 수 있습니다. 예를 들어 매일 예약된 일정에 대해 예약된 중지 작업을 생성합니다. 다른 배송과 관계없이 특정 위치에서 수거 정류장 또는 동일한 위치에서 승차할 수 없습니다 예약된 중지 작업을 만들 수도 있습니다. 배급 상자나 모형 급수기 간 운송 서비스 센터 및 서비스 지점에서 정차할 수 있습니다.

자세한 내용은 다음 항목을 참조하세요.

Android

iOS

작업 ID 가이드라인

작업 ID를 만들 때 다음 콘텐츠 및 형식 가이드라인을 따르세요.

  • 고유한 태스크 ID 만들기
  • 개인 식별 정보 (PII)를 노출하거나 텍스트 데이터를 삭제할 수 있습니다.
  • 유효한 유니코드 문자열을 사용합니다.
  • 64자(영문 기준) 이하여야 합니다.
  • ASCII 문자('/', ":", '\', '?' 또는 '#').
  • 유니코드 정규화 양식 C에 따라 정규화합니다.

다음은 좋은 작업 ID의 예입니다.

  • 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
  • e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
  • NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk

다음 표는 지원되지 않는 작업 ID의 예를 보여줍니다.

지원되지 않는 할 일 ID 이유
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 쉼표, 마침표, 콜론, 슬래시 등 PII 및 문자 요구사항을 위반합니다.
JohnDoe-577b484da26f-Cupertino-SantaCruz 개인 식별 정보 요건 위반
4R0oXLToF"112 Summer Dr. East Hartford, CT06118"577b484da26f8a 공백, 쉼표, 따옴표와 같은 개인 식별 정보 및 문자 요구사항을 위반합니다. 64자(영문 기준)를 초과합니다.

추가 리소스

각 데이터에 포함된 특정 필드 보기 DeliveryVehicle에 대한 API 참조 문서를 확인하세요. (gRPC, REST) 및 Task (gRPC, REST)를 사용합니다.

차량 수명

DeliveryVehicle 객체는 최초 또는 라스트 마일 배송 차량을 나타냅니다. 다음을 사용하여 DeliveryVehicle 객체를 만듭니다.

  • 서비스 계정이 포함된 Google Cloud 프로젝트의 프로젝트 ID 사용하여 Fleet Engine API를 호출할 수 있습니다
  • 고객 소유 차량 ID입니다.

차량마다 고유한 차량 ID를 사용하세요. 차량 ID를 재사용하면 안 됨 원래 차량에 진행 중인 작업이 없는 경우

Fleet Engine은 배포되지 않은 객체 DeliveryVehicle개를 자동으로 삭제합니다. 7일 후에 UpdateDeliveryVehicle를 사용하여 업데이트되었습니다. 권장 차량의 위치를 업데이트하는 것은 주기적으로 점검합니다. DeliveryVehicle의 다른 대부분의 필드 업데이트 새 필드 값이 다르면 항목 수명이 연장됩니다. 만들 수 있습니다

차량이 있는지 확인하려면 다음 단계를 따르세요.

  1. UpdateDeliveryVehicle을 호출합니다.
  2. NOT_FOUND 오류가 발생하면 CreateDeliveryVehicle를 호출합니다. 차량을 다시 만듭니다. 호출이 차량을 반환하는 경우 여전히 업데이트할 수 있습니다.

차량 유형

VehicleType 항목에는 VehicleType의 선택적 필드가 포함되어 있으며, 여기에는 Category 지정할 수 있는 enum AUTO, TWO_WHEELER, BICYCLE 또는 PEDESTRIAN 필드를 설정하지 않으면 기본값은 AUTO입니다.

차량의 모든 경로에서는 해당 RouteTravelMode을 사용합니다. 를 사용합니다.

차량 속성

DeliveryVehicle 항목에는 DeliveryVehicleAttribute입니다. ListDeliveryVehicles API에는 filter가 포함됩니다. 반환된 DeliveryVehicle 항목을 지정할 수 있습니다. DeliveryVehicleAttribute는 Fleet Engine에 영향을 미치지 않습니다. 라우팅 동작입니다.

개인 식별 정보 (PII) 또는 민감한 정보를 포함하지 마세요. 이 필드는 사용자에게 표시될 수 있으므로 속성으로 바꾸세요.

태스크 수명

다음 명령어를 사용하여 Fleet Engine에서 태스크를 만들고 업데이트하고 쿼리할 수 있습니다. Deliveries API gRPC 또는 REST 인터페이스

Task 객체에는 진행률을 추적하는 상태 필드가 있습니다. 수명 주기를 지원합니다 값이 '열림'에서 '닫힘'으로 이동합니다. 새 할 일이 생성됨 열려 있음을 나타내며 이는 다음 중 하나를 나타냅니다.

  • 작업이 아직 배송 차량에 할당되지 않았습니다.
  • 배송 차량이 아직 작업에 할당된 차량 정류장을 통과하지 않았습니다.

작업 가이드라인

차량이 OPEN 상태인 경우에만 차량에 작업을 할당할 수 있습니다.

작업을 취소하려면 차량 정류장 목록에서 작업을 삭제하여 자동으로 CLOSED로 전환됩니다.

작업의 차량이 작업의 차량 중지를 완료하면 다음을 충족해야 합니다.

  1. 태스크의 결과 필드를 SUCCEEDED 또는 FAILED로 업데이트합니다.

  2. 이벤트의 타임스탬프를 지정합니다.

    그러면 JavaScript 배송 추적 라이브러리에서 작업 결과를 표시하고 태스크 상태가 CLOSED로 자동 설정됩니다. 자세한 내용은 JavaScript 배송 추적 라이브러리로 배송 추적

차량과 마찬가지로 Fleet Engine은 이미 존재하는 ID로 작업을 만들려고 하면 오류가 반환됩니다.

참고: Fleet Engine은 명시적으로 태스크 삭제를 지원하지 않습니다. 서비스 업데이트 없이 7일이 지나면 자동으로 할 일 삭제 할 일 데이터를 7일 이상 보관하려면 해당 기능을 직접 구현해야 합니다

할 일 속성

Task 항목에는 TaskAttribute - 문자열, 숫자의 3가지 유형 중 하나의 값을 가질 수 있음 부울입니다. ListTasks API에는 반환을 제한할 수 있는 filter 필드가 포함되어 있습니다. Task 항목을 지정된 속성이 있는 항목으로 대체합니다. 할 일 속성은 Fleet Engine 라우팅 동작에 영향을 미칠 수 있습니다.

개인 식별 정보 (PII) 또는 기타 민감한 정보를 포함하지 마세요. 이러한 속성은 사용자에게 표시될 수 있으므로 속성에 정보를 포함합니다.

차량 및 작업 수명 주기 관리

알림: 내부 시스템은 신뢰할 수 있는 데이터 소스 역할을 합니다. Fleet Engine Deliveries API는 사용자를 대신하여 제공합니다.

시스템에서 차량 및 작업 수명 주기를 관리하려면 Fleet Engine Deliveries API를 사용하세요. 차량 및 차량 관련 작업을 생성, 업데이트, 추적할 수 있습니다.

동시에 드라이버 애플리케이션이 Fleet Engine과 직접 통신합니다. 기기 위치 및 경로 정보를 업데이트합니다. 이 모델을 사용하면 Fleet Engine이 실시간 위치를 효율적으로 관리합니다. 그것은 위치를 직접 추적 라이브러리를 사용하면 알 수 있습니다.

예를 들어 다음과 같은 시나리오가 있다고 가정해 보겠습니다.

  • 배달원이 배달 정류장 근처에 있습니다. 드라이버 애플리케이션은 사용할 수 있습니다
  • Fleet Engine은 소비자 애플리케이션에서 소비자에게 알릴 때 사용하는 추적 라이브러리 가까이 있다고 가정하겠습니다.
  • 배송 기사가 배송을 완료한 후 '배송 완료'를 클릭합니다. 클릭합니다.
  • '배송 완료' 백엔드 시스템으로 정보를 전송하고 이 프로젝트는 필요한 비즈니스 검증 및 인증 단계를 수행합니다
  • 시스템이 작업을 SUCCEEDED로 확인하고 다음을 사용하여 Fleet Engine을 업데이트합니다. Deliveries API

다음 다이어그램은 이러한 프로세스를 일반적인 수준에서 보여줍니다. 또한 시스템, 클라이언트 및 네트워크 간 표준 관계를 보여줍니다. Fleet Engine을 사용하는 것입니다

Deliveries API 사용

클라이언트 토큰 관리

위치 업데이트가 운전자 애플리케이션에서 시작되어 직접 전송됩니다. Fleet Engine에 연결하려면 승인 토큰이 필요합니다. 권장되는 접근 방식은 다음과 같습니다. 클라이언트에서 Fleet Engine으로의 업데이트를 처리할 수 있습니다.

  1. Fleet Engine Delivery 신뢰할 수 없는 드라이버 사용자를 사용하여 토큰을 생성합니다. 서비스 계정 역할을 합니다

  2. 드라이버 애플리케이션에 제한된 범위의 토큰을 제공합니다. 이 범위 Fleet Engine의 기기 위치만 업데이트할 수 있습니다.

이러한 방식을 통해 휴대기기에서 발생한 통화가 신뢰할 수 없는 환경의 최소 권한의 원칙을 따라야 합니다.

기타 서비스 계정 역할

대신 드라이버 애플리케이션이 직접 Fleet Engine은 신뢰할 수 없는 드라이버 역할로 제한된 역할 이외에 예를 들어 특정 작업 업데이트의 경우 신뢰할 수 있는 드라이버 역할을 사용할 수 있습니다. 대상 자세한 내용은 신뢰할 수 있는 드라이버 모델.

신뢰할 수 없고 신뢰할 수 있는 드라이버 역할의 사용에 관한 자세한 내용은 다음을 참고하세요. Cloud 프로젝트 설정

근무일 모델링

다음 표는 1마일 또는 라스트 마일 운전자의 근무일을 설명합니다. 배송 및 물류 회사와 비슷할 것입니다. 귀사는 세부 사항은 다르지만 근무일을 어떻게 모델링할 수 있는지 확인할 수 있습니다.

시간활동모델링
하루가 시작된 후 24시간 이내 배급사는 배송 차량 또는 경로에 배송품을 할당합니다. 배송, 수령, 휴식, 휴식 등의 작업을 다른 애플리케이션을 실행할 수 있습니다 예를 들어 배송 수령 작업 배송 작업 예약된 이용 불가 또는 예정된 정류장입니다.

배송 패키지가 완료되면 차량에 작업을 할당합니다. 게재 순서가 확정됩니다
하루의 시작 운전자는 Driver 앱에 로그인하여 창고에서 하루를 시작합니다. Delivery Driver API 초기화 필요에 따라 Fleet Engine에서 배송 수단을 만듭니다.
운전자가 배송 차량에 화물을 싣고 화물을 스캔합니다. 배송 작업이 미리 생성되지 않았다면 배송 배송 작업 만들기 캡션을 확인할 수 있습니다.
드라이버가 실행할 태스크 순서를 확인합니다. 미리 만들어지지 않은 경우 미리 만들어 둡니다. 배송 수령 작업 예약된 이용 불가 예약된 정류장을 찾습니다.
운전자가 차고를 떠나야 할 다음 작업 수에 전념 완료되었습니다. 모든 작업 또는 일부 작업 할당 차량에 전달될 수 있습니다.
배달 기사가 화물을 배달하고 있습니다. 배송 정류장에 도착한 후 정류장에 도착하는 차량 상품을 배송한 후 전송 작업에 대해 알아보고 원하는 경우 매장 배송 상태 및 기타 메타 정보 정류장 및 그 이전에 모든 작업을 완료한 후 다음 정류장으로 주행을 시작하고, 관련된 작업을 수행할 때 차량이 멈춰서 다음 정류장으로 이동하는 차량
운전자가 급식기 차량을 만나 추가 화물을 배송 차량으로 운송합니다. 피더와 배송 차량 간의 환승을 위한 만남의 장소 정류장으로 모델링되어야 합니다.

배송을 전송 및 스캔한 후 배송 작업을 만듭니다. 생성할 수 있습니다. 그런 다음 작업 완료를 업데이트합니다. 차량에 작업을 할당하여 주문 태스크 순서 업데이트를 예로 들 수 있습니다.
운전자가 승차 요청 알림을 받습니다. 수령 요청을 수락한 후 배송 수령 작업을 만듭니다. 그런 다음 태스크 실행을 업데이트합니다. 차량에 작업을 할당하여 주문 태스크 순서 업데이트를 예로 들 수 있습니다.
정오 운전자가 점심을 먹습니다. 위치가 비예약 작업과 관련된 경우 다음과 같이 처리합니다. 실행할 수 있습니다 차량과 관련된 작업 실행 정류장에 도착하면 차량이 멈춤 다음 정류장으로 가는 차량

그렇지 않으면 광고 시간이 끝날 때까지 추가 조치가 필요하지 않습니다. 다음 작업과 나머지 작업을 확인하여 작업을 삭제합니다. 작업 순서 업데이트를 참조하세요.
운전자가 택배를 수령합니다. 이는 배송 정류장처럼 모델링됩니다. 관련 작업 실행 정류장에 도착하는 차량 작업 종료, 그리고 선택적으로 배송 상태 및 기타 메타 정보 저장 정차 시 모든 작업을 완료한 후와 운전을 시작하기 전에 다음 정류장까지, 차량 정차 완료와 관련된 작업을 수행합니다. 다음 정류장으로 이동하는 차량 참고: 정확한 결제를 위해 모든 수령 시 전송합니다. 수령 상품이 당일 배송 기사에게 보내는 배송 작업은 경로의 다른 전달 작업을 수행할 수 없습니다. 운전자가 승차 위치를 가져오는 경우 창고로 돌려보내는 경우 창고에서 배송 작업을 만드는 것이 좋습니다. 있습니다.
운전자가 보관함에서 배송 상품을 수령하기 위해 예정된 경유지를 정차합니다. 다른 승차 정류장과 마찬가지로 모델링됩니다. 관련 작업 실행 정류장에 도착하는 차량할 일 닫기. 완료 후 정류장에 있는 모든 작업과 다음 정류장으로 주행을 시작하는 것, 차량 정차 완료와 관련된 작업 수행 다음 정류장으로 이동하는 차량
운전자가 다른 장소로 화물이 우회되고 있다는 알림을 받습니다. 원래 배송 배송 작업 상태를 '완료됨'으로 설정하고 새 배송 작업 생성 배송 작업을 선택합니다. 자세한 내용은 배송 경로 변경을 참조하세요.
운전자가 택배를 배송하려고 시도했지만 실패했습니다. 이는 성공적인 배송 중지와 유사하게 모델링되어 전송 작업을 완료할 수 있습니다 관련 작업 수행 정류장에 도착하는 차량. 후(After) 상품을 배송하지 못하거나 작업을 닫고 필요한 경우 매장 배송 상태 및 기타 메타 정보 정차 시 모든 작업을 완료한 후와 운전을 시작하기 전에 다음 정류장까지, 차량 정차 완료와 관련된 작업을 수행합니다. 다음 정류장으로 이동하는 차량
배송 기사에게 배송을 보류 (배송하지 않음)하라는 알림을 받았습니다. 알림 수신 및 확인이 완료되면 태스크 상태를 COMPLETED로 설정합니다.
운전자는 다음 번에 특정 배송을 배송하라는 알림을 받았으며, 이에 따라 약정 배송 순서가 변경되었습니다. 작업 순서를 업데이트합니다.
배송 기사가 주문되지 않은 상품을 배송하기로 선택합니다. 작업 순서를 업데이트한 다음 진행합니다.
운전자가 여러 건의 배송 상품을 단일 위치로 배송합니다. 이는 단일 배송 배송 중지와 유사하게 모델링됩니다. 정류장에 도착한 후, 정류장과 관련된 작업을 정류장에 도착하는 차량. 배송할 때마다 각 작업을 종료합니다. 그리고 필요한 경우 매장 배송 상태와 기타 메타 정보를 포함할 수 있습니다. 정차 시 모든 작업을 완료한 후와 운전을 시작하기 전에 다음 정류장까지, 차량 정차 완료와 관련된 작업을 수행합니다. 다음 정류장으로 이동하는 차량
전체 과정 종료 시간 운전자가 차고로 돌아옵니다. 배송 기사가 전달 작업으로 각 패키지를 만들고 종료하여 결제 정보를 제공해야 합니다 디포를 모델링하는 방법은 다음과 같습니다. 있습니다 창고를 배송 경유지로 사용하지 않는 경우 원하는 경우 차고를 예정된 정류장으로 모델링합니다. 정류장을 모델링하면 운전자가 차고로 돌아가는 경로를 안내하고 예상 시간을 확인할 수 있게 해 줍니다. 수 있습니다.

위치 업데이트 작동 방식

Fleet Engine으로 최고의 성능을 얻으려면 차량 스트림을 제공하세요. 위치 업데이트. 이러한 업데이트를 제공하려면 다음 방법 중 하나를 사용하세요.

  1. 드라이버 SDK 사용 - Android, iOS -- 가장 간단한 옵션입니다.
  2. 맞춤 코드 사용 -- 백엔드를 통해 릴레이되거나, Android 또는 iOS를 탭합니다.

차량 위치 업데이트를 제공하는 방법과 관계없이 백엔드는 배송 차량이 배송될 때 Fleet Engine을 정류장까지 이동 중 (차변 도착) 및 정류장에 도착합니다. Fleet Engine에서 이러한 이벤트를 감지하지 않습니다. 자동으로 확장 및 축소할 수 있습니다

차량 정류장 및 배송 위치

차량 정류장은 배송 차량이 배송 작업을 완료하는 단계입니다. 실행할 수 있습니다 이것은 로딩 도크와 같은 액세스 포인트이거나 도로에 맞게 조정된 위치를 표시합니다.

배송 위치는 상품이 배송되는 위치입니다. 집약적일 수 있습니다. 배송 위치까지 이동하는 데 약간의 도보가 필요할 수 있습니다. 정류장에서 출발합니다.

예를 들어 배송 기사가 쇼핑몰의 매장으로 배송할 때 배달 차량이 가까운 쇼핑몰 주차장에 정차합니다. 매장에 가장 가까운 입구가 될 것입니다 차량 정류장입니다. 드라이버 쇼핑몰 내 지점까지 걷습니다. 확인할 수 있습니다 배송 위치입니다.

사용자에게 최적의 배송 추적 환경을 제공하려면 배송 작업은 차량 정류장에 할당되며 배송 작업을 위해 남은 차량 정류장이 사용자에게 보고되어 배송 현황을 확인할 수 있습니다.

예를 들어 한 운송업체가 한 사무실 건물로 여러 번 배달하는 경우 모든 배송 작업을 단일 차량 정류장에 할당하는 것이 좋습니다. 만약 각 배송 작업은 자체 차량 정류장, 배송에 할당됩니다. 사용자의 경험에 의지하는 데 도움이 되지 않을 수 있습니다. 차량이 제한된 수의 정류장에 있는 경우 하겠습니다. 짧은 시간에 많은 차량 정류장을 완료하는 것은 사용자가 전송 진행 상황을 추적하는 데 사용할 시간이 많을 것입니다.

모바일 SDK 사용

Driver SDK를 호출하기 전에 초기화해야 합니다.

Delivery Driver API 초기화

Driver SDK에서 Delivery Driver API를 초기화하기 전에 Navigation SDK를 초기화하세요. 그런 다음 아래 예와 같이 Delivery Driver API를 초기화합니다.

static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";

NavigationApi.getNavigator(
   this, // Activity.
   new NavigatorListener() {
     @Override
     public void onNavigatorReady(Navigator navigator) {
       DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
         .setNavigator(navigator)
         .setProviderId(PROVIDER_ID)
         .setVehicleId(VEHICLE_ID)
         .setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
         .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
         .setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
         .setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
             Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
         .build));
     }
     @Override
     public void onError(int errorCode) {
       Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
     }
   });

사용 사례

이 섹션에서는 Deliveries API를 사용하여 일반적인 사용 사례를 모델링하는 방법을 설명합니다.

고유 항목 식별자

REST 호출에 사용되는 고유 항목 식별자의 형식과 값은 다음과 같습니다. Fleet Engine에 불투명합니다. 자동 증가 ID를 사용하지 말고 식별자에 개인 식별 정보 (PII)가 포함되지 않음 정보를 수집할 수 있습니다.

차량 만들기

차량을 만들 수 있는 위치는 드라이버 SDK 또는 gRPC 또는 REST를 사용하는 서버 환경에서

gRPC

새 차량을 만들려면 Fleet Engine에 CreateDeliveryVehicle를 호출합니다. CreateDeliveryVehicleRequest 객체를 사용하여 새 배송 차량을 예로 들 수 있습니다 Name 필드에 지정된 모든 값은 사용자 지정 ID의 경우 API 지침에 따라 무시됩니다. DeliveryVehicleId 필드를 사용하여 차량 ID를 설정해야 합니다.

DeliveryVehicle를 만들 때 선택적으로 다음 필드를 지정할 수 있습니다.

  • 속성
  • LastLocation
  • 유형

다른 필드는 설정하지 마세요. 삭제하면 Fleet Engine에서 오류를 반환합니다. 해당 필드는 읽기 전용이거나 UpdateDeliveryVehicle

선택 필드를 설정하지 않고 차량을 만들려면 CreateDeliveryVehicleRequest에서 DeliveryVehicle 필드가 설정되지 않음

다음 예는 자바 gRPC 라이브러리 차량을 만듭니다.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    String parent = "providers/" + PROJECT_ID;
    DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
      .addAttributes(DeliveryVehicleAttribute.newBuilder()
        .setKey("route_number").setValue("1"))  // Opaque to the Fleet Engine
      .build();

    // Vehicle request
    CreateDeliveryVehicleRequest createVehicleRequest =
      CreateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setParent(parent)
          .setDeliveryVehicleId(VEHICLE_ID)     // Vehicle ID assigned by the Provider
          .setDeliveryVehicle(vehicle)
          .build();

    // Error handling
    // If Fleet Engine does not have vehicle with that ID and the credentials of the
    // requestor pass, the service creates the vehicle successfully.

    try {
      DeliveryVehicle createdVehicle =
        deliveryService.createDeliveryVehicle(createVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case ALREADY_EXISTS:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

서버 환경에서 차량을 만들려면 HTTP REST 호출을 실행하세요. CreateDeliveryVehicle에게 다음과 같이 합니다.

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles?deliveryVehicleId=<id>

&lt;id&gt;는 차량 내 배송 차량의 고유 식별자입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

POST 본문은 생성할 DeliveryVehicle 항목을 나타냅니다. 사용자는 다음 선택적 필드를 포함합니다.

  • 속성
  • lastLocation
  • 유형

curl 명령어 예시:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
  "attributes": [{"key": "model", "value": "sedan"}],
  "lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM

Fleet Engine은 사용자 지정 ID에 대한 API 안내에 따라 DeliveryVehicle 항목의 name 필드를 무시합니다. 다른 필드는 설정하지 마세요. 삭제하면 Fleet Engine에서 오류를 반환합니다. 해당 필드는 읽기 전용이거나 UpdateDeliveryVehicle

필드를 설정하지 않고 차량을 만들려면 POST 본문을 남겨 두세요. 요청이 비어 있습니다. 그러면 새로 생성된 차량이 deliveryVehicleId 매개변수를 사용합니다.

curl 명령어 예시:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}"

배송 수령 작업 만들기

다음 중 한 곳에서 배송 수령 작업을 만들 수 있습니다. 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다

gRPC

다음 예는 자바 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

서버 환경에서 배송 수령 태스크를 만들려면 HTTP REST 호출을 만드세요. CreateTask에게 다음과 같이 합니다.

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt;는 작업의 고유 식별자입니다. 추적 번호가 아니어야 합니다. 합니다. 시스템에 작업 ID가 없는 경우 다음을 생성할 수 있습니다. 고유한 식별자 (UUID)를 제공합니다

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    유형 Type.PICKUP
    State.OPEN
    trackingId 배송 추적에 사용하는 번호 또는 식별자입니다.
    plannedLocation 작업이 완료되는 위치(이 경우) 배송 수령 위치를 선택합니다
    taskDuration 배송 상품을 수령하는 데 걸리는 예상 시간(초) 승차 위치에 있습니다.

  • 선택적 필드:

    필드
    targetTimeWindow 작업을 완료해야 하는 기간입니다. 이것은 라우팅 동작에 영향을 미칩니다.
    속성 사용자 지정 작업 속성의 목록입니다. 각 속성에는 고유 키가 있어야 합니다.

항목의 다른 모든 필드는 생성 시 무시됩니다. Fleet Engine 발생 요청에 할당된 deliveryVehicleId가 포함된 경우는 예외입니다. 할당 UpdateDeliveryVehicleRequest를 사용하여 작업을 실행합니다. 자세한 내용은 차량에 작업 할당UpdateDeliveryVehicleRequest.

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

배송 배송 작업 만들기

다음 중 한 곳에서 배송 배송 작업을 만듭니다. 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다

gRPC

다음 예는 자바 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

gRPC 또는 REST를 사용하여 서버 환경에서 배송 배송 태스크를 만들려면 HTTP REST 호출을 만드세요. CreateTask에게 다음과 같이 합니다.

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt;는 작업의 고유 식별자입니다. 추적 번호가 아니어야 합니다. 합니다. 시스템에 작업 ID가 없는 경우 다음을 생성할 수 있습니다. 고유한 식별자 (UUID)를 제공합니다

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    유형 Type.DELIVERY
    State.OPEN
    trackingId 배송 추적에 사용하는 번호 또는 식별자입니다.
    plannedLocation 작업이 완료되는 위치(이 경우) 이 배송의 배송 위치입니다.
    taskDuration 배송 상품을 인수하는 데 걸리는 예상 시간(초) 배송 위치를 확인합니다

  • 선택적 필드:

    필드
    targetTimeWindow 작업을 완료해야 하는 기간입니다. 이것은 라우팅 동작에 영향을 미칩니다.
    속성 사용자 지정 작업 속성의 목록입니다. 각 속성에는 고유 키가 있어야 합니다.

항목의 다른 모든 필드는 생성 시 무시됩니다. Fleet Engine 발생 요청에 할당된 deliveryVehicleId가 포함된 경우는 예외입니다. 할당 UpdateDeliveryVehicleRequest를 사용하여 작업을 실행합니다. 자세한 내용은 차량에 작업 할당UpdateDeliveryVehicleRequest.

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

일괄 생성 태스크

gRPC 또는 REST를 사용하여 서버 환경에서 태스크 배치를 만들 수 있습니다.

gRPC

다음 예는 자바 gRPC 라이브러리 두 개의 작업, 즉 배달과 수령에 대한 작업을 만듭니다. 위치:

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서 전송 및 수령 작업을 만들려면 BatchCreateTasks에 대한 HTTP REST 호출:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate

요청 헤더에는 값이 Bearer인 Authorization 필드가 있어야 합니다. <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰.

요청 본문에는 BatchCreateTasksRequest 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    요청 배열<CreateTasksRequest>

  • 선택적 필드:

    필드
    헤더 `DeliveryRequestHeader`

requests의 각 CreateTasksRequest 요소는 동일한 유효성 검사를 통과해야 합니다. CreateTask 요청으로 설정해야 합니다. 단, parent header 필드는 선택사항입니다. 설정된 경우 각 필드가 최상위 수준 BatchCreateTasksRequest에 있습니다. 자세한 내용은 배송 수령 작업 만들기 배송 배송 작업 만들기 를 참조하세요.

자세한 내용은 BatchCreateTasks의 API 참조 문서를 확인하세요. (gRPC, REST)

curl 명령어 예시:

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "requests" : [
    {
      "taskId": "${DELIVERY_TASK_ID}",
      "task" : {
        "type": "DELIVERY",
        "state": "OPEN",
        "trackingId": "${DELIVERY_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    },
    {
      "taskId": "${PICKUP_TASK_ID}",
      "task" : {
        "type": "PICKUP",
        "state": "OPEN",
        "trackingId": "${PICKUP_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    }
  ]
}
EOM

예약 불가능 시간

비가용성을 나타내는 작업을 만들 수 있습니다 (예: 또는 차량 주유)을 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다 예약된 비가용성 작업에는 다음이 포함되면 안 됩니다. 추적 ID 원하는 경우 위치도 제공할 수 있습니다.

gRPC

다음 예는 자바 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

서버 환경에서 비가용성 태스크를 만들려면 HTTP REST 호출을 실행합니다. CreateTask에게 다음과 같이 합니다.

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt;는 작업의 고유 식별자입니다. 그렇지 않은 경우 시스템에 작업 ID가 있다면 범용 고유 ID를 생성하여 사용됩니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    유형 Type.UNAVAILABLE
    State.OPEN
    taskDuration 광고 시점 길이(초)입니다.

  • 선택적 필드:

    필드
    plannedLocation 특정 위치에서 중단해야 하는 경우 광고 시점의 위치입니다.

항목의 다른 모든 필드는 생성 시 무시됩니다. Fleet Engine 발생 요청에 할당된 deliveryVehicleId가 포함된 경우는 예외입니다. 할당 UpdateDeliveryVehicleRequest를 사용하여 작업을 실행합니다. 자세한 내용은 차량에 작업 할당UpdateDeliveryVehicleRequest.

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

예약된 정류장

다음 작업 중 하나에서 예약된 중지 작업을 만들 수 있습니다. 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다 예약된 중지 작업에는 추적을 포함할 수 없습니다. 있습니다.

gRPC

다음 예는 자바 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

서버 환경에서 예약된 중지 태스크를 만들려면 HTTP REST 호출을 실행합니다. CreateTask에게 다음과 같이 합니다.

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt;는 작업의 고유 식별자입니다. 계정이 없는 경우 시스템에 작업 ID를 포함하고 있는 경우, 고유한 식별자 (UUID)를 제공합니다

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    유형 Type.SCHEDULED_STOP
    State.OPEN
    plannedLocation 정류장의 위치입니다.
    taskDuration 예상되는 정류장 길이(초)입니다.

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 생성 시 무시됩니다. Fleet Engine 발생 요청에 할당된 deliveryVehicleId가 포함된 경우는 예외입니다. 할당 UpdateDeliveryVehicleRequest를 사용하여 작업을 실행합니다. 자세한 내용은 차량에 작업 할당UpdateDeliveryVehicleRequest.

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

타겟 기간 설정

목표 기간은 TimeWindow 이 시간 동안 작업이 완료됩니다 예를 들어, 할 일 대상 시간을 사용하여 이 기간을 캡처하고 알림을 생성하거나 이동 후 분석 실적을 확인할 수 있습니다

타겟 기간은 시작 시간과 종료 시간으로 구성되며 설정 가능 할 수 있습니다 목표 기간은 라우팅에 영향을 미치지 않습니다. 있습니다.

gRPC

다음 예는 자바 gRPC 라이브러리 태스크 기간을 설정합니다.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String TASK_ID = "task-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Task settings
    String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
    Task task = Task.newBuilder()
      .setName(taskName)
      .setTargetTimeWindow(
        TimeWindow.newBuilder()
          .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
          .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
      .build();

    // Task request
    UpdateTaskRequest updateTaskRequest =
      UpdateTaskRequest.newBuilder()  // No need for the header
          .setTask(task)
          .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
          .build();

    try {
      Task updatedTask = deliveryService.updateTask(updateTaskRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

HTTP를 사용하여 작업 기간을 설정하려면 UpdateTask를 호출합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow`

&lt;id&gt;는 작업의 고유 식별자입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    targetTimeWindow 작업을 완료해야 하는 기간입니다. 이 설정 라우팅 동작에 영향을 미치지 않음

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

작업 추적 공개 상태 구성 설정

배송 추적 라이브러리의 데이터 및 해당 데이터의 공개 상태 GetTaskTrackingInfo 호출에서 반환되는 알림은 태스크별로 제어될 수 있음 표준화된 방식으로 TaskTrackingViewConfig 작업을 수행합니다. 자세한 내용은 활성 차량 작업 를 참조하세요. 이 작업은 태스크에 맞추는 것입니다. 다음은 이 구성으로 작업을 업데이트하는 예입니다.

gRPC

다음 예는 자바 gRPC 라이브러리 작업 추적 뷰 구성을 설정합니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

REST

HTTP를 사용하여 작업 추적 보기 구성 창을 설정하려면 UpdateTask를 호출합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig`

&lt;id&gt;는 작업의 고유 식별자입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    taskTrackingViewConfig 어떤 데이터 요소를 지정할지 지정하는 작업 추적 구성입니다. 최종 사용자에게 공개되는 콘텐츠

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

차량에 작업 할당하기

작업 순서를 업데이트하여 배송 수단에 작업을 할당합니다. 사용됩니다. 차량의 작업 순서는 목록에 의해 결정됩니다. 작업을 수행할 수 있으며 하나 이상의 작업을 전달했습니다 자세한 내용은 작업 순서를 업데이트합니다.

한 차량에서 다른 차량으로 배송을 변경하려면 원래 작업을 종료하세요. 다시 만들고 새 차량을 할당합니다. 할 일을 업데이트하는 경우 이미 할당된 할 일 정렬 다른 차량에 연결하면 오류가 발생합니다.

작업 순서 업데이트

차량에 할당된 작업이 실행되는 순서는 다음 중 하나에서 업데이트할 수 있습니다. 드라이버 SDK 또는 서버 환경일 수 있습니다 두 가지 방법을 모두 사용하여 단일 정보 소스를 유지할 수 있습니다

차량의 작업 순서를 업데이트하면 다음 작업도 실행됩니다.

  • 차량에 새로운 작업을 할당합니다.
  • 이전에 차량에 할당되었지만 할당된 작업을 종료합니다. 업데이트된 순서로 배열됩니다.

한 차량에서 다른 차량으로 배송을 변경하려면 다음 단계를 따르세요. 원래 작업을 다시 만들고 새 차량을 할당합니다. 할 일을 업데이트하는 경우 이미 할당된 할 일 정렬 다른 차량에 연결하면 오류가 발생합니다.

언제든지 할 일 순서를 업데이트할 수 있습니다.

gRPC

다음 예는 자바 gRPC 라이브러리 차량의 작업 순서를 업데이트합니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.NEW)))
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서 차량의 태스크 순서를 업데이트하려면 HTTP REST 호출을 실행합니다. UpdateDeliveryVehicle에게 다음과 같이 합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

&lt;id&gt;는 차량 내 배송 차량의 고유 식별자입니다. 태스크 순서를 업데이트하려는 대상입니다. 이 식별자는 차량을 만들 때 지정한 값입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    remainingVehicleJourneySegments 작업이 실행되어야 하는 순서대로 나열된 작업의 여정 세그먼트 목록입니다. 목록의 첫 번째 작업이 먼저 실행됩니다.
    remainingVehicleJourneySegments[i].stop 목록에서 작업 i의 중지
    remainingVehicleJourneySegments[i].stop.plannedLocation 정류장에 대해 계획된 위치입니다.
    remainingVehicleJourneySegments[i].stop.tasks 이 차량 정류장에서 실행할 작업 목록입니다.
    remainingVehicleJourneySegments[i].stop.state State.NEW

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

차량이 다음 정류장으로 이동 중입니다

차량이 정류장에서 출발하거나 출발할 때 Fleet Engine에 알려야 합니다. 제공합니다. 다음 중 한 가지 방법으로 Fleet Engine에 알릴 수 있습니다. 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다 경합을 피하기 위해 두 가지 방법을 모두 사용하지는 말 것 단일 정보 소스를 유지할 수 있습니다

gRPC

다음 예는 자바 gRPC 라이브러리 차량이 다음 정류장으로 이동 중임을 Fleet Engine에 알립니다.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
        // Next stop marked as ENROUTE
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.7749)
                       .setLongitude(122.4194)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
               .setState(VehicleStop.State.ENROUTE)))
        // All other stops marked as NEW
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.3382)
                       .setLongitude(121.8863)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
               .setState(VehicleStop.State.NEW)))
        .build();

    // DeliveryVehicle request
    UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
      UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setName(vehicleName)
          .setDeliveryVehicle(deliveryVehicle)
          .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
          .build();

    try {
      DeliveryVehicle updatedDeliveryVehicle =
          deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

차량이 다음 정류장으로 가는 중임을 Fleet Engine에 알리기 위해 UpdateDeliveryVehicle에 HTTP REST 호출을 수행합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

&lt;id&gt;는 차량 내 배송 차량의 고유 식별자입니다. 태스크 순서를 업데이트하려는 대상입니다. 이 식별자는 차량을 만들 때 지정한 값입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

  • 필수 입력란:

    필드
    remainingVehicleJourneySegments 상태가 State.NEW로 표시된 나머지 차량 정류장 목록입니다. 목록의 첫 번째 정류장은 State.ENROUTE로 표시된 상태가 있어야 합니다.

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 알림에서 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ENROUTE",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

차량 위치 업데이트

Driver SDK를 사용하여 차량 위치를 업데이트하지 않는 경우 차량 위치가 포함된 Fleet Engine에 직접 호출을 보냅니다. 활성 차량의 경우 Fleet Engine의 위치 업데이트는 최소 1분마다 한 번 이상 필요합니다. 5초에 한 번 반복됩니다

gRPC

다음 예는 자바 gRPC 라이브러리 다음 명령어를 실행하여 Fleet Engine에서 차량의 위치를 업데이트합니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
    .setLastLocation(DeliveryVehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(myDeliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("last_location"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

HTTP REST를 사용하여 Fleet Engine에서 차량 위치를 업데이트하려면 다음을 호출합니다. UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`

&lt;id&gt; 위치를 업데이트할지를 결정합니다 이 식별자는 차량을 만들 때 지정한 값입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

  • 필수 입력란:

    필드
    lastLocation.supplementalLocation 차량의 위치입니다.
    lastLocation.supplementalLocationTime 차량이 이 위치에 마지막으로 있었던 타임스탬프입니다.
    lastLocation.supplementalLocationSensor CUSTOMER_SUPPLIED_LOCATION으로 채워져야 합니다.

  • 선택적 필드:

    필드
    lastLocation.supplementalLocationAccuracy 제공된 위치의 정확도(미터 단위)입니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "lastLocation": {
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
  }
}
EOM

차량이 정류장에 도착함

차량이 정류장에 도착하면 Fleet Engine에 알려야 합니다. 알림을 보낼 수 있습니다. Fleet Engine 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다 경합을 피하기 위해 두 가지 방법을 모두 사용하지는 말 것 단일 정보 소스를 유지할 수 있습니다

gRPC

다음 예는 자바 gRPC 라이브러리 차량이 정류장에 도착했음을 Fleet Engine에 알립니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Marking the arrival at stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서 정류장에 차량이 도착했음을 Fleet Engine에 알리려면 다음 안내를 따르세요. UpdateDeliveryVehicle에 HTTP REST 호출을 실행합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

&lt;id&gt;는 차량 내 배송 차량의 고유 식별자입니다. 태스크 순서를 업데이트하려는 대상입니다. 이 식별자는 차량을 만들 때 지정한 값입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    remainingVehicleJourneySegments 상태가 State.ARRIVED로 설정된 상태로 도착한 정류장입니다. 나머지 차량 정류장 목록이 State.NEW로 표시된 상태로 표시됩니다.

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ARRIVED",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

차량이 멈춤 완료

차량이 정차를 완료하면 Fleet Engine에 알려야 합니다. 이로 인해 중지와 관련된 모든 작업을 CLOSED 상태로 설정합니다. 다음과 같은 작업을 할 수 있습니다. Compute Engine에서 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다 경합 상태를 피하고 단일 정보 소스를 유지하기 위해 두 가지 방법을 모두 사용하지는 마세요.

gRPC

다음 예는 자바 gRPC 라이브러리 차량이 정차를 완료했음을 Fleet Engine에 알립니다

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // This stop has been completed and is commented out to indicate it
    // should be removed from the list of vehicle journey segments.
    // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
    //    .setStop(VehicleStop.newBuilder()
    //        .setPlannedLocation(LocationInfo.newBuilder()
    //            .setPoint(LatLng.newBuilder()
    //                .setLatitude(37.7749)
    //                .setLongitude(122.4194)))
    //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
    //        .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    // The next stop could be marked as ENROUTE if the vehicle has begun
    // its journey to the next stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서의 중지 완료를 Fleet Engine에 알리려면 다음 안내를 따르세요. UpdateDeliveryVehicle에 HTTP REST 호출을 실행합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`

&lt;id&gt;는 차량 내 배송 차량의 고유 식별자입니다. 태스크 순서를 업데이트하려는 대상입니다. 이 식별자는 차량을 만들 때 지정한 값입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    remaining_vehicle_journey_segments 완료한 정류장은 더 이상 수 있습니다.

  • 선택적 필드:

    • 없음

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

    # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
    # environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "remainingVehicleJourneySegments": [
        {
          "stop": {
            "state": "NEW",
            "plannedLocation": {
              "point": {
                "latitude": 37.3382,
                "longitude": 121.8863
              }
            },
            "tasks": [
              {
                "taskId": "${TASK2_ID}"
              }
            ]
          }
        }
      ]
    }
    EOM

할 일 업데이트

대부분의 태스크 필드는 변경할 수 없습니다. 그러나 상태를 수정할 수 있습니다. 작업 결과, 작업 결과 시간, 작업 결과 위치 및 특성 기준 태스크 항목을 직접 업데이트할 수 있습니다 예를 들어 태스크가 아직 준비되지 않은 차량에 할당된 경우, .

gRPC

gRPC를 통해 태스크를 업데이트하는 예시입니다.

REST

다음은 REST를 통해 태스크를 업데이트하는 예시입니다.

할 일 닫기

차량에 할당된 작업을 종료하려면 Fleet Engine에 알립니다. 차량이 작업이 이루어지는 정류장에 도착했음을 확인할 수 있습니다. 차량 정류장 목록에서 삭제합니다. 이를 위해 작업 순서를 업데이트할 때와 마찬가지로 나머지 차량이 중지됩니다. 자동차용입니다.

작업에 아직 차량이 할당되지 않았으며 종료해야 하는 경우 작업을 업데이트합니다. CLOSED 상태로 전환됩니다. 그러나 CLOSED 작업은 다시 열 수 없습니다.

작업 종료는 성공 또는 실패를 나타내지 않습니다. 이는 태스크가 더 이상 진행 중인 것으로 간주되지 않습니다. 배송 추적의 경우 작업의 실제 결과를 나타내는 것이 중요하므로 결과를 표시할 수 있습니다

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setState(Task.State.CLOSED) // You can only directly CLOSE a
  .build();                    // task that is NOT assigned to a vehicle.

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

작업을 서버 환경에서 닫힘으로 표시하려면 UpdateTask:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state`

&lt;id&gt;는 작업의 고유 식별자입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에 Task 항목을 포함해야 합니다.

  • 필수 필드:

    필드
    State.CLOSED

  • 선택적 필드:

    필드
    taskOutcome Outcome.SUCCEEDED 또는 Outcome.FAILED
    taskOutcomeTime 작업이 완료된 시간입니다.
    taskOutcomeLocation 작업이 완료된 위치입니다. Fleet Engine은 기본값으로 마지막 차량 위치로 돌아갑니다.

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "state": "CLOSED",
      "taskOutcome": "SUCCEEDED",
      "taskOutcomeTime": "$(date -u --iso-8601=seconds)"
    }
    EOM

작업 결과 및 결과 위치 설정

작업을 닫는 것은 성공 또는 실패를 나타내는 것이 아니라 태스크는 더 이상 진행 중인 것으로 간주되지 않습니다. 배송 추적의 경우 실제 결과를 나타내서 제공 결과가 표시될 수 있으며 서비스에 대한 적절한 결제가 이루어집니다. 설정한 후에는 작업 결과를 변경할 수 없습니다. 하지만 설정 후 작업 결과 시간 및 작업 결과 위치.

CLOSED 상태인 태스크의 결과는 다음 중 하나로 설정될 수 있습니다. SUCCEEDED(성공) 또는 FAILED(실패)입니다. Fleet Engine은 다음 상태의 배포 태스크만 요금을 청구합니다. 성공.

태스크 결과를 표시할 때 Fleet Engine은 자동으로 마지막으로 알려진 차량 위치가 포함된 작업 결과 위치입니다. 다음과 같은 작업을 할 수 있습니다. 이 동작을 재정의합니다.

gRPC

작업 결과 위치를 설정할 수 있습니다. 있습니다. 위치를 설정하면 Fleet Engine에서 위치를 설정할 수 없습니다. 인코더에 저장된 차량 위치. 태스크 결과 위치를 Fleet Engine으로 덮어쓸 수도 있습니다. 나중에 설정할 수 있습니다. Fleet Engine은 작업 결과 위치를 덮어쓰지 않습니다. 제공할 수 있습니다 작업의 작업 결과 위치는 설정할 수 없습니다. 작업 결과가 설정되어 있지 않습니다 두 작업 결과를 모두 설정할 수 있습니다. 작업의 결과 위치를 나타내는 쿼리입니다

다음 예는 자바 gRPC 라이브러리 작업 결과를 SUCCEEDED로 설정하고 작업이 수행된 위치를 완료됨:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskOutcome(TaskOutcome.SUCCEEDED)
  .setTaskOutcomeTime(now())
  .setTaskOutcomeLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

작업을 서버 환경에서 완료로 표시하려면 다음 단계를 따르세요. UpdateTask에 HTTP REST 호출을 실행합니다.

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation`

&lt;id&gt;는 작업의 고유 식별자입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문에는 Task 항목이 포함되어야 합니다.

  • 필수 필드:

    필드
    taskOutcome Outcome.SUCCEEDED 또는 Outcome.FAILED

  • 선택적 필드:

    필드
    taskOutcomeLocation 작업이 완료된 위치입니다. 설정하지 않으면 Fleet Engine 기본값은 마지막 차량 위치입니다.
    taskOutcomeTime 작업이 완료된 타임스탬프입니다.

항목의 다른 모든 필드는 업데이트 시 무시됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

배송 경로 변경

배송 작업이 생성된 후에는 계획된 위치를 변경할 수 없습니다. 배송 경로를 변경하려면 설정하지 않고 배송 작업을 종료하세요. 업데이트된 계획 위치로 새 작업을 생성합니다. 새 작업을 만든 후 동일한 차량에 작업을 할당합니다. 자세히 알아보기 자세한 내용은 배송 작업 종료를 참고하고 할 일을 할당합니다.

급식기 및 배달 수단 사용

급지대를 사용하여 배송품을 배송 차량으로 운송하는 경우 하루 종일 배송을 예약된 중지 작업으로 모델링합니다. 배송 차량에 사용됩니다. 정확한 위치 추적을 위해 이송된 배송이 계정에 로드된 후 배송을 위한 배송 작업 운송 수단입니다. 자세한 내용은 예정된 정류장을 참조하세요.

배송 상태 및 기타 메타 정보 저장

배송 작업이 완료되면 작업 상태와 결과가 기록됩니다. 할 수 있습니다. 그러나 사이트에 대한 다른 메타 정보는 배송에 따라 다릅니다 다음과 같은 다양한 메타 정보를 저장할 수 있습니다. Fleet Engine 서비스 외부에서 참조하려면 연결된 tracking_id를 사용하세요. 작업을 외부 테이블의 키로 사용합니다.

자세한 내용은 작업 수명을 참고하세요.

차량 검색

다음 위치에서 차량을 검색할 수 있습니다. 드라이버 SDK 서버 환경에서 gRPC 또는 REST를 사용하여 실행할 수 있습니다

gRPC

다음 예는 자바 gRPC 라이브러리 차량을 검색할 수 있습니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder()  // No need for the header
    .setName(name)
    .build();

try {
  DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서 차량을 조회하려면 GetVehicle에 HTTP REST 호출을 실행합니다.

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>`

&lt;id&gt;는 작업의 고유 식별자입니다.

&lt;vehicleId&gt;는 검색할 차량의 ID입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문은 비어 있어야 합니다.

조회에 성공하면 응답 본문에 차량 항목이 포함됩니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}"

할 일 찾기

gRPC 또는 REST를 사용하여 서버 환경에서 태스크를 찾을 수 있습니다. Driver SDK는 작업 검색을 지원할 수 있습니다

gRPC

다음 예는 자바 gRPC 라이브러리 작업을 검색합니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8597549";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task request
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
    .setName(taskName)
    .build();

try {
  Task task = deliveryService.getTask(getTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

서버 환경에서 작업을 조회하려면 GetTask에 HTTP REST 호출을 실행합니다.

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>`

&lt;id&gt;는 작업의 고유 식별자입니다.

&lt;taskId&gt;는 조회할 작업의 ID입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

요청 본문은 비어 있어야 합니다.

조회가 성공하면 응답 본문에 작업 항목이 포함됩니다.

curl 명령어 예시:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

추적 ID로 배송 작업 정보 조회

다음과 같은 방법으로 배송 작업 정보를 조회할 수 있습니다. 각각 별도의 목적이 있습니다.

  • 작업 ID로: 작업에 액세스할 수 있는 차량 운영자와 같은 사용자가 사용합니다. 작업 데이터의 전체 보기
  • 추적 ID에 의해: 클라이언트 소프트웨어에서 제한적인 데이터를 제공하기 위해 사용됩니다. 정보를 최종 사용자에게 제공합니다.

이 섹션에서는 추적 ID로 작업 정보를 조회하는 방법을 설명합니다. 원하는 경우 작업 ID로 작업을 검색하려면 할 일 찾기로 이동합니다.

추적 ID로 정보를 조회하려면 다음 중 하나를 사용하세요.

조회 요구사항

  • 추적 ID로 제공되는 배송 정보는 공개 상태 규칙을 준수합니다. 명시된 추적된 위치의 공개 상태 관리

  • Fleet Engine을 사용하여 추적 ID로 배송 정보를 조회합니다. 드라이버 SDK는 추적 ID에 의한 정보 조회를 지원하지 않습니다. Fleet로 작업 엔진에서는 서버 또는 브라우저 환경을 사용합니다.

  • 보안 위험을 제한하려면 가능한 한 가장 좁은 토큰을 사용하세요. 예를 들어 전송 소비자 토큰을 사용하면 Fleet Engine Deliveries API 호출이 배송업체나 의미합니다. 응답의 다른 모든 정보는 수정됩니다. 토큰에 대한 자세한 내용은 다음을 참조하세요. 승인을 위한 JSON 웹 토큰 (JWT) 만들기

gRPC를 사용하여 Java로 조회

다음 예는 자바 gRPC 라이브러리 추적 ID로 배송 작업에 관한 정보를 조회할 수 있습니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

HTTP를 사용한 조회

브라우저에서 배송 작업을 조회하려면 GetTaskTrackingInfo:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`

&lt;tracking_id&gt;는 작업과 연결된 추적 ID입니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰.

조회가 성공하면 응답 본문에 taskTrackingInfo 개체.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/taskTrackingInfo/${TRACKING_ID}"

태스크 표시

서버 또는 브라우저 환경에서 작업을 나열할 수 있습니다. Driver SDK는 태스크 나열을 지원합니다

태스크를 나열하면 태스크에 대한 광범위한 액세스 권한이 필요합니다. 태스크 나열은 신뢰할 수 있는 사용자 전송 Fleet 리더 또는 전송 수퍼유저 인증 사용 작업 목록을 요청할 때의 토큰입니다.

나열된 작업의 다음 필드가 수정되었습니다.

  • VehicleStop.planned_location
  • VehicleStop.state
  • VehicleStop.TaskInfo.taskId

나열된 작업은 대부분의 작업 속성으로 필터링할 수 있습니다. 필터 쿼리 구문의 경우 AIP-160을 참고하세요. 다음 목록은 유효한 작업을 보여줍니다. 필터링에 사용할 수 있는 속성:

  • 속성
  • delivery_vehicle_id
  • planned_location
  • task_duration
  • task_outcome
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • 유형

Google API 개선 제안에 따라 다음 필드 형식을 사용하세요.

입력란 유형 형식
타임스탬프 RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
기간 뒤에 s가 오는 초 수 task_duration = 120s
열거형 문자열 state = CLOSED AND type = PICKUP
위치 point.latitudepoint.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

필터 쿼리의 전체 목록은 AIP-160을 참고하세요. 연산자가 있습니다.

필터 쿼리를 지정하지 않으면 모든 태스크가 나열됩니다.

할 일 목록은 페이지로 나뉩니다. 목록 작업 요청에서 페이지 크기를 지정할 수 있습니다. 페이지 크기가 지정된 경우 반환되는 작업의 수는 이보다 크지 않습니다. 더 큰 크기일 수 있습니다. 페이지 크기가 없는 경우 적절한 기본값 사용됩니다. 요청된 페이지 크기가 내부 최댓값을 초과하면 내부 최댓값이 사용됩니다.

작업 목록에는 결과의 다음 페이지를 읽기 위한 토큰이 포함될 수 있습니다. 이전 요청과 동일한 요청에 페이지 토큰을 사용하세요. 다음 작업 페이지를 검색하도록 요청할 수 있습니다. 반환된 페이지 토큰이 이 비어 있으면 더 이상 검색할 수 있는 작업이 없습니다.

gRPC

다음 예는 자바 gRPC 라이브러리 을 사용하여 deliveryVehicleId 및 태스크 속성의 태스크를 나열합니다. 성공적인 응답은 여전히 비어 있을 수 있습니다. 빈 응답은 Tasks가 없음을 나타냄 제공된 deliveryVehicleId와 연결됩니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
    .build();

try {
  ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

브라우저에서 태스크를 나열하려면 ListTasks에 대한 HTTP REST 호출을 수행합니다.

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks`

나열된 할 일에 필터를 적용하려면 '필터'를 포함하세요. URL로 이스케이프 처리된 필터 쿼리를 값으로 포함하는 URL 매개변수

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

조회에 성공하면 응답 본문에 다음과 같은 구조의 데이터가 포함됩니다.

    // JSON representation
    {
      "tasks": [
        {
          object (Task)
        }
      ],
      "nextPageToken": string,
      "totalSize": integer
    }

성공 응답은 비어 있을 수 있습니다. 빈 응답은 개의 작업이 지정된 필터 기준을 충족하는 것으로 확인되었습니다.

curl 명령어 예시:

    # Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

배송 차량 나열

서버 또는 브라우저 환경에서 전송 차량을 나열할 수 있습니다. 드라이버 SDK는 배송 차량 등록정보를 지원하지 않습니다.

배송 운송업체를 등록하면 배송 운송 수단에 대한 광범위한 액세스가 필요하며 신뢰할 수 있는 사용자만 사용할 수 있습니다. Delivery Fleet Reader 또는 Delivery Super 사용 목록 전송 수단 요청 시 사용자 인증 토큰

등록된 배송 차량의 영향으로 인해 다음 필드가 수정되었습니다. 응답 크기:

  • CurrentRouteSegment
  • RemainingVehicleJourneySegments

attributes 속성을 기준으로 목록 게재 차량을 필터링할 수 있습니다. 대상 예를 들어 my_key 키와 my_value 값으로 속성을 쿼리하려면 다음을 사용합니다. attributes.my_key = my_value입니다. 여러 속성을 쿼리하려면 쿼리를 조인하세요. attributes.key1 = value1 AND attributes.key2 = value2에서와 같이 논리적 ANDOR 연산자를 사용합니다. 전체 내용은 AIP-160을 참고하세요. 필터 쿼리 구문의 설명입니다.

viewport 요청을 사용하여 등록된 배송 차량을 위치별로 필터링할 수 있습니다. 매개변수 값으로 사용됩니다. viewport 요청 매개변수는 두 개의 경계를 사용하여 표시 영역을 정의합니다. 좌표: high (북동) 및 low (남서) 위도 및 경도 좌표 쌍입니다. 높은 위도가 포함된 경우 요청이 거부됩니다. 지리적으로 낮은 곳을 볼 수 있습니다.

게재 차량 목록은 기본적으로 적절한 페이지 크기를 사용하여 페이지로 나뉩니다. 만약 페이지 크기를 지정하면 요청은 차량 수만 반환하며 지정할 수 있습니다. 요청된 페이지 크기가 내부 내부 최댓값이 사용됩니다. 기본 및 최대 페이지 둘 다 100대입니다.

배송 차량 목록에는 다음 페이지를 읽기 위한 토큰이 포함될 수 있습니다. 있습니다. 페이지 토큰은 게재 페이지가 더 많은 경우에만 응답에 있음 차량을 가져올 수 있습니다. 다음 작업 페이지를 검색하려면 이전 토큰과 동일한 요청으로 요청을 수행합니다.

gRPC

다음 예는 자바 gRPC 라이브러리 를 사용하여 특정 속성이 있는 특정 지역의 배송 차량을 나열할 수 있습니다. 가 성공 응답은 여전히 비워 둘 수 있습니다. 이 경우 지정된 속성이 있는 차량이 이미 지정된 표시 영역에 있습니다.

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
  ListDeliveryVehiclesRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setViewport(
            Viewport.newBuilder()
              .setHigh(LatLng.newBuilder()
                  .setLatitude(37.45)
                  .setLongitude(-122.06)
                  .build())
              .setLow(LatLng.newBuilder()
                  .setLatitude(37.41)
                  .setLongitude(-122.11)
                  .build())
      .setFilter("attributes.my_key = my_value")
      .build();

try {
  ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
      deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
          break;

      case PERMISSION_DENIED:
          break;
  }
  return;
}

REST

브라우저에서 태스크를 나열하려면 ListDeliveryVehicles에 대한 HTTP REST 호출을 수행합니다.

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles`

나열된 할 일에 필터를 적용하려면 '필터'를 포함하세요. URL 매개변수에 URL 이스케이프 필터 쿼리를 값으로 사용합니다.

요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token>, 여기서 <token>Fleet Engine 토큰 팩토리에서 발급한 토큰입니다.

조회에 성공하면 응답 본문에 다음과 같은 구조의 데이터가 포함됩니다.

// JSON representation
{
  "deliveryVehicles": [
    {
      object (DeliveryVehicle)
    }
  ],
  "nextPageToken": string,
  "totalSize": integer
}

성공 응답은 비어 있을 수 있습니다. 이 경우 지정된 필터 쿼리 및 표시 영역을 충족하는 배송 차량이 발견되었습니다.

curl 명령어 예시:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"

배송 추적

두 가지 옵션을 사용하여 Fleet Engine Deliveries API를 사용하여 배송 추적을 사용 설정하세요.

  • 권장: JavaScript 배송 추적 라이브러리. 라이브러리를 사용하면 차량 및 위치의 위치를 시각화할 수 있습니다. Fleet Engine에서 추적된 관심분야입니다. JavaScript 지도 구성요소가 포함되어 있습니다. 표준 google.maps.Map 객체의 삽입형 대체 객체입니다. Fleet Engine과 연결할 수 있습니다 이 구성요소를 사용하면 맞춤설정이 가능한 애니메이션 배송 추적 환경 제공 웹 또는 모바일 애플리케이션에서 가져올 수 있습니다

  • Fleet Engine Deliveries API를 기반으로 자체 배송 추적을 구현합니다.

핵심은 추적 ID로 배송 작업을 조회하는 것입니다.

배달 소비자 역할을 사용하는 경우 Fleet Engine Deliveries API가 모두 호출됩니다. 배송업체 또는 수신자와 관련된 정보만 반환하는 경우 기타 모든 항목 수정됩니다. 사용자가 책임져야 합니다. 최종 사용자 인증에 사용합니다 또한 위치 정보는 자동 완성을 선택합니다 비가용성 작업 도중에는 위치 정보는 최종 사용자와 공유되지 않습니다.

로깅

Fleet Engine이 RPC 로그를 Cloud Logging으로 전송하도록 설정할 수 있습니다. 자세히 알아보기 자세한 내용은 로깅.

승인 역할 및 토큰

차량 및 작업 수명 주기 관리에 설명된 대로 개별 사용 사례의 승인 메모를 확인하여 Fleet Engine을 호출하려면 서비스 계정 사용자 인증 정보를 사용하여 서명되어야 합니다. 사용된 서비스 계정은 하나 이상의 역할이 있을 수 있으며, 각 역할은 권한을 부여하며 도움이 될 수 있습니다

자세한 내용은 인증 및 승인.

일반적인 문제 해결

문제가 발생하면 다음 섹션에서 도움을 받으세요.

복원력

Fleet Engine은 정보 소스로 간주되지 않습니다. 사용자가 책임져야 합니다. 시스템 상태를 복원하기 위한 간단한 리콜 기능을 제공합니다. 사용할 수 있습니다

Fleet Engine의 손실 상태

Fleet Engine으로 작업할 때는 시스템이 복구되도록 클라이언트를 구현합니다. 자동으로 복구됩니다 예를 들어 Fleet Engine에서 차량을 요청할 때 차량이 차량을 식별할 수 없음을 나타내는 오류로 응답할 수 있습니다. 존재해야 합니다. 그런 다음 클라이언트는 새 상태에서 차량을 다시 만들어야 합니다. 하지만 이 문제는 거의 발생하지 않으므로 시스템이 문제를 처리할 수 있을 만큼 충분히 복원력이 있는지 있습니다.

드물지만 Fleet Engine에 치명적인 오류가 발생하는 경우 차량과 작업을 대부분 또는 전부 다시 만들어야 할 수도 있습니다. 생성 속도가 너무 높아지면 할당량 문제로 인해 일부 요청이 다시 실패할 수 있습니다. 할당량 검사는 서비스 거부 (DOS) 공격을 방지하기 위해 실행됩니다. 이 경우 백오프 전략을 사용하여 재생성 속도를 낮춥니다. 있습니다.

드라이버 앱의 상태 손실

드라이버 앱이 비정상 종료되면 앱에서 현재 상태를 다시 생성해야 합니다. 드라이버 SDK 내에서 실행됩니다. 앱이 작업을 다시 생성하려고 시도하여 현재 상태를 복원하는 데 사용할 수 있습니다 앱은 또한 다시 만들고 명시적으로 설정하세요.

FAQ

운전자가 고장 난 작업을 위해 멈춘 경우 어떻게 해야 하나요?

이 경우 먼저 작업 순서를 업데이트한 다음 평소대로 진행하세요. 정류장 도착, 작업 완료 및 기타 세부 사항 표시. 그렇지 않으면 시스템이 일관되지 않거나 도착예정시간이 정확하지 않을 수 있습니다. 예기치 않은 오류가 보고될 수 있습니다.