このドキュメントでは、サーバーまたはブラウザからタスク情報を取得する方法について説明します。Fleet Engine では、タスクを検索する 2 つの方法がサポートされています。
タスクの検索: 次の ID でタスクを検索できます。
- タスク ID: タスクデータの完全なビューにアクセスできるフリート オペレーターなどのユーザーが使用します。
- 追跡 ID: クライアント ソフトウェアで使用され、荷物が自宅に届く予定日時など、エンドユーザーに限定的な情報を提供します。
タスク ID とタスク トラッキング ID の違いを理解してください。これらは同じではありません。スケジュール設定されたタスク ガイドの基本的なタスク フィールドをご覧ください。
List tasks: タスクへの幅広いアクセス権。信頼できるユーザーのみを対象としています。
タスクを検索する
このセクションでは、タスク ID またはトラッキング ID でタスクを検索する方法について説明します。次の要件があります。
トラッキング ID による検索は、トラッキング対象オブジェクトの可視性ルールに準拠する必要があります。
できるだけ狭いトークンを使用して、セキュリティ リスクを制限します。たとえば、配信コンシューマ トークンを使用すると、呼び出しで返されるのは、そのエンドユーザーに関連する情報(荷物の送り主や受取人など)のみです。Fleet Engine は、レスポンス内の他のすべての情報を除去します。トークンの詳細については、JSON Web トークンをご覧ください。
タスク ID でタスクを検索する
サーバー環境のタスク ID でタスクを検索するには、gRPC または REST を使用します。次の例は、Java gRPC ライブラリまたは REST リクエストを使用して GetTask を呼び出す方法を示しています。
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
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>
- <id> はタスクの一意の ID です。
- <taskId> は、検索するタスクの ID です。
- リクエスト ヘッダーには、値が Bearer <token> の Authorization フィールドを含める必要があります。ここで、<token> は、サービス アカウントのロールと JSON Web Token で説明されているガイドラインに従ってサーバーが発行します。
- リクエストの本文は空にする必要があります。
- 検索が成功すると、レスポンスの本文にタスク エンティティが含まれます。
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 でタスクを検索する
次の例は、gRPC または GetTaskTrackingInfo
への HTTP REST 呼び出しを使用して、配送追跡 ID でタスクを検索する方法を示しています。
gRPC
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;
}
REST
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>
<tracking_id> は、タスクに関連付けられたトラッキング ID です。
リクエスト ヘッダーには、値が Bearer <token> の Authorization フィールドを含める必要があります。ここで、<token> には正しいサービス アカウントのロールが含まれます。サービス アカウントのロールをご覧ください。
検索が成功すると、レスポンスの本文に 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}"
タスクの一覧表示
タスクのリスト表示は、タスクへの広範なアクセス権をリクエストします。リスティング タスクは、信頼できるユーザーのみを対象としています。リストタスク リクエストを行う場合は、Delivery Fleet リーダーまたは Delivery 管理者の認証トークンを使用します。詳細については、サービス アカウントのロールをご覧ください。
リストをページ分割する
タスクリストはページネーションされます。ページサイズは、リストタスク リクエストで指定できます。ページサイズが指定されている場合、返されるタスクの数は指定されたページサイズを超えません。ページサイズが指定されていない場合は、適切なデフォルトが使用されます。リクエストされたページサイズが内部最大値を超える場合は、内部最大値が使用されます。
タスクリストには、結果の次のページを読み取るためのトークンを含めることができます。次のページを取得するには、ページトークンとともに同じリクエストを再発行します。返されたページトークンが空の場合、取得できるタスクはありません。
タスクを一覧表示する際のフィールド
Fleet Engine は、タスクを一覧表示するときに次のフィールドを除去します。
VehicleStop.planned_location
VehicleStop.state
VehicleStop.TaskInfo.taskId
Google API 改善提案に基づいて、次のフィールド形式を使用します。
フィールド タイプ | 形式 | 例 |
---|---|---|
タイムスタンプ | RFC-3339 | task_outcome_time = 2022-03-01T11:30:00-08:00 |
所要時間 | 秒数(s の後ろに続く) |
task_duration = 120s |
列挙型 | 文字列 | state = CLOSED AND type = PICKUP |
場所 | point.latitude 、point.longitude |
planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0 |
表示されたタスクをフィルタする
表示されたタスクは、ほとんどのタスク プロパティでフィルタできます。フィルタクエリの構文については、AIP-160 をご覧ください。フィルタクエリを指定しないと、すべてのタスクが一覧表示されます。
次の表に、フィルタに使用できる有効なタスク プロパティを示します。
リストのフィルタリング用タスク プロパティ | |
---|---|
|
|
フィルタクエリ演算子の完全なリストについては、AIP-160 をご覧ください。
タスクの例を一覧表示する
次の例は、Java gRPC ライブラリと ListTasks
への HTTP REST 呼び出しの両方を使用して、deliveryVehicleId
とタスク属性のタスクを一覧表示する方法を示しています。
成功した場合のレスポンスは空になることもあります。空のレスポンスは、指定された deliveryVehicleId
にタスクが関連付けられていないことを示します。
gRPC
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
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks
一覧表示されたタスクにフィルタを適用するには、URL エスケープされたフィルタクエリを値として含む「filter」URL パラメータを指定します。
リクエスト ヘッダーには、値が Bearer <token> の Authorization フィールドを含める必要があります。ここで、<token> には正しいサービス アカウントのロールが含まれます。サービス アカウントのロールをご覧ください。
ルックアップが成功すると、次の構造のレスポンスの本文が返されます。
// 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}"