शिपमेंट ट्रैकिंग के लिए फ़्लीट इंजन का इस्तेमाल शुरू करना

Fleet Engine डिलीवरी API का इस्तेमाल करके, डिलीवरी के पहले और आखिरी मील के दौरान अपने डिवाइसों की गतिविधियों को मॉडल करें. इस एपीआई का इस्तेमाल Android और iOS के लिए ड्राइवर SDK टूल का इस्तेमाल करके या सीधे तौर पर एचटीटीपी REST या gRPC कॉल का इस्तेमाल करके किया जा सकता है.

शुरुआती सेट अप

आपके पास Google Cloud Console में, फ़्लीट इंजन डिलीवरी एपीआई को कॉन्फ़िगर करने का विकल्प होता है.

अपने सेट अप की पुष्टि करें

सेवा खाते बनाने के बाद, पुष्टि करें कि आपका सेट अप पूरा हो गया है और डिलीवरी वाहन बनाया जा सकता है. अपने सेटअप की तुरंत पुष्टि करने से यह पक्का हो जाता है कि आपने अनुमति से जुड़ी उन सामान्य समस्याओं को ठीक कर लिया है जो प्रोजेक्ट सेट अप करते समय पैदा हो सकती हैं. अपने सेटअप की पुष्टि करने के दो तरीके हैं:

क्लाइंट लाइब्रेरी

RAW gRPC या REST पर डेवलपर को बेहतर अनुभव देने के लिए, कई सामान्य प्रोग्रामिंग भाषाओं में क्लाइंट लाइब्रेरी का इस्तेमाल करें. अपने सर्वर ऐप्लिकेशन के लिए क्लाइंट लाइब्रेरी पाने के निर्देशों के लिए, क्लाइंट लाइब्रेरी देखें.

इस दस्तावेज़ में दिए गए Java उदाहरणों में यह माना गया है कि आप gRPC से परिचित हैं.

डेटा स्ट्रक्चर

Fleet Engine डिलीवरी एपीआई, शिपमेंट के पिकअप और डिलीवरी का मॉडल बनाने के लिए दो डेटा स्ट्रक्चर का इस्तेमाल करता है:

  • शिपमेंट भेजने के लिए इस्तेमाल किया जाने वाला वाहन.
  • शिपमेंट पिक अप और डिलीवरी से जुड़े टास्क.

आप पूरे दिन ड्राइवर के लिए ब्रेक और शेड्यूल किए गए स्टॉप के बारे में बताने के लिए भी टास्क का इस्तेमाल करते हैं.

डिलीवरी गाड़ियां

डिलीवरी करने वाले वाहन, शिपमेंट को डिपो से डिलीवरी करने वाली जगह और पिकअप की जगह से डिपो तक ले जाते हैं. कुछ मामलों में, वे शिपमेंट को सीधे पिक अप की जगह से डिलीवरी की जगह पर भी ले जा सकते हैं.

ड्राइवर SDK टूल का इस्तेमाल करके, Fleet Engine में DeliveryVehicle ऑब्जेक्ट बनाएं. साथ ही, शिपमेंट और सभी डिवाइसों को ट्रैक करने के लिए जगह की जानकारी के अपडेट भेजें.

टास्क

कोई वाहन दिन में जो कार्रवाइयां करता है उनके लिए, आप इस हिसाब से टास्क असाइन करते हैं:

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

असाइन किए गए हर टास्क का एक यूनीक टास्क आईडी होना चाहिए, लेकिन टास्क एक ही ट्रैकिंग आईडी शेयर कर सकते हैं. जब Fleet Engine हर टास्क के लिए ETA गिनता है, तब वह सभी टास्क और उस क्रम का इस्तेमाल करता है जिसमें उन्हें अनुमान लगाने के लिए शेड्यूल किया गया होता है. टास्क आईडी के बारे में ज़्यादा जानकारी के लिए, टास्क आईडी से जुड़े दिशा-निर्देश देखें.

Fleet Engine में टास्क बनाने के लिए, ड्राइवर SDK टूल के टास्क मैनेजर का इस्तेमाल करें.

शिपमेंट से जुड़े टास्क

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

  • पिकअप या डिलीवरी की जगह.
  • ट्रैकिंग नंबर या आईडी.
  • टास्क पूरा करने, पार्किंग ढूंढने या हैंडऑफ़ की जगह तक जाने के लिए, अतिरिक्त समय का हिसाब रखने का समय.
  • यूनीक टास्क आईडी. टास्क आईडी से जुड़े दिशा-निर्देश देखें.

ज़्यादा जानकारी के लिए, ये विषय देखें:

Android

iOS

ऐसे टास्क जो उपलब्ध नहीं हैं

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

इस जानकारी का इस्तेमाल करके, कोई ऐसा टास्क बनाएं जो उपलब्ध न हो:

  • ब्रेक की अवधि.
  • आप चाहें, तो ब्रेक की जगह भी बताएं. आपको किसी खास जगह की जानकारी देने की ज़रूरत नहीं है, लेकिन ऐसा करने से पूरे दिन के लिए, ETA की सटीक जानकारी मिलती है.

ज़्यादा जानकारी के लिए, ये विषय देखें:

Android

iOS

शेड्यूल किए गए स्टॉप टास्क

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

ज़्यादा जानकारी के लिए, ये विषय देखें:

Android

iOS

टास्क आईडी से जुड़े दिशा-निर्देश

टास्क आईडी बनाते समय, कॉन्टेंट और फ़ॉर्मैट से जुड़े इन दिशा-निर्देशों का पालन करें:

  • यूनीक टास्क आईडी बनाएं
  • व्यक्तिगत पहचान से जुड़ी किसी भी जानकारी (पीआईआई) या टेक्स्ट डेटा को साफ़ तौर पर न बताएं.
  • मान्य यूनिकोड स्ट्रिंग इस्तेमाल करें.
  • 64 या इससे कम वर्णों का इस्तेमाल करें.
  • इनमें से कोई भी ASCII वर्ण शामिल न करें: "/", ":", "\", "?", या "#".
  • यूनिकोड नॉर्मलाइज़ेशन फ़ॉर्म C के हिसाब से सामान्य बनाएं.

अच्छे टास्क आईडी के कुछ उदाहरण यहां दिए गए हैं:

  • 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
  • e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
  • NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk

नीचे दी गई टेबल में ऐसे टास्क आईडी के उदाहरण दिए गए हैं जो इस्तेमाल नहीं किए जा सकते:

इस्तेमाल न किए जा सकने वाले टास्क आईडी वजह
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 यह व्यक्तिगत पहचान से जुड़ी जानकारी और वर्ण से जुड़ी ज़रूरी शर्तों का उल्लंघन करता है: कॉमा, पीरियड, कोलन, और स्लैश.
JohnDoe-577b484da26f-Cupertino-SantaCruz यह व्यक्तिगत पहचान से जुड़ी जानकारी की ज़रूरी शर्तों का उल्लंघन करता है.
4R0oXLToF"112 समर डॉ. ईस्ट हार्टफ़र्ड, CT06118"577b484da26f8a यह व्यक्तिगत पहचान से जुड़ी जानकारी और वर्ण से जुड़ी ज़रूरी शर्तों का उल्लंघन करता है: खाली सफ़ेद जगह, कॉमा, और कोटेशन मार्क. इसमें 64 से ज़्यादा वर्ण इस्तेमाल न करें.

कई और संसाधन

हर डेटा स्ट्रक्चर में मौजूद खास फ़ील्ड देखने के लिए, DeliveryVehicle (gRPC, REST) और Task (gRPC, REST) के एपीआई रेफ़रंस दस्तावेज़ देखें.

किसी वाहन का जीवन

DeliveryVehicle ऑब्जेक्ट, डिलीवरी करने वाले पहले या आखिरी मील की दूरी तक जाने वाले वाहन को दिखाता है. आपने इनका इस्तेमाल करके DeliveryVehicle ऑब्जेक्ट बनाया है:

  • Google Cloud प्रोजेक्ट का प्रोजेक्ट आईडी, जिसमें Fleet Engine API को कॉल करने के लिए इस्तेमाल किया गया सेवा खाता होता है.
  • ग्राहक के मालिकाना हक वाला वाहन का आईडी.

हर वाहन के लिए, अलग-अलग वाहन आईडी इस्तेमाल करें. वाहन आईडी का दोबारा इस्तेमाल न करें जब तक कि ओरिजनल वाहन के लिए कोई टास्क न हो.

Fleet Engine ऐसे DeliveryVehicle ऑब्जेक्ट को अपने-आप मिटा देता है जिन्हें सात दिन के बाद भी, UpdateDeliveryVehicle का इस्तेमाल करके अपडेट नहीं किया गया है. कोई वाहन मौजूद है या नहीं, यह देखने के लिए:

  1. UpdateDeliveryVehicle पर कॉल करें.
  2. अगर आपको NOT_FOUND की गड़बड़ी मिलती है, तो कार को फिर से बनाने के लिए CreateDeliveryVehicle को कॉल करें. अगर कॉल के जवाब में वाहन मिलता है, तब भी उसे अपडेट किया जा सकता है.

वाहन के प्रकार

VehicleType इकाई में VehicleType का एक वैकल्पिक फ़ील्ड होता है, जिसमें Category की वैल्यू होती है. इसे AUTO, TWO_WHEELER, BICYCLE या PEDESTRIAN के तौर पर तय किया जा सकता है. अगर यह फ़ील्ड सेट नहीं किया जाता है, तो डिफ़ॉल्ट तौर पर AUTO दिखेगा.

वाहनों के लिए सभी रूटिंग में, वाहन के टाइप के लिए उससे जुड़े RouteTravelMode का इस्तेमाल होता है.

