इसकी मदद से, डिलीवरी के शुरुआती और आखिरी चरण के लिए, अपने सभी डिवाइसों की गतिविधियों को मॉडल करें फ़्लीट इंजन डिलीवरी एपीआई का इस्तेमाल करना. आप Android के लिए ड्राइवर SDK का उपयोग करके इस API का उपयोग कर सकते हैं और iOS पर कॉल कर सकते हैं. इसके अलावा, एचटीटीपी REST या gRPC कॉल का इस्तेमाल करके भी ऐसा किया जा सकता है.
शुरुआती सेट अप
Google Cloud Console में, फ़्लीट इंजन डिलीवरी एपीआई को कॉन्फ़िगर किया जाता है.
कंसोल में क्या करें और इसे कैसे बनाएं, यह जानने के लिए अनुमति देने के लिए JSON वेब टोकन, यहां देखें पुष्टि करना और अनुमति देना.
कंसोल का इस्तेमाल करने के बारे में जानने के लिए, यहां जाएं: Google Cloud Console के दस्तावेज़.
अपने सेटअप की पुष्टि करें
सेवा खाते बनाने के बाद, पुष्टि करें कि आपका सेटअप पूरा हो गया है डिलीवरी वाहन बनाया जा सकता है. आपके सेटअप की तुरंत पुष्टि की जा रही है यह पक्का करता है कि आपने अनुमति पाने से जुड़ी सामान्य समस्याओं को हल कर लिया है. ये समस्याएं तब आती हैं, जब सेट अप किया जा रहा है. सेटअप की पुष्टि करने के दो तरीके हैं:
अपने सेटअप के दो अहम हिस्सों की जांच करें: अनुमति वाले टोकन पर हस्ताक्षर करना और ट्रायल डिलीवरी नए वर्शन की मदद से,
gcloud
कमांड लाइन सुविधा. इसके लिए जानकारी के लिए, अपने सेटअप की पुष्टि करना देखें पढ़ें.अपने सेटअप की जांच करने के लिए, फ़्लीट इंजन की पुष्टि की सैंपल स्क्रिप्ट.
क्लाइंट लाइब्रेरी
रॉ gRPC या REST पर बेहतर डेवलपर अनुभव पाने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल कई सामान्य प्रोग्रामिंग भाषाओं में किया जा सकता है. इसके लिए अपने सर्वर ऐप्लिकेशन के लिए क्लाइंट लाइब्रेरी पाने का तरीका जानने के लिए, क्लाइंट लाइब्रेरी.
इस दस्तावेज़ में दिए गए Java के उदाहरणों में यह माना गया है कि आपको gRPC के बारे में जानकारी है.
डेटा स्ट्रक्चर
Fleet Engine डिलीवरी एपीआई, पिकअप और डिलीवरी को मॉडल करने के लिए दो डेटा स्ट्रक्चर का इस्तेमाल करता है शिपमेंट की संख्या:
- शिपमेंट को ट्रांसपोर्ट करने के लिए इस्तेमाल किया जाने वाला डिलीवरी वाहन.
- शिपमेंट के लिए पिक अप और डिलीवरी के टास्क.
टास्क का इस्तेमाल, ड्राइवर के ब्रेक और शेड्यूल किए गए स्टॉप को मॉडल करने के लिए भी किया जा सकता है दिन भर.
डिलीवरी करने वाले वाहन
डिलीवरी करने वाले वाहन, शिपमेंट को डिपो से डिलीवरी की जगह तक ले जाते हैं. पिक अप करने की जगह से डिपो तक. कुछ मामलों में, वे शिपिंग को सीधे पिक अप करने की जगह से डिलीवरी की जगह तक पहुंचाने के लिए किया जाता है.
फ़्लीट इंजन में DeliveryVehicle
ऑब्जेक्ट बनाने के लिए, ड्राइवर SDK टूल का इस्तेमाल करें
साथ ही, शिपमेंट और बेड़े को ट्रैक करने के लिए, जगह की जानकारी के अपडेट भेजें.
Tasks
वाहन दिन भर में क्या-क्या कार्रवाइयां करता है, इसके लिए आपने इनके हिसाब से टास्क असाइन किए हैं कार्रवाई का टाइप:
- पिकअप और डिलीवरी के लिए, शिपिंग के टास्क असाइन करें.
- जब ड्राइवर उपलब्ध न हों, जैसे कि ज़रूरी ब्रेक, उपलब्ध न होने से जुड़े टास्क असाइन करें.
- ड्रॉप बॉक्स या ग्राहक की जगह पर नॉन-ड्राइविंग टास्क के लिए, असाइन करें शेड्यूल किए गए स्टॉप टास्क.
असाइन किए गए हर टास्क का एक यूनीक टास्क आईडी होना चाहिए. हालांकि, सभी टास्क एक जैसे हो सकते हैं ट्रैकिंग आईडी डालें. जब फ़्लीट इंजन, ETA का हिसाब लगाता है Windows पर सेट किया जाता है, तो यह सभी टास्क और उनके क्रम का इस्तेमाल करता है जिनमें उन्हें अनुमान लगाने के लिए शेड्यूल किया जाता है. टास्क आईडी के बारे में ज़्यादा जानकारी के लिए देखें टास्क आईडी से जुड़े दिशा-निर्देश.
फ़्लीट इंजन में टास्क बनाने के लिए, ड्राइवर SDK टूल टास्क मैनेजर का इस्तेमाल करें.
शिपमेंट टास्क
शिपमेंट के पिकअप और डिलीवरी, दोनों के लिए शिपमेंट टास्क बनाएं और नीचे दी गई जानकारी शामिल करें:
- पिक अप या डिलीवरी की जगह की जानकारी.
- यह ट्रैकिंग नंबर या आईडी होता है.
- टास्क को पूरा करने के लिए, अतिरिक्त समय लेने के लिए एक समय. पार्किंग के लिए या हैंडऑफ़ वाली जगह तक चलकर जाएं.
- यूनीक टास्क आईडी. टास्क आईडी से जुड़े दिशा-निर्देश देखें.
ज़्यादा जानकारी के लिए, ये विषय देखें:
Android
iOS
टास्क उपलब्ध न होने से जुड़े टास्क
उपलब्धता से जुड़े टास्क में वह समयावधि शामिल होती है जिसके लिए वाहन उपलब्ध नहीं है पिकअप या डिलीवरी की प्रोसेस के बारे में जानकारी, जैसे कि वाहन या ड्राइवर को भरवाने के लिए ब्रेक आराम करने का समय.
नीचे दी गई जानकारी के साथ कोई ऐसा टास्क बनाएं जो उपलब्ध न हो:
- ब्रेक की अवधि.
- आप चाहें, तो ब्रेक की जगह की जानकारी भी दी जा सकती है. आपको यह देने की ज़रूरत नहीं है हालाँकि, ऐसा करने से ईटीए की ज़्यादा सटीक जानकारी मिलती है दिन भर.
ज़्यादा जानकारी के लिए, ये विषय देखें:
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
enum को AUTO
, TWO_WHEELER
, BICYCLE
या
PEDESTRIAN
. अगर इस फ़ील्ड को सेट नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से AUTO
पर सेट हो जाती है.
वाहनों के लिए, सभी रूटिंग में RouteTravelMode
का इस्तेमाल किया जाता है
ध्यान दें.
वाहन की विशेषताएं
DeliveryVehicle
इकाई में एक दोहराया गया फ़ील्ड है
DeliveryVehicleAttribute
. ListDeliveryVehicles
एपीआई में filter
शामिल है
फ़ील्ड, जो DeliveryVehicle
इकाइयों को
बताई गई विशेषताएं शामिल होनी चाहिए. DeliveryVehicleAttribute
से फ़्लीट इंजन पर कोई असर नहीं पड़ता
रूटिंग व्यवहार.
व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या संवेदनशील जानकारी शामिल न करें एट्रिब्यूट की वैल्यू शामिल करें, क्योंकि यह फ़ील्ड उपयोगकर्ताओं को दिख सकता है.
टास्क की पूरी अवधि
इन सुविधाओं की मदद से, Fleet Engine में टास्क बनाए जा सकते हैं, अपडेट किए जा सकते हैं, और उनके बारे में क्वेरी की जा सकती है delivery API gRPC या REST इंटरफ़ेस.
Task
ऑब्जेक्ट में एक स्टेट फ़ील्ड है, जिसकी मदद से इसकी प्रोग्रेस ट्रैक की जा सकती है
लाइफ़साइकल. मान Open से CLOSED में चले जाते हैं. नए टास्क बनाए जाते हैं
में हो सकती है, जिससे यह पता चलता है कि:
- यह टास्क अभी डिलीवरी वाहन को असाइन नहीं किया गया है.
- डिलीवरी वाहन ने अभी तक टास्क के लिए तय किया गया वाहन स्टॉप पास नहीं किया है.
टास्क के लिए दिशा-निर्देश
किसी वाहन को सिर्फ़ तब टास्क असाइन किया जा सकता है, जब वह खुली स्थिति में हो.
आपने किसी टास्क को वाहन के स्टॉप की सूची से हटाकर रद्द कर दिया है. इससे टास्क को रद्द करने के लिए, टास्क की स्थिति अपने-आप बंद हो जाएगी.
जब टास्क का वाहन, टास्क के वाहन स्टॉप को पूरा कर लेता है:
टास्क के नतीजे वाले फ़ील्ड को 'हो गया' या 'हो गया' पर अपडेट करें.
इवेंट के टाइमस्टैंप की जानकारी दें.
इसके बाद JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी, टास्क के नतीजे और टास्क की स्थिति अपने-आप 'बंद है' पर सेट हो जाती है. ज़्यादा जानकारी के लिए, यह देखें JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी की मदद से अपना शिपमेंट ट्रैक करें.
गाड़ियों की तरह ही, Fleet Engine उन टास्क को मिटा देता है जिन्हें इस तारीख के बाद अपडेट नहीं किया गया है सात दिन के अंदर प्रोसेस करने के लिए, और अगर आप पहले से मौजूद आईडी से कोई टास्क बनाने की कोशिश करते हैं, यह एक गड़बड़ी दिखाता है.
ध्यान दें: फ़्लीट इंजन में किसी टास्क को साफ़ तौर पर मिटाने की सुविधा नहीं है. सेवा अपडेट के बिना सात दिनों के बाद अपने-आप टास्क मिटा देता है. अगर आपको टास्क का डेटा सात दिन से ज़्यादा समय तक सेव रखना है, आपको वह क्षमता खुद लागू करनी होगी.
टास्क के एट्रिब्यूट
Task
इकाई में एक दोहराया गया फ़ील्ड है
TaskAttribute
, जिसमें इन तीन में से किसी एक टाइप की वैल्यू हो सकती है: स्ट्रिंग, संख्या
और बूल हो. ListTasks
API में filter
फ़ील्ड शामिल है, जो सीमित तौर पर दिखाए जा सकते हैं
Task
इकाइयां, खास एट्रिब्यूट वाली इकाइयों के लिए. टास्क के एट्रिब्यूट ये काम नहीं करते
फ़्लीट इंजन रूटिंग के व्यवहार पर असर पड़ता है.
व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) या अन्य संवेदनशील जानकारी शामिल न करें जानकारी को एट्रिब्यूट में बदलें, क्योंकि ये एट्रिब्यूट उपयोगकर्ताओं को दिख सकते हैं.
गाड़ी और टास्क की लाइफ़साइकल मैनेज करें
रिमाइंडर: आपका इंटरनल सिस्टम, ऐसे डेटा के भरोसेमंद सोर्स के तौर पर काम करता है जिसे Fleet Engine डिलीवरी एपीआई को आपकी ओर से बेहतर बनाया जाता है.
अपने सिस्टम में, वाहन और टास्क के लाइफ़साइकल मैनेज करने के लिए, फ़्लीट इंजन डिलीवरी एपीआई का इस्तेमाल करें का इस्तेमाल करें. इसकी मदद से, अपनी गाड़ियों और उनसे जुड़े टास्क बनाए, अपडेट, और ट्रैक किए जा सकते हैं.
साथ ही, ड्राइवर ऐप्लिकेशन सीधे फ़्लीट इंजन से संपर्क करता है डिवाइस की जगह और रास्ते की जानकारी अपडेट करने के लिए. इस मॉडल में, फ़्लीट इंजन को इस्तेमाल करने की अनुमति है जगह की रीयल-टाइम जानकारी को बेहतर तरीके से मैनेज कर सकती हैं. यह जगह को सीधे ट्रैकिंग लाइब्रेरी, जिसका इस्तेमाल करके आप उपभोक्ताओं को उनके स्टेटस के बारे में अपडेट कर सकते हैं उसके हिसाब से बदलाव किया जा सकता है.
उदाहरण के लिए, मान लें कि आपके पास नीचे दी गई स्थिति है:
- डिलीवरी स्टॉप के पास ड्राइवर. ड्राइवर ऐप्लिकेशन अपनी जगह की जानकारी यहां भेजता है फ़्लीट इंजन.
- फ़्लीट इंजन, डिवाइस की जगह की जानकारी ट्रैकिंग लाइब्रेरी, जिसका इस्तेमाल आपका उपभोक्ता ऐप्लिकेशन उपभोक्ता को अलर्ट करने के लिए करता है आस-पास मौजूद होती है.
- शिपिंग पूरी होने के बाद, ड्राइवर "शिपमेंट डिलीवर किया गया" पर क्लिक करता है ड्राइवर ऐप्लिकेशन पर क्लिक करने की सुविधा मिलती है.
- "शिपमेंट डिलीवर किया गया" कार्रवाई आपके बैकएंड सिस्टम को जानकारी भेजती है, जो कारोबार की पुष्टि करने और पुष्टि करने से जुड़े ज़रूरी चरणों को पूरा करता है.
- आपका सिस्टम, टास्क की पुष्टि 'हो गया' के तौर पर करता है और 'फ़्लीट इंजन' को अपडेट करने के लिए, डिलीवरी एपीआई.
नीचे दिया गया डायग्राम, इन प्रोसेस को सामान्य लेवल पर दिखाता है. यह भी आपके सिस्टम, क्लाइंट के बीच मानक संबंध दिखाता है, और फ़्लीट इंजन की सुविधा उपलब्ध है.
क्लाइंट टोकन मैनेज करें
ड्राइवर ऐप्लिकेशन से शुरू करके, जगह की जानकारी के अपडेट सीधे भेजे गए को फ़्लीट इंजन के लिए अनुमति देने वाले टोकन की ज़रूरत होती है. सुझाया गया तरीका यहां दिया गया है क्लाइंट से 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 कॉल में इस्तेमाल किए जाने वाले यूनीक इकाई आइडेंटिफ़ायर का फ़ॉर्मैट और वैल्यू फ़्लीट इंजन के लिए ओपेक. अपने-आप बढ़ने वाले आईडी का इस्तेमाल करने से बचें. साथ ही, पक्का करें कि आइडेंटिफ़ायर में व्यक्तिगत पहचान से जुड़ी कोई जानकारी (पीआईआई) शामिल नहीं है, जैसे कि ड्राइवर का फ़ोन नंबर.
वाहन बनाएं
वाहन बनाने के लिए, यहां से कोई भी तरीका अपनाया जा सकता है Driver SDK टूल या gRPC या REST का इस्तेमाल करने वाले सर्वर एनवायरमेंट से शेयर करें.
gRPC
नई गाड़ी बनाने के लिए, आपको Fleet Engine को CreateDeliveryVehicle
कॉल करना होगा.
इसकी विशेषताएं तय करने के लिए, CreateDeliveryVehicleRequest
ऑब्जेक्ट का इस्तेमाल करें
ऑर्डर करने के लिए तैयार किया है. ध्यान दें कि Name
फ़ील्ड के लिए तय की गई कोई भी वैल्यू
उपयोगकर्ता के बताए गए आईडी के लिए, एपीआई के दिशा-निर्देशों के मुताबिक अनदेखा किया जाता है.
वाहन का आईडी सेट करने के लिए, आपको DeliveryVehicleId
फ़ील्ड का इस्तेमाल करना चाहिए.
DeliveryVehicle
बनाते समय, आपके पास इन फ़ील्ड की जानकारी देने का विकल्प होता है:
- विशेषताएं
- LastLocation
- टाइप
कोई अन्य फ़ील्ड सेट न करें. ऐसा करने पर, फ़्लीट इंजन गड़बड़ी का मैसेज दिखाएगा
क्योंकि वे फ़ील्ड या तो रीड-ओनली हैं या उन्हें केवल
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;
}
आराम
सर्वर एनवायरमेंट से वाहन बनाने के लिए, एचटीटीपी REST कॉल करें
CreateDeliveryVehicle
को:
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
फ़ील्ड को अनदेखा करता है.
कोई अन्य फ़ील्ड सेट न करें. ऐसा करने पर, फ़्लीट इंजन गड़बड़ी का मैसेज दिखाएगा
क्योंकि वे फ़ील्ड या तो रीड-ओनली हैं या उन्हें केवल
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;
}
आराम
किसी सर्वर एनवायरमेंट से शिपमेंट पिक अप करने का टास्क बनाने के लिए, एचटीटीपी REST कॉल करें
CreateTask
को:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, टास्क का यूनीक आइडेंटिफ़ायर है. यह ट्रैकिंग नंबर नहीं होना चाहिए शिपिंग के लिए शुल्क लिया जा सकता है. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सली यूनीक आइडेंटिफ़ायर (यूयूआईडी).
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड मान टाइप Type.PICKUP राज्य 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 का इस्तेमाल करके सर्वर एनवायरमेंट से शिपिंग डिलीवरी टास्क बनाने के लिए, एचटीटीपी REST कॉल करें
CreateTask
को:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, टास्क का यूनीक आइडेंटिफ़ायर है. यह ट्रैकिंग नंबर नहीं होना चाहिए शिपिंग के लिए शुल्क लिया जा सकता है. अगर आपके सिस्टम में टास्क आईडी नहीं हैं, तो यूनिवर्सली यूनीक आइडेंटिफ़ायर (यूयूआईडी).
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड मान टाइप Type.DELIVERY राज्य 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; }
आराम
सर्वर एनवायरमेंट से डिलीवरी और पिकअप का टास्क बनाने के लिए,
एचटीटीपी REST BatchCreateTasks
को कॉल:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate
अनुरोध हेडर में ऑथराइज़ेशन मान के साथ बीयरर फ़ील्ड होना चाहिए <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;
}
आराम
किसी सर्वर एनवायरमेंट से, उपलब्ध न होने वाला टास्क बनाने के लिए, एचटीटीपी REST कॉल करें
CreateTask
को:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, टास्क का यूनीक आइडेंटिफ़ायर है. अगर आपको आपके सिस्टम में टास्क आईडी हैं, तो आप दुनिया भर में आइडेंटिफ़ायर (यूयूआईडी).
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड मान टाइप Type.UNAVAILABLE राज्य 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;
}
आराम
सर्वर एनवायरमेंट से शेड्यूल किया गया स्टॉप टास्क बनाने के लिए, एचटीटीपी REST कॉल करें
CreateTask
को:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, टास्क का यूनीक आइडेंटिफ़ायर है. अगर आपके पास नहीं है टास्क आईडी, ताकि आप अपने सिस्टम में यूनिवर्सली यूनीक आइडेंटिफ़ायर (यूयूआईडी).
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में Task
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड मान टाइप Type.SCHEDULED_STOP राज्य 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;
}
आराम
सर्वर एनवायरमेंट से किसी वाहन के टास्क का क्रम अपडेट करने के लिए, एचटीटीपी REST कॉल करें
UpdateDeliveryVehicle
को:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id>, आपके वाहन में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर है जिसके लिए आपको टास्क का क्रम अपडेट करना है. यह ऐसा आइडेंटिफ़ायर है जो जो आपने वाहन बनाते समय तय किया था.
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
अनुरोध के मुख्य हिस्से में DeliveryVehicle
इकाई होनी चाहिए:
ज़रूरी फ़ील्ड:
फ़ील्ड मान remainingVehicleJourneySegments टास्क के लिए, यात्रा वाले सेगमेंट की सूची. इस सूची में, टास्क को उस क्रम में किया जाता है जिस क्रम में उन्हें एक्ज़ीक्यूट किया जाना चाहिए. सूची में मौजूद पहला टास्क सबसे पहले चलाया जाता है. remainingVehicleJourneySegments[i].stop सूची में i टास्क का स्टॉप. remainingVehicleJourneySegments[i].stop.plannedLocation स्टॉप के लिए तय की गई जगह. remainingVehicleJourneySegments[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
नीचे दिया गया उदाहरण, 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 की मदद से, हर मिनट में कम से कम एक बार जगह की जानकारी अपडेट की जाती है हर 5 सेकंड में एक बार.
gRPC
नीचे दिया गया उदाहरण, Java gRPC लाइब्रेरी Fleet Engine में वाहन की जगह की जानकारी अपडेट करने के लिए:
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
नीचे दिया गया उदाहरण, 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 आप जिस स्टॉप पर पहुंचे हैं उसके राज्य के तौर पर सेट किया गया है.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
नीचे दिया गया उदाहरण, 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;
}
आराम
सर्वर एनवायरमेंट से किसी टास्क को 'बंद है' के तौर पर मार्क करने के लिए, एचटीटीपी REST कॉल करें
UpdateTask
:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state`
<id>, टास्क का यूनीक आइडेंटिफ़ायर है.
आपके अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है Bearer <token>, यहां <token> एक टोकन है. इसे फ़्लीट इंजन टोकन फ़ैक्ट्री से जारी किया जाता है.
आपको अनुरोध के मुख्य हिस्से में, Task
इकाई को शामिल करना होगा:
ज़रूरी फ़ील्ड:
फ़ील्ड मान राज्य 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
अगर आपको यह सेट करना है, तो के नतीजे. जगह की जानकारी सेट करने से, फ़्लीट इंजन इसे सेट नहीं कर पाएगा अंतिम के डिफ़ॉल्ट पर वाहन की जगह की जानकारी. टास्क के नतीजे वाली जगह का फ़्लीट इंजन भी बदला जा सकता है बाद में सेट कर सकते हैं. फ़्लीट इंजन, टास्क के नतीजे की जगह को कभी भी ओवरराइट नहीं करता आपकी ओर से उपलब्ध कराया जाएगा. किसी टास्क के लिए, टास्क के नतीजे की जगह सेट नहीं की जा सकती जिसमें टास्क के नतीजे को सेट न किया गया हो. आप दोनों टास्क के नतीजे सेट कर सकते हैं और टास्क के नतीजे की जगह की जानकारी भी शामिल करें.
नीचे दिया गया उदाहरण, 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
शिपमेंट को फिर से रूट करना
शिपमेंट टास्क बनाने के बाद, पहले से तय की गई जगह में बदलाव नहीं किया जा सकता. शिपमेंट को रीरूट करने के लिए, शिपमेंट टास्क को सेट किए बिना बंद करें एक नतीजा दिया जा सकता है. इसके बाद, पहले से तय की गई जगह की जानकारी का इस्तेमाल करके नया टास्क बनाया जा सकता है. नया टास्क बनाने के बाद, उसे उसी वाहन को असाइन करें. ज़्यादा के लिए तो शिपमेंट टास्क बंद करने का तरीका देखें और टास्क असाइन करें.
फ़ीडर और डिलीवरी वाहनों का इस्तेमाल करें
अगर शिपमेंट को डिलीवरी वाले वाहनों तक पहुंचाने के लिए, फ़ीडर वाहनों का इस्तेमाल किया जाता है पूरे दिन, शिपमेंट के ट्रांसफ़र को शेड्यूल किए गए स्टॉप टास्क के तौर पर मॉडल करें ऑर्डर डिलीवर करने के लिए किया जा सकता है. सटीक स्थान ट्रैकिंग सुनिश्चित करने के लिए, केवल ट्रांसफ़र किए गए शिपमेंट के लिए शिपमेंट डिलीवरी टास्क डिलीवरी वाहन. ज़्यादा जानकारी के लिए, शेड्यूल किया गया स्टॉप देखें.
शिपमेंट की स्थिति और अन्य मेटा जानकारी को सेव करें
शिपमेंट टास्क पूरा होने पर, टास्क की स्थिति और उसका नतीजा रिकॉर्ड किया जाता है टास्क में. हालांकि, आपको अन्य मेटा जानकारी अपडेट करनी पड़ सकती है एक खास कीमत होती है. अन्य मेटा जानकारी को संग्रहित करने के लिए जिसे आप फ़्लीट इंजन सेवा के बाहर का संदर्भ है, तो बाहरी टेबल में टास्क को कुंजी के तौर पर डालें.
ज़्यादा जानकारी के लिए, टास्क पूरा करने का तरीका देखें.
वाहन खोजें
आप वाहन को यहां से देख सकते हैं: 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 के साथ ऐसा करने के लिए इंजन का इस्तेमाल करने के लिए, सर्वर या ब्राउज़र एनवायरमेंट का इस्तेमाल किया जाता है.
सुरक्षा से जुड़े खतरों को कम करने के लिए, सबसे छोटे टोकन का इस्तेमाल करें. उदाहरण के लिए, अगर डिलीवरी कंज़्यूमर टोकन का इस्तेमाल करना चाहिए, तो किसी भी Fleet Engine Deliveryies एपीआई कॉल के रिटर्न का इस्तेमाल करना चाहिए सिर्फ़ उस असली उपयोगकर्ता से जुड़ी जानकारी होनी चाहिए, जैसे कि शिपर या एक शिपमेंट भेजने वाले को. जवाबों में मौजूद अन्य सारी जानकारी छिपा दी जाती है. टोकन के बारे में ज़्यादा जानने के लिए, यहां जाएं अनुमति पाने के लिए 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;
}
एचटीटीपी का इस्तेमाल करके लुकअप
किसी ब्राउज़र से शिपमेंट टास्क देखने के लिए, एचटीटीपी REST कॉल करें
GetTaskTrackingInfo
:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`
<tracking_id> टास्क से जुड़ा ट्रैकिंग आईडी है.
अनुरोध के हेडर में वैल्यू के साथ Authorization फ़ील्ड होना ज़रूरी है बियरर <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
- राज्य
- planned_location
- task_duration
- task_outcome
- task_outcome_location
- task_outcome_location_source
- task_outcome_time
- tracking_id
- टाइप
Google API सुधार के प्रस्तावों के आधार पर नीचे दिए गए फ़ील्ड फ़ॉर्मैट का इस्तेमाल करें:
फ़ील्ड प्रकार | फ़ॉर्मैट | उदाहरण |
---|---|---|
टाइमस्टैंप | RFC-3339 | task_outcome_time = 2022-03-01T11:30:00-08:00 |
कुल समय | s के बाद सेकंड की संख्या |
task_duration = 120s |
Enum | स्ट्रिंग | state = CLOSED AND type = PICKUP |
जगह | point.latitude और point.longitude |
planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0 |
फ़िल्टर क्वेरी की पूरी सूची के लिए, AIP-160 देखें ऑपरेटर का इस्तेमाल करें.
अगर कोई फ़िल्टर क्वेरी तय नहीं की गई है, तो सभी टास्क सूची में शामिल किए जाते हैं.
टास्क की सूचियों को पेजों में बांटा गया है. सूची टास्क अनुरोधों में एक पेज आकार दर्ज किया जा सकता है. अगर पेज का साइज़ बताया गया है, तो लौटाए गए टास्क की संख्या इससे ज़्यादा नहीं होती तय पेज साइज़ से ज़्यादा है. अगर कोई पेज साइज़ मौजूद नहीं है, तो यह एक वाजिब डिफ़ॉल्ट साइज़ है का इस्तेमाल किया जाता है. अगर अनुरोध किए गए पेज का साइज़, अंदरूनी अधिकतम वैल्यू से ज़्यादा है, तो आंतरिक अधिकतम का इस्तेमाल किया जाता है.
टास्क की सूची में, नतीजों के अगले पेज को पढ़ने के लिए टोकन शामिल हो सकता है. किसी ऐसे अनुरोध के साथ पेज टोकन का इस्तेमाल करें जो पिछले अनुरोध से पूरी तरह मेल खाता हो टास्क के अगले पेज को फिर से पाने का अनुरोध करें. पेज टोकन कब मिला खाली है, डेटा वापस पाने के लिए कोई टास्क उपलब्ध नहीं है.
gRPC
नीचे दिया गया उदाहरण, Java gRPC लाइब्रेरी का इस्तेमाल, deliveryVehicleId और टास्क एट्रिब्यूट के टास्क की सूची बनाने के लिए किया जाता है. सफल जवाब अब भी खाली हो सकता है. खाली जवाब का मतलब है कि कोई Tasks दिए गए deliveryVehicleId से जुड़ा डेटा.
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder() // No need for the header
.setParent(parent)
.setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
.build();
try {
ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
आराम
किसी ब्राउज़र से टास्क की सूची बनाने के लिए, ListTasks
पर एचटीटीपी REST कॉल करें:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks`
सूची में दिए गए टास्क पर कोई फ़िल्टर लगाने के लिए, "फ़िल्टर" शामिल करें इसकी वैल्यू के तौर पर, यूआरएल-एस्केप्ड फ़िल्टर क्वेरी वाला यूआरएल पैरामीटर.
अनुरोध के हेडर में वैल्यू के साथ 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 टूल, डिलीवरी करने वाले वाहनों की लिस्टिंग बनाने की सुविधा नहीं देता.
अगर डिलीवरी करने वाले वाहनों की लिस्टिंग में, डिलीवरी करने वाले वाहनों के लिए ब्रॉड ऐक्सेस का अनुरोध किया जाता है और यह जो सिर्फ़ भरोसेमंद लोगों के लिए हों. Delivery Fleet Reader या Delivery Super का इस्तेमाल करें लिस्ट डिलीवरी वाहनों के अनुरोध करते समय, उपयोगकर्ता की पुष्टि करने वाले टोकन.
लिस्ट किए गए डिलीवरी वाहनों के असर की वजह से, इन फ़ील्ड को छिपाने के लिए बदलाव किया जाता है रिस्पॉन्स के साइज़ के हिसाब से:
- 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 शिपमेंट ट्रैकिंग लाइब्रेरी. लाइब्रेरी से, वाहनों और जगहों की जानकारी को विज़ुअलाइज़ किया जा सकता है को फ़्लीट इंजन में ट्रैक किया गया. इसमें एक JavaScript मैप कॉम्पोनेंट होता है जो स्टैंडर्ड google.maps.Map ऑब्जेक्ट का ड्रॉप-इन रिप्लेसमेंट है. Fleet Engine के साथ कनेक्ट करने के लिए डेटा कॉम्पोनेंट इस्तेमाल करते हैं. इस कॉम्पोनेंट से आपको ऐनिमेशन वाला शिपमेंट ट्रैकिंग अनुभव दें और पसंद के मुताबिक बनाएं आपके वेब या मोबाइल ऐप्लिकेशन से.
Fleet Engine डिलीवरी एपीआई के ऊपर, अपनी खुद की शिपमेंट ट्रैकिंग लागू करें.
इसके लिए, ट्रैकिंग आईडी की मदद से शिपिंग के टास्क देखना अहम है.
अगर आपने डिलीवरी कंज़्यूमर रोल का इस्तेमाल किया है, तो कोई भी फ़्लीट इंजन डिलीवरी एपीआई कॉल सिर्फ़ शिपर या रिसीवर के लिए प्रासंगिक जानकारी लौटाया जाता है. अन्य सभी जवाबों में मौजूद जानकारी छिपा दी जाती है. यह आपकी ज़िम्मेदारी है असली उपयोगकर्ताओं की पुष्टि करने के लिए किया जा सकता है. इसके अलावा, स्थान जानकारी फ़िल्टर की जाती है पहले से किए जा रहे टास्क के हिसाब से फ़िल्टर करें. उपलब्धता से जुड़े किसी टास्क के दौरान, असली उपयोगकर्ता के साथ जगह की कोई जानकारी शेयर नहीं की जाती.
लॉग इन हो रहा है
Cloud Logging में RPC लॉग भेजने के लिए, Fleet Engine को सेट किया जा सकता है. ज़्यादा के लिए जानकारी, देखें लॉग करना.
अनुमति देने से जुड़ी भूमिकाएं और टोकन
जैसा कि वाहन और टास्क की लाइफ़साइकल मैनेज करना लेख में बताया गया है साथ ही, अलग-अलग इस्तेमाल के उदाहरणों के लिए, ऑथराइज़ेशन नोट के साथ-साथ, Fleet Engine को किए जाने वाले कॉल के लिए, JSON वेब टोकन की पुष्टि करना ज़रूरी है को सेवा खाते के क्रेडेंशियल का इस्तेमाल करके साइन किया गया हो. इस्तेमाल किए गए सेवा खाते उन टोकन को जारी करने के लिए एक या ज़्यादा भूमिकाएं हो सकती हैं. हर भूमिका अनुमतियों का कोई दूसरा सेट तैयार किया है.
ज़्यादा जानकारी के लिए, यह देखें पुष्टि करना और अनुमति देना.
अक्सर होने वाली समस्याएं हल करना
अगर आपको कोई समस्या आ रही है, तो मदद के लिए नीचे दिए गए सेक्शन देखें.
रेज़िलिएंस
फ़्लीट इंजन को सच्चाई का सोर्स नहीं माना जाता. यह आपकी ज़िम्मेदारी है इसकी मदद से, ज़रूरत पड़ने पर आपके सिस्टम की स्थिति को पहले जैसा किया जा सकता है. फ़्लीट इंजन.
फ़्लीट इंजन में खोई हुई स्थिति
Fleet Engine के साथ काम करते समय, क्लाइंट लागू करें, ताकि सिस्टम ठीक हो जाए अगर कोई गड़बड़ी हुई है. उदाहरण के लिए, जब Fleet Engine किसी तो यह एक गड़बड़ी के साथ जवाब दे सकता है जो दर्शाता है कि वाहन मौजूद हैं. इसके बाद, क्लाइंट को नई स्थिति में वाहन को फिर से बनाना होगा. हालांकि यह समस्या बहुत ही कम होती है. इसलिए, पक्का करें कि आपके सिस्टम में ऐसी मज़बूती दी गई हो कि उससे निपटने में मदद मिले इसे.
Fleet Engine की भयावह स्थिति के बहुत ही कम संभावना वाले हालात में, हो सकता है कि आपको ज़्यादातर या सभी गाड़ियों और टास्क को फिर से बनाना पड़े. अगर बनाए जाने की दर बहुत ज़्यादा हो जाता है, तो सेवा में रुकावट (डीओएस) के हमलों से बचने के लिए, कोटे की जांच की जाती है. इस मामले में, बैकऑफ़ रणनीति का इस्तेमाल करके मनोरंजन की दर धीमी करें बार-बार कोशिश करता है.
ड्राइवर ऐप्लिकेशन में खोए हुए डिवाइस की स्थिति
अगर ड्राइवर ऐप्लिकेशन क्रैश हो जाता है, तो ऐप्लिकेशन को मौजूदा स्थिति फिर से बनानी होगी ड्राइवर SDK टूल के तहत मिलेगी. ऐप्लिकेशन को टास्क फिर से बनाने की कोशिश करनी चाहिए, ताकि यह पक्का किया जा सके कि कि वे मौजूद हैं और अपनी वर्तमान स्थितियों को पहले जैसा करना है. ऐप्लिकेशन को यह भी करना चाहिए कि ड्राइवर SDK टूल के लिए, स्टॉप की सूची को फिर से बनाएं और साफ़ तौर पर सेट करें.
अक्सर पूछे जाने वाले सवाल
अगर कोई ड्राइवर किसी काम के लिए रुक जाए, तो क्या होगा?
इस मामले में, पहले टास्क का क्रम अपडेट करें और फिर सामान्य तरीके से आगे बढ़ें. स्टॉप पर पहुंचने, टास्क पूरा होने, और अन्य जानकारी को मार्क करना. ऐसा न करने पर, सिस्टम में गड़बड़ी हो सकती है. साथ ही, ETA गलत हो सकते हैं, साथ ही, अचानक होने वाली गड़बड़ियों की रिपोर्ट भी की जा सकती है.