Fleet Engine डिलीवरी एपीआई की मदद से, डिलीवरी के शुरुआती और आखिरी चरण के लिए, अपने सभी डिवाइसों की गतिविधियों को मॉडल करें. Android और iOS के लिए ड्राइवर SDK टूल का इस्तेमाल करके या सीधे एचटीटीपी REST या gRPC कॉल का इस्तेमाल करके इस एपीआई का इस्तेमाल किया जा सकता है.
शुरुआती सेट अप
Google Cloud Console में, फ़्लीट इंजन डिलीवरी एपीआई को कॉन्फ़िगर किया जाता है.
कंसोल में क्या किया जाना चाहिए और अनुमति देने के लिए JSON वेब टोकन कैसे बनाया जाए, यह जानने के लिए पुष्टि और अनुमति देना देखें.
कंसोल का इस्तेमाल करने के बारे में जानकारी पाने के लिए, Google Cloud Console का दस्तावेज़ देखें.
अपने सेट अप की पुष्टि करें
सेवा खाते बनाने के बाद, पुष्टि करें कि आपने सेटअप पूरा कर लिया है और अब आपके पास डिलीवरी वाहन बनाने का विकल्प है. अपने सेटअप की तुरंत पुष्टि करने से यह पक्का हो जाता है कि आपने प्रोजेक्ट सेट अप करते समय आने वाली अनुमति से जुड़ी सामान्य समस्याओं को हल कर लिया है. सेटअप की पुष्टि करने के दो तरीके हैं:
अपने सेटअप के दो अहम हिस्सों की जांच करें:
gcloud
कमांड लाइन यूटिलिटी का इस्तेमाल करके, ऑथराइज़ेशन टोकन साइनिंग और ट्रायल डिलीवरी वाली गाड़ी बनाना. ज़्यादा जानकारी के लिए, सेटअप की पुष्टि करने से जुड़ी गाइड देखें.Fleet Engine पुष्टि के सैंपल स्क्रिप्ट की मदद से, अपने सेटअप की जांच करें.
क्लाइंट लाइब्रेरी
रॉ gRPC या REST पर बेहतर डेवलपर अनुभव पाने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल कई सामान्य प्रोग्रामिंग भाषाओं में करें. अपने सर्वर ऐप्लिकेशन के लिए क्लाइंट लाइब्रेरी पाने का तरीका जानने के लिए, क्लाइंट लाइब्रेरी देखें.
इस दस्तावेज़ में दिए गए Java के उदाहरणों में यह माना गया है कि आपको gRPC के बारे में जानकारी है.
डेटा स्ट्रक्चर
Fleet Engine डिलीवरी एपीआई, शिपमेंट के पिकअप और डिलीवरी का मॉडल बनाने के लिए दो डेटा स्ट्रक्चर का इस्तेमाल करता है:
- शिपमेंट को ट्रांसपोर्ट करने के लिए इस्तेमाल किया जाने वाला डिलीवरी वाहन.
- शिपमेंट के लिए पिक अप और डिलीवरी के टास्क.
टास्क का इस्तेमाल, दिन भर ड्राइवर के ब्रेक और शेड्यूल किए गए स्टॉप को मॉडल करने के लिए भी किया जा सकता है.
डिलीवरी करने वाले वाहन
डिलीवरी करने वाले वाहन, शिपमेंट को डिपो से डिलीवरी की जगह और पिकअप करने की जगह से डिपो ले जाते हैं. कुछ मामलों में, वे किसी शिपमेंट को सीधे पिकअप करने की जगह से डिलीवरी की जगह पर भी ले जा सकते हैं.
ड्राइवर SDK टूल का इस्तेमाल करके, फ़्लीट इंजन में DeliveryVehicle
ऑब्जेक्ट बनाएं. साथ ही, शिपमेंट और फ़्लीट ट्रैकिंग के लिए जगह की जानकारी के अपडेट भेजें.
Tasks
वाहन ने दिन में जो कार्रवाइयां की हैं उनके लिए, कार्रवाई के टाइप के हिसाब से टास्क असाइन किए जा सकते हैं:
- पिकअप और डिलीवरी के लिए, शिपिंग के टास्क असाइन करें.
- जब ड्राइवर उपलब्ध न हों, जैसे कि ज़रूरी ब्रेक के लिए, उपलब्ध न होने से जुड़े टास्क असाइन करें.
- ड्रॉप बॉक्स या ग्राहक की जगहों पर, कार से नहीं होने वाले टास्क के लिए, शेड्यूल किए गए स्टॉप टास्क असाइन करें.
असाइन किए जाने वाले हर टास्क का एक यूनीक टास्क आईडी होना चाहिए. हालांकि, टास्क के लिए एक ही ट्रैकिंग आईडी शेयर किया जा सकता है. जब फ़्लीट इंजन हर टास्क के लिए ETA विंडो का हिसाब लगाता है, तो वह सभी टास्क और उस क्रम का इस्तेमाल करता है जिसमें उन्हें अनुमान लगाने के लिए शेड्यूल किया जाता है. टास्क आईडी के बारे में ज़्यादा जानकारी के लिए, टास्क आईडी के बारे में दिशा-निर्देश देखें.
फ़्लीट इंजन में टास्क बनाने के लिए, ड्राइवर SDK टूल टास्क मैनेजर का इस्तेमाल करें.
शिपमेंट टास्क
किसी शिपमेंट के पिकअप और डिलीवरी, दोनों के लिए शिपमेंट टास्क बनाएं और यह जानकारी शामिल करें:
- पिक अप या डिलीवरी की जगह की जानकारी.
- यह ट्रैकिंग नंबर या आईडी होता है.
- टास्क को पूरा करने, पार्किंग ढूंढने या हैंडऑफ़ वाली जगह तक चलकर जाने के लिए, अतिरिक्त समय बिताने का समय.
- यूनीक टास्क आईडी. टास्क आईडी से जुड़े दिशा-निर्देश देखें.
ज़्यादा जानकारी के लिए, ये विषय देखें:
Android
iOS
टास्क उपलब्ध न होने से जुड़े टास्क
सुविधा उपलब्ध न होने से जुड़े टास्क में वह समयावधि शामिल होती है जिसमें पिक अप या डिलीवरी के लिए वाहन उपलब्ध नहीं होता. जैसे, वाहन में पेट्रोल/डीज़ल भराने के लिए या ड्राइवर के आराम करने के समय के लिए ब्रेक.
नीचे दी गई जानकारी के साथ कोई ऐसा टास्क बनाएं जो उपलब्ध न हो:
- ब्रेक की अवधि.
- आप चाहें, तो ब्रेक की जगह की जानकारी भी दी जा सकती है. आपको किसी जगह की जानकारी देने की ज़रूरत नहीं होती. हालांकि, ऐसा करने से पूरे दिन के लिए, ETA की सटीक जानकारी मिलती है.
ज़्यादा जानकारी के लिए, ये विषय देखें:
Android
iOS
शेड्यूल किए गए स्टॉप टास्क
डिलीवरी वाहन के स्टॉप का मॉडल बनाने के लिए, शेड्यूल किए गए स्टॉप टास्क बनाएं. उदाहरण के लिए, किसी खास जगह पर हर दिन शेड्यूल किए गए कलेक्शन स्टॉप के लिए, शेड्यूल किया गया स्टॉप टास्क बनाएं. यह काम उसी जगह पर होने वाली दूसरी डिलीवरी या पिकअप की जगह पर नहीं होना चाहिए. ड्रॉप बॉक्स से इकट्ठा करने या फ़ीडर-वाहन ट्रांसफ़र को मॉडल करने या सर्विस सेंटर और सर्विस पॉइंट पर स्टॉप के लिए शेड्यूल किए गए स्टॉप टास्क भी बनाए जा सकते हैं.
ज़्यादा जानकारी के लिए, ये विषय देखें:
Android
iOS
टास्क आईडी से जुड़े दिशा-निर्देश
टास्क आईडी बनाते समय, कॉन्टेंट और फ़ॉर्मैट के लिए इन दिशा-निर्देशों का पालन करें:
- यूनीक टास्क आईडी बनाना
- व्यक्तिगत पहचान से जुड़ी किसी भी तरह की जानकारी (पीआईआई) या टेक्स्ट का डेटा साफ़ तौर पर ज़ाहिर न करें.
- मान्य यूनिकोड स्ट्रिंग का इस्तेमाल करें.
- कृपया 64 या इससे कम वर्णों का इस्तेमाल करें.
- इनमें से कोई भी ASCII वर्ण शामिल न करें: "/", ", "\", "?", या "#".
- यूनिकोड नॉर्मलाइज़ेशन फ़ॉर्म C के मुताबिक नॉर्मलाइज़ करें.
यहां अच्छे टास्क आईडी के कुछ उदाहरण दिए गए हैं:
- 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
- e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
- NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2जेके
इस टेबल में ऐसे टास्क आईडी के उदाहरण दिए गए हैं जिनका इस्तेमाल नहीं किया जा सकता:
काम नहीं करने वाले टास्क आईडी | वजह |
---|---|
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 को कॉल करने के लिए किया जाता है.
- ग्राहक के मालिकाना हक वाले वाहन का आईडी.
हर वाहन के लिए, अलग-अलग वाहन के आईडी इस्तेमाल करें. वाहन के आईडी को दोबारा इस्तेमाल न करें जब तक कि ओरिजनल वाहन के लिए कोई चालू टास्क न हों.
फ़्लीट इंजन DeliveryVehicle
ऐसे ऑब्जेक्ट को अपने-आप मिटा देता है जिन्हें सात दिनों के बाद, UpdateDeliveryVehicle
का इस्तेमाल करके अपडेट नहीं किया गया है. हमारा सुझाव है कि फ़्लीट इंजन में वाहन की उपलब्धता को बनाए रखने का सुझाव दिया जाता है कि आप समय-समय पर इसकी जगह की जानकारी अपडेट करते रहें. DeliveryVehicle
इकाई के ज़्यादातर अन्य फ़ील्ड में होने वाले अपडेट भी इसकी अवधि बढ़ा देते हैं. हालांकि, इसके लिए ज़रूरी है कि नए फ़ील्ड की वैल्यू मौजूदा फ़ील्ड से अलग हो.
यह देखने के लिए कि कोई वाहन मौजूद है या नहीं:
UpdateDeliveryVehicle
को कॉल करें.- अगर आपको NOT_FOUND गड़बड़ी मिलती है, तो वाहन को फिर से बनाने के लिए,
CreateDeliveryVehicle
को कॉल करें. अगर कॉल किसी वाहन को वापस करता है, तब भी इसे अपडेट किया जा सकता है.
वाहन के प्रकार
VehicleType
इकाई में VehicleType
फ़ील्ड का एक वैकल्पिक फ़ील्ड होता है, जिसमें Category
ईनम होता है. इसे AUTO
, TWO_WHEELER
, BICYCLE
याPEDESTRIAN
के तौर पर बताया जा सकता है. अगर इस फ़ील्ड को सेट नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से AUTO
पर सेट हो जाती है.
वाहनों के लिए सभी रूटिंग में, वाहन के टाइप के लिए RouteTravelMode
का इस्तेमाल किया जाता है.
वाहन की विशेषताएं
DeliveryVehicle
इकाई में DeliveryVehicleAttribute
का दोहराया गया फ़ील्ड मौजूद है. ListDeliveryVehicles
एपीआई में एक filter
फ़ील्ड होता है, जो तय किए गए एट्रिब्यूट वाली इकाइयों के लिए, लौटाए गए DeliveryVehicle
इकाइयों को सीमित कर सकता है. DeliveryVehicleAttribute
से, फ़्लीट इंजन के रूटिंग के व्यवहार पर कोई असर नहीं पड़ता.
एट्रिब्यूट में, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या संवेदनशील जानकारी शामिल न करें. यह फ़ील्ड, उपयोगकर्ताओं को दिख सकता है.
टास्क की पूरी अवधि
delivery API gRPC या REST इंटरफ़ेस की मदद से, Fleet Engine में टास्क बनाए जा सकते हैं, अपडेट किए जा सकते हैं, और उनके बारे में क्वेरी की जा सकती है.
Task
ऑब्जेक्ट में एक स्टेट फ़ील्ड होता है, जो इसकी लाइफ़साइकल के ज़रिए, इसकी प्रोग्रेस को ट्रैक करता है. मान Open से CLOSED में चले जाते हैं. नए टास्क, Open स्थिति में बनाए जाते हैं. इससे पता चलता है कि:
- यह टास्क अभी डिलीवरी वाहन को असाइन नहीं किया गया है.
- डिलीवरी वाहन अब तक टास्क के लिए तय किए गए वाहन को स्टॉप से आगे नहीं निकल पाया है.
टास्क के लिए दिशा-निर्देश
किसी वाहन को सिर्फ़ तब टास्क असाइन किया जा सकता है, जब वह खुली स्थिति में हो.
किसी टास्क को वाहन के स्टॉप की सूची से हटाकर रद्द कर दिया जाता है. इससे टास्क की स्थिति अपने-आप 'बंद है' पर सेट हो जाती है.
जब टास्क का वाहन, टास्क के वाहन स्टॉप को पूरा कर लेता है:
टास्क के नतीजे वाले फ़ील्ड को 'हो गया' या 'हो गया' पर अपडेट करें.
इवेंट के टाइमस्टैंप की जानकारी दें.
इसके बाद, JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी, टास्क के नतीजे की जानकारी देती है और टास्क का स्टेटस अपने-आप 'बंद है' पर सेट हो जाता है. ज़्यादा जानकारी के लिए, JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी की मदद से अपने शिपमेंट को ट्रैक करना लेख पढ़ें.
गाड़ियों की तरह ही, Fleet Engine उन टास्क को मिटा देता है जिन्हें सात दिनों के बाद भी अपडेट नहीं किया गया है. अगर पहले से मौजूद आईडी से कोई टास्क बनाने की कोशिश की जाती है, तो आपको गड़बड़ी वाला मैसेज दिखेगा.
ध्यान दें: फ़्लीट इंजन में किसी टास्क को साफ़ तौर पर मिटाने की सुविधा नहीं है. इस सेवा को सात दिनों के बाद, टास्क को अपडेट किए बिना अपने-आप मिटा दिया जाता है. अगर आपको टास्क के डेटा को सात दिन से ज़्यादा समय तक सेव रखना है, तो आपको यह सुविधा खुद ही लागू करनी होगी.
टास्क के एट्रिब्यूट
Task
एंटिटी में TaskAttribute
का दोहराया गया फ़ील्ड होता है. इसमें इन तीन में से किसी एक टाइप की वैल्यू हो सकती है: स्ट्रिंग, नंबर, और बूल. ListTasks
एपीआई में एक filter
फ़ील्ड होता है, जो Task
इकाइयों को, बताए गए एट्रिब्यूट वाली इकाइयों तक सीमित कर सकता है. टास्क के एट्रिब्यूट से, फ़्लीट इंजन के रूटिंग के व्यवहार पर कोई असर नहीं पड़ता.
एट्रिब्यूट में, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या अन्य संवेदनशील जानकारी शामिल न करें. ऐसा इसलिए, क्योंकि ये एट्रिब्यूट उपयोगकर्ताओं को दिख सकते हैं.
गाड़ी और टास्क की लाइफ़साइकल मैनेज करें
रिमाइंडर: आपका इंटरनल सिस्टम, ऐसे डेटा के भरोसेमंद सोर्स के तौर पर काम करता है जिसे Fleet Engine डिलीवरी एपीआई आपकी ओर से बेहतर बनाता है.
अपने सिस्टम में, गाड़ी और टास्क के लाइफ़साइकल मैनेज करने के लिए, Fleet Engine Deliveryies API का इस्तेमाल करें. इससे, अपनी गाड़ियों और उनसे जुड़े टास्क बनाने, अपडेट करने, और उन्हें ट्रैक करने में मदद मिलेगी.
साथ ही, ड्राइवर ऐप्लिकेशन डिवाइस की जगह और रास्ते की जानकारी अपडेट करने के लिए, सीधे Fleet Engine से संपर्क करता है. इस मॉडल की मदद से, फ़्लीट इंजन, जगह की रीयल-टाइम जानकारी को बेहतर तरीके से मैनेज कर सकता है. यह जगह को सीधे ट्रैकिंग लाइब्रेरी को भेजता है. इसका इस्तेमाल करके आप उपभोक्ताओं को ऑर्डर की स्थिति के बारे में अपडेट कर सकते हैं.
उदाहरण के लिए, मान लें कि आपके पास नीचे दी गई स्थिति है:
- डिलीवरी स्टॉप के पास ड्राइवर. ड्राइवर ऐप्लिकेशन अपनी जगह की जानकारी, Fleet Engine को भेजता है.
- फ़्लीट इंजन, ट्रैकिंग लाइब्रेरी को डिवाइस की जगह की जानकारी भेजता है. इसका इस्तेमाल करके आपका उपभोक्ता ऐप्लिकेशन, उपभोक्ता को उसके पैकेज के नज़दीक होने की सूचना देता है.
- शिपमेंट पूरा होने के बाद, ड्राइवर के ऐप्लिकेशन में "शिपमेंट डिलीवर किया गया" बटन पर क्लिक करने के बाद, वह ड्राइवर को उस पर क्लिक करता है.
- "शिपमेंट डिलीवर किया गया" कार्रवाई, आपके बैकएंड सिस्टम को जानकारी भेजती है. इससे, कारोबार की पुष्टि करने और पुष्टि करने के ज़रूरी चरण पूरे होते हैं.
- आपका सिस्टम, टास्क की 'हो गया' के तौर पर पुष्टि करता है और डिलीवरी एपीआई का इस्तेमाल करके, फ़्लीट इंजन को अपडेट करता है.
नीचे दिया गया डायग्राम, इन प्रोसेस को सामान्य लेवल पर दिखाता है. यह आपके सिस्टम, क्लाइंट, और Fleet इंजन के बीच स्टैंडर्ड संबंध भी दिखाता है.
क्लाइंट टोकन मैनेज करें
ड्राइवर ऐप्लिकेशन से मिलने वाले और सीधे Fleet Engine को भेजे जाने वाली जगह के अपडेट के लिए, ऑथराइज़ेशन टोकन ज़रूरी होते हैं. क्लाइंट से Fleet Engine के अपडेट मैनेज करने के लिए, यहां सुझाया गया तरीका दिया गया है:
फ़्लीट इंजन डिलीवरी अनट्रस्ट ड्राइवर यूज़र सर्विस खाते की भूमिका का इस्तेमाल करके टोकन जनरेट करें.
ड्राइवर ऐप्लिकेशन के लिए, सीमित दायरे वाला टोकन उपलब्ध कराएं. इस स्कोप की मदद से, सिर्फ़ फ़्लीट इंजन में डिवाइस की जगह की जानकारी अपडेट की जा सकती है.
इस तरीके से यह पक्का होता है कि मोबाइल डिवाइस से आने वाले कॉल--जो कि कम भरोसेमंद माने जाते हैं--कम से कम खास अधिकारों के सिद्धांत का पालन करते हैं.
सेवा खाते से जुड़ी अन्य भूमिकाएं
अगर इसके बजाय, आपको ड्राइवर ऐप्लिकेशन को सीधे तौर पर फ़्लीट इंजन के अपडेट देने की अनुमति देनी है, तो आपको भरोसेमंद ड्राइवर की भूमिका वाले ऐप्लिकेशन के अलावा, कुछ टास्क से जुड़े अपडेट के लिए भी यह अनुमति देनी होगी. भरोसेमंद ड्राइवर की भूमिका का इस्तेमाल करने वाले मॉडल की जानकारी के लिए, भरोसेमंद ड्राइवर का मॉडल देखें.
ड्राइवर की भरोसेमंद और गैर-भरोसेमंद भूमिकाओं के इस्तेमाल के बारे में ज़्यादा जानकारी के लिए, Cloud प्रोजेक्ट का सेटअप देखें.
कामकाजी दिन को मॉडल करें
नीचे दी गई टेबल में बताया गया है कि डिलीवरी और लॉजिस्टिक कंपनियों के लिए, डिलीवरी और लॉजिस्टिक से जुड़े ड्राइवर के लिए काम करने का दिन कैसा हो सकता है. आपकी कंपनी के विवरण में अंतर हो सकता है, लेकिन आप देख सकते हैं कि आप कार्य दिवस को कैसे मॉडल कर सकते हैं.
समय | गतिविधि | मॉडलिंग |
---|---|---|
दिन की शुरुआत के 24 घंटे के अंदर | डिस्पैचर, डिलीवरी करने वाले वाहनों या रास्तों के लिए शिपमेंट असाइन करता है. | आपके पास Fleet Engine में शिपमेंट की डिलीवरी, पिकअप, ब्रेक लेने, और दूसरे कामों के लिए समय से पहले टास्क बनाने का विकल्प होता है. उदाहरण के लिए, आपके पास
शिपमेंट पिकअप टास्क,
शिपमेंट डिलीवरी टास्क,
शेड्यूल की गई उपलब्धता या
शेड्यूल किया गया स्टॉप बनाने का विकल्प है.
डिलीवरी पैकेज का सेट और डिलीवरी का ऑर्डर पूरा होने के बाद, वाहन को टास्क असाइन करें. |
दिन की शुरुआत का समय | ड्राइवर, ड्राइवर ऐप्लिकेशन में लॉगिन करके, डिपो से ही दिन की शुरुआत करता है. | डिलीवरी ड्राइवर एपीआई शुरू करें. ज़रूरत के हिसाब से, Fleet Engine में डिलीवरी वाहन बनाएं. |
ड्राइवर, शिपमेंट को स्कैन करते हुए, डिलीवरी करने वाले वाहन पर शिपमेंट लोड करता है. | अगर शिपमेंट की डिलीवरी के टास्क समय से पहले नहीं बनाए गए हैं, तो स्कैन करते समय शिपमेंट डिलीवरी टास्क बनाएं. | |
ड्राइवर, टास्क के क्रम की पुष्टि करता है. | अगर इन्हें समय से पहले नहीं बनाया गया है, तो शिपमेंट पिकअप टास्क, शेड्यूल की गई उपलब्धता, और शेड्यूल किए गए स्टॉप बनाएं. | |
ड्राइवर डिपो छोड़ देता है और अगले टास्क पूरे करने के लिए प्रतिबद्ध होता है. | वाहन को सभी टास्क या कोई एक टास्क असाइन करें. इसके लिए, उन टास्क को पूरा करने का ऑर्डर दें. | |
ड्राइवर, शिपमेंट को डिलीवर करता है. | डिलीवरी स्टॉप पर पहुंचने के बाद, वाहन के स्टॉप पर पहुंचने से जुड़ी कार्रवाइयां करें. शिपमेंट डिलीवर करने के बाद, डिलीवरी टास्क बंद कर दें. साथ ही, स्टोर शिपमेंट की स्थिति और दूसरी मेटा जानकारी भी दे सकते हैं. स्टॉप पर सभी टास्क पूरे करने के बाद, अगले स्टॉप तक ड्राइव करने से पहले, वाहन के स्टॉप पूरा होने और वाहन को अगले स्टॉप तक ले जाने से जुड़ी कार्रवाइयां करें. | |
डिलीवरी वाहन पर ज़्यादा शिपमेंट ट्रांसफ़र करने के लिए, ड्राइवर एक फ़ीडर वाहन से मिलता है. | फ़ीडर और डिलीवरी वाहनों के बीच ट्रांसफ़र के लिए, मीटिंग की जगह को शेड्यूल किए गए स्टॉप के तौर पर मॉडल किया जाना चाहिए.
शिपमेंट को ट्रांसफ़र करने और स्कैन करने के बाद, डिलीवरी टास्क बनाएं अगर वे पहले से नहीं बनाए गए हैं. इसके बाद, किसी वाहन को टास्क असाइन करके और टास्क का क्रम अपडेट करके, टास्क पूरा करने का क्रम अपडेट करें. |
|
ड्राइवर को पिकअप के अनुरोध की सूचना मिलती है. | पिकअप का अनुरोध स्वीकार करने के बाद, शिपिंग के लिए पिकअप का टास्क बनाएं. इसके बाद, किसी वाहन में टास्क असाइन करें और टास्क का क्रम अपडेट करके, टास्क के लागू होने का क्रम अपडेट करें. | |
दोपहर | ड्राइवर लंच ब्रेक ले रहा है. | अगर किसी जगह की जानकारी, उपलब्ध नहीं होने की जानकारी देने वाले टास्क से जुड़ी है, तो उसे किसी भी दूसरे टास्क की तरह ही मानें. वाहन के स्टॉप पर पहुंचने, वाहन का स्टॉप पूरा होने, और वाहन को अगले स्टॉप पर जाने से जुड़ी कार्रवाइयां करें.
अगर ऐसा नहीं है, तो ब्रेक खत्म होने से पहले कोई कार्रवाई करने की ज़रूरत नहीं है. अगले और बचे हुए टास्क की पुष्टि करके, टास्क को हटाएं. इसके बाद, टास्क का क्रम अपडेट करें. |
ड्राइवर एक शिपमेंट पिक अप करता है. | इसे डिलीवरी स्टॉप की तरह बनाया जाता है. वाहन के स्टॉप पर पहुंचने और किसी टास्क को बंद करने से जुड़ी कार्रवाइयां करें. अगर ऐसा करना ज़रूरी नहीं है, तो शिपिंग की स्थिति और अन्य मेटा जानकारी को स्टोर करें. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप तक ड्राइव करने से पहले, वाहन के स्टॉप पूरा होने और वाहन को अगले स्टॉप तक ले जाने से जुड़ी कार्रवाइयां करें. ध्यान दें: यह पक्का करने के लिए कि बिलिंग सही हो, सभी पिकअप के लिए एक डिलीवरी टास्क होना चाहिए. अगर पिक अप को उस दिन ड्राइवर के बताए गए रास्ते पर ही किसी दूसरी जगह पर डिलीवर करना है, तो हमारा सुझाव है कि आप उस डिलीवरी टास्क को रास्ते के किसी भी दूसरे डिलीवरी टास्क की तरह मॉडल करें. अगर ड्राइवर पिक अप को वापस डिपो पर ला रहा है, तो हमारा सुझाव है कि आप डिपो पर डिलीवरी टास्क बनाएं. | |
ड्राइवर, ड्रॉप बॉक्स से शिपमेंट को पिक अप करने के लिए शेड्यूल करता है. | इसे किसी दूसरे पिकअप स्टॉप की तरह ही मॉडल किया गया है. वाहन के स्टॉप पर पहुंचने और किसी टास्क को बंद करने से जुड़ी कार्रवाइयां करें. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप तक ड्राइव करने के बाद, वाहन के स्टॉप पूरा होने और वाहन को अगले स्टॉप तक ले जाने से जुड़ी कार्रवाइयां करें. | |
ड्राइवर को यह सूचना मिलती है कि शिपमेंट को किसी दूसरी जगह पर भेज दिया गया है. | शिपमेंट की डिलीवरी वाले ओरिजनल टास्क का स्टेटस 'पूरा हुआ' पर सेट करें. साथ ही, डिलीवरी की नई जगह के लिए, शिपमेंट की डिलीवरी वाला नया टास्क बनाएं. ज़्यादा जानकारी के लिए, किसी शिपमेंट को दूसरी जगह भेजना देखें. | |
ड्राइवर ने पैकेज डिलीवर करने की कोशिश की, लेकिन वह डिलीवर नहीं कर सका. | इसे डिलीवरी स्टॉप की तरह ही मॉडल किया जाता है. इसमें डिलीवरी टास्क को 'पूरा हो गया' के तौर पर मार्क किया जाता है. वाहन के स्टॉप पर पहुंचने से जुड़ी कार्रवाइयां करें. शिपमेंट को डिलीवर न कर पाने पर, टास्क बंद करें. साथ ही, स्टोर शिपमेंट की स्थिति और दूसरी मेटा जानकारी भी इस्तेमाल करें. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप तक ड्राइव करने से पहले, वाहन के स्टॉप पूरा होने और वाहन को अगले स्टॉप तक ले जाने से जुड़ी कार्रवाइयां करें. | |
ड्राइवर को शिपमेंट को होल्ड (डिलीवर नहीं करने) के लिए कहा गया है. | सूचना मिलने और उसकी पुष्टि होने के बाद, टास्क का स्टेटस 'पूरा हुआ' पर सेट करें. | |
ड्राइवर को एक खास शिपमेंट को डिलीवर करने की सूचना दी गई थी. इसके तहत, डिलीवरी के लिए तय किए गए ऑर्डर में बदलाव किया गया. | टास्क का क्रम अपडेट करें. | |
ड्राइवर ने सामान को खराब तरीके से डिलीवर करने का विकल्प चुना है. | टास्क का क्रम अपडेट करें और फिर सामान्य तरीके से आगे बढ़ें. | |
ड्राइवर एक ही जगह पर कई शिपमेंट डिलीवर करता है. | इसे सिंगल शिपमेंट डिलीवरी स्टॉप की तरह ही मॉडल किया जाता है. स्टॉप पर पहुंचने के बाद, स्टॉप पर आने वाले वाहन से जुड़ी कार्रवाइयां करें. हर शिपमेंट डिलीवर करने के बाद, सभी टास्क बंद करें. साथ ही, स्टोर शिपमेंट की स्थिति और दूसरी मेटा जानकारी भी दे सकते हैं. स्टॉप पर सभी टास्क पूरे करने और अगले स्टॉप तक ड्राइव करने से पहले, वाहन के स्टॉप पूरा होने और वाहन को अगले स्टॉप तक ले जाने से जुड़ी कार्रवाइयां करें. | |
दिन खत्म होने का समय | ड्राइवर डिपो में लौट आया है. | अगर ड्राइवर अपने रूट पर सामान को पिक अप करने के बाद, डिपो में लौटता है, तो आपको हर पैकेज को डिलीवरी टास्क के तौर पर बनाना और बंद करना होगा. इससे यह पक्का किया जा सकेगा कि बिलिंग सही है. इसके लिए, डिपो को किसी दूसरे डिलीवरी स्टॉप की तरह मॉडल किया जा सकता है. अगर डिपो का इस्तेमाल डिलीवरी स्टॉप के तौर पर नहीं किया जा रहा है, तो भी डिपो को शेड्यूल किए गए स्टॉप के तौर पर मॉडल किया जा सकता है. स्टॉप को मॉडल करने से आपके ड्राइवर, वापस डिपो तक का रास्ता देख सकते हैं और पहुंचने के अनुमानित समय की जानकारी पा सकते हैं. |
जगह की जानकारी के अपडेट कैसे काम करते हैं
फ़्लीट इंजन की अच्छी परफ़ॉर्मेंस के लिए, इसे वाहन की जगह की जानकारी से जुड़े अपडेट दें. ये अपडेट देने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:
- ड्राइवर SDK टूल - Android, iOS -- सबसे आसान विकल्प का इस्तेमाल करें.
- कस्टम कोड का इस्तेमाल करें -- यह तब फ़ायदेमंद होता है, जब जगहों को आपके बैकएंड के ज़रिए रिले किया जाता हो या Android या iOS के अलावा, किसी दूसरे डिवाइस का इस्तेमाल किया जाता हो.
भले ही, आपने गाड़ी की जगह की जानकारी को किसी भी तरह से अपडेट किया हो, किसी भी डिलीवरी वाहन को स्टॉप पर पहुंचने और स्टॉप पर पहुंचने के दौरान, फ़्लीट इंजन की जानकारी देना बैकएंड की ज़िम्मेदारी है. इसमें डिपो भी शामिल है. फ़्लीट इंजन इन इवेंट का अपने-आप पता नहीं लगाता.
वाहन के स्टॉप और डिलीवरी की जगहें
वाहन स्टॉप वह जगह है जहां डिलीवरी वाहन, शिपमेंट या किसी दूसरे काम को पूरा करता है. यह ऐक्सेस पॉइंट हो सकता है, जैसे कि लोडिंग डॉक या रोड-स्नैप की गई कोई जगह.
डिलीवरी की जगह वह जगह होती है जहां से शिपमेंट को डिलीवर या पिक अप किया जाता है. डिलीवरी की जगह तक आने और वहां से आने-जाने के लिए गाड़ी को स्टॉप से थोड़ा पैदल चलना पड़ सकता है.
उदाहरण के लिए, जब कोई ड्राइवर मॉल के किसी स्टोर में शिपमेंट को डिलीवर करता है, तो डिलीवरी वाहन, स्टोर के सबसे नज़दीक मौजूद मॉल के पार्किंग लॉट में रुक जाता है. यह वाहन का स्टॉप है. इसके बाद, ड्राइवर वाहन के स्टॉप से मॉल में उस जगह तक पहुंचता है जहां स्टोर मौजूद है. यह वह जगह है जहां डिलीवरी की जाती है.
अपने उपयोगकर्ताओं को शिपिंग का बेहतर अनुभव देने के लिए, इस बात पर ध्यान दें कि वाहन के स्टॉप के लिए, शिपमेंट के टास्क कैसे असाइन किए जाते हैं. इस बात का भी ध्यान रखें कि शिपिंग के टास्क के लिए, वाहन के बचे हुए स्टॉप की जानकारी उपयोगकर्ता को दी जाती है. इससे उन्हें शिपिंग की प्रोग्रेस देखने में मदद मिलती है.
उदाहरण के लिए, अगर कोई ड्राइवर एक ही ऑफ़िस की इमारत में कई डिलीवरी कर रहा है, तो डिलीवरी के सभी टास्क एक ही वाहन स्टॉप पर असाइन करें. अगर डिलीवरी के हर टास्क को अपने वाहन के स्टॉप के लिए असाइन किया गया है, तो शिपिंग को ट्रैक करने का आपका अनुभव आपके उपयोगकर्ताओं के लिए कम मददगार होगा. ट्रैकिंग की सुविधा सिर्फ़ तब उपलब्ध होती है, जब वाहन के पहुंचने की जगह से पहले, वाहन के स्टॉप की संख्या सीमित होती है. वाहन के कई स्टॉप कम समय में पूरे हो जाने पर, खरीदार को अपनी डिलीवरी की प्रोग्रेस को ट्रैक करने के लिए ज़्यादा समय नहीं मिलता.
मोबाइल SDK टूल का इस्तेमाल करना
ड्राइवर SDK टूल को कॉल करने से पहले, उसे शुरू करना न भूलें.
डिलीवरी ड्राइवर एपीआई शुरू करें
ड्राइवर SDK टूल में डिलीवरी ड्राइवर एपीआई शुरू करने से पहले, नेविगेशन SDK टूल शुरू करना न भूलें. इसके बाद, डिलीवरी ड्राइवर एपीआई को शुरू करें, जैसा कि इस उदाहरण में दिखाया गया है:
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 के हिसाब से नहीं होती है. अपने-आप बढ़ने वाले आईडी का इस्तेमाल करने से बचें. साथ ही, पक्का करें कि आइडेंटिफ़ायर में व्यक्तिगत पहचान से जुड़ी कोई जानकारी (पीआईआई) न हो, जैसे कि ड्राइवर का फ़ोन नंबर.
वाहन बनाएं
gRPC या REST का इस्तेमाल करके Driver SDK या किसी सर्वर एनवायरमेंट से वाहन बनाया जा सकता है.
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>, आपके वाहन में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर होता है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
पीओएसटी का मुख्य हिस्सा, बनाई जाने वाली 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
उपयोगकर्ताओं के बताए गए आईडी के लिए, फ़्लीट इंजन हर एपीआई दिशा-निर्देश के लिए, 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>, टास्क का यूनीक आइडेंटिफ़ायर है. यह शिपमेंट का ट्रैकिंग नंबर नहीं होना चाहिए. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सल यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू टाइप Type.PICKUP state State.OPEN trackingId वह संख्या या आइडेंटिफ़ायर जिसका इस्तेमाल किसी शिपमेंट को ट्रैक करने के लिए किया जा रहा है. plannedLocation वह जगह जहां टास्क पूरा करना है. इस मामले में, शिपमेंट को पिक अप करने की जगह. taskDuration पिकअप की जगह पर शिपमेंट को पिक अप करने में लगने वाला अनुमानित समय (सेकंड में). ये फ़ील्ड ज़रूरी नहीं हैं:
फ़ील्ड वैल्यू targetTimeWindow टास्क को पूरा करने के लिए तय की गई समयावधि. इससे, रूटिंग के काम करने के तरीके पर कोई असर नहीं पड़ता. एट्रिब्यूट कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट की एक खास कुंजी होनी चाहिए.
इकाई के अन्य सभी फ़ील्ड बनाने के लिए, उन्हें अनदेखा कर दिया जाता है. अगर अनुरोध में असाइन किया गया deliveryVehicleId
शामिल है, तो फ़्लीट इंजन अपवाद दिखाता है. आपने 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>, टास्क का यूनीक आइडेंटिफ़ायर है. यह शिपमेंट का ट्रैकिंग नंबर नहीं होना चाहिए. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सल यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू टाइप Type.DELIVERY state State.OPEN trackingId वह संख्या या आइडेंटिफ़ायर जिसका इस्तेमाल किसी शिपमेंट को ट्रैक करने के लिए किया जा रहा है. plannedLocation वह जगह जहां टास्क पूरा करना है. इस मामले में, इस शिपमेंट के लिए डिलीवरी की जगह. taskDuration डिलीवरी की जगह पर शिपमेंट को भेजने में लगने वाला अनुमानित समय (सेकंड में). ये फ़ील्ड ज़रूरी नहीं हैं:
फ़ील्ड वैल्यू targetTimeWindow टास्क को पूरा करने के लिए तय की गई समयावधि. इससे, रूटिंग के काम करने के तरीके पर कोई असर नहीं पड़ता. एट्रिब्यूट कस्टम टास्क एट्रिब्यूट की सूची. हर एट्रिब्यूट की एक खास कुंजी होनी चाहिए.
इकाई के अन्य सभी फ़ील्ड बनाने के लिए, उन्हें अनदेखा कर दिया जाता है. अगर अनुरोध में असाइन किया गया deliveryVehicleId शामिल है, तो फ़्लीट इंजन को अपवाद दिखता है. आपने 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
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया गया टोकन है.
अनुरोध के मुख्य हिस्से में 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>, टास्क का यूनीक आइडेंटिफ़ायर है. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो हर जगह यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू टाइप Type.UNAVAILABLE state State.OPEN taskDuration ब्रेक की अवधि, सेकंड में. ये फ़ील्ड ज़रूरी नहीं हैं:
फ़ील्ड वैल्यू plannedLocation ब्रेक की वह जगह, अगर ब्रेक को किसी खास जगह पर लेना ही ज़रूरी है.
इकाई के अन्य सभी फ़ील्ड बनाने के लिए, उन्हें अनदेखा कर दिया जाता है. अगर अनुरोध में असाइन किया गया deliveryVehicleId शामिल है, तो फ़्लीट इंजन को अपवाद दिखता है. आपने 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>, टास्क का यूनीक आइडेंटिफ़ायर है. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सल यूनीक आइडेंटिफ़ायर (यूयूआईडी) जनरेट किया जा सकता है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू टाइप Type.SCHEDULED_STOP state State.OPEN plannedLocation स्टॉप की जगह. taskDuration स्टॉप की अनुमानित अवधि, सेकंड में. ये फ़ील्ड ज़रूरी नहीं हैं:
- कोई नहीं
इकाई के अन्य सभी फ़ील्ड बनाने के लिए, उन्हें अनदेखा कर दिया जाता है. अगर अनुरोध में असाइन किया गया deliveryVehicleId शामिल है, तो फ़्लीट इंजन को अपवाद दिखता है. आपने 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>, टास्क का यूनीक आइडेंटिफ़ायर है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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>, टास्क का यूनीक आइडेंटिफ़ायर है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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> आपके सभी डिवाइसों में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर है, जिसके लिए आपको टास्क का क्रम अपडेट करना है. यह एक आइडेंटिफ़ायर है, जिसे आपने वाहन बनाते समय तय किया है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में DeliveryVehicle
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू remainingVehicleJourneySegments टास्क के लिए, यात्रा वाले सेगमेंट की सूची. इस सूची में, टास्क को उस क्रम में किया जाता है जिस क्रम में उन्हें एक्ज़ीक्यूट किया जाना चाहिए. सूची में मौजूद पहला टास्क सबसे पहले चलाया जाता है. बाकीVehicleJourneySegments[i].स्टॉप सूची में i टास्क का स्टॉप. बाकीVehicleJourneysegments[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 का इस्तेमाल करके किसी सर्वर एनवायरमेंट से सूचना दे सकते हैं. नस्ल की स्थितियों से बचने और सच्चाई का एक स्रोत बनाए रखने के लिए, दोनों तरीकों का इस्तेमाल न करें.
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
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;
}
आराम
फ़्लीट इंजन को यह बताने के लिए कि कोई वाहन, सर्वर एनवायरमेंट से अपने अगले स्टॉप पर जा रहा है, UpdateDeliveryVehicle
को एचटीटीपी REST कॉल करें:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id>, आपके सभी डिवाइसों में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर है, जिसके लिए आपको टास्क का क्रम अपडेट करना है. यह एक आइडेंटिफ़ायर है, जिसे आपने वाहन बनाते समय तय किया है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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 की मदद से, हर मिनट में कम से कम एक बार और हर पांच सेकंड में एक बार जगह की जानकारी अपडेट की जाती है.
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 का इस्तेमाल करके, फ़्लीट इंजन में किसी वाहन की जगह की जानकारी अपडेट करने के लिए, UpdateDeliveryVehicle
को कॉल करें:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`
<id>, आपके वाहन की डिलीवरी करने वाले वाहन का यूनीक आइडेंटिफ़ायर होता है या जिसे आपको जगह की जानकारी अपडेट करनी है. यह एक आइडेंटिफ़ायर है, जिसे आपने वाहन बनाते समय तय किया है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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 का इस्तेमाल करके सर्वर एनवायरमेंट से सूचना दी जा सकती है. नस्ल की स्थितियों से बचने और सच्चाई का एक स्रोत बनाए रखने के लिए, दोनों तरीकों का इस्तेमाल न करें.
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 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>, आपके सभी डिवाइसों में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर है, जिसके लिए आपको टास्क का क्रम अपडेट करना है. यह एक आइडेंटिफ़ायर है, जिसे आपने वाहन बनाते समय तय किया है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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 का इस्तेमाल करके किसी सर्वर एनवायरमेंट से फ़्लीट इंजन को इसकी सूचना दे सकते हैं. नस्ल की स्थितियों से बचने और सच्चाई का एक स्रोत बनाए रखने के लिए, दोनों तरीकों का इस्तेमाल न करें.
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 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;
}
आराम
फ़्लीट इंजन को सर्वर एनवायरमेंट से स्टॉप पूरा होने के बारे में बताने के लिए, UpdateDeliveryVehicle
पर एचटीटीपी REST कॉल करें:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
<id>, आपके सभी डिवाइसों में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर है, जिसके लिए आपको टास्क का क्रम अपडेट करना है. यह एक आइडेंटिफ़ायर है, जिसे आपने वाहन बनाते समय तय किया है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में 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
इस उदाहरण में, जीआरपीसी की मदद से किसी टास्क को अपडेट किया गया है.
आराम
यह REST के ज़रिए किसी टास्क को अपडेट करने का एक उदाहरण है.
टास्क को बंद करना
किसी वाहन को असाइन किए गए टास्क को बंद करने के लिए, फ़्लीट इंजन को सूचना दें कि टास्क ने जहां टास्क पूरा किया है वहां वाहन ने वह स्टॉप पूरा कर लिया है या उसे वाहन के स्टॉप की सूची से हटा दें. ऐसा करने के लिए, बाकी बचे वाहन स्टॉप की सूची ठीक वैसे ही सेट की जा सकती है जैसे किसी वाहन के लिए, टास्क का क्रम अपडेट करने पर की जाती है.
अगर किसी टास्क के लिए अभी तक कोई वाहन असाइन नहीं किया गया है और आपको उसे बंद करना है, तो टास्क को 'बंद है' पर सेट करें. हालांकि, हो सकता है कि आप किसी बंद टास्क को फिर से न खोल पाएं.
किसी टास्क के बंद होने का मतलब यह नहीं है कि वह कामयाब हुआ है या पूरा नहीं हो सका. इससे पता चलता है कि इस टास्क को अब जारी नहीं रखा गया है. शिपमेंट ट्रैकिंग के लिए, किसी टास्क के असली नतीजे बताना ज़रूरी है, ताकि डिलीवरी की जानकारी दिखाई जा सके.
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>, टास्क का यूनीक आइडेंटिफ़ायर है.
आपके अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जिसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
आपको अनुरोध के मुख्य हिस्से में, Task
इकाई को शामिल करना होगा:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू state State.CLOSED ये फ़ील्ड ज़रूरी नहीं हैं:
फ़ील्ड वैल्यू taskOutcome नतीजों.हो गया या नतीजे.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
टास्क के नतीजे और नतीजे की जगह सेट करें
किसी टास्क के पूरा हो जाने का मतलब यह नहीं है कि वह हो गया है या पूरा नहीं हो सका. इससे यह पता चलता है कि टास्क पूरा नहीं हुआ है. शिपमेंट ट्रैकिंग के लिए, किसी टास्क के असली नतीजे की जानकारी देना ज़रूरी होता है, ताकि डिलीवरी का नतीजा दिखाया जा सके और सेवाओं की सही बिलिंग हो. टास्क सेट होने के बाद, उसके नतीजे में बदलाव नहीं किया जा सकता. हालांकि, टास्क के खत्म होने के समय और टास्क के नतीजे की जगह में बदलाव किया जा सकता है.
जो टास्क 'बंद है' स्थिति में हैं उनके नतीजे या तो 'हो गया' या 'नहीं' पर सेट हो सकते हैं. फ़्लीट इंजन सिर्फ़ उन डिलीवरी टास्क के लिए शुल्क लेता है जिनमें 'हो' की स्थिति होती है.
टास्क के नतीजे को मार्क करते समय, फ़्लीट इंजन अपने-आप टास्क के नतीजे वाली जगह में वाहन की आखिरी जगह की जानकारी भर देता है. इस व्यवहार को बदला जा सकता है.
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>, टास्क का यूनीक आइडेंटिफ़ायर है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड वैल्यू taskOutcome नतीजों.हो गया या नतीजे.FAILED ये फ़ील्ड ज़रूरी नहीं हैं:
फ़ील्ड वैल्यू taskOutcomeLocation वह जगह जहां टास्क पूरा किया गया था. अगर इस नीति को सेट नहीं किया जाता है, तो फ़्लीट इंजन इसे डिफ़ॉल्ट रूप से आखिरी वाहन की जगह पर सेट कर देता है. taskOutcomeTime टास्क पूरा होने के समय का टाइमस्टैंप.
इकाई के अन्य सभी फ़ील्ड को अपडेट करने के लिए अनदेखा किया जाता है.
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>, वाहन का आईडी होता है, जिसे देखना है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध का मुख्य हिस्सा खाली होना चाहिए.
अगर लुकअप सही तरीके से फ़ेच हो जाता है, तो जवाब के मुख्य हिस्से में वाहन की इकाई शामिल होती है.
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> में खोजने के लिए टास्क का आईडी है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध का मुख्य हिस्सा खाली होना चाहिए.
अगर खोज पूरी होती है, तो जवाब के मुख्य हिस्से में एक टास्क इकाई शामिल होती है.
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 की मदद से ऐसा करने के लिए, आपको सर्वर या ब्राउज़र एनवायरमेंट का इस्तेमाल करना होगा.
सुरक्षा से जुड़े खतरों को कम करने के लिए, सबसे छोटे टोकन का इस्तेमाल करें. उदाहरण के लिए, अगर आपने डिलीवरी कंज़्यूमर टोकन का इस्तेमाल किया है, तो कोई भी Fleet Engine डिलीवरी एपीआई कॉल, सिर्फ़ असली उपयोगकर्ता की काम की जानकारी दिखाता है. जैसे, शिपर या शिपिंग पाने वाला. जवाबों में मौजूद अन्य सारी जानकारी छिपा दी जाती है. टोकन के बारे में ज़्यादा जानकारी पाने के लिए, अनुमति पाने के लिए JSON वेब टोकन (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> टास्क से जुड़ा ट्रैकिंग आईडी है.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया गया टोकन है.
अगर लुकअप सफल होता है, तो जवाब के मुख्य हिस्से में 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 | String | 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 से कोई Tasks जुड़ा नहीं है.
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`
सूची में शामिल टास्क पर कोई फ़िल्टर लगाने के लिए, "फ़िल्टर" यूआरएल पैरामीटर की वैल्यू के तौर पर यूआरएल-एस्केप्ड फ़िल्टर क्वेरी शामिल करें.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अगर लुकअप सफल होता है, तो जवाब के मुख्य हिस्से में इस स्ट्रक्चर वाला डेटा शामिल होता है:
// 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
का इस्तेमाल करें. एक से ज़्यादा एट्रिब्यूट के लिए क्वेरी करने के लिए, attributes.key1 = value1 AND
attributes.key2 = value2
जैसे लॉजिकल AND
और OR
ऑपरेटर का इस्तेमाल करके क्वेरी जोड़ें. फ़िल्टर क्वेरी सिंटैक्स के बारे में पूरी
जानकारी पाने के लिए, 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`
सूची में शामिल टास्क पर कोई फ़िल्टर लगाने के लिए, "फ़िल्टर" यूआरएल पैरामीटर को उसकी वैल्यू के तौर पर शामिल करें. इसके लिए, यूआरएल-एस्केप्ड फ़िल्टर क्वेरी का इस्तेमाल करें.
अनुरोध के हेडर में Authorization फ़ील्ड की वैल्यू Bearer <token> होनी चाहिए. इसमें <token> एक टोकन है, जो फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अगर लुकअप सफल होता है, तो जवाब के मुख्य हिस्से में इस स्ट्रक्चर वाला डेटा शामिल होता है:
// 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 Deliveryies API का इस्तेमाल करने के दो विकल्प हैं:
पसंदीदा: JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी का इस्तेमाल करें. लाइब्रेरी से, Fleet Engine में ट्रैक की गई गाड़ियों की जगह और दिलचस्पी वाली जगहों को विज़ुअलाइज़ किया जा सकता है. इसमें एक JavaScript मैप कॉम्पोनेंट होता है, जो स्टैंडर्ड google.maps.Map ऑब्जेक्ट और डेटा कॉम्पोनेंट को फ़्लीट इंजन से कनेक्ट करने के लिए बनाया जाता है. इस कॉम्पोनेंट से, आपको अपने वेब या मोबाइल ऐप्लिकेशन से पसंद के मुताबिक, ऐनिमेटेड शिपमेंट ट्रैकिंग अनुभव मिलता है.
Fleet Engine डिलीवरी एपीआई के ऊपर, अपनी खुद की शिपमेंट ट्रैकिंग लागू करें.
इसके लिए, ट्रैकिंग आईडी की मदद से शिपिंग के टास्क देखना अहम है.
अगर आपने डिलीवरी कंज़्यूमर रोल का इस्तेमाल किया है, तो कोई भी फ़्लीट इंजन डिलीवरी एपीआई कॉल सिर्फ़ वही जानकारी देता है जो शिपर या रिसीवर के काम की है. जवाबों में मौजूद अन्य जानकारी छिपा दी जाती है. असली उपयोगकर्ताओं की पुष्टि करने की ज़िम्मेदारी आपकी है. इसके अलावा, जगह की जानकारी पहले से किए जा रहे टास्क के हिसाब से फ़िल्टर की जाती है. उपलब्धता वाले टास्क के दौरान, असली उपयोगकर्ता के साथ जगह की कोई भी जानकारी शेयर नहीं की जाती.
लॉगिंग
Cloud Logging में RPC लॉग भेजने के लिए, Fleet Engine को सेट किया जा सकता है. ज़्यादा जानकारी के लिए, लॉग करना देखें.
अनुमति देने से जुड़ी भूमिकाएं और टोकन
जैसा कि वाहन और टास्क की लाइफ़साइकल मैनेज करें और अलग-अलग इस्तेमाल के उदाहरणों के लिए ऑथराइज़ेशन नोट में बताया गया है, Fleet Engine को कॉल करने के लिए, JSON वेब टोकन की मदद से पुष्टि करना ज़रूरी है. इन टोकन पर सेवा खाते के क्रेडेंशियल का इस्तेमाल करके साइन किया गया है. इन टोकन को जारी करने के लिए इस्तेमाल किए जाने वाले सेवा खातों में, एक या उससे ज़्यादा भूमिकाएं हो सकती हैं. हर भूमिका के लिए, अलग-अलग अनुमतियां मिलती हैं.
ज़्यादा जानकारी के लिए, पुष्टि और अनुमति देना देखें.
अक्सर होने वाली समस्याएं हल करना
अगर आपको कोई समस्या आ रही है, तो मदद के लिए नीचे दिए गए सेक्शन देखें.
रेज़िलिएंस
फ़्लीट इंजन को सच्चाई का सोर्स नहीं माना जाता. फ़्लीट इंजन की चिंता किए बिना, ज़रूरत पड़ने पर अपने सिस्टम की स्थिति को पहले जैसा करना आपकी ज़िम्मेदारी है.
फ़्लीट इंजन में खोई हुई स्थिति
Fleet Engine के साथ काम करते समय, क्लाइंट लागू करें, ताकि कोई गड़बड़ी होने पर सिस्टम खुद को ठीक कर ले. उदाहरण के लिए, जब फ़्लीट इंजन किसी वाहन को अपडेट करने की कोशिश करता है, तो वह आपको गड़बड़ी का मैसेज दे सकता है. इससे पता चलता है कि वाहन मौजूद नहीं है. इसके बाद, क्लाइंट को नई स्थिति में वाहन को फिर से बनाना होगा. हालांकि, यह समस्या कभी-कभार ही होती है, लेकिन पक्का करें कि आपके सिस्टम में इतनी आसानी से समस्या हो
ऐसा हो सकता है कि Fleet Engine पूरी तरह से खराब न होने की स्थिति में, आपको ज़्यादातर या सभी गाड़ियों और टास्क को फिर से बनाना पड़े. अगर बनाने की दर बहुत ज़्यादा हो जाती है, तो हो सकता है कि कोटा से जुड़ी समस्याओं की वजह से, कुछ अनुरोध फिर से पूरे न हो पाएं. इसकी वजह यह है कि सेवा में रुकावट (डीओएस) के हमलों से बचने के लिए, कोटे की जांच की जाती है. ऐसे मामले में, बैकऑफ़ रणनीति का इस्तेमाल करके मनोरंजन की दर को धीमा कर दें.
ड्राइवर ऐप्लिकेशन में खोए हुए डिवाइस की स्थिति
अगर ड्राइवर ऐप्लिकेशन क्रैश हो जाता है, तो ऐप्लिकेशन को ड्राइवर SDK टूल में मौजूदा स्थिति को फिर से बनाना होगा. ऐप्लिकेशन को टास्क फिर से बनाने की कोशिश करनी चाहिए, ताकि यह पक्का किया जा सके कि टास्क मौजूद हैं और मौजूदा स्थिति वापस आ गई है. ऐप्लिकेशन को ड्राइवर SDK टूल के लिए स्टॉप की सूची को दोबारा बनाना और साफ़ तौर पर सेट करना चाहिए.
अक्सर पूछे जाने वाले सवाल
अगर कोई ड्राइवर किसी काम के लिए रुक जाए, तो क्या होगा?
ऐसे मामले में, पहले टास्क का क्रम अपडेट करें और फिर सामान्य तरीके से आगे बढ़ें. इसके लिए, स्टॉप पर पहुंचने, टास्क पूरा होने वगैरह की जानकारी दें. अगर आप ऐसा नहीं करते हैं, तो सिस्टम में गड़बड़ी हो सकती है और ETA गलत हो सकते हैं. साथ ही, अचानक होने वाली गड़बड़ियां रिपोर्ट की जा सकती हैं.