शिपमेंट टास्क बनाना

इस दस्तावेज़ में यह माना गया है कि आपने Fleet Engine के बारे में जानकारी सेक्शन में, शेड्यूल किए गए टास्क के बारे में शुरुआती गाइड पढ़ ली है. साथ ही, इस सेक्शन में शेड्यूल किया गया टास्क क्या है? के बारे में भी पढ़ लिया है.

शेड्यूल किए गए टास्क के लिए Fleet Engine, टास्क की अलग-अलग कैटगरी उपलब्ध कराता है:

  • शिपमेंट से जुड़े टास्क: ड्राइविंग से जुड़े टास्क के लिए इस्तेमाल करें. इनमें शिपमेंट को पिकअप और डिलीवर करना भी शामिल है.
  • ड्राइवर के उपलब्ध न होने पर किए जाने वाले टास्क: इनका इस्तेमाल उन समय के लिए करें जब ड्राइवर उपलब्ध न हों. जैसे, ब्रेक के दौरान.
  • शेड्यूल किए गए स्टॉप टास्क: ड्रॉप बॉक्स या ग्राहक की जगहों पर, ड्राइविंग से जुड़े कामों के लिए इस्तेमाल करें. जैसे, किसी बिल्डिंग में जाने या डिलीवरी पॉइंट ढूंढने में लगने वाला समय.

इस दस्तावेज़ में, अपने सर्वर पर शिपमेंट टास्क बनाने का तरीका बताया गया है. दूसरे टाइप के टास्क बनाने के लिए, दूसरे टाइप के टास्क बनाना लेख पढ़ें.

शिपमेंट टास्क के फ़ील्ड

इस सेक्शन में, पिकअप और डिलीवरी, दोनों टास्क के लिए ज़रूरी टास्क फ़ील्ड के बारे में बताया गया है.

टास्क के लिए ज़रूरी फ़ील्ड

Fleet Engine में बनाए जाने वाले हर टास्क के लिए, आपको ज़रूरी फ़ील्ड की जानकारी देनी होगी. साथ ही, आपके पास वैकल्पिक फ़ील्ड की जानकारी देने का विकल्प भी होता है. Fleet Engine, बाकी सभी फ़ील्ड को अनदेखा करता है. साथ ही, अगर टास्क बनाने के अनुरोध में असाइन किया गया deliveryVehicleId दिया जाता है, तो वह एक अपवाद दिखाता है. किसी वाहन को टास्क असाइन करने के लिए, UpdateDeliveryVehicleRequest का इस्तेमाल करें. ज़्यादा जानकारी के लिए, टास्क अपडेट करना लेख पढ़ें.

फ़ील्डमान
type

टास्क टाइप से मैच करने वाले टाइप पर सेट करें. टास्क टाइप इनमें से कोई एक हो सकता है:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id टास्क का यूनीक आईडी. यह शिपमेंट का ट्रैकिंग नंबर नहीं होना चाहिए. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सल यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है. ज़्यादा जानकारी के लिए, टास्क आईडी देखें.
tracking_id PICKUP या सिर्फ़ DELIVERY टास्क: वह नंबर या आइडेंटिफ़ायर जिसका इस्तेमाल शिपमेंट को ट्रैक करने के लिए किया जा रहा है. शिपमेंट से जुड़े टास्क के लिए, यह फ़ील्ड न भरें.
plannedLocation सिर्फ़ PICKUP, DELIVERY या SCHEDULED_STOP टास्क: वह जगह जहां टास्क पूरा करना है. UNAVAILABLE टास्क के लिए ज़रूरी नहीं है.
taskDuration टास्क पूरा करने में लगने वाला अनुमानित समय. उदाहरण के लिए, पार्किंग की जगह ढूंढने या डिलीवरी की जगह तक पैदल जाने के लिए.

शिपमेंट टास्क के लिए वैकल्पिक फ़ील्ड

फ़ील्डमान
targetTimeWindow वह समयसीमा जिसके दौरान टास्क पूरा किया जाना चाहिए. इस फ़ील्ड से, रूटिंग के तरीके पर कोई असर नहीं पड़ता.
task_tracking_view_config PICKUP या DELIVERY सिर्फ़ टास्क: यह टास्क ट्रैकिंग के लिए कॉन्फ़िगरेशन है. इससे यह तय होता है कि किन परिस्थितियों में असली उपयोगकर्ताओं को कौनसे डेटा एलिमेंट दिखेंगे.
attributes कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट की एक यूनीक कुंजी होनी चाहिए.

शिपमेंट पिकअप करने का टास्क बनाना

शिपमेंट लेने वाले ड्राइवर की गतिविधि को ट्रैक करने के लिए, Fleet Engine का इस्तेमाल करें. इसके लिए, शिपमेंट लेने का टास्क बनाएं. इसके लिए, टास्क टाइप एट्रिब्यूट को PICKUP पर सेट करना होगा. इस उदाहरण में, Grand Indonesia East Mall से शिपमेंट पिकअप करने का तरीका बताया गया है.

यहां दिए गए उदाहरणों में, Java gRPC लाइब्रेरी का इस्तेमाल करके शिपमेंट पिकअप टास्क बनाने या CreateTask को एचटीटीपी REST अनुरोध करने का तरीका बताया गया है.

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

सर्वर एनवायरमेंट से शिपमेंट पिकअप टास्क बनाने के लिए, CreateTask पर एचटीटीपी REST कॉल करें:

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

<id>, टास्क का यूनीक आइडेंटिफ़ायर है.

अनुरोध हेडर में, अनुमति फ़ील्ड होना चाहिए. इसकी वैल्यू Bearer <token> होनी चाहिए. <token> को आपका सर्वर, सेवा खाते की भूमिकाओं और JSON वेब टोकन में बताए गए दिशा-निर्देशों के मुताबिक जारी करता है.

अनुरोध के मुख्य हिस्से में, शिपमेंट टास्क फ़ील्ड में बताए गए सही फ़ील्ड के साथ एक Task इकाई होनी चाहिए.

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

शिपमेंट की डिलीवरी का टास्क बनाना

शिपमेंट डिलीवर करने वाले ड्राइवर की गतिविधि को ट्रैक करने के लिए, Fleet Engine का इस्तेमाल करने के लिए, शिपमेंट डिलीवरी टास्क बनाएं. इसके लिए, टास्क टाइप एट्रिब्यूट को DELIVERY पर सेट करना होगा. इस उदाहरण में, Grand Indonesia East Mall में शिपमेंट की डिलीवरी की जानकारी दी गई है.

यहां दिए गए उदाहरणों में, Java gRPC लाइब्रेरी का इस्तेमाल करके शिपमेंट पिकअप टास्क बनाने या CreateTask को एचटीटीपी REST अनुरोध करने का तरीका बताया गया है.

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

सर्वर एनवायरमेंट से शिपमेंट पिकअप टास्क बनाने के लिए, CreateTask पर एचटीटीपी REST कॉल करें:

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

<id>, टास्क का यूनीक आइडेंटिफ़ायर है.

अनुरोध हेडर में, अनुमति फ़ील्ड होना चाहिए. इसकी वैल्यू Bearer <token> होनी चाहिए. <token> को आपका सर्वर, सेवा खाते की भूमिकाओं और JSON वेब टोकन में बताए गए दिशा-निर्देशों के मुताबिक जारी करता है.

अनुरोध के मुख्य हिस्से में Task इकाई शामिल होनी चाहिए:

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
 ```

आगे क्या करना है