वाहन की विशेषताएं

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

एट्रिब्यूट में, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या संवेदनशील जानकारी शामिल न करें, क्योंकि यह फ़ील्ड उपयोगकर्ताओं को दिख सकता है.

किसी टास्क की अवधि

डिलीवरी एपीआई gRPC या REST इंटरफ़ेस की मदद से, Fleet Engine में टास्क बनाए जा सकते हैं, अपडेट किए जा सकते हैं, और उनके बारे में क्वेरी की जा सकती है.

Task ऑब्जेक्ट में एक स्टेट फ़ील्ड होता है, जो अपनी लाइफ़साइकल से उसकी प्रोग्रेस को ट्रैक करता है. वैल्यू, Open से CLOSED में बदल जाती हैं. नए टास्क, 'ओपन' स्थिति में बनाए जाते हैं, जिससे पता चलता है कि:

  • यह टास्क अभी तक किसी डिलीवरी वाहन को असाइन नहीं किया गया है.
  • डिलीवरी करने वाले वाहन ने, टास्क के लिए असाइन किए गए वाहन के स्टॉप को अभी तक पास नहीं किया है.

टास्क के बारे में दिशा-निर्देश

किसी वाहन को टास्क सिर्फ़ तब असाइन किया जा सकता है, जब वह 'ओपन' स्थिति में हो.

अगर आपने किसी टास्क को वाहन के स्टॉप की सूची से हटाया है, तो उसे रद्द कर दिया जाएगा. इससे टास्क की स्थिति अपने-आप 'बंद है' पर सेट हो जाएगी.

जब टास्क का वाहन, टास्क के लिए वाहन को रोक देता है, तब:

  1. टास्क के नतीजा वाले फ़ील्ड को 'हो' या 'पूरी नहीं हो सका' पर अपडेट करें.

  2. इवेंट का टाइमस्टैंप बताएं.

    इसके बाद, JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी उस टास्क का नतीजा दिखाती है और टास्क की स्थिति अपने-आप 'बंद है' पर सेट हो जाती है. ज़्यादा जानकारी के लिए, JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी की मदद से अपना शिपमेंट ट्रैक करना देखें.

वाहनों की तरह, Fleet Engine उन टास्क को मिटा देता है जो सात दिनों के बाद भी अपडेट नहीं किए गए हैं. अगर पहले से मौजूद किसी आईडी के साथ टास्क बनाने की कोशिश की जाती है, तो गड़बड़ी का मैसेज दिखता है.

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

टास्क से जुड़े एट्रिब्यूट

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

एट्रिब्यूट में, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या अन्य संवेदनशील जानकारी शामिल न करें, क्योंकि ये एट्रिब्यूट उपयोगकर्ताओं को दिख सकते हैं.

गाड़ी और टास्क की लाइफ़साइकल मैनेज करें

रिमाइंडर: आपका इंटरनल सिस्टम, उस डेटा के भरोसेमंद सोर्स के तौर पर काम करता है जिसे Fleet Engine डिलीवरी एपीआई आपकी ओर से बेहतर बनाता है.

अपने सिस्टम में गाड़ी और टास्क की लाइफ़साइकल मैनेज करने के लिए, Fleet Engine सलाह API का इस्तेमाल करें. इससे कार और उनसे जुड़े टास्क बनाए जा सकते हैं, उन्हें अपडेट किया जा सकता है, और ट्रैक किया जा सकता है.

इसी दौरान, ड्राइवर ऐप्लिकेशन डिवाइस की जगह और रास्ते की जानकारी अपडेट करने के लिए, सीधे Fleet Engine को सूचना देता है. इस मॉडल से Fleet Engine, रीयल-टाइम में जगह की जानकारी को बेहतर तरीके से मैनेज कर पाता है. यह, जगह की जानकारी को सीधे ट्रैकिंग लाइब्रेरी को भेजता है. इसका इस्तेमाल, उपभोक्ताओं के ऑर्डर की स्थिति की जानकारी देने के लिए किया जा सकता है.

उदाहरण के लिए, मान लें कि आपके पास यह स्थिति है:

  • डिलीवरी स्टॉप के पास मौजूद ड्राइवर. ड्राइवर ऐप्लिकेशन, Fleet Engine को आपकी जगह की जानकारी भेजता है.
  • Fleet Engine, ट्रैकिंग लाइब्रेरी को डिवाइस की जगह की जानकारी भेजता है. आपका उपभोक्ता ऐप्लिकेशन इसका इस्तेमाल करके, उपभोक्ता को पैकेज के नज़दीक होने की सूचना देता है.
  • शिपमेंट पूरा करने के बाद, ड्राइवर ऐप्लिकेशन पर "शिपमेंट डिलीवर किया गया" बटन पर क्लिक करता है.
  • "शिपमेंट डिलीवर किया गया" कार्रवाई से, यह जानकारी आपके बैकएंड सिस्टम को भेजी जाती है. बैकएंड सिस्टम, कारोबार की पुष्टि करने और पुष्टि करने से जुड़े ज़रूरी चरणों को पूरा करता है.
  • आपका सिस्टम इस टास्क की पुष्टि करता है और 'डिलीवरी एपीआई' का इस्तेमाल करके, Fleet Engine को अपडेट करता है.

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

डिलीवरी एपीआई का इस्तेमाल करना

क्लाइंट टोकन मैनेज करें

ड्राइवर ऐप्लिकेशन से मिलने वाली और सीधे Fleet Engine को भेजे गए, जगह की जानकारी के अपडेट के लिए ऑथराइज़ेशन टोकन की ज़रूरत होती है. क्लाइंट से Fleet Engine तक के अपडेट मैनेज करने के लिए, यहां सुझाया गया तरीका बताया गया है:

  1. Fleet Engine Delivery गैर-भरोसेमंद ड्राइवर उपयोगकर्ता सेवा खाते की भूमिका का इस्तेमाल करके, टोकन जनरेट करें.

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

इस तरीके से पक्का किया जाता है कि मोबाइल डिवाइस से आने वाले कॉल, जिन्हें लो-ट्रस्ट वाला माहौल माना जाता है--और कम से कम अधिकारों के सिद्धांत का पालन करते हों.

सेवा खाते की अन्य भूमिकाएं

अगर आपको इसके बजाय, ड्राइवर ऐप्लिकेशन को फ़्लीट इंजन से जुड़े अपडेट सीधे तौर पर फ़्लीट इंजन की भूमिका में अपडेट करने की अनुमति देनी है, जैसे कि टास्क के कुछ खास अपडेट के लिए, तो भरोसेमंद ड्राइवर की भूमिका का इस्तेमाल किया जा सकता है. भरोसेमंद ड्राइवर की भूमिका का इस्तेमाल करने वाले मॉडल के बारे में जानकारी पाने के लिए, भरोसेमंद ड्राइवर मॉडल देखें.

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

कामकाजी दिन के लिए मॉडल बनाना

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

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

डिलीवरी पैकेज के सेट और उन्हें डिलीवर करने का क्रम तय करने के बाद, किसी गाड़ी को टास्क असाइन करें.
दिन की शुरुआत का समय ड्राइवर ऐप्लिकेशन में लॉग इन करके, डिपो में दिन की शुरुआत करता है. डिलीवरी ड्राइवर एपीआई शुरू करें. ज़रूरत के हिसाब से, Fleet Engine में डिलीवरी वाहन बनाएं.
ड्राइवर, शिपिंग की सुविधा देने वाले वाहन में शिपमेंट लोड करता है और शिपमेंट को स्कैन करता है. अगर शिपमेंट डिलीवरी के टास्क समय पहले नहीं बनाए गए थे, तो स्कैन करते समय शिप डिलीवर करने के टास्क बनाएं.
ड्राइवर, टास्क के क्रम की पुष्टि करता है. अगर कन्वर्ज़न ऐक्शन समय से पहले नहीं बनाए गए, तो शिपिंग के लिए पिकअप के टास्क, शेड्यूल नहीं किया गया, और शेड्यूल किए गए स्टॉप बनाएं.
ड्राइवर डिपो से बाहर निकल जाता है और अगले कई टास्क पूरे करने की ठान लेता है. वाहन के लिए सभी टास्क या उनके सबसेट असाइन करें. इसके लिए, उन्हें पूरा करने का ऑर्डर दें.
ड्राइवर शिपमेंट डिलीवर करता है. डिलीवरी स्टॉप पर पहुंचने के बाद, किसी स्टॉप पर आने वाले वाहन से जुड़ी कार्रवाइयां करें. शिपमेंट डिलीवर होने के बाद, डिलीवरी टास्क बंद करें. इसके अलावा, स्टोर शिपमेंट की स्थिति और अन्य मुख्य जानकारी भी की जा सकती है. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप पर जाने से पहले, ये कार्रवाइयां करें: वाहन एक स्टॉप पूरा करता है और वाहन अगले स्टॉप पर जाता है.
अन्य शिपमेंट को डिलीवरी करने वाले वाहन में ट्रांसफ़र करने के लिए, ड्राइवर एक फ़ीडर वाहन के साथ खड़ा होता है. फ़ीडर और डिलीवरी वाहनों के बीच ट्रांसफ़र के लिए, मीटिंग पॉइंट को शेड्यूल किए गए स्टॉप के तौर पर सेट किया जाना चाहिए.

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

