配送追跡のための Fleet Engine のスタートガイド

配送の最初と最後のワンマイルにおけるフリートの活動をモデル化 Fleet Engine Deliveries API です。この API を使用するには、Android 用 Driver SDK を使用します。 HTTP REST や gRPC 呼び出しを使用して直接呼び出すこともできます。

初期設定

Google Cloud コンソールで Fleet Engine Deliveries API を構成します。

設定を確認する

サービス アカウントを作成したら、設定が完了していることを確認する 配達車両を作成できます設定をすぐに確認 認証に関する一般的な問題については、 説明します。設定を確認するには、次の 2 つの方法があります。

クライアント ライブラリ

未加工の gRPC や REST よりも優れたデベロッパー エクスペリエンスのために、 クライアント ライブラリをいくつかの一般的なプログラミング言語で記述しています。対象 サーバー アプリケーション用のクライアント ライブラリを入手する方法については、 クライアント ライブラリ

このドキュメントの Java の例は、gRPC に精通していることを前提としています。

データ構造

Fleet Engine Deliveries API は 2 つのデータ構造を使用して受け取りと配達をモデル化 の配送数:

  • 荷物の輸送に使用された配送車両。
  • 荷物の集荷と配達のタスク。

また、タスクを使用してドライバーの休憩や所定の停留所のモデルを作成します。 1 日中。

配達車両

配達車両は、倉庫から配達場所に荷物を輸送する。 出発点までだと考えました。場合によっては 受け取り場所から配達先に直接荷物を輸送する。

Driver SDK を使用して Fleet Engine に DeliveryVehicle オブジェクトを作成する 最新の位置情報を送信して、配送状況を追跡したり、追跡したりできます。

タスク

車両が日中に行うアクションについては、 アクションのタイプ:

  • 受け取りと配送の場合は、配送タスクを割り当てます。
  • 休憩時間など、ドライバーが都合がつかない時間帯には、 利用不能のタスクを割り当てます。
  • 配達先や顧客の所在地での運転以外のタスクについては、 スケジュール設定された停止タスク

タスクごとに固有のタスク ID を割り当てる必要がありますが、タスクは同じ ID で共有できます トラッキング ID です。Fleet Engine が到着予定時刻を計算するとき すべてのタスクが使用され、実行されている順序が 予測を行いますタスク ID の詳細については、以下をご覧ください。 タスク ID のガイドライン

Fleet Engine でタスクを作成するには、Driver SDK タスク マネージャーを使用します。

配送タスク

荷物の集荷と配達の両方を行う配送タスクを作成する 以下の情報を含めてください。

  • 受け取りまたは宅配を行う場所。
  • 荷物追跡番号または ID。
  • セキュリティ侵害の発生から検知までに要した日数は、タスク完了の 駐車場に行くか、ハンドオフの場所まで歩いて行きます。
  • 一意のタスク ID。タスク ID のガイドラインをご覧ください。

詳細については次のトピックをご覧ください。

Android

iOS

利用できないタスク

利用できないタスクは、車両が利用できない時間帯を含む ピックアップまたは配達(車両またはドライバーに給油するための休憩など) 休憩できます。

次の情報を使用して、利用不可のタスクを作成します。

  • 休憩時間。
  • (省略可)休憩の位置。機密情報を そうすることで、より正確な到着予定時刻を 1 日中。
で確認できます。

詳細については次のトピックをご覧ください。

Android

iOS

スケジュール設定された停止タスク

スケジュール設定された停止タスクを作成して、配達車両に必要な停車地をモデル化 あります。たとえば、毎日スケジュールされた停止タスクを作成して、 他の配送とは無関係に、特定の場所での集荷所の場所 同じ場所での乗車は できませんスケジュールに基づいて停止するタスクも 集荷やモデルのフィーダーと車両の乗り換えに対応 サービスセンターやサービスポイントに 停車するようなものです

詳細については次のトピックをご覧ください。

Android

iOS

タスク ID のガイドライン

タスク ID を作成する際は、内容と形式に関する次のガイドラインに従ってください。

  • 一意のタスク ID を作成する
  • 個人を特定できる情報(PII)や 暗号化されます。
  • 有効な Unicode 文字列を使用してください。
  • 64 文字以下で入力してください。
  • ASCII 文字「/」、「":"」、「 「\"」、「?」、「#」
  • Unicode 正規化フォーム 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 個人情報(PII)に関する要件に違反しています。
4R0oXLToF"112 Summer Dr. East Hartford、CT06118"577b484da26f8a 個人情報(PII)と文字の要件(空白文字、カンマ、引用符)に違反する。64 文字を超える。

その他のリソース

各データに含まれる特定のフィールドを確認するには 構造については、API リファレンス ドキュメントで DeliveryVehicle をご覧ください。 (gRPCRESTTaskgRPCREST)があります。

