अन्य टास्क टाइप बनाना

इस दस्तावेज़ में यह मान लिया गया है कि आपने शेड्यूल किए गए टास्क के बारे में शुरुआती गाइड पढ़ी है. यह गाइड 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 कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट के लिए, यूनीक कुंजी होनी चाहिए.

उपलब्ध न होने वाला टास्क बनाना

आपके पास, उपलब्ध न होने वाला टास्क बनाने का विकल्प है. उदाहरण के लिए, ड्राइवर के ब्रेक के लिए. उपलब्ध न होने वाला टास्क बनाने के लिए, इन दिशा-निर्देशों का पालन करें:

  • टास्क का टाइप UNAVAILABLE पर सेट करें.
  • ट्रैकिंग आईडी शामिल न करें.
  • उपलब्ध न होने वाले टास्क के लिए, जगह की जानकारी देना ज़रूरी नहीं है. हालांकि, ऐसा करने से, पूरे दिन के लिए ईटीए की बेहतर कैलकुलेशन मिलती हैं.

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

  • शिपमेंट ट्रैकिंग लाइब्रेरी के साथ इंटिग्रेट किए गए, उपभोक्ता एप्लिकेशन: जब वाहन, उपलब्ध न होने वाले टास्क पर होता है, तो उपभोक्ता एप्लिकेशन के उपयोगकर्ता, वाहन की जगह की जानकारी नहीं देख पाते. हालांकि, वे अब भी अपने शिपमेंट की स्थिति की जानकारी देख सकते हैं.
  • फ़्लीट ट्रैकिंग लाइब्रेरी के साथ इंटिग्रेट किए गए, फ़्लीट ट्रैकिंग ऐप्लिकेशन: जब वाहन, उपलब्ध न होने वाले टास्क पर होता है, तो फ़्लीट मैनेजर, फ़्लीट ट्रैकिंग ऐप्लिकेशन का इस्तेमाल करके, उपलब्ध न होने वाले टास्क के लिए वाहन की जगह की जानकारी देख पाएंगे.

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

सर्वर एनवायरमेंट से, उपलब्ध न होने वाला टास्क बनाने के लिए, 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, 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

शेड्यूल किया गया स्टॉप वाला टास्क बनाना

आपके पास, शेड्यूल किए गए स्टॉप के लिए टास्क बनाने का विकल्प है. उदाहरण के लिए, ग्राहक की जगहों पर, ड्राइविंग के अलावा अन्य टास्क के लिए, ईंधन भरने के लिए स्टॉप के लिए या जब ड्राइवर को फ़ीडर वाहन से शिपमेंट मिलते हैं. शेड्यूल किया गया स्टॉप वाला टास्क बनाते समय, इन दिशा-निर्देशों का पालन करें:

  • टास्क का टाइप
  • ट्रैकिंग आईडी शामिल न करें.
  • आपके पास, जगह की जानकारी देने का विकल्प है.

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

सर्वर एनवायरमेंट से, शेड्यूल किया गया स्टॉप वाला टास्क बनाने के लिए, 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, 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

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