अगर ऐसा नहीं है, तो ब्रेक के आखिर तक आपको कुछ और करने की ज़रूरत नहीं है. अगले और बाकी टास्क की पुष्टि करके, टास्क को हटाएं और टास्क का क्रम अपडेट करें.
ड्राइवर किसी शिपमेंट को पिक अप करता है. इसे डिलीवरी स्टॉप की तरह ही बनाया गया है. किसी स्टॉप पर वाहन के आने और टास्क को बंद करने से जुड़ी कार्रवाइयां करें. इसके अलावा, शिपिंग की स्थिति और अन्य मुख्य जानकारी सेव करने का विकल्प भी चुना जा सकता है. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप पर जाने से पहले, वाहन के एक स्टॉप के पूरा होने और वाहन को अगले स्टॉप पर ले जाने से जुड़ी कार्रवाइयां करें. ध्यान दें: यह पक्का करने के लिए कि बिलिंग सही है, सभी पिकअप के लिए डिलीवरी टास्क होना ज़रूरी है. अगर पिकअप को उसी दिन ड्राइवर के रास्ते की किसी दूसरी जगह पर डिलीवर करना है, तो हमारा सुझाव है कि इस डिलीवरी टास्क को रूट में मौजूद किसी अन्य डिलीवरी टास्क के तौर पर सेट करें. अगर ड्राइवर पिक अप को वापस डिपो में ले जा रहा है, तो हमारा सुझाव है कि आप डिपो पर जाकर डिलीवरी टास्क बनाएं.
ड्राइवर ड्रॉप बॉक्स से सामान उठाने के लिए, शेड्यूल किया गया स्टॉप बनाता है. इसे किसी दूसरे पिकअप स्टॉप की तरह ही बनाया गया है. किसी स्टॉप पर वाहन के पहुंचने और टास्क पूरा करने से जुड़ी कार्रवाइयां करें. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप पर जाने के बाद, वाहन के एक स्टॉप के पूरा होने और वाहन को अगले स्टॉप पर ले जाने से जुड़ी कार्रवाइयां करें.
ड्राइवर को सूचना मिलती है कि शिपमेंट को किसी दूसरी जगह पर भेजा जा रहा है. शिपमेंट डिलीवरी की मूल स्थिति को 'पूरा हुआ' पर सेट करें और डिलीवरी की नई जगह के लिए नया शिपमेंट डिलीवरी टास्क बनाएं. ज़्यादा जानकारी के लिए, किसी शिपमेंट का रास्ता बदलना देखें.
ड्राइवर ने पैकेज डिलीवर करने की कोशिश की, लेकिन वह ऐसा नहीं कर पाया. इसे डिलीवरी स्टॉप की तरह ही मॉडल किया गया है, जिसमें डिलीवरी टास्क को 'पूरा हो गया' के तौर पर मार्क किया जाता है. किसी वाहन के किसी स्टॉप पर आने से जुड़ी कार्रवाइयां करें. शिपमेंट की डिलीवरी नहीं हो पाने पर, टास्क बंद कर दें. इसके अलावा, स्टोर के शिपमेंट की स्थिति और दूसरी मुख्य जानकारी भी की जा सकती है. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप पर जाने से पहले, वाहन के एक स्टॉप के पूरा होने और वाहन को अगले स्टॉप पर ले जाने से जुड़ी कार्रवाइयां करें.
ड्राइवर को शिपमेंट होल्ड करने (डिलीवर नहीं करने) के लिए कहा गया. सूचना मिलने और उसकी पुष्टि होने के बाद, टास्क की स्थिति को 'पूरा हुआ' पर सेट करें.
ड्राइवर को यह सूचना दी गई कि वह अगला शिपमेंट डिलीवर करे. साथ ही, डिलीवरी के लिए तय किए गए ऑर्डर में बदलाव किया जाए. टास्क का क्रम अपडेट करें.
ड्राइवर किसी शिपमेंट को ऑर्डर से बाहर डिलीवर करने का विकल्प चुनता है. टास्क का क्रम अपडेट करें और सामान्य तरीके से आगे बढ़ें.
ड्राइवर एक ही जगह पर कई शिपमेंट डिलीवर करता है. इसका मॉडल, किसी एक शिपमेंट डिलीवरी स्टॉप की तरह ही है. स्टॉप पर पहुंचने के बाद, वाहन के किसी स्टॉप पर आने से जुड़ी कार्रवाइयां करें. हर शिपमेंट की डिलीवरी करने के बाद, हर टास्क बंद कर दें. विकल्प के तौर पर, स्टोर के शिपमेंट की स्थिति और अन्य मुख्य जानकारी भी दी जा सकती है. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप पर जाने से पहले, वाहन के एक स्टॉप के पूरा होने और वाहन को अगले स्टॉप पर ले जाने से जुड़ी कार्रवाइयां करें.
दिन खत्म होने का समय ड्राइवर वापस डिपो गया. अगर ड्राइवर अपने रास्ते में पिक अप किए गए शिपमेंट के साथ डिपो में वापस लौटता है, तो आपको सही बिलिंग पक्का करने के लिए हर पैकेज को डिलीवरी टास्क के तौर पर बनाकर बंद भी करना होगा. ऐसा करने के लिए, डिपो को डिलीवरी के किसी भी अन्य स्टॉप की तरह ही मॉडल किया जा सकता है. अगर डिपो का इस्तेमाल डिलीवरी स्टॉप के तौर पर नहीं किया जा रहा है, तब भी आपके पास डिपो को शेड्यूल किए गए स्टॉप के तौर पर मॉडल करने का विकल्प होता है. स्टॉप को मॉडल करने से आपके ड्राइवर वापस डिपो का रास्ता देख पाएंगे और उनके पहुंचने का अनुमानित समय भी पता चल जाएगा.

जगह की जानकारी के अपडेट कैसे काम करते हैं

Fleet Engine की सबसे अच्छी परफ़ॉर्मेंस के लिए, इसे वाहन की जगह की जानकारी का स्ट्रीम अपडेट दें. ये अपडेट देने के लिए, इनमें से किसी भी तरीके का इस्तेमाल करें:

  1. ड्राइवर SDK टूल - Android, iOS -- सबसे आसान विकल्प इस्तेमाल करें.
  2. कस्टम कोड का इस्तेमाल करें -- यह तब फ़ायदेमंद होता है, जब जगहों को आपके बैकएंड के ज़रिए भेजा जाता है या अगर आप Android या iOS के अलावा किसी दूसरे डिवाइस का इस्तेमाल करते हैं.

वाहन की जगह की जानकारी चाहे किसी भी तरह से दी जाए, अगर कोई डिलीवरी वाहन किसी स्टॉप पर (इसमें डिपो भी शामिल है) और जब वह किसी स्टॉप पर पहुंचती है, तब Fleet Engine को अपडेट करने की ज़िम्मेदारी आपके बैकएंड की होती है. फ़्लीट इंजन अपने-आप इन इवेंट का पता नहीं लगाता.

वाहन स्टॉप और डिलीवरी की जगहें

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

डिलीवरी की जगह वह जगह है जहां से शिपमेंट डिलीवर किया जाता है या पिक अप किया जाता है. डिलीवरी की जगह तक जाने और वहां से जाने के लिए, वाहन स्टॉप से कुछ पैदल चलना पड़ सकता है.

उदाहरण के लिए, जब कोई ड्राइवर किसी मॉल के स्टोर में सामान डिलीवर करता है, तो डिलीवरी करने वाला वाहन, मॉल के पार्किंग लॉट में रुक जाता है. यह वाहन, स्टोर के सबसे नज़दीक वाले स्टोर में होता है. यह वाहन का स्टॉप है. इसके बाद, ड्राइवर वाहन स्टॉप से मॉल के अंदर उस जगह तक चलता है जहां स्टोर मौजूद है. यह इस जगह पर डिलीवरी की जाएगी.

अपने उपयोगकर्ताओं के लिए शिपमेंट ट्रैकिंग का सबसे अच्छा अनुभव पाने के लिए, देखें कि वाहन के स्टॉप के लिए शिपिंग के टास्क कैसे असाइन किए जाते हैं. ध्यान रखें कि शिपमेंट से जुड़े टास्क के लिए, वाहन के बचे हुए स्टॉप की संख्या उपयोगकर्ता को रिपोर्ट की जाती है. इससे उन्हें शिपमेंट की प्रोग्रेस देखने में मदद मिलती है.

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

मोबाइल SDK टूल इस्तेमाल करना

ड्राइवर SDK टूल को कोई भी कॉल करने से पहले, पक्का करें कि इसे शुरू किया गया हो.

डिलीवरी ड्राइवर एपीआई को शुरू करें

ड्राइवर SDK में डिलीवरी ड्राइवर एपीआई को शुरू करने से पहले, पक्का करें कि नेविगेशन SDK टूल को शुरू कर दिया हो. इसके बाद, Delivery Driver API को शुरू करें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";

NavigationApi.getNavigator(
   this, // Activity.
   new NavigatorListener() {
     @Override
     public void onNavigatorReady(Navigator navigator) {
       DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
         .setNavigator(navigator)
         .setProviderId(PROVIDER_ID)
         .setVehicleId(VEHICLE_ID)
         .setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
         .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
         .setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
         .setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
             Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
         .build));
     }
     @Override
     public void onError(int errorCode) {
       Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
     }
   });

इस्तेमाल के उदाहरण

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

यूनीक इकाई आइडेंटिफ़ायर

REST कॉल में इस्तेमाल किए जाने वाले यूनीक इकाई आइडेंटिफ़ायर का फ़ॉर्मैट और वैल्यू, Fleet Engine के बारे में पूरी जानकारी नहीं देतीं. अपने-आप बढ़ने वाले आईडी का इस्तेमाल करने से बचें. साथ ही, पक्का करें कि आइडेंटिफ़ायर में व्यक्तिगत पहचान से जुड़ी कोई जानकारी (पीआईआई) न हो, जैसे कि ड्राइवर का फ़ोन नंबर.