自動車の寿命

DeliveryVehicle オブジェクトは、ファースト ワンマイルまたはラスト ワンマイルの配達車両を表します。 以下を使用して DeliveryVehicle オブジェクトを作成します。

  • サービス アカウントを含む Google Cloud プロジェクトのプロジェクト ID Fleet Engine API の呼び出しに使用しないでください。
  • 顧客所有の車両 ID。

車両ごとに一意の車両 ID を使用してください。車両 ID を再利用しないでください (元の車両にアクティブなタスクがない場合を除く)

Fleet Engine は、削除されていない DeliveryVehicle オブジェクトを自動的に削除します。 7 日後に UpdateDeliveryVehicle を使用して更新されました。推奨される Fleet Engine で車両を利用できるようにするには、位置情報を更新することが 定期的に更新することもできます。DeliveryVehicle 内の他のほとんどのフィールドの更新 新しいフィールド値が異なる場合は、そのエンティティの有効期間も延長されます。 必要があります

車両が存在するかどうかを確認するには:

  1. UpdateDeliveryVehicle に発信します。
  2. NOT_FOUND エラーが発生した場合は、CreateDeliveryVehicle を呼び出します。 車を再現します 通話から車両が返された場合は、引き続き更新が可能です。
で確認できます。

車種

VehicleType エンティティには、オプション フィールド VehicleType が含まれます。このフィールドには、 Category 列挙型。AUTOTWO_WHEELERBICYCLE、または PEDESTRIAN。このフィールドを設定しない場合、デフォルトの AUTO が使用されます。

車両のすべての経路選択では、対応する RouteTravelMode を使用 指定する必要があります

車両属性

DeliveryVehicle エンティティには、次の繰り返しフィールドが含まれています。 DeliveryVehicleAttributeListDeliveryVehicles API には filter が含まれています。 返される DeliveryVehicle エンティティを、名前を持つエンティティに制限できます。 表します。DeliveryVehicleAttribute は Fleet Engine に影響しません ルーティング動作を変更できます。

個人を特定できる情報(PII)や機密情報は含めないでください このフィールドがユーザーに表示される可能性があるため、属性には使用しないでください。

タスクのライフサイクル

Fleet Engine では、次のコマンドを使用して、タスクの作成、更新、クエリを行うことができます。 Deliveries API gRPC または REST インターフェース を使用できます

Task オブジェクトには、進行状況を追跡する状態フィールドがあります。 あります。値は OPEN から CLOSED に進みます。新しいタスクが作成されます これは、次のいずれかを意味します。

  • タスクはまだ配達車両に割り当てられていません。
  • 配達車両が、タスクに割り当てられている車両停留所をまだ通過していない。

タスクのガイドライン

タスクは、OPEN 状態の車両にのみ割り当てることができます。

車両の停車地のリストからタスクを削除すると、キャンセルできます。これにより、タスクのスケジュールが設定されます。 自動的に CLOSED に変更できます。

タスクの車両がタスクの車両停止を完了した場合:

  1. タスクの結果フィールドを SUCCEEDED または FAILED に更新します。

  2. イベントのタイムスタンプを指定します。

    JavaScript Shipment Tracking ライブラリはタスクの結果を示し、 タスクのステータスは自動的に CLOSED に設定されます。詳細については、次をご覧ください: JavaScript 配送トラッキング ライブラリを使用して配送状況を追跡する

車両の場合と同様に、Fleet Engine は 7 日以内に完了する必要があります。また、既存の ID でタスクを作成しようとすると、 エラーが返されます。

注: Fleet Engine では、タスクの明示的な削除はサポートされていません。サービス タスクは、更新が行われない状態で 7 日後に自動的に削除されます。 7 日間よりも長くタスクデータを保持する場合は 自分で実装する必要があります

タスクの属性

Task エンティティには、次の繰り返しフィールドが含まれています。 TaskAttribute。文字列、数値の 3 つの型のいずれかの値を取ることができます。 bool 型を指定します。ListTasks API には、返される範囲を制限できる filter フィールドが含まれています。 Task エンティティを、指定された属性を持つエンティティに変換します。タスク属性は Fleet Engine ルーティング動作に影響します。

個人を特定できる情報(PII)やその他の機密情報は含めないでください。 情報を属性に含めます。これらの属性はユーザーに表示される可能性があるためです。

車両とタスクのライフサイクルの管理

注意: 内部システムは、データが処理されているデータの信頼できるソース Fleet Engine Deliveries API がお客様に代わって強化します。

システムで車両とタスクのライフサイクルを管理するには、Fleet Engine Deliveries API を使用します を使用して車両とそれに関連するタスクを作成、更新、追跡できます。

