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

इस दस्तावेज़ में यह माना गया है कि आपने शेड्यूल किए गए टास्क के बारे में शुरुआती गाइड पढ़ी है. यह गाइड 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 टास्क के लिए: वह नंबर या आइडेंटिफ़ायर जिसका इस्तेमाल, शिपमेंट को ट्रैक करने के लिए किया जा रहा है. शिपमेंट से जुड़े टास्क के अलावा अन्य टास्क के लिए, यह फ़ील्ड न दें.
planned_location PICKUP, DELIVERY, या SCHEDULED_STOP टास्क के लिए: वह जगह जहां टास्क पूरा करना है. `UNAVAILABLE` टास्क के लिए, यह ज़रूरी नहीं है.UNAVAILABLE
task_duration टास्क पूरा करने में लगने वाला अनुमानित समय. उदाहरण के लिए, पार्किंग ढूंढने या हैंडऑफ़ की जगह तक पैदल जाने में लगने वाला समय.

शिपमेंट टास्क के वे फ़ील्ड जो ज़रूरी नहीं हैं

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

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

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

यहां दिए गए उदाहरणों में, Java gRPC लाइब्रेरी का इस्तेमाल करके, शिपमेंट पिक अप करने का टास्क बनाने का तरीका बताया गया है. साथ ही, एचटीटीपी REST अनुरोध करने का तरीका भी बताया गया है.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.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> टास्क का यूनीक आइडेंटिफ़ायर है.

अनुरोध के हेडर में, Authorization फ़ील्ड होना चाहिए. इसकी वैल्यू 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 पर सेट करें. यहां दिए गए उदाहरण में, ग्रैंड इंडोनेशिया ईस्ट मॉल में शिपमेंट डिलीवर करने का टास्क दिखाया गया है.

यहां दिए गए उदाहरणों में, Java gRPC लाइब्रेरी का इस्तेमाल करके, शिपमेंट पिक अप करने का टास्क बनाने का तरीका बताया गया है. साथ ही, एचटीटीपी REST अनुरोध करने का तरीका भी बताया गया है.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.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> टास्क का यूनीक आइडेंटिफ़ायर है.

अनुरोध के हेडर में, Authorization फ़ील्ड होना चाहिए. इसकी वैल्यू 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
 ```

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