वाहन बनाएं

आपके पास Driver SDK टूल की मदद से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से वाहन बनाने का विकल्प होता है.

gRPC

नया वाहन बनाने के लिए, आपको Fleet Engine को CreateDeliveryVehicle कॉल करना होगा. डिलीवरी वाले नए वाहन के एट्रिब्यूट तय करने के लिए, CreateDeliveryVehicleRequest ऑब्जेक्ट का इस्तेमाल करें. ध्यान दें कि Name फ़ील्ड के लिए दी गई किसी भी वैल्यू को, एपीआई के दिशा-निर्देशों के मुताबिक, उपयोगकर्ता के तय किए गए आईडी के लिए अनदेखा किया जाता है. वाहन का आईडी सेट करने के लिए, आपको DeliveryVehicleId फ़ील्ड का इस्तेमाल करना चाहिए.

DeliveryVehicle बनाते समय, आपके पास ये फ़ील्ड तय करने का विकल्प भी होता है:

  • विशेषताएं
  • LastLocation
  • टाइप

कोई अन्य फ़ील्ड सेट न करें. ऐसा करने पर, Fleet Engine गड़बड़ी का मैसेज दिखाता है. ऐसा इसलिए होता है, क्योंकि वे फ़ील्ड या तो रीड-ओनली होते हैं या इन्हें सिर्फ़ UpdateDeliveryVehicle को कॉल करके अपडेट किया जा सकता है.

विकल्प के तौर पर कोई फ़ील्ड सेट किए बिना वाहन बनाने के लिए, CreateDeliveryVehicleRequest में DeliveryVehicle फ़ील्ड को सेट नहीं किया जा सकता.

नीचे दिए गए उदाहरण में, वाहन बनाने के लिए Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    String parent = "providers/" + PROJECT_ID;
    DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
      .addAttributes(DeliveryVehicleAttribute.newBuilder()
        .setKey("route_number").setValue("1"))  // Opaque to the Fleet Engine
      .build();

    // Vehicle request
    CreateDeliveryVehicleRequest createVehicleRequest =
      CreateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setParent(parent)
          .setDeliveryVehicleId(VEHICLE_ID)     // Vehicle ID assigned by the Provider
          .setDeliveryVehicle(vehicle)
          .build();

    // Error handling
    // If Fleet Engine does not have vehicle with that ID and the credentials of the
    // requestor pass, the service creates the vehicle successfully.

    try {
      DeliveryVehicle createdVehicle =
        deliveryService.createDeliveryVehicle(createVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case ALREADY_EXISTS:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

आराम

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

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

<id>, आपके फ़्लीट में डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर होता है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

POST का मुख्य हिस्सा बनाई जाने वाली DeliveryVehicle इकाई के बारे में बताता है. नीचे दिए गए वैकल्पिक फ़ील्ड चुने जा सकते हैं:

  • एट्रिब्यूट
  • lastLocation
  • टाइप

curl कमांड का उदाहरण:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
  "attributes": [{"key": "model", "value": "sedan"}],
  "lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM

Fleet Engine, उपयोगकर्ता के तय किए गए आईडी के लिए, एपीआई से जुड़े हर दिशा-निर्देश के हिसाब से, DeliveryVehicle इकाई के name फ़ील्ड को अनदेखा करता है. कोई अन्य फ़ील्ड सेट न करें. ऐसा करने पर, Fleet Engine गड़बड़ी का मैसेज दिखाता है. ऐसा इसलिए होता है, क्योंकि वे फ़ील्ड या तो रीड-ओनली होते हैं या फिर इन्हें सिर्फ़ UpdateDeliveryVehicle को कॉल करके अपडेट किया जा सकता है.

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

curl कमांड का उदाहरण:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}"

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

आपके पास Driver SDK टूल की मदद से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से शिपमेंट पिकअप करने का टास्क बनाने का विकल्प होता है.

gRPC

नीचे दिए गए उदाहरण में, शिपमेंट पिकअप टास्क बनाने के लिए Java 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;
}

आराम

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

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

<id>, टास्क के लिए यूनीक आइडेंटिफ़ायर होता है. यह शिपमेंट का ट्रैकिंग नंबर नहीं होना चाहिए. अगर आपके सिस्टम में कोई टास्क आईडी नहीं है, तो यूनिवर्सल तौर पर यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    टाइप Type.PICKUP
    state State.OPEN
    trackingId वह नंबर या आइडेंटिफ़ायर जिसका इस्तेमाल किसी शिपमेंट को ट्रैक करने के लिए किया जाता है.
    plannedLocation वह जगह जहां टास्क पूरा करना है. उदाहरण के लिए, शिपमेंट से पिकअप करने की जगह.
    taskDuration पिकअप की जगह से शिपमेंट को पिक अप करने में लगने वाला अनुमानित समय (सेकंड में).

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    targetTimeWindow वह समय विंडो जिसके दौरान टास्क पूरा होना चाहिए. इससे रूटिंग के तरीके पर कोई असर नहीं पड़ता.
    एट्रिब्यूट कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट के लिए एक खास कुंजी होनी चाहिए.

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

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

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

Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से शिपमेंट डिलीवरी टास्क बनाएं.

gRPC

नीचे दिए गए उदाहरण में बताया गया है कि शिपमेंट डिलीवरी टास्क बनाने के लिए, Java 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;
}

आराम

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

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

<id>, टास्क के लिए यूनीक आइडेंटिफ़ायर होता है. यह शिपमेंट का ट्रैकिंग नंबर नहीं होना चाहिए. अगर आपके सिस्टम में कोई टास्क आईडी नहीं है, तो यूनिवर्सल तौर पर यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    टाइप Type.DELIVERY
    state State.OPEN
    trackingId वह नंबर या आइडेंटिफ़ायर जिसका इस्तेमाल किसी शिपमेंट को ट्रैक करने के लिए किया जाता है.
    plannedLocation वह जगह जहां टास्क पूरा करना है. उदाहरण के लिए, इस शिपमेंट की डिलीवरी की जगह.
    taskDuration डिलीवरी की जगह पर शिपमेंट को रवाना होने में लगने वाला अनुमानित समय (सेकंड में).

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    targetTimeWindow वह समय विंडो जिसके दौरान टास्क पूरा होना चाहिए. इससे रूटिंग के तरीके पर कोई असर नहीं पड़ता.
    एट्रिब्यूट कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट के लिए एक खास कुंजी होनी चाहिए.

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

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

बैच बनाने के लिए टास्क

gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से टास्क का बैच बनाया जा सकता है.

gRPC

नीचे दिए गए उदाहरण में, Java gRPC लाइब्रेरी का इस्तेमाल करके दो टास्क बनाने का तरीका बताया गया है. इनमें से एक टास्क बनाने के लिए है और दूसरा एक ही जगह से पिकअप करने के लिए:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

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

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

अनुरोध के हेडर में, Bearer <token> वैल्यू के साथ Authorize फ़ील्ड होना चाहिए. इसमें <token> एक ऐसा टोकन है जो Fleet Engine टोकन फ़ैक्ट्री से जारी किया जाता है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    अनुरोध श्रेणी<CreateTasksRequest>

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    हेडर `deliveryRequestHeader`

requests के हर CreateTasksRequest एलिमेंट को, CreateTask अनुरोध की तरह ही पुष्टि करने से जुड़े नियम पास करने होंगे. हालांकि, parent और header फ़ील्ड का इस्तेमाल करना ज़रूरी नहीं है. अगर इस नीति को सेट किया जाता है, तो ये टॉप लेवल BatchCreateTasksRequest पर मौजूद अपने-अपने फ़ील्ड के जैसे होने चाहिए. शिपिंग के लिए पिकअप का टास्क बनाना और हर एक के लिए पुष्टि करने के खास नियमों के लिए, शिपिंग की डिलीवरी वाला टास्क बनाना देखें.

ज़्यादा जानकारी के लिए, BatchCreateTasks (gRPC, REST) के लिए एपीआई रेफ़रंस दस्तावेज़ देखें.