同時に、ドライバ アプリケーションは Fleet Engine に直接通信します。 デバイスの位置情報とルート情報を更新します。このモデルにより Fleet Engine は 効率的に管理できます。その場所が直接 トラッキング ライブラリがあります。このライブラリを使用して、利用者のステータスに関する最新情報を 確認できます

たとえば、次のシナリオについて考えてみましょう。

  • ドライバーが配達所に近づいた。ドライバーアプリが位置情報を Fleet Engine
  • Fleet Engine はデバイスの位置情報を トラッキング ライブラリです。これは、コンシューマ アプリケーションがコンシューマにアラートを送信する際に使用します。 荷物の近くに置いてください。
  • ドライバーが配送を完了した後、[Shipment delivered](配送配送済み)をクリックします。 ] ボタンを押します。
  • [Shipment delivered](配送配送済み)アクションが情報をバックエンド システムに送信し、 必要なビジネスの検証と検証の手順が実行されます。
  • システムはタスクが SUCCEEDED と確認され、 Deliveries API。

次の図は、これらのプロセスを一般的なレベルで示しています。また、 システム、クライアント、サービス間の標準的な関係を Fleet Engine です

Deliveries API の使用

クライアント トークンを管理する

ドライバー アプリケーションから送信される位置情報の更新データ。 認証トークンが必要です。おすすめの方法は次のとおりです クライアントから Fleet Engine への更新を処理します。

  1. Fleet Engine Delivery の信頼されていないドライバ ユーザーを使用してトークンを生成する サービスアカウントロールを付与します

  2. 範囲が制限されたトークンをドライバ アプリケーションに提供する。このスコープ Fleet Engine でのデバイスの位置情報の更新のみを許可します。

このアプローチにより、モバイル デバイスから発信された通話は コンプライアンスの原則に準拠し、 最小権限の原則に従います。

他のサービス アカウントのロール

代わりに、ドライバ アプリケーションがダイレクト レスポンスを Fleet Engine による更新は、信頼されていないドライバーのロールに制限されているものには適用されません。 特定のタスクの更新を行う場合などには、信頼できるドライバのロールを使用できます。対象 「信頼されたドライバ」ロールを使用するモデルの詳細については、以下をご覧ください。 信頼できるドライバモデル

信頼できないドライバロールの使用について詳しくは、以下をご覧ください。 Cloud プロジェクトの設定

勤務日のモデルを作成する

次の表は、ファースト ワンマイルまたはラスト ワンマイルのドライバーの勤務日を示しています。 配送/物流会社の例ですあなたの会社は 詳細は異なりますが、勤務日をどのようにモデル化すればよいかがわかります。

時間アクティビティモデリング
1 日の始まりから 24 時間以内 配車担当者は、荷物を配達する車両または経路に割り当てます。 荷物の配達、集荷、休憩、配達のタスクを作成できます。 Fleet Engine で他の VM インスタンスに 事前に移行する必要がありますたとえば、 shipment pickup task shipment delivery task利用できなくなる予定 所定の停留所

配達パッケージのセットが完了したら、車両にタスクを割り当てます 配信順序が決定されます
1 日の始まり ドライバーはドライバー アプリにログインして、車両センターで一日をスタートします。 Delivery Driver API を初期化します。 必要に応じて Fleet Engine で配達車両を作成します。
ドライバーが配達車両に荷物を積み込み、荷物をスキャンします。 配送タスクを事前に作成していない場合は 配送タスクを作成する スキャン時に発生します
ドライバーがタスクの実行順序を確認します。 事前に作成していない場合は 配送集荷タスク 利用できなくなる予定 所定の停留所
ドライバーはデポを退出し、次のタスク数にコミット 完了していません。 すべてのタスクを割り当てるか、タスクのサブセットを割り当てる 車両に送ります
ドライバーが荷物を配達する。 配送用停車地に到着したら、関連するアクションを実行する 停車地に到着した車両まで通知する。 配送が完了したら、 提供タスク 店舗の配送ステータスとその他のメタ情報。 停車地と停留所の前ですべてのタスクを完了したあと、 次の停車地までの運転を開始して、目的地に関連するアクションを や、次の停車地に向かっている車両などが表示されます。
ドライバーがフィーダー車両に合流して、追加の荷物を配送車両に引き継ぐ。 配車車と配達車両間の乗り換えの待ち合わせ場所 所定の停留所としてモデル化する必要がある。

配送の転送とスキャンが完了したら、配送タスクを作成します。 まだ作成されていない場合です。次に、タスクの完了を更新します。 タスクを車両に割り当てて並べ替える タスクの順序の更新などです。
ドライバーが集荷リクエストの通知を受け取ります。 集荷リクエストを承認すると 集荷タスクを作成します。 次に、タスクの実行を更新します。 タスクを車両に割り当てて並べ替える タスクの順序の更新などです。
正午 ドライバーは昼休み。 ロケーションが利用不可タスクに関連付けられている場合は、次のように扱います。 できます。車両に関連する操作を行う 停車地に到着したとき 車両が停車を完了 や、次の停車地までのルート

