Tìm việc cần làm

Tài liệu này mô tả các cách bạn có thể tìm thông tin tác vụ từ máy chủ hoặc trình duyệt. Fleet Engine hỗ trợ hai cách để tìm nhiệm vụ:

  • Tra cứu nhiệm vụ: Bạn có thể tra cứu nhiệm vụ theo các mã nhận dạng sau:

    • Mã việc cần làm: được những người dùng như nhà điều hành đội xe sử dụng, những người có quyền truy cập vào chế độ xem đầy đủ của dữ liệu việc cần làm.
    • Mã theo dõi: được phần mềm của khách hàng sử dụng để cung cấp thông tin giới hạn cho người dùng cuối, chẳng hạn như thời điểm dự kiến gói hàng sẽ đến nhà họ.

    Hãy nhớ tìm hiểu sự khác biệt giữa mã nhận dạng nhiệm vụ và mã theo dõi nhiệm vụ. Hai trường hợp này không phải là một. Xem phần Trường nhiệm vụ cơ bản trong hướng dẫn về Nhiệm vụ theo lịch.

  • Liệt kê việc cần làm: quyền truy cập rộng vào việc cần làm, chỉ dành cho người dùng đáng tin cậy.

Tra cứu việc cần làm

Phần này mô tả cách tra cứu nhiệm vụ theo mã nhiệm vụ hoặc mã theo dõi. Có các yêu cầu sau:

  • Việc tra cứu theo mã theo dõi phải tuân thủ các quy tắc hiển thị được nêu trong phần Quy tắc hiển thị cho đối tượng được theo dõi.

  • Sử dụng mã thông báo hẹp nhất có thể để hạn chế rủi ro bảo mật. Ví dụ: nếu bạn sử dụng Mã thông báo người tiêu dùng giao hàng, thì mọi lệnh gọi chỉ trả về thông tin liên quan đến người dùng cuối đó, chẳng hạn như người gửi hoặc người nhận lô hàng. Fleet Engine sẽ loại bỏ tất cả thông tin khác trong phản hồi. Để biết thêm thông tin về mã thông báo, hãy xem bài viết Mã thông báo web JSON.

Tra cứu việc cần làm theo mã việc cần làm

Bạn có thể tra cứu một nhiệm vụ theo mã nhiệm vụ từ môi trường máy chủ bằng gRPC hoặc REST. Các ví dụ sau đây cho thấy cách sử dụng thư viện gRPC Java hoặc yêu cầu REST cho 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> là giá trị nhận dạng riêng biệt của nhiệm vụ.
  • <taskId> là mã của việc cần làm cần tra cứu.
  • Tiêu đề của yêu cầu phải chứa trường Authorization có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc được mô tả trong phần Vai trò của tài khoản dịch vụ và Mã thông báo web JSON.
  • Nội dung yêu cầu phải trống.
  • Nếu quá trình tra cứu thành công, nội dung phản hồi sẽ chứa một thực thể nhiệm vụ.

Ví dụ về lệnh 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}"

Tra cứu nhiệm vụ theo mã theo dõi

Các ví dụ sau đây cho thấy cách tra cứu nhiệm vụ theo mã theo dõi lô hàng bằng cách sử dụng gRPC hoặc lệnh gọi HTTP REST đến GetTaskTrackingInfo.

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> là mã theo dõi liên kết với nhiệm vụ.

  • Tiêu đề của yêu cầu phải chứa trường Authorization có giá trị Bearer <token>, trong đó <token> mang vai trò tài khoản dịch vụ chính xác. Xem Vai trò của tài khoản dịch vụ.

  • Nếu quá trình tra cứu thành công, nội dung phản hồi sẽ chứa một thực thể taskTrackingInfo.

Ví dụ về lệnh 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}"

Liệt kê việc cần làm

Việc liệt kê các việc cần làm yêu cầu quyền truy cập rộng vào các việc cần làm. Chỉ người dùng đáng tin cậy mới có thể liệt kê các việc cần làm. Sử dụng mã xác thực của Người đọc đội xe giao hàng hoặc Quản trị viên giao hàng khi đưa ra yêu cầu liệt kê nhiệm vụ. Hãy xem phần Vai trò của tài khoản dịch vụ để biết thêm thông tin.

Phân trang danh sách

Danh sách việc cần làm được phân trang. Bạn có thể chỉ định kích thước trang trong các yêu cầu liệt kê nhiệm vụ. Nếu bạn chỉ định kích thước trang, thì số lượng việc cần làm được trả về sẽ không lớn hơn kích thước trang đã chỉ định. Nếu không có kích thước trang, thì kích thước mặc định hợp lý sẽ được sử dụng. Nếu kích thước trang được yêu cầu vượt quá giá trị tối đa nội bộ, thì giá trị tối đa nội bộ sẽ được sử dụng.

Danh sách việc cần làm có thể bao gồm một mã thông báo để đọc trang kết quả tiếp theo. Để truy xuất trang tiếp theo, hãy gửi lại yêu cầu đó cùng với mã thông báo trang. Khi mã thông báo trang được trả về trống, không còn nhiệm vụ nào để truy xuất.

Các trường khi liệt kê việc cần làm

Fleet Engine sẽ loại bỏ các trường sau đây khi liệt kê nhiệm vụ:

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

Sử dụng các định dạng trường sau đây dựa trên Đề xuất cải tiến API của Google:

Loại trường Định dạng Ví dụ
Dấu thời gian RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
Thời lượng Số giây, theo sau là s task_duration = 120s
Enum Chuỗi state = CLOSED AND type = PICKUP
Thông tin vị trí point.latitude và point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

Lọc việc cần làm trong danh sách

Bạn có thể lọc các việc cần làm trong danh sách theo hầu hết các thuộc tính của việc cần làm. Để biết cú pháp truy vấn bộ lọc, hãy xem AIP-160. Nếu không có truy vấn bộ lọc nào được chỉ định, thì tất cả các tác vụ sẽ được liệt kê.

Bảng sau đây cho thấy các thuộc tính hợp lệ của việc cần làm mà bạn có thể dùng để lọc:

Thuộc tính của việc cần làm để lọc danh sách
  • type
  • attributes
  • tracking_id
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_duration_outcome
  • task_outcome
  • task_outcome_location
  • task_outcome_time

Hãy xem AIP-160 để biết danh sách đầy đủ các toán tử truy vấn bộ lọc.

Ví dụ về nhiệm vụ liệt kê

Ví dụ sau đây cho thấy cách liệt kê các nhiệm vụ cho một deliveryVehicleId và một thuộc tính nhiệm vụ, cả bằng thư viện gRPC Java và bằng lệnh gọi HTTP REST đến ListTasks.

Phản hồi thành công vẫn có thể trống. Phản hồi trống cho biết không có nhiệm vụ nào liên kết với deliveryVehicleId được cung cấp.

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

Để áp dụng bộ lọc cho các tác vụ được liệt kê, hãy thêm tham số URL "filter" có giá trị là một truy vấn bộ lọc được thoát URL.

Tiêu đề của yêu cầu phải chứa trường Authorization có giá trị Bearer <token>, trong đó <token> mang vai trò tài khoản dịch vụ chính xác. Xem Vai trò của tài khoản dịch vụ.

Nếu thành công, nội dung phản hồi sẽ có cấu trúc như sau:

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

Ví dụ về lệnh 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}"

Bước tiếp theo