Tạo các loại tác vụ khác

Tài liệu này giả định rằng bạn đã đọc hướng dẫn giới thiệu về Tác vụ được lên lịch trong phần Giới thiệu về Công cụ của đội xe cũng như Tác vụ được lên lịch là gì? trong phần này.

Công cụ của Fleet cho các tác vụ được lên lịch cung cấp nhiều danh mục tác vụ rộng:

  • Việc cần làm về lô hàng: Dùng cho các việc cần làm khi lái xe, bao gồm cả việc lấy và giao lô hàng.
  • Việc cần làm khi không có sẵn: Sử dụng cho những thời điểm mà tài xế không có sẵn, chẳng hạn như khi có thời gian nghỉ bắt buộc.
  • Công việc dừng theo lịch: Dùng cho các công việc không phải lái xe tại các hộp thư thả rác hoặc vị trí của khách hàng, chẳng hạn như thời gian để vào một toà nhà hoặc tìm điểm giao hàng.

Tài liệu này trình bày cách tạo các tác vụ không phải là đơn hàng vận chuyển trên máy chủ của bạn. Đối với các loại nhiệm vụ vận chuyển, hãy xem phần Tạo nhiệm vụ vận chuyển.

Các trường việc cần làm cho việc cần làm không phải là lái xe

Phần này ghi lại các trường tác vụ cần thiết cho cả tác vụ không có sẵn và tác vụ dừng theo lịch.

Các trường bắt buộc của việc cần làm

Đối với mỗi tác vụ bạn tạo trong Fleet Engine, bạn phải cung cấp các trường bắt buộc và cũng có thể cung cấp bất kỳ trường không bắt buộc nào. Công cụ của Fleet bỏ qua tất cả các trường khác và gửi một ngoại lệ nếu yêu cầu tạo tác vụ cung cấp một deliveryVehicleId được chỉ định. Để chỉ định công việc cho một xe, hãy sử dụng UpdateDeliveryVehicleRequest. Để biết thêm thông tin, hãy xem phần Cập nhật công việc.

TrườngGiá trị
type

Đặt thành loại khớp với loại tác vụ, là một trong những loại sau:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Mã công việc duy nhất. Đây không được là số vận đơn của lô hàng. Nếu không có mã tác vụ trong hệ thống, bạn có thể tạo một giá trị nhận dạng duy nhất trên toàn hệ thống (UUID). Để biết thông tin cụ thể, hãy xem phần Mã tác vụ.
tracking_id Chỉ dành cho tác vụ PICKUP hoặc DELIVERY: Số hoặc mã nhận dạng mà bạn đang sử dụng để theo dõi một lô hàng. Không cung cấp trường này cho các tác vụ không phải là vận chuyển.
plannedLocation Chỉ dành cho các tác vụ PICKUP, DELIVERY hoặc SCHEDULED_STOP: Địa điểm hoàn thành tác vụ. Không bắt buộc đối với các tác vụ UNAVAILABLE.
taskDuration Thời gian dự kiến để thêm và hoàn thành việc cần làm. Ví dụ: để tìm chỗ đỗ xe hoặc đi bộ đến vị trí chuyển giao.

Các trường không bắt buộc của nhiệm vụ vận chuyển

TrườngGiá trị
targetTimeWindow Khoảng thời gian cần hoàn thành tác vụ. Trường này không ảnh hưởng đến hành vi định tuyến.
task_tracking_view_config Chỉ các tác vụ PICKUP hoặc DELIVERY: Cấu hình theo dõi tác vụ chỉ định những phần tử dữ liệu mà người dùng cuối có thể nhìn thấy trong những trường hợp nào.
attributes Danh sách các thuộc tính công việc tuỳ chỉnh. Mỗi thuộc tính phải có một khoá riêng biệt.

Tạo việc cần làm khi không có mặt

Bạn có thể tạo một tác vụ cho biết không có sẵn; ví dụ: cho thời gian nghỉ của người lái xe. Để tạo một việc cần làm không có sẵn, hãy làm theo các nguyên tắc sau:

  • Đặt loại tác vụ thành UNAVAILABLE.
  • Không thêm mã theo dõi.
  • Mặc dù bạn không bắt buộc phải cung cấp vị trí cho một công việc không có sẵn, nhưng việc này sẽ giúp tính toán thời gian đến dự kiến (ETA) chính xác hơn trong suốt cả ngày.

Các quy tắc hiển thị đặc biệt áp dụng cho vị trí của xe khi xe đang thực hiện một tác vụ UNAVAILABLE để chia sẻ hành trình.

  • Ứng dụng dành cho người tiêu dùng được tích hợp với thư viện Theo dõi lô hàng: Khi xe đang thực hiện một nhiệm vụ không có sẵn, người dùng ứng dụng dành cho người tiêu dùng sẽ không thể xem vị trí của xe, mặc dù họ vẫn có thể xem thông tin trạng thái của lô hàng.
  • Ứng dụng theo dõi đội xe được tích hợp với thư viện Theo dõi đội xe: Khi xe đang thực hiện một nhiệm vụ không có sẵn, người quản lý đội xe sử dụng ứng dụng theo dõi đội xe sẽ có thể xem vị trí của xe cho các nhiệm vụ không có sẵn.

Các ví dụ sau đây cho biết cách tạo một tác vụ không có sẵn theo lịch bằng cách sử dụng thư viện gRPC Java hoặc cách tạo yêu cầu HTTP REST đến CreateTask.

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

Để tạo một tác vụ không có sẵn từ môi trường máy chủ, hãy thực hiện lệnh gọi HTTP REST đến CreateTask:

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

<id> là giá trị nhận dạng duy nhất của tác vụ.

Tiêu đề yêu cầu phải chứa trường Authorization (Uỷ quyền) có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn phát hành theo các nguyên tắc được mô tả trong phần Vai trò của tài khoản dịch vụMã thông báo web JSON.

Nội dung yêu cầu phải chứa một thực thể Task có các trường thích hợp được mô tả trong phần Các trường tác vụ cho các tác vụ không phải là lái xe.

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

Tạo tác vụ dừng theo lịch

Bạn có thể tạo một nhiệm vụ cho điểm dừng theo lịch; ví dụ: cho các nhiệm vụ không phải lái xe tại địa điểm của khách hàng, cho điểm dừng đổ xăng hoặc cho thời điểm tài xế nhận lô hàng từ xe trung chuyển. Khi bạn tạo một tác vụ dừng theo lịch, hãy sử dụng các nguyên tắc sau:

  • Đặt loại tác vụ thành
  • Không thêm mã theo dõi.
  • Bạn có thể cung cấp thông tin vị trí (không bắt buộc).

Các ví dụ sau đây cho biết cách tạo một tác vụ không có sẵn theo lịch bằng cách sử dụng thư viện gRPC Java hoặc cách tạo yêu cầu HTTP REST đến CreateTask.

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

Để tạo một tác vụ dừng theo lịch từ môi trường máy chủ, hãy thực hiện lệnh gọi HTTP REST đến CreateTask:

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

<id> là giá trị nhận dạng duy nhất của tác vụ.

Tiêu đề yêu cầu phải chứa trường Authorization (Uỷ quyền) có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn phát hành theo các nguyên tắc được mô tả trong phần Vai trò của tài khoản dịch vụMã thông báo web JSON.

Nội dung yêu cầu phải chứa một thực thể Task:

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

Bước tiếp theo