それ以外の場合は、休憩が終了するまでこれ以上のアクションは必要ありません。 次のタスクと残りのタスクを確認してタスクを削除する タスクの順序を更新することもできます。
ドライバーが荷物を引き取る。 これは配送停止と同様にモデル化されます。関連するアクションの実行 停車地に到着した車両まで タスクを閉じます、必要に応じて 配送ステータスとその他のメタ情報の保存。 停車地ですべてのタスクを完了した後、運転開始前 次の停車地まで、車両が停車を完了に関連するアクションを実行する や、次の停車地に向かっている車両などが表示されます。 注: 請求が正しく行われるよう、すべての受け取りに、対応する 提供します。集荷を配送予定日の別の場所に配送する場合 その配達タスクを日常的に ルート上にある他の配送タスクも 確認できますドライバーが乗車する場合 デポに戻るには、デポで配達タスクを作成することをおすすめします。 あります。
ドライバーが所定のスケジュールを設定して、ドロップ ボックスから荷物を受け取る。 他の乗車場所と同じようにモデル化されます。関連するアクションの実行 停車地に到着した車両まで タスクを閉じます。修了後 次の停車地までの運転を開始する場合 車両が停車を完了に関連するアクションを実行する や、次の停車地に向かっている車両などが表示されます。
別の場所に配送されるという通知がドライバーに届きます。 元の配送タスクのステータスを「COMPLETED」に設定し、新しい 新しい配送先に配送タスクを作成します。詳しくは 配送先を変更するを参照してください。
ドライバーが荷物を配達しようとしましたが、できませんでした。 これは配送停止の成功と同様にモデル化され、 完了とみなされます。以下に関連する操作を行う 停車地に到着した車両。変更後 配送できなかった、 タスクを閉じます。必要に応じて、 店舗の配送ステータスとその他のメタ情報。 停車地ですべてのタスクを完了した後、運転開始前 次の停車地まで、車両が停車を完了に関連するアクションを実行する や、次の停車地に向かっている車両などが表示されます。
荷物を留め置きする(配送しない)ようにドライバーに通知されました。 通知を受信して確認したら、 タスクのステータスを COMPLETED に設定します。
ドライバーは、コミットされた配達注文を変更して、次に特定の配送を配達するよう通知されました。 タスクの順序を更新する
ドライバーが注文品から配送することを選択しました。 タスクの順序を更新してから、 通常どおり進めます
ドライバーが 1 か所に複数の荷物を配達する。 これは、単一の配送中止と同様にモデル化されます。 停車地に到着したら、その停車地に関連するアクションを 停車地に到着する車両。 配送ごとに、各タスクを閉じます および必要に応じて店舗の配送ステータスとその他のメタ情報を指定します。 停車地ですべてのタスクを完了した後、運転開始前 次の停車地まで、車両が停車を完了に関連するアクションを実行する や、次の停車地に向かっている車両などが表示されます。
1 日の終わり ドライバーが車両庫に戻る。 配送中にドライバーが荷物を回収してデポに戻った場合 各パッケージを配信タスクとして作成してクローズし、 請求が正しく行われるようにしますそのためには、他のプラットフォームと同様に 配送中止です 配送拠点を配送の停車地として使用していない場合でも、 所定の停留所としてデポをモデル化します。停車地をモデル化することで、ドライバーは停車地の状況を 基地までのルートを計算し、推定所要時間を可視化 表示されます。

位置情報の更新の仕組み

Fleet Engine で最高のパフォーマンスを得るには、車両の流れを提供します 位置情報の更新これらの更新を提供するには、次のいずれかの方法を使用します。

  1. Driver SDK を使用する - AndroidiOS -- 最もシンプルなオプションです。
  2. カスタムコードを使用します。 中継に使用されるか、Android または iOS 以外のデバイスを iOS。

車両の位置情報の更新を提供する方法にかかわらず、バックエンドは Fleet Engine は、配達車両の運航状況が 停車地へのルート(車両基地を含む)と、 ユーザーが停車地に到着したとき。Fleet Engine はこれらのイベントを検出しない 自動的に適用されます。

車両の停車地と配達場所

車両停止とは、配達車両が出荷タスクを完了する場所です。 できます。ローディング ホルダーなどのアクセス ポイント、または スナップされた場所。

配送先とは、荷物が配送される場所のことです。 選択します配達先までの移動には徒歩が必要になる場合があります 通知を受け取れます。

