ค้นหางาน

เอกสารนี้อธิบายวิธีค้นหาข้อมูลงานจากเซิร์ฟเวอร์หรือเบราว์เซอร์ Fleet Engine รองรับการค้นหางาน 2 วิธี ได้แก่

  • ค้นหางาน: คุณค้นหางานตามรหัสต่อไปนี้ได้

    • รหัสงาน: ใช้โดยผู้ใช้ เช่น ผู้ให้บริการกลุ่มอุปกรณ์ที่มีสิทธิ์เข้าถึงข้อมูลงานแบบสมบูรณ์
    • รหัสติดตาม: ใช้โดยซอฟต์แวร์ไคลเอ็นต์เพื่อให้ข้อมูลที่จำกัดแก่ผู้ใช้ เช่น เมื่อคาดว่าจะมีพัสดุที่บ้าน

    โปรดทำความเข้าใจความแตกต่างระหว่างรหัสงานกับรหัสติดตามงาน สองรายการนี้ไม่เหมือนกัน โปรดดูช่องงานพื้นฐานในคู่มืองานที่กำหนดเวลาไว้

  • แสดงรายการงาน: การเข้าถึงงานแบบกว้าง มีไว้สำหรับผู้ใช้ที่เชื่อถือได้เท่านั้น

ค้นหางาน

ส่วนนี้จะอธิบายวิธีค้นหางานตามรหัสงานหรือรหัสติดตาม โดยมีข้อกําหนดต่อไปนี้

  • การค้นหาตามรหัสติดตามต้องเป็นไปตามกฎระดับการเข้าถึงที่ระบุไว้ในกฎระดับการเข้าถึงสำหรับออบเจ็กต์ที่ติดตาม

  • ใช้โทเค็นที่แคบที่สุดเท่าที่ทำได้เพื่อจำกัดความเสี่ยงด้านความปลอดภัย ตัวอย่างเช่น หากคุณใช้โทเค็นผู้บริโภคสำหรับการนำส่ง การเรียกใช้จะแสดงเฉพาะข้อมูลที่เกี่ยวกับผู้ใช้ปลายทางรายนั้น เช่น ผู้ส่งหรือผู้รับการจัดส่ง Fleet Engine จะปกปิดข้อมูลอื่นๆ ทั้งหมดในการตอบกลับ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นที่หัวข้อโทเค็นเว็บ JSON

ค้นหางานตามรหัสงาน

คุณสามารถค้นหางานตามรหัสงานจากสภาพแวดล้อมเซิร์ฟเวอร์ได้โดยใช้ gRPC หรือ REST ตัวอย่างต่อไปนี้แสดงวิธีใช้ไลบรารี Java gRPC หรือคำขอ REST ไปยัง GetTask

gRPC

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

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

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

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

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

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

  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • <taskId> คือรหัสของงานที่จะใช้ค้นหา
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <token> โดยที่ <token> มาจากเซิร์ฟเวอร์ของคุณตามหลักเกณฑ์ที่อธิบายไว้ในบทบาทของบัญชีบริการและโทเค็นเว็บ JSON
  • เนื้อหาของคำขอต้องว่างเปล่า
  • หากค้นหาสำเร็จ เนื้อหาการตอบกลับจะมีเอนทิตีงาน

ตัวอย่างคำสั่ง 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}"

ค้นหางานตามรหัสติดตาม

ตัวอย่างต่อไปนี้แสดงวิธีค้นหางานตามรหัสติดตามการจัดส่งโดยใช้ gRPC หรือการเรียก HTTP REST ไปยัง 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>

  • &lt;tracking_id&gt; คือรหัสติดตามที่เชื่อมโยงกับงาน

  • ส่วนหัวของคำขอต้องมีฟิลด์การให้สิทธิ์ซึ่งมีค่าเป็น Bearer <token> โดยที่ <token> มีบทบาทบัญชีบริการที่ถูกต้อง โปรดดูหัวข้อบทบาทของบัญชีบริการ

  • หากการค้นหาสำเร็จ เนื้อหาการตอบกลับจะมีเอนทิตี taskTrackingInfo

ตัวอย่างคำสั่ง curl

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

แสดงรายการงาน

