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

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

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

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

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

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

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

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

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

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

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