たとえばドライバーがショッピングモール内の店舗に 荷物を配達する場合 配達車両が、ショッピング モールの近くの駐車場に停車します。 店舗に最も近いエントランス。これが車両の停留所です。ドライバー そして停車地からショッピングモール内の場所まで 表示されます。配送先です。

配送状況を追跡できるように、 配送タスクは車両の停車地に割り当てられます。また、 配送タスクのための残りの車両停車地がユーザーに報告され、 配送の進行状況を確認できます。

たとえばドライバーが 1 つのオフィスビルに 多数の荷物を配達する場合 すべての配達タスクを 1 つの車両停車地に割り当てることを検討してください。条件 各配送タスクはそれぞれの停車地に割り当てられます ユーザーの役に立ちません 制限時間内に停車するまでの間に進んだ場合に利用可能 あります。短時間に何度も停車を完了しても、 ユーザーが配信の進捗状況を追跡するのに十分な時間を要することになるからです。

モバイル 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));
     }
   });
<ph type="x-smartling-placeholder">

ユースケース

このセクションでは、Deliveries API を使用して一般的なユースケースをモデル化する方法について説明します。

エンティティの固有識別子

REST 呼び出しで使用される一意の識別子の形式と値は次のとおりです。 Fleet Engine には不透明です。ID の自動インクリメントは使用せず、 識別子に個人情報(PII)が含まれていない。 電話番号などの個人情報を 取得できます

車両を作成する

車両を作成するには、 Driver SDK を使用することも、gRPC や REST を使用してサーバー環境から読み込むこともできます。

gRPC

新しい車両を作成するには、Fleet Engine に対して CreateDeliveryVehicle 呼び出しを行います。 CreateDeliveryVehicleRequest オブジェクトを使用して、 提供しますName フィールドに指定された値はすべて ユーザー指定の ID に関する API ガイダンスに従って無視されます。 DeliveryVehicleId フィールドを使用して車両の ID を設定する必要があります。

DeliveryVehicle を作成するときに、必要に応じて次のフィールドを指定できます。

  • 属性
  • LastLocation
  • タイプ

他のフィールドは設定しないでください。そのようにした場合、Fleet Engine はエラーを返します。 これらのフィールドは読み取り専用であるか、 UpdateDeliveryVehicle

オプション フィールドを設定せずに車両を作成するには、 CreateDeliveryVehicleRequestDeliveryVehicle フィールドの設定が解除されました。

次の例は、BigQuery の Java 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
  • type

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 の本文を残します。 リクエストが空です。次に、新しく作成された車両が車両 ID を POST URL の 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}"

配送集荷タスクを作成する

集荷タスクは、Google Cloud コンソールまたは Driver SDK サーバー環境から gRPC や REST を使用して

gRPC

次の例は、BigQuery の Java 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(Universally Unique Identifier)などがあります

リクエスト ヘッダーには、次の値を含む Authorization フィールドが含まれている必要があります。 Bearer <token>: ここで、<token>Fleet Engine トークン ファクトリによって発行されたトークンです。

リクエストの本文には Task エンティティを含める必要があります。

  • 必須フィールド:

    項目
    type Type.PICKUP
    state State.OPEN
    trackingId 配送の追跡に使用する番号または ID。
    plannedLocation タスクを実施する場所。この場合は、 配送の集荷場所。
    taskDuration 荷物の集荷にかかる予想時間(秒) 受け取り場所にします

  • 省略可能項目:

    項目
    targetTimeWindow タスクを完了する時間枠。ただし、 ルーティング動作に影響します
    属性 カスタムタスク属性のリスト。各属性には一意のキーが必要です。

エンティティのその他のフィールドはすべて、作成の際に無視されます。フリート エンジンのスロー リクエストに 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

配送タスクを作成する

配送タスクを作成するには、 Driver SDK サーバー環境から gRPC や REST を使用して

gRPC

次の例は、BigQuery の Java 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(Universally Unique Identifier)などがあります

リクエスト ヘッダーには、次の値を含む Authorization フィールドが含まれている必要があります。 Bearer <token>: ここで、<token>Fleet Engine トークン ファクトリによって発行されたトークンです。

リクエストの本文には Task エンティティを含める必要があります。

  • 必須フィールド:

    項目
    type Type.DELIVERY
    state State.OPEN
    trackingId 配送の追跡に使用する番号または ID。
    plannedLocation タスクを実施する場所。この場合は、 配送先の場所を指定します
    taskDuration 配送予定日(秒) 受け取ります

  • 省略可能項目:

    項目
    targetTimeWindow タスクを完了する時間枠。ただし、 ルーティング動作に影響します
    属性 カスタムタスク属性のリスト。各属性には一意のキーが必要です。

エンティティのその他のフィールドはすべて、作成の際に無視されます。フリート エンジンのスロー 割り当てられた 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

次の例は、BigQuery の Java gRPC ライブラリ 配達と受け取りの 2 つのタスクを作成する location:

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