curl कमांड का उदाहरण:

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "requests" : [
    {
      "taskId": "${DELIVERY_TASK_ID}",
      "task" : {
        "type": "DELIVERY",
        "state": "OPEN",
        "trackingId": "${DELIVERY_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    },
    {
      "taskId": "${PICKUP_TASK_ID}",
      "task" : {
        "type": "PICKUP",
        "state": "OPEN",
        "trackingId": "${PICKUP_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    }
  ]
}
EOM

शेड्यूल की गई अनुपलब्धता

Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, किसी सर्वर एनवायरमेंट की मदद से, उपलब्ध न होने के बारे में बताने वाला टास्क बनाया जा सकता है. उदाहरण के लिए, ड्राइवर के ब्रेक या वाहन में ईंधन भरने के लिए. शेड्यूल किए गए ऐसे टास्क में ट्रैकिंग आईडी शामिल नहीं होना चाहिए जो उपलब्ध नहीं है. आपके पास जगह की जानकारी देने का विकल्प भी होता है.

gRPC

नीचे दिए गए उदाहरण में, बिना उपलब्धता वाला टास्क बनाने के लिए Java 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;
    }

आराम

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

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

<id>, टास्क के लिए यूनीक आइडेंटिफ़ायर होता है. अगर आपके सिस्टम में कोई टास्क आईडी नहीं है, तो दुनिया भर के लिए यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    टाइप Type.UNAVAILABLE
    state State.OPEN
    taskDuration ब्रेक की अवधि (सेकंड में).

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    plannedLocation अगर ब्रेक को किसी खास जगह पर लेना है, तो ब्रेक की जगह.

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

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

शेड्यूल किए गए स्टॉप

शेड्यूल किया गया स्टॉप टास्क, Driver SDK टूल की मदद से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से बनाया जा सकता है. हो सकता है कि शेड्यूल किए गए स्टॉप टास्क में ट्रैकिंग आईडी शामिल न हो.

gRPC

नीचे दिए गए उदाहरण में, शेड्यूल किए गए स्टॉप टास्क को बनाने के लिए Java 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;
}

आराम

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

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

<id>, टास्क के लिए यूनीक आइडेंटिफ़ायर होता है. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सल यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    टाइप Type.SCHEDULED_STOP
    state State.OPEN
    plannedLocation स्टॉप की जगह.
    taskDuration स्टॉप की अनुमानित अवधि (सेकंड में).

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

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

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

टारगेट के लिए समयसीमा सेट करें

टारगेट टाइम विंडो वह TimeWindow है जिसके दौरान टास्क पूरा होना चाहिए. उदाहरण के लिए, अगर डिलीवरी पाने वाले लोगों को डिलीवरी में लगने वाले समय की जानकारी दी जाती है, तो टास्क टारगेट टाइम विंडो का इस्तेमाल करके इस टाइम विंडो को कैप्चर किया जा सकता है. साथ ही, अलर्ट जनरेट किए जा सकते हैं या यात्रा के बाद की परफ़ॉर्मेंस का विश्लेषण करने के लिए, फ़ील्ड का इस्तेमाल किया जा सकता है.

टारगेट समय विंडो में शुरू होने का समय और खत्म होने का समय होता है और इसे किसी भी तरह के टास्क पर सेट किया जा सकता है. टारगेट टाइम विंडो से रूटिंग के व्यवहार पर कोई असर नहीं पड़ता है.

gRPC

नीचे दिए गए उदाहरण में, टास्क टाइम विंडो सेट करने के लिए Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

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

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Task settings
    String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
    Task task = Task.newBuilder()
      .setName(taskName)
      .setTargetTimeWindow(
        TimeWindow.newBuilder()
          .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
          .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
      .build();

    // Task request
    UpdateTaskRequest updateTaskRequest =
      UpdateTaskRequest.newBuilder()  // No need for the header
          .setTask(task)
          .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
          .build();

    try {
      Task updatedTask = deliveryService.updateTask(updateTaskRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

आराम

एचटीटीपी का इस्तेमाल करके टास्क के समय की विंडो सेट करने के लिए, UpdateTask को कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow`

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

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

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

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

टास्क ट्रैकिंग की विज़िबिलिटी कॉन्फ़िगरेशन सेट करें

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

gRPC

नीचे दिए गए उदाहरण में, टास्क ट्रैकिंग व्यू कॉन्फ़िगरेशन को सेट करने के लिए Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

आराम

एचटीटीपी का इस्तेमाल करके, टास्क ट्रैकिंग व्यू कॉन्फ़िगरेशन विंडो सेट करने के लिए, UpdateTask को कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig`

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

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    taskTrackingViewConfig टास्क ट्रैकिंग का कॉन्फ़िगरेशन तय करता है कि असली उपयोगकर्ताओं को कौनसे डेटा एलिमेंट किन स्थितियों में दिखते हैं.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

किसी वाहन को टास्क असाइन करना

वाहन के लिए टास्क का ऑर्डर अपडेट करके, डिलीवरी वाहन को टास्क असाइन किए जाते हैं. वाहन के स्टॉप की सूची के हिसाब से टास्क का क्रम तय किया जाता है. साथ ही, हर वाहन स्टॉप के लिए एक या उससे ज़्यादा टास्क असाइन किए जा सकते हैं. ज़्यादा जानकारी के लिए, टास्क का क्रम अपडेट करना देखें.

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

टास्क के क्रम को अपडेट करें

किसी वाहन को असाइन किए गए ऑर्डर के टास्क, Driver SDK टूल या सर्वर एनवायरमेंट से अपडेट किए जा सकते हैं. नस्ल की स्थितियों से बचने और सच्चाई का एक ही स्रोत बनाए रखने के लिए दोनों तरीकों का इस्तेमाल न करें.

किसी वाहन के लिए, टास्क का क्रम अपडेट करने पर, ये काम भी किए जाते हैं:

  • वाहन के लिए नए टास्क असाइन किए जाते हैं.
  • ऐसे टास्क को बंद कर देता है जिन्हें पहले वाहन को असाइन किया गया था, लेकिन वे टास्क अपडेट किए गए क्रम में नहीं हैं.

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

टास्क के क्रम को किसी भी समय अपडेट किया जा सकता है.

gRPC

नीचे दिए गए उदाहरण में, वाहन के लिए टास्क के क्रम को अपडेट करने के लिए Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.NEW)))
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

सर्वर एनवायरमेंट से वाहन के लिए, टास्क का क्रम अपडेट करने के लिए, UpdateDeliveryVehicle पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id>, आपके फ़्लीट में डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर है. इसके लिए, आपको टास्क के क्रम को अपडेट करना है. यह ऐसा आइडेंटिफ़ायर है जिसे वाहन बनाते समय इस्तेमाल किया गया था.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    remainingVehicleJourneySegments टास्क को जिस क्रम में लागू करना है उसके हिसाब से सफ़र के सेगमेंट की सूची. सूची में मौजूद पहला टास्क पहले एक्ज़ीक्यूट किया जाता है.
    बची हुई गाड़ी का जर्नी सेगमेंट[i].stop सूची में टास्क i का स्टॉप.
    बचे हुएVehicleJourneyसेगमेंट[i].stop.planedLocation स्टॉप के लिए योजना के मुताबिक जगह.
    बचे हुएVehicleJourneysegments[i].stop.tasks वाहन के इस स्टॉप पर किए जाने वाले कामों की सूची.
    remainingVehicleJourneySegments[i].stop.state State.NEW

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

वाहन अगले स्टॉप के रास्ते में है

जब कोई वाहन किसी स्टॉप से रवाना होता है या नेविगेशन शुरू करता है, तो फ़्लीट इंजन को इसकी सूचना दी जानी चाहिए. Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से Fleet Engine को सूचना दी जा सकती है. नस्ल की स्थितियों से बचने और सच्चाई के एक ही स्रोत को बनाए रखने के लिए दोनों तरीकों का इस्तेमाल न करें.

gRPC

नीचे दिए गए उदाहरण में, Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है, ताकि फ़्लीट इंजन को यह सूचना दी जा सके कि कोई वाहन अगले स्टॉप पर है.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
        // Next stop marked as ENROUTE
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.7749)
                       .setLongitude(122.4194)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
               .setState(VehicleStop.State.ENROUTE)))
        // All other stops marked as NEW
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.3382)
                       .setLongitude(121.8863)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
               .setState(VehicleStop.State.NEW)))
        .build();

    // DeliveryVehicle request
    UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
      UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setName(vehicleName)
          .setDeliveryVehicle(deliveryVehicle)
          .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
          .build();

    try {
      DeliveryVehicle updatedDeliveryVehicle =
          deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

आराम

Fleet Engine को यह बताने के लिए कि कोई वाहन सर्वर एनवायरमेंट से अपने अगले स्टॉप के रास्ते में है, UpdateDeliveryVehicle पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id>, आपके फ़्लीट में डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर है. इसके लिए, आपको टास्क के क्रम को अपडेट करना है. यह ऐसा आइडेंटिफ़ायर है जिसे वाहन बनाते समय इस्तेमाल किया गया था.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    remainingVehicleJourneySegments बची हुई गाड़ियों के स्टॉप की सूची जिनके राज्यों को State.NEW के तौर पर मार्क किया गया है. सूची में पहले स्टॉप के राज्य को State.ENROUTE के तौर पर मार्क किया जाना चाहिए.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को सूचना के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ENROUTE",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

वाहन की जगह की जानकारी अपडेट करें

अगर वाहन की जगह की जानकारी अपडेट करने के लिए ड्राइवर SDK टूल का इस्तेमाल नहीं किया जा रहा है, तो वाहन की जगह की जानकारी के साथ Fleet Engine को सीधे कॉल किया जा सकता है. किसी भी चालू वाहन के लिए, Fleet Engine हर मिनट में कम से कम एक बार और हर पांच सेकंड में एक बार जगह की जानकारी अपडेट करना चाहता है.

gRPC

नीचे दिए गए उदाहरण में, Fleet Engine में किसी वाहन की जगह की जानकारी अपडेट करने के लिए, Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
    .setLastLocation(DeliveryVehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(myDeliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("last_location"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

एचटीटीपी REST का इस्तेमाल करके, Fleet Engine में वाहन की जगह की जानकारी अपडेट करने के लिए, UpdateDeliveryVehicle को कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`

<id>, आपके फ़्लीट में मौजूद डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर होता है या जिसे आपको जगह की जानकारी अपडेट करनी है. यह ऐसा आइडेंटिफ़ायर है जिसे वाहन बनाते समय इस्तेमाल किया गया था.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    lastLocation.supplementalLocation वाहन की जगह.
    lastLocation.supplementalLocationTime वह आखिरी टाइमस्टैंप जब वाहन इस जगह पर था.
    lastLocation.supplementalLocationSensor CUSTOMER_SUPPLIED_LOCATION से भरा जाना चाहिए.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    lastLocation.supplementalLocationAccuracy दी गई जगह की सटीक जानकारी, मीटर में.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "lastLocation": {
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
  }
}
EOM

वाहन स्टॉप पर आई है

जब कोई वाहन किसी स्टॉप पर आता है, तो फ़्लीट इंजन को इसकी सूचना दी जानी चाहिए. Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से, Fleet Engine को सूचना दी जा सकती है. नस्ल की स्थितियों से बचने और सच्चाई के एक ही स्रोत को बनाए रखने के लिए दोनों तरीकों का इस्तेमाल न करें.

gRPC

नीचे दिए गए उदाहरण में, Java gRPC लाइब्रेरी का इस्तेमाल करके फ़्लीट इंजन को यह सूचना देने का तरीका बताया गया है कि कोई वाहन किसी स्टॉप पर आया है:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Marking the arrival at stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

सर्वर एनवायरमेंट से स्टॉप पर वाहन के आने की सूचना फ़्लीट इंजन को देने के लिए, UpdateDeliveryVehicle पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id>, आपके फ़्लीट में डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर है. इसके लिए, आपको टास्क के क्रम को अपडेट करना है. यह ऐसा आइडेंटिफ़ायर है जिसे वाहन बनाते समय इस्तेमाल किया गया था.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    remainingVehicleJourneySegments वह स्टॉप जहां आप पहुंचते हैं और उसका स्टेटस State.ARRIVED के तौर पर सेट किया गया है. इसके बाद, वाहन के बाकी स्टॉप की सूची के साथ उनके राज्य को State.NEW के तौर पर मार्क किया गया है.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ARRIVED",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

वाहन के एक स्टॉप को पूरा किया जा रहा है

जब कोई वाहन स्टॉप को पूरा करता है, तो फ़्लीट इंजन को इसकी सूचना दी जानी चाहिए. इससे स्टॉप से जुड़े सभी टास्क, 'बंद है' पर सेट हो जाएंगे. Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, किसी सर्वर एनवायरमेंट से, Fleet Engine को सूचना दी जा सकती है. नस्ल की स्थितियों से बचने और सच्चाई का एक ही स्रोत बनाए रखने के लिए, दोनों तरीकों का इस्तेमाल न करें.

gRPC

नीचे दिए गए उदाहरण में, Java gRPC लाइब्रेरी का इस्तेमाल करके, फ़्लीट इंजन को यह सूचना दी जाती है कि कोई वाहन रुक गया है.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // This stop has been completed and is commented out to indicate it
    // should be removed from the list of vehicle journey segments.
    // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
    //    .setStop(VehicleStop.newBuilder()
    //        .setPlannedLocation(LocationInfo.newBuilder()
    //            .setPoint(LatLng.newBuilder()
    //                .setLatitude(37.7749)
    //                .setLongitude(122.4194)))
    //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
    //        .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    // The next stop could be marked as ENROUTE if the vehicle has begun
    // its journey to the next stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

सर्वर एनवायरमेंट से स्टॉप के पूरा होने के बारे में Fleet Engine को सूचना देने के लिए, UpdateDeliveryVehicle पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`

<id>, आपके फ़्लीट में डिलीवरी वाहन के लिए यूनीक आइडेंटिफ़ायर है. इसके लिए, आपको टास्क के क्रम को अपडेट करना है. यह ऐसा आइडेंटिफ़ायर है जिसे वाहन बनाते समय इस्तेमाल किया गया था.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    remaining_vehicle_journey_segments आपने जो स्टॉप पूरा कर लिया है वह अब वाहन के बाकी स्टॉप की सूची में नहीं होना चाहिए.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    • कोई नहीं

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

    # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
    # environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "remainingVehicleJourneySegments": [
        {
          "stop": {
            "state": "NEW",
            "plannedLocation": {
              "point": {
                "latitude": 37.3382,
                "longitude": 121.8863
              }
            },
            "tasks": [
              {
                "taskId": "${TASK2_ID}"
              }
            ]
          }
        }
      ]
    }
    EOM

टास्क को अपडेट करना

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

gRPC

यह gRPC की मदद से टास्क को अपडेट करने का एक उदाहरण है.

आराम

यह REST की मदद से, टास्क को अपडेट करने का एक उदाहरण है.

टास्क बंद करना

किसी गाड़ी के लिए असाइन किए गए टास्क को बंद करने के लिए, Fleet Engine को सूचना दें कि टास्क पूरा हो गया है. इसके अलावा, उसे वाहन के स्टॉप की सूची से भी हटाया जा सकता है. बाकी बचे वाहन स्टॉप की सूची को उसी तरह सेट किया जा सकता है जैसे किसी वाहन के टास्क के क्रम को अपडेट करते समय किया जाता है.

अगर किसी टास्क को अभी तक गाड़ी असाइन नहीं की गई है और उसे बंद करने की ज़रूरत है, तो टास्क को 'बंद है' पर सेट करें. हालांकि, आप किसी बंद टास्क को फिर से नहीं खोल सकते.

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

gRPC

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setState(Task.State.CLOSED) // You can only directly CLOSE a
  .build();                    // task that is NOT assigned to a vehicle.

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

सर्वर एनवायरमेंट से किसी टास्क को 'बंद है' के तौर पर मार्क करने के लिए, UpdateTask पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state`

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

आपके अनुरोध के हेडर में ऑथराइज़ेशन फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री से जारी किया गया टोकन है.

आपको अनुरोध के लेख में Task इकाई शामिल करनी होगी:

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    state State.CLOSED

  • ये फ़ील्ड ज़रूरी नहीं हैं:

    फ़ील्डवैल्यू
    taskOutcome result.. या RESULT.FAILED
    taskOutcomeTime टास्क पूरा होने का समय.
    taskOutcomeLocation वह जगह जहां टास्क पूरा हुआ. जब तक वाहन की सेवा देने वाली कंपनी मैन्युअल तरीके से बदलाव नहीं करती, तब तक फ़्लीट इंजन वाहन को डिफ़ॉल्ट रूप से आखिरी जगह पर सेट कर देता है.

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "state": "CLOSED",
      "taskOutcome": "SUCCEEDED",
      "taskOutcomeTime": "$(date -u --iso-8601=seconds)"
    }
    EOM

टास्क का नतीजा और नतीजे की जगह सेट करें

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

जो टास्क बंद हैं Fleet Engine, सिर्फ़ डिलीवरी के टास्क के लिए शुल्क लेता है. हालांकि, यह शुल्क सिर्फ़ Shopping की स्थिति में होता है.

किसी टास्क के नतीजे के तौर पर मार्क करते समय, Fleet Engine टास्क के नतीजों की जगह में, वाहन की आखिरी जगह की जानकारी अपने-आप भर देता है. इस व्यवहार को बदला जा सकता है.

gRPC

आउटकम सेट करते समय, आपके पास टास्क के नतीजे की जगह सेट करने का विकल्प होता है. जगह की जानकारी सेट करने पर, फ़्लीट इंजन इसे वाहन की आखिरी जगह की डिफ़ॉल्ट जगह पर सेट नहीं कर पाता. आप चाहें, तो बाद में टास्क के नतीजे की जगह फ़्लीट इंजन सेट को ओवरराइट भी किया जा सकता है. Fleet Engine, टास्क के नतीजे की जगह की जानकारी को कभी नहीं बदलता. जिस टास्क के लिए नतीजा सेट नहीं किया गया है उसके लिए, टास्क के नतीजे वाली जगह सेट नहीं की जा सकती. एक ही अनुरोध में, टास्क के नतीजे और टास्क के नतीजे की जगह, दोनों को सेट किया जा सकता है.

इस उदाहरण में दिखाया गया है कि Java gRPC लाइब्रेरी का इस्तेमाल करके, टास्क के नतीजे को एक्सप्लोर पर कैसे सेट करें और उस जगह को सेट करें जहां टास्क पूरा हुआ है:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskOutcome(TaskOutcome.SUCCEEDED)
  .setTaskOutcomeTime(now())
  .setTaskOutcomeLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

सर्वर एनवायरमेंट से किसी टास्क को 'पूरा हो गया' के तौर पर मार्क करने के लिए, UpdateTask पर एचटीटीपी REST कॉल करें:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation`

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

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

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

  • ज़रूरी फ़ील्ड:

    फ़ील्डवैल्यू
    taskOutcome result.. या RESULT.FAILED
    taskOutcomeTime वह टाइमस्टैंप जब सेवा देने वाली कंपनी की ओर से टास्क सेट किया गया. इस समय टास्क पूरा हुआ.

  • ये फ़ील्ड ज़रूरी नहीं हैं:

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

इकाई के अन्य सभी फ़ील्ड को अपडेट के लिए अनदेखा कर दिया जाता है.

curl कमांड का उदाहरण:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

शिपमेंट का रास्ता बदलना

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

फ़ीडर और डिलीवरी वाहनों का इस्तेमाल करें

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

शिपमेंट की स्थिति और दूसरी मेटा जानकारी स्टोर करें

शिपमेंट पूरा हो जाने पर, टास्क की स्थिति और नतीजे को टास्क में रिकॉर्ड कर लिया जाता है. हालांकि, हो सकता है कि आप शिपमेंट के लिए खास तौर पर दूसरी मेटा जानकारी अपडेट करना चाहें. ऐसी अन्य मेटा जानकारी स्टोर करने के लिए जिसे आप Fleet Engine सेवा के बाहर रेफ़रंस कर सकते हैं, टास्क से जुड़े Tracking_id का इस्तेमाल बाहरी टेबल में कुंजी के रूप में करें.

ज़्यादा जानकारी के लिए, टास्क की अवधि देखें.

कोई वाहन खोजें

कोई वाहन या तो Driver SDK टूल से या gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से खोजा जा सकता है.

gRPC

नीचे दिए गए उदाहरण में, किसी वाहन को खोजने के लिए Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder()  // No need for the header
    .setName(name)
    .build();

try {
  DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

आराम

किसी सर्वर एनवायरमेंट से वाहन खोजने के लिए, GetVehicle पर एचटीटीपी REST कॉल करें:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>`

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

<vehicleId> वाहन का आईडी है, ताकि उसे खोजा जा सके.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

अनुरोध का मुख्य हिस्सा खाली होना चाहिए.

अगर खोज पूरी हो जाती है, तो रिस्पॉन्स के मुख्य हिस्से में वाहन की कोई इकाई शामिल होती है.

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}/deliveryVehicles/${VEHICLE_ID}"

कोई टास्क खोजना

gRPC या REST का इस्तेमाल करके, सर्वर एनवायरमेंट से कोई टास्क खोजा जा सकता है. ड्राइवर SDK टूल किसी टास्क को खोजने की सुविधा नहीं देता.

gRPC

नीचे दिए गए उदाहरण में, किसी टास्क को खोजने के लिए Java 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;
}

आराम

किसी सर्वर एनवायरमेंट से कोई टास्क खोजने के लिए, GetTask पर एचटीटीपी REST कॉल करें:

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

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

<taskId> टास्क का आईडी है, जिसे खोजना है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

अनुरोध का मुख्य हिस्सा खाली होना चाहिए.

अगर लुकअप पूरा हो जाता है, तो रिस्पॉन्स के मुख्य हिस्से में एक टास्क एंटिटी शामिल होती है.

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}"

शिपमेंट से जुड़े टास्क की जानकारी, उसके ट्रैकिंग आईडी की मदद से खोजें

शिपमेंट से जुड़े टास्क की जानकारी को यहां बताए गए तरीकों से देखा जा सकता है. हर एक का अलग मकसद है:

  • टास्क आईडी के हिसाब से: इसका इस्तेमाल, फ़्लीट ऑपरेटर जैसे उपयोगकर्ता करते हैं जिनके पास टास्क के डेटा का पूरा व्यू ऐक्सेस होता है.
  • ट्रैकिंग आईडी के ज़रिए: इसका इस्तेमाल आपका क्लाइंट सॉफ़्टवेयर, असली उपयोगकर्ता को सीमित जानकारी देने के लिए करता है. जैसे, जब उनके घर पर पैकेज पहुंचने की संभावना हो.

इस सेक्शन में, ट्रैकिंग आईडी की मदद से टास्क की जानकारी खोजने के बारे में बताया गया है. अगर आपको टास्क आईडी की मदद से कोई टास्क खोजना है, तो टास्क खोजें पर जाएं.

ट्रैकिंग आईडी की मदद से जानकारी देखने के लिए, इनमें से किसी एक का इस्तेमाल किया जा सकता है:

लुकअप की ज़रूरी शर्तें

  • ट्रैकिंग आईडी से दी गई शिपमेंट की जानकारी, 'किसको दिखे' नियमों के मुताबिक होती है. ये नियम ट्रैक की गई जगहों की जानकारी को कंट्रोल करना सेक्शन में बताए गए हैं.

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

  • सुरक्षा से जुड़े खतरों को कम करने के लिए, सबसे छोटे टोकन का इस्तेमाल करें. उदाहरण के लिए, अगर किसी डिलीवरी कंज़्यूमर टोकन का इस्तेमाल किया जाता है, तो कोई भी Fleet Engine डिलीवरी एपीआई कॉल, सिर्फ़ उस असली उपयोगकर्ता के काम की जानकारी दिखा सकता है. जैसे, शिपमेंट का शिप करने वाला या पाने वाला. जवाबों में मौजूद अन्य जानकारी छिपा दी जाती है. टोकन के बारे में ज़्यादा जानकारी के लिए, अनुमति देने के लिए JSON Web Token (JWT) बनाना लेख पढ़ें.

gRPC का इस्तेमाल करके Java के साथ लुकअप

नीचे दिए गए उदाहरण में, किसी शिपमेंट टास्क के ट्रैकिंग आईडी के हिसाब से जानकारी देखने के लिए Java 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;
}

एचटीटीपी का इस्तेमाल करके खोजें

किसी ब्राउज़र से शिपमेंट टास्क देखने के लिए, GetTaskTrackingInfo पर एचटीटीपी REST कॉल करें:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`

<tracking_id>, टास्क से जुड़ा ट्रैकिंग आईडी है.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token> एक ऐसा टोकन है जो Fleet Engine टोकन फ़ैक्ट्री से जारी किया जाता है.

अगर यह लुकअप सफल रहता है, तो जवाब के मुख्य हिस्से में एक 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}"

टास्क की सूची बनाएं

आपके पास सर्वर या ब्राउज़र एनवायरमेंट से टास्क की सूची बनाने का विकल्प होता है. ड्राइवर SDK टूल, सूची के टास्क पर काम नहीं करता.

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

सूची में दिए गए टास्क में, इन फ़ील्ड को छिपाने के लिए बदलाव किया गया है:

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

सूची में दिए गए टास्क, ज़्यादातर टास्क प्रॉपर्टी के हिसाब से फ़िल्टर किए जा सकते हैं. फ़िल्टर क्वेरी सिंटैक्स के लिए, AIP-160 देखें. इस सूची में मान्य टास्क प्रॉपर्टी दिखाई गई हैं, जिनका इस्तेमाल फ़िल्टर करने के लिए किया जा सकता है:

  • एट्रिब्यूट
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_outcome
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • टाइप

Google API को बेहतर बनाने के प्रस्तावों के आधार पर, फ़ील्ड के इन फ़ॉर्मैट का इस्तेमाल करें:

फ़ील्ड प्रकार फ़ॉर्मैट उदाहरण
टाइमस्टैंप RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
कुल समय s के बाद सेकंड की संख्या task_duration = 120s
Enum स्ट्रिंग state = CLOSED AND type = PICKUP
जगह point.latitude और point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

फ़िल्टर क्वेरी ऑपरेटर की पूरी सूची के लिए, AIP-160 देखें.

अगर कोई फ़िल्टर क्वेरी नहीं दी गई है, तो सभी टास्क सूची में दिखेंगे.

टास्क की सूचियों को क्रम से लगाया जाता है. टास्क के अनुरोधों की सूची में, पेज का साइज़ तय किया जा सकता है. अगर पेज का साइज़ तय किया गया है, तो दिखाए गए टास्क की संख्या, पेज के साइज़ से ज़्यादा नहीं है. अगर पेज का कोई साइज़ मौजूद नहीं है, तो सही डिफ़ॉल्ट का इस्तेमाल किया जाता है. अगर अनुरोध किए गए पेज का साइज़ आंतरिक अधिकतम मान से ज़्यादा है, तो आंतरिक अधिकतम मान का इस्तेमाल किया जाता है.

टास्क की सूची में, नतीजों का अगला पेज पढ़ने के लिए टोकन शामिल हो सकता है. पेज टोकन का इस्तेमाल ऐसे अनुरोध के साथ करें जो टास्क का अगला पेज वापस पाने के लिए पिछले अनुरोध के जैसा हो. अगर दिखाया गया पेज टोकन खाली है, तो उसे वापस पाने के लिए कोई और टास्क उपलब्ध नहीं होगा.

gRPC

नीचे दिए गए उदाहरण में, DeliveryVehicleId और टास्क एट्रिब्यूट के टास्क लिस्ट करने के लिए, Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है. कामयाब जवाब अब भी खाली हो सकता है. खाली जवाब से पता चलता है कि दिए गए DeliveryVehicleId से कोई भी टास्क नहीं जुड़ा है.

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;
}

आराम

किसी ब्राउज़र से टास्क सूची में जोड़ने के लिए, ListTasks पर एचटीटीपी REST कॉल करें:

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

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

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

अगर लुकअप पूरा हो जाता है, तो रिस्पॉन्स के मुख्य हिस्से में इस स्ट्रक्चर वाला डेटा शामिल होता है:

    // 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}"

डिलीवरी करने वाले वाहनों की लिस्टिंग करें

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

डिलीवरी की सुविधा देने वाले वाहनों की लिस्टिंग के लिए, डिलीवरी वाहनों के लिए ब्रॉड ऐक्सेस का अनुरोध किया जाता है. यह सुविधा सिर्फ़ भरोसेमंद लोगों के लिए है. लिस्ट डिलीवरी वाहनों का अनुरोध करते समय, डिलीवरी फ़्लीट रीडर या डिलीवरी सुपर उपयोगकर्ता की पुष्टि करने वाले टोकन का इस्तेमाल करें.

डिलीवरी करने वाले वाहनों में, रिस्पॉन्स के साइज़ पर असर होने की वजह से, नीचे दिए गए फ़ील्ड छिपा दिए गए हैं:

  • CurrentRouteSegment
  • RemainingVehicleJourneySegments

डिलीवरी की सुविधा देने वाले वाहनों की सूची को उनकी attributes प्रॉपर्टी के हिसाब से फ़िल्टर किया जा सकता है. उदाहरण के लिए, my_key कुंजी और my_value वैल्यू वाले किसी एट्रिब्यूट की क्वेरी करने के लिए, attributes.my_key = my_value का इस्तेमाल करें. एक से ज़्यादा एट्रिब्यूट की क्वेरी करने के लिए, लॉजिकल AND और OR ऑपरेटर का इस्तेमाल करके, क्वेरी को जोड़ें, जैसा कि attributes.key1 = value1 AND attributes.key2 = value2 में बताया गया है. फ़िल्टर क्वेरी के सिंटैक्स की पूरी जानकारी के लिए, AIP-160 देखें.

viewport अनुरोध पैरामीटर का इस्तेमाल करके, लिस्ट किए गए डिलीवरी वाहनों को जगह के हिसाब से फ़िल्टर किया जा सकता है. viewport अनुरोध पैरामीटर, डेटा को जोड़ने के लिए दो निर्देशांक इस्तेमाल करता है: high (उत्तर-पूर्व) और low (दक्षिण-पश्चिम) अक्षांश और देशांतर निर्देशांकों की जोड़ी. अनुरोधों को तब अस्वीकार किया जाता है, जब उनमें ज़्यादा अक्षांश होता है, जो भौगोलिक रूप से कम अक्षांश से कम होता है.

डिलीवरी करने वाले वाहन की सूचियों को डिफ़ॉल्ट रूप से, पेज पर एक क्रम में लगाया जाता है. इसके लिए, पेज का सही साइज़ इस्तेमाल किया जाता है. अगर पेज का साइज़ तय किया जाता है, तो अनुरोध में सिर्फ़, सीमा या कम के हिसाब से वाहनों की संख्या दिखाई जाती है. अगर अनुरोधित पेज का आकार आंतरिक अधिकतम मान से अधिक हो जाता है, तो आंतरिक अधिकतम का उपयोग किया जाता है. डिफ़ॉल्ट और ज़्यादा से ज़्यादा, पेजों का साइज़, दोनों ही 100 वाहनों में हो सकता है.

डिलीवरी वाहनों की सूची में, नतीजों का अगला पेज पढ़ने के लिए टोकन शामिल हो सकता है. जवाब के तौर पर पेज का टोकन सिर्फ़ तब दिखता है, जब डिलीवरी के लिए वाहनों के दूसरे पेज वापस पाने के लिए उपलब्ध हों. टास्क का अगला पेज वापस पाने के लिए, पेज टोकन का इस्तेमाल ऐसे अनुरोध के साथ करें जो पिछले अनुरोध जैसा है.

gRPC

नीचे दिए गए उदाहरण में, किसी एट्रिब्यूट की मदद से किसी खास इलाके में डिलीवरी वाले वाहनों की सूची बनाने के लिए, Java gRPC लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है. अगर कोई जवाब सफल है, तो उसे खाली छोड़ा जा सकता है. ऐसा होने पर, इसका मतलब है कि बताए गए एट्रिब्यूट वाला कोई भी वाहन, बताए गए व्यूपोर्ट में पहले से मौजूद नहीं है.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
  ListDeliveryVehiclesRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setViewport(
            Viewport.newBuilder()
              .setHigh(LatLng.newBuilder()
                  .setLatitude(37.45)
                  .setLongitude(-122.06)
                  .build())
              .setLow(LatLng.newBuilder()
                  .setLatitude(37.41)
                  .setLongitude(-122.11)
                  .build())
      .setFilter("attributes.my_key = my_value")
      .build();

try {
  ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
      deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
          break;

      case PERMISSION_DENIED:
          break;
  }
  return;
}

आराम

किसी ब्राउज़र से टास्क सूची में जोड़ने के लिए, ListDeliveryVehicles पर एचटीटीपी REST कॉल करें:

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

सूची में दिए गए टास्क में फ़िल्टर लागू करने के लिए, "फ़िल्टर" यूआरएल पैरामीटर शामिल करें. इसकी वैल्यू के तौर पर यूआरएल-एस्केप्ड फ़िल्टर क्वेरी शामिल करें.

अनुरोध के हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू Bearer <token> है. इसमें <token>, Fleet Engine टोकन फ़ैक्ट्री की ओर से जारी किया गया टोकन है.

अगर लुकअप पूरा हो जाता है, तो रिस्पॉन्स के मुख्य हिस्से में इस स्ट्रक्चर वाला डेटा शामिल होता है:

// JSON representation
{
  "deliveryVehicles": [
    {
      object (DeliveryVehicle)
    }
  ],
  "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}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"

शिपमेंट ट्रैक करना

शिपमेंट ट्रैकिंग को चालू करने के लिए, आपके पास Fleet Engine डिलीवरी API का इस्तेमाल करने के दो विकल्प हैं:

  • सुझाया गया: JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी का इस्तेमाल करें. इस लाइब्रेरी की मदद से, Fleet Engine में ट्रैक की गई गाड़ियों की जगह और दिलचस्पी वाली जगहों को विज़ुअलाइज़ किया जा सकता है. इसमें JavaScript मैप कॉम्पोनेंट होता है जो स्टैंडर्ड google.maps.Maps ऑब्जेक्ट और Fleet Engine से कनेक्ट करने के लिए डेटा कॉम्पोनेंट को ड्रॉप-इन में बदलता है. इस कॉम्पोनेंट की मदद से, अपने वेब या मोबाइल ऐप्लिकेशन से, ऐनिमेशन वाले शिपमेंट ट्रैकिंग का अनुभव दिया जा सकता है. इस अनुभव को आपकी पसंद के मुताबिक भी बनाया जा सकता है.

  • Fleet Engine डिलीवरी एपीआई पर, अपनी शिपमेंट ट्रैकिंग लागू करें.

सबसे ज़रूरी है कि ट्रैकिंग आईडी के हिसाब से शिपमेंट के टास्क खोजे जाएं.

अगर आपने डिलीवरी उपभोक्ता की भूमिका के तहत कोई काम किया है, तो कोई भी Fleet Engine डिलीवरी एपीआई कॉल सिर्फ़ वही जानकारी दिखाता है जो शिपर या रिसीवर से जुड़ी है. जवाबों में मौजूद दूसरी सभी जानकारी छिपा दी जाती है. असली उपयोगकर्ताओं की पुष्टि करने की ज़िम्मेदारी आपकी है. साथ ही, जगह की जानकारी, पहले से किए जा रहे टास्क के आधार पर फ़िल्टर की जाती है. उपलब्धता न होने की स्थिति में, किसी असली उपयोगकर्ता के साथ जगह की कोई जानकारी शेयर नहीं की जाती.

लॉगिंग

आपके पास Fleet Engine को इस तरह सेट करने का विकल्प होता है कि वह क्लाउड लॉगिंग को RPC लॉग भेजे. ज़्यादा जानकारी के लिए, लॉग करना देखें.

अनुमति देने से जुड़ी भूमिकाएं और टोकन

जैसा कि वाहन और टास्क की लाइफ़साइकल मैनेज करना में बताया गया है और अलग-अलग इस्तेमाल के उदाहरणों के लिए अनुमति वाले नोट में, Fleet Engine को कॉल करने के लिए, उन JSON वेब टोकन की मदद से पुष्टि करना ज़रूरी होता है जिन पर सेवा खाते के क्रेडेंशियल का इस्तेमाल करके साइन किया गया है. ये टोकन जारी करने के लिए इस्तेमाल किए जाने वाले सेवा खातों की एक या उससे ज़्यादा भूमिकाएं हो सकती हैं. हर भूमिका के लिए, अलग-अलग अनुमतियां हो सकती हैं.

ज़्यादा जानकारी के लिए, पुष्टि करना और अनुमति देना देखें.

अक्सर होने वाली समस्याएं हल करना

अगर आपको कोई समस्या होती है, तो सहायता के लिए नीचे दिए गए सेक्शन देखें.

रेज़िलिएंस

फ़्लीट इंजन को सच्चाई का स्रोत नहीं माना जाता. अगर ज़रूरी हो, तो फ़्लीट इंजन के बिना अपने सिस्टम को पहले जैसा करने की ज़िम्मेदारी आपकी है.

फ़्लीट इंजन में खोई हुई स्थिति

Fleet Engine के साथ काम करते समय क्लाइंट को लागू करें, ताकि किसी फ़ेल होने पर सिस्टम खुद ही उन्हें ठीक कर सके. उदाहरण के लिए, जब फ़्लीट इंजन किसी वाहन को अपडेट करने की कोशिश करता है, तो उसे गड़बड़ी का मैसेज दिख सकता है. इससे पता चलता है कि वाहन मौजूद नहीं है. इसके बाद क्लाइंट को वाहन को नई स्थिति में फिर से बनाना चाहिए. हालांकि, यह समस्या शायद ही कभी होती है, लेकिन पक्का करें कि आपका सिस्टम इससे निपटने के लिए तैयार हो.

फ़्लीट इंजन के काम करने की किसी भयानक नाकामी की स्थिति में, आपको ज़्यादातर या सभी गाड़ियां और टास्क फिर से बनाने की ज़रूरत पड़ सकती है. अगर बनाए जाने की दर बहुत ज़्यादा हो जाती है, तो कोटा से जुड़ी समस्याओं की वजह से कुछ अनुरोध फिर से पूरे नहीं हो पाएंगे. इसकी वजह यह है कि सेवा में रुकावट (डीओएस) के हमलों से बचने के लिए, कोटे की जांच की जाती है. ऐसे मामले में, फिर से कोशिश करने के लिए बैकऑफ़ रणनीति का इस्तेमाल करके, मनोरंजन की दर कम करें.

ड्राइवर ऐप्लिकेशन में खोए हुए डिवाइस की स्थिति

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

अक्सर पूछे जाने वाले सवाल

अगर कोई ड्राइवर बिना बताए किसी काम के लिए रुक जाए, तो क्या होगा?

ऐसा होने पर, पहले टास्क का क्रम अपडेट करें. इसके बाद, सामान्य तरीके से आगे बढ़ें. इसमें स्टॉप पर पहुंचने, टास्क पूरे होने, और अन्य जानकारी को मार्क करना शामिल है. अगर आप ऐसा नहीं करते हैं, तो सिस्टम में गड़बड़ी हो सकती है, ETA गलत हो सकते हैं, और अचानक से कुछ गड़बड़ियां रिपोर्ट की जा सकती हैं.