การระบุงานเป็นการขอสิทธิ์เข้าถึงงานอย่างกว้างๆ งานในหน้าข้อมูลมีไว้สำหรับผู้ใช้ที่เชื่อถือได้เท่านั้น ใช้โทเค็นการตรวจสอบสิทธิ์ Delivery Fleet Reader หรือ Delivery Admin เมื่อส่งคำขอรายการงาน ดูข้อมูลเพิ่มเติมได้ที่บทบาทของบัญชีบริการ

จัดรายการเป็นหน้า

รายการงานจะแบ่งเป็นหน้า ขนาดหน้าเว็บสามารถระบุในคำของานรายการได้ หากระบุขนาดหน้าแล้ว จํานวนงานที่แสดงผลจะไม่เกินขนาดหน้าเว็บที่ระบุ หากไม่มีขนาดหน้า จะใช้ค่าเริ่มต้นที่สมเหตุสมผล หากขนาดหน้าเว็บที่ขอเกินค่าสูงสุดภายใน ระบบจะใช้ค่าสูงสุดภายใน

รายการงานอาจมีโทเค็นสําหรับการอ่านหน้าถัดไปของผลการค้นหา หากต้องการเรียกข้อมูลหน้าถัดไป ให้ส่งคำขอเดิมอีกครั้งพร้อมโทเค็นหน้าเว็บ เมื่อโทเค็นหน้าเว็บที่แสดงผลว่างเปล่า แสดงว่าไม่มีงานที่จะดึงข้อมูลได้อีก

ช่องเมื่อแสดงรายการงาน

Fleet Engine จะปกปิดข้อมูลในช่องต่อไปนี้เมื่อแสดงรายการงาน

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

ใช้รูปแบบช่องต่อไปนี้ตามข้อเสนอการปรับปรุง Google API

ชนิดของฟิลด์ รูปแบบ ตัวอย่าง
การประทับเวลา RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
ระยะเวลา จำนวนวินาทีที่ตามด้วย s task_duration = 120s
ค่าแจกแจง สตริง state = CLOSED AND type = PICKUP
ตำแหน่ง point.latitude และ point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

กรองงานในรายการ

คุณกรองงานในรายการตามพร็อพเพอร์ตี้งานส่วนใหญ่ได้ ดูไวยากรณ์การค้นหาตัวกรองได้ที่ AIP-160 หากไม่ได้ระบุการค้นหาตัวกรอง ระบบจะแสดงงานทั้งหมด

ตารางต่อไปนี้แสดงพร็อพเพอร์ตี้งานที่ใช้ได้ซึ่งคุณใช้กรองได้

พร็อพเพอร์ตี้งานสำหรับการกรองรายการ
  • type
  • attributes
  • tracking_id
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_duration_outcome
  • task_outcome
  • task_outcome_location
  • task_outcome_time

ดูรายการโอเปอเรเตอร์การค้นหาตัวกรองทั้งหมดได้ที่ AIP-160

แสดงรายการตัวอย่างงาน

ตัวอย่างต่อไปนี้แสดงวิธีแสดงรายการงานสำหรับแอตทริบิวต์ deliveryVehicleId และ ListTasks ทั้งที่ใช้ไลบรารี gRPC ของ Java และการใช้การเรียก HTTP REST ไปยัง ListTasks

การตอบกลับที่สำเร็จอาจยังว่างเปล่าอยู่ การตอบกลับที่ว่างเปล่าหมายความว่าไม่มีงานใดเชื่อมโยงกับ deliveryVehicleId ที่ระบุ

gRPC

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

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

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

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

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

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

หากต้องการใช้ตัวกรองกับงานที่แสดง ให้ใส่พารามิเตอร์ของ URL "ตัวกรอง" โดยมีคำค้นหาตัวกรองที่ใช้อักขระหลีกกับ URL เป็นค่า

ส่วนหัวของคำขอต้องมีช่อง Authorization ที่มีค่า Bearer <token> โดยที่ <token> มีบทบาทบัญชีบริการที่ถูกต้อง โปรดดูหัวข้อบทบาทของบัญชีบริการ

การค้นหาที่ประสบความสำเร็จจะแสดงเนื้อหาการตอบกลับที่มีโครงสร้างดังต่อไปนี้

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

ตัวอย่างคำสั่ง curl

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

ขั้นตอนถัดไป