リクエスト ヘッダーには、フィールド Authorization が含まれ、値は Bearer <token><token>Fleet Engine トークン ファクトリによって発行されたトークン

リクエストの本文には BatchCreateTasksRequest エンティティを含める必要があります。

  • 必須フィールド:

    項目
    リクエスト 配列<CreateTasksRequest>

  • 省略可能フィールド:

    項目
    header `DeliveryRequestHeader`

requests 内の各 CreateTasksRequest 要素は同じ検証に合格する必要があります ルールがCreateTaskリクエストとして認識されます。ただし、parent header フィールドは省略可能です。設定する場合は、 最上位の BatchCreateTasksRequest でそれぞれのフィールドを参照します。詳しくは、 集荷タスクを作成し、 配送タスクを作成する をご覧ください。

詳細については、BatchCreateTasks の API リファレンス ドキュメントをご覧ください。 (gRPCREST)。

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

スケジュール設定された利用停止

使用不能であることを示すタスクを作成できます(例: ドライバ 給油、給油など)や、 Driver SDK サーバー環境から gRPC や REST を使用してスケジュール設定された利用不能なタスクには、次の内容を含めることはできません トラッキング ID必要に応じて場所を指定できます。

gRPC

次の例は、BigQuery の Java 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 Type.UNAVAILABLE
    state State.OPEN
    taskDuration 休憩時間(秒)。

  • 省略可能項目:

    項目
    plannedLocation 特定の場所で撮影する必要がある場合、休憩の場所。

エンティティのその他のフィールドはすべて、作成の際に無視されます。フリート エンジンのスロー 割り当てられた 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

スケジュール設定された停車地

スケジュール設定された停止タスクは、 Driver SDK サーバー環境から gRPC や REST を使用してスケジュール設定された停止タスクには、 あります。

gRPC

次の例は、BigQuery の Java 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(Universally Unique Identifier)などがあります

リクエスト ヘッダーには、次の値を含む Authorization フィールドが含まれている必要があります。 Bearer <token>: ここで、<token>Fleet Engine トークン ファクトリによって発行されたトークンです。

リクエストの本文には Task エンティティを含める必要があります。

  • 必須フィールド:

    項目
    type Type.SCHEDULED_STOP
    state State.OPEN
    plannedLocation 停車地の場所。
    taskDuration 予測される停車地の所要時間(秒単位)。

  • 省略可能フィールド:

    • なし

エンティティのその他のフィールドはすべて、作成の際に無視されます。フリート エンジンのスロー 割り当てられた 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

次の例は、BigQuery の Java 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

次の例は、BigQuery の Java 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

車両にタスクを割り当てる

タスクの順序を更新して、配達車両にタスクを割り当てる 指定します。車両のタスクの順序はリストによって決まります。 車両の停車地の数と、1 つ以上のタスクを割り当てることができる 各停車地に到着します詳しくは、 タスクの順序を更新する

配送を別の車両に変更するには、元のタスクを閉じます 新しい車両に割り当てる前に再作成する必要がありますタスクを更新した場合 すでに割り当てられているタスクの順序を 別の車両に接続すると、エラーが発生します。

タスクの順序を更新

車両に割り当てられた注文タスクは、次のいずれかの方法で更新できます。 Driver SDK 重要な役割を果たします。これを回避するには、両方の方法を使用しないでください。 競合状態を回避し、信頼できる唯一の情報源を維持できます。

車両のタスクの順序を更新すると、次の処理も行われます。

  • 車両に新しいタスクを割り当てます。
  • 以前に車両に割り当てられていたが、割り当てられていないタスクをすべて終了する 表します。

ある車両から別の車両に配送を変更する手順は次のとおりです。 元のタスクを閉じます 新しい車両に割り当てる前に再作成する必要がありますタスクを更新した場合 すでに割り当てられているタスクの順序を 別の車両に接続すると、エラーが発生します。

タスクの順序はいつでも変更できます。

gRPC

次の例は、BigQuery の Java 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; は、フリート内の配送車両の一意の識別子です。 タスクの順序を更新する対象となるプロダクトです。これは Chronicle SOAR が 必要があります。

リクエスト ヘッダーには、次の値を含む 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 は、サービス アカウントまたは Driver SDK サーバー環境から gRPC や REST を使用して競合を避けるため、両方の方法を使用しない 信頼できる唯一の情報源を維持する必要があります。

gRPC

次の例は、BigQuery の Java 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; は、フリート内の配送車両の一意の識別子です。 タスクの順序を更新する対象となるプロダクトです。これは Chronicle SOAR が 必要があります。

リクエスト ヘッダーには、次の値を含む 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 分に 1 回、最大で位置情報の更新を要求する 更新頻度は 5 秒に 1 回です

gRPC

次の例は、BigQuery の Java 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; は配送車両の一意の識別子です。 選択します。これは Chronicle SOAR が 必要があります。

リクエスト ヘッダーには、次の値を含む 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 は Driver SDK サーバー環境から gRPC や REST を使用して競合を避けるため、両方の方法を使用しない 信頼できる唯一の情報源を維持する必要があります。

gRPC

次の例は、BigQuery の Java 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; は、フリート内の配送車両の一意の識別子です。 タスクの順序を更新する対象となるプロダクトです。これは Chronicle SOAR が 必要があります。

リクエスト ヘッダーには、次の値を含む 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 状態に設定される。Google Chat では Fleet Engine に Driver SDK サーバー環境から gRPC や REST を使用して 競合状態を回避し、信頼できる唯一の情報源を維持するために、両方の方法を使用しないでください。

gRPC

次の例は、BigQuery の Java 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; は、フリート内の配送車両の一意の識別子です。 タスクの順序を更新する対象となるプロダクトです。これは Chronicle SOAR が 必要があります。

リクエスト ヘッダーには、次の値を含む 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 タスクは再度開くことはできません。

タスクの終了は、成功または失敗を意味するものではありません。これは、 タスクは進行中とは見なされなくなります。配送状況を追跡するには、 タスクの実際の結果を示すことが重要であり、 示します。

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

サーバー環境からタスクをクローズ済みとしてマークするには、HTTP 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 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

タスクの結果と結果のロケーションを設定する

タスクの終了は、成功または失敗を示すものではなく、 タスクは進行中とは見なされなくなります。配送状況を追跡するには、 タスクの実際の結果を示すことが サービスに対する適切な請求が行われている。 一度設定したタスクの結果は変更できません。ただし、 タスクの結果時刻とタスクの結果の場所が、設定された後のタスクの結果の場所によって生成されます。

「終了」状態のタスクでは、結果を次のいずれかに設定できます。 SUCCEEDED または FAILED です。Fleet Engine は、ステータスが 成功。

タスクの結果をマークすると、Fleet Engine は 最後に認識された車両の位置情報を使用して、タスクの結果の場所を指定します。Google Chat では オーバーライドできます

gRPC

タスクの結果のロケーションは、 できます。ロケーションを設定すると、Fleet Engine はロケーションを設定できません 最後の 車の位置情報。Fleet Engine のタスク結果のロケーションを上書きすることもできます。 後で変更できますFleet Engine がタスクの結果の場所を上書きすることはありません 指定することもできます。タスクにタスク結果のロケーションを設定することはできません タスクの結果セットがありません両方のタスクの結果を設定できます。 1 つのリクエスト内で

次の例は、BigQuery の Java 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 サービス外の参照については、関連付けられた 外部テーブルのキーとしてタスクが設定されます。

詳細については、タスクのライフサイクルをご覧ください。

車両を検索する

車両は、 Driver SDK サーバー環境から gRPC や REST を使用して

gRPC

次の例は、BigQuery の Java 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

次の例は、BigQuery の Java 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 で情報を検索するには、次のいずれかを使用できます。

検索の要件

  • トラッキング ID から提供された配送情報が公開設定のルールに準拠している 記載 追跡中の場所の公開設定を管理します

  • Fleet Engine を使用して、荷物追跡 ID で配送情報を検索します。ドライバー SDK はトラッキング ID による情報検索をサポートしていません。フリートでこれを行う サーバー環境またはブラウザ環境を使用します。

  • 可能な限り範囲の狭いトークンを使用して、セキュリティ リスクを制限します。たとえば、 使用すると、すべての Fleet Engine Deliveries API 呼び出しが そのエンドユーザーに関連する情報のみを表示します。 荷物を受け取れます。レスポンス内のその他の情報はすべて削除されます。 トークンの詳細については、このモジュールの 認可用の JSON Web Token(JWT)を作成する

gRPC を使用した Java によるルックアップ

次の例は、BigQuery の 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 は、 タスクの一覧表示をサポートしています。

タスクを一覧表示するには、タスクへの幅広いアクセス権をリクエストします。タスクの一覧表示は、 できます。デリバリー フリート リーダーまたはデリバリー スーパー ユーザー認証を使用する タスクの一覧表示リクエストを行う際のトークン。

一覧表示されたタスクの次のフィールドが削除されます。

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

リストされたタスクは、ほとんどのタスク プロパティでフィルタできます。フィルタクエリの構文については AIP-160 をご覧ください。次のリストは、有効なタスクを示しています。 次のプロパティをフィルタリングに使用できます。

  • 属性
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_outcome
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • type

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

次の例は、BigQuery の Java gRPC ライブラリ deliveryVehicleId と task 属性のタスクのリストです。成功した レスポンスは空にすることもできます。空のレスポンスは、存在しないタスクが 指定された 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 のように論理 AND 演算子と OR 論理演算子を使用しています。詳細については、AIP-160 をご覧ください。 フィルタクエリ構文の説明です。

viewport リクエストを使用すると、リストされている配達車両をロケーションでフィルタできます。 パラメータを指定します。viewport リクエスト パラメータは 2 つの境界を使用してビューポートを定義する 座標: high(北東)と low(南西)の緯度と経度 あります。リクエストに高い緯度が含まれている場合、リクエストは拒否されます 地理的に低い位置に送られます

デフォルトでは、車両リストは適切なページサイズでページ分けされます。条件 ページサイズを指定すると、車両の数のみが返されます。 最大数です。リクエストされたページサイズが内部サイズ 内部最大値が使用されます。デフォルト ページと最大ページ いずれも 100 台です

配達車両リストには、配達車両の次のページを読み取るためのトークンを含めることができます。 表示されます。ページトークンは、配信ページが増える場合にのみレスポンスに含まれます。 車両を回収することができます。タスクの次のページを取得するには、次のコマンドを使用します。 リクエストを含むページトークンが、それ以外は リクエストできます。

gRPC

次の例は、BigQuery の Java 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"

荷物の追跡

使用する方法は 2 つあります。 Fleet Engine Deliveries API を使用して、配送の追跡を可能にします。

  • 推奨: JavaScript 配送トラッキング ライブラリ。 ライブラリを使用すると、車両の位置と場所を可視化できます Fleet Engine で追跡されている料金です。JavaScript の Map コンポーネントが含まれる 標準の google.maps.Map オブジェクトを簡単に置き換えることができます。 Fleet Engine に接続しますこのコンポーネントを使用すると、 カスタマイズ可能なアニメーションで配送追跡エクスペリエンスを提供 ウェブやモバイルアプリからデプロイできます

  • Fleet Engine Deliveries API を基盤に、独自の配送追跡を実装します。

鍵となるのは、トラッキング ID で配送タスクを検索することです。

デリバリー コンシューマ ロールを使用する場合、Fleet Engine Deliveries API 呼び出しは 配送業者または受取人に関連する情報のみを返す。その他 秘匿化されます。ユーザーの エンドユーザーの認証に使用できます。さらに位置情報は 選択することもできます利用不能なタスクでは 位置情報がエンドユーザーと共有されることはありません。

ロギング

RPC ログを Cloud Logging に送信するように Fleet Engine を設定できます。詳細情報 詳しくは、 Logging

認可ロールとトークン

車両とタスクのライフサイクルを管理するを参照 個別のユースケースの承認に関するメモを 記録することで Fleet Engine の呼び出しには、次を含む JSON ウェブトークンによる認証が必要です。 サービス アカウントの認証情報を使用して署名されていることです。使用するサービス アカウント これらのトークンを発行するには、1 つ以上のロールを 付与できます。

詳細については、次をご覧ください: 認証と認可

一般的な問題のトラブルシューティング

問題が発生した場合は、以下のセクションをご確認ください。

復元性

Fleet Engine は信頼できる情報源とはみなされません。ユーザーの インフラストラクチャに依存することなく、必要に応じてシステムの状態を復元できます。 Fleet Engine

Fleet Engine の消失状態

Fleet Engine を使用する場合は、システムが修復されるようにクライアントを実装する リソース自体に障害が発生した場合に 再試行されますたとえば、Fleet Engine がソフトウェアの更新を エラーが返される場合があります。 あります。その後、クライアントは車両を新しい状態で再作成する必要があります。ただし、 この問題が発生することはめったにありません。システムの復元力が できます。

ごくまれなケースとして Fleet Engine に壊滅的な障害が発生した場合 ほとんどまたはすべての乗り物やタスクを再作成する必要がある場合があります。作成率が 高すぎると、割り当ての問題により一部のリクエストが再び失敗することがあります。これは、 サービス拒否(DOS)攻撃を回避するために、割り当てのチェックを実施しています。 この場合、次のバックオフ戦略を使用して再作成の頻度を遅くします。 再試行します。

ドライバー アプリの紛失状態

ドライバアプリがクラッシュした場合、アプリは現在の状態を再生成する必要がある Driver SDK 内にありますアプリがタスクの再作成を試行して、 現在の状態を復元する必要があります。また、 Driver SDK の停止リストを再作成して明示的に設定します。

よくある質問

ドライバが順不同でタスクを停止した場合はどうなりますか?

この場合は、まずタスクの順序を更新してから、通常どおり処理します。 停車地の到着時刻、タスクの完了、その他の詳細をマークできます。 そうしないと、システムに一貫性がなかったり、到着予定時刻が不正確になったりする可能性があります。 予期しないエラーが報告される可能性があります。