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

Fleet Engine On-मांग राइडs and Deliveryies API की मदद से, यात्राओं को मैनेज किया जा सकता है और वाहन की स्थिति की जानकारी पाएं. यह ड्राइवर SDK टूल, उपभोक्ता SDK टूल, और आपके बैकएंड सेवा -- यह बनाएँ और फ़्लीट इंजन के साथ या तो gRPC या REST कॉल.

ज़रूरी शर्तें

डेवलपमेंट के लिए, पक्का करें कि आपने Cloud इंस्टॉल किया हो SDK टूल (gcloud) इस्तेमाल करने के साथ-साथ आपका प्रोजेक्ट.

शेल

gcloud auth login

आपको सफल होने का मैसेज दिखना चाहिए, जैसे:

You are now logged in as [my-user@example.com].
Your current project is [project-id].  You ...

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

शेल

gcloud --project=project-id services enable fleetengine.googleapis.com

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

लॉग इन हो रहा है

Fleet Engine उसे मिलने वाले एपीआई कॉल के बारे में लॉग मैसेज लिख सकता है Google Cloud प्लैटफ़ॉर्म के लॉग में डालें. Cloud Logging से जुड़ा दस्तावेज़ देखें लॉग पढ़ने और उनका विश्लेषण करने के तरीके के बारे में खास जानकारी.

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

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

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

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

पुष्टि करना और अनुमति देना

आप यात्रा और ऑर्डर की प्रगति से मिली क्षमताओं को इसके ज़रिए कॉन्फ़िगर कर सकते हैं Google Cloud Console. इन एपीआई और SDK टूल के लिए ऐसे JSON वेब टोकन इस्तेमाल करने की ज़रूरत होती है जो इनसे बनाए गए सेवा खातों का इस्तेमाल करके साइन किया गया है Cloud Console पर जाएं.

Cloud प्रोजेक्ट का सेटअप

क्लाउड प्रोजेक्ट सेट अप करने के लिए, पहले अपना प्रोजेक्ट बनाएं और फिर सेवा खाते बनाएं.

Google Cloud प्रोजेक्ट बनाने के लिए:

  1. Google Cloud Console का इस्तेमाल करके, Google Cloud प्रोजेक्ट बनाएं.
  2. API और सेवाएं डैशबोर्ड का उपयोग करके, लोकल राइड और डिलीवरी की सुविधा देने वाला एपीआई.

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

यात्रा और ऑर्डर की प्रोग्रेस, इन भूमिकाओं का इस्तेमाल करती है:

भूमिकाब्यौरा
फ़्लीट इंजन उपभोक्ता SDK टूल का उपयोगकर्ता

roles/fleetengine.consumerSdkUser
वाहन खोजने और उनकी जानकारी वापस पाने की अनुमति देता है वाहनों और यात्राओं के बारे में ज़्यादा जानें. इसके साथ सेवा खाते के बनाए गए टोकन भूमिका का इस्तेमाल आम तौर पर आपके राइडशेयरिंग या डिलीवरी उपभोक्ता ऐप्लिकेशन के मोबाइल डिवाइस से किया जाता है.
फ़्लीट इंजन ड्राइवर SDK टूल का उपयोगकर्ता

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

roles/fleetengine.ondemandAdmin
वाहन और यात्रा से जुड़े सभी संसाधनों के लिए, पढ़ने और लिखने की अनुमति दें. इस भूमिका वाले मुख्य खातों को JWT का इस्तेमाल करने की ज़रूरत नहीं है. उन्हें ऐसा करना चाहिए ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करें. कस्टम JWT दावों को अनदेखा किया जाता है. यह भूमिका, भरोसेमंद प्लैटफ़ॉर्म (ग्राहक बैकएंड) तक सीमित होनी चाहिए.
FleetEngine सेवा का सुपर यूज़र **(इस्तेमाल नहीं किया जा सका)**

roles/fleetengine.serviceSuperUser
वाहन और यात्रा से जुड़े सभी एपीआई को अनुमति देता है. मिंट किए गए टोकन का इस्तेमाल करने वाला होता है. आम तौर पर, इस भूमिका का इस्तेमाल आपके बैकएंड से किया जाता है सर्वर. यह भूमिका अब काम नहीं करती. प्राथमिकता दें अगर आपके पास इन फ़ॉर्मैट की फ़ाइल नहीं है, तो roles/fleetengine.ondemandAdmin बटन का इस्तेमाल करें.

उदाहरण के लिए, तीनों भूमिकाओं में से हर एक के लिए सेवा खाता बनाएं और अलग-अलग भूमिकाएं चुन सकते हैं.

gcloud --project=project-id iam service-accounts create fleet-engine-consumer-sdk
gcloud projects add-iam-policy-binding project-id \
       --member=serviceAccount:fleet-engine-consumer-sdk@project-id.iam.gserviceaccount.com \
       --role=roles/fleetengine.consumerSdkUser

gcloud --project=project-id iam service-accounts create fleet-engine-driver-sdk
gcloud projects add-iam-policy-binding project-id \
       --member=serviceAccount:fleet-engine-driver-sdk@project-id.iam.gserviceaccount.com \
       --role=roles/fleetengine.driverSdkUser

gcloud --project=project-id iam service-accounts create fleet-engine-su
gcloud projects add-iam-policy-binding project-id \
       --member=serviceAccount:fleet-engine-su@project-id.iam.gserviceaccount.com \
       --role=roles/fleetengine.serviceSuperUser

ड्राइवर और उपभोक्ता SDK टूल, इन स्टैंडर्ड भूमिकाओं के आधार पर बनाए जाते हैं.

इसके अलावा, ऐसी कस्टम भूमिकाएं भी बनाई जा सकती हैं जो आपको अनुमतियों का आर्बिट्रेरी सेट होता है, जिसे एक साथ बंडल किया जाता है. ड्राइवर और उपभोक्ता SDK टूल तब गड़बड़ी के मैसेज दिखाएगा, जब आवश्यक अनुमति नहीं है. इस वजह से, हम खास तौर पर यह सुझाव देते हैं इसमें कस्टम रोल के बजाय, ऊपर दी गई भूमिकाओं के स्टैंडर्ड सेट का इस्तेमाल किया जा सकता है.

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

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

जहां my-user@example.com का इस्तेमाल ईमेल किया जाता है gcloud (gcloud auth list --format='value(account)') की मदद से पुष्टि करें.

फ़्लीट इंजन ऑथ लाइब्रेरी

फ़्लीट इंजन, JSON वेब टोकन (JWT) का इस्तेमाल करके, इन चीज़ों के ऐक्सेस पर पाबंदी लगाता है फ़्लीट इंजन एपीआई. नई फ़्लीट इंजन ऑथ लाइब्रेरी, GitHub पर उपलब्ध, फ़्लीट इंजन JWT बनाना आसान बनाता है और उन्हें सुरक्षित तरीके से साइन करता है.

इस लाइब्रेरी से ये फ़ायदे मिलते हैं:

  • यह फ़्लीट इंजन टोकन बनाने की प्रोसेस को आसान बनाता है.
  • क्रेडेंशियल फ़ाइलों का इस्तेमाल करने के अलावा, अन्य टोकन पर हस्ताक्षर करने के तरीके उपलब्ध कराता है. जैसे किसी सेवा खाते की पहचान का इस्तेमाल किया है.)
  • यह किसी gRPC स्टब या GAPIC क्लाइंट.

अनुमति पाने के लिए JSON वेब टोकन (JWT) बनाना

जब फ़्लीट इंजन ऑथ लाइब्रेरी का इस्तेमाल नहीं किया जा रहा हो, तब JSON वेब टोकन (JWT) को यह होना चाहिए इसे सीधे आपके कोड बेस में बनाया जाता है. इसके लिए ज़रूरी है कि आपके पास JWT को समझना और यह समझना कि वे फ़्लीट इंजन से कैसे जुड़े हैं. इसलिए, हमने फ़्लीट इंजन ऑथ लाइब्रेरी का इस्तेमाल करने का सुझाव दिया जाता है.

फ़्लीट इंजन में, JSON वेब टोकन (जेडब्ल्यूटी), कम समय तक पुष्टि करने की सुविधा देते हैं और यह पक्का करें कि डिवाइस सिर्फ़ जिसके लिए उन्हें अनुमति मिली हुई है. JWT में एक हेडर और एक दावा सेक्शन होता है. हेडर सेक्शन में इस्तेमाल करने के लिए निजी कुंजी (सेवा खातों से ली गई) और एन्क्रिप्शन एल्गोरिदम. दावे वाले सेक्शन में, यह जानकारी शामिल होती है: टोकन को बनाने का समय, टोकन के लाइव होने का समय, ऐसी सेवाएं जो को ऐक्सेस करने और अनुमति देने से जुड़ी अन्य जानकारी का दावा करना ऐक्सेस; उदाहरण के लिए, वाहन का आईडी.

JWT के हेडर सेक्शन में ये फ़ील्ड होते हैं:

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

JWT के दावे सेक्शन में ये फ़ील्ड होते हैं:

फ़ील्डब्यौरा
iss आपके सेवा खाते का ईमेल पता.
बदले में खेलने वाला खिलाड़ी आपके सेवा खाते का ईमेल पता.
ऑडियो आपके सेवा खाते का Service_NAME, इस मामले में https://fleetengine.googleapis.com/
आईएटी टोकन बनाने के समय का टाइमस्टैंप, जिसे कुछ सेकंड बीत चुका है 1 जनवरी, 1970 को रात 12:00:00 यूटीसी से. तिरछा होने पर 10 मिनट दें. अगर अगर टाइमस्टैंप बहुत पहले या आने वाले समय का है, तो सर्वर गड़बड़ी की शिकायत कर सकता है.
अनुभव टोकन की समयसीमा खत्म होने का टाइमस्टैंप, जिसे कुछ सेकंड बीत चुका है 1 जनवरी, 1970 को रात 12:00:00 यूटीसी से. अनुरोध तब पूरा नहीं होता, जब टाइमस्टैंप अगले एक घंटे में.
अनुमति देना इस्तेमाल के उदाहरण के हिसाब से, इसमें `vehicleid` या `tripid` हो सकते हैं.

JWT टोकन बनाने का मतलब है, इसे साइन करना. निर्देशों और कोड सैंपल के लिए JWT बनाने और हस्ताक्षर करने के लिए, देखें OAuth के बिना सेवा खाते की अनुमति. इसके बाद, gRPC कॉल या इस्तेमाल किए गए अन्य तरीकों में हस्ताक्षर किया गया टोकन अटैच किया जा सकता है फ़्लीट इंजन को ऐक्सेस करने के लिए.

JWT के दावे

JWT पेलोड बनाते समय, अनुमति में एक और दावा जोड़ें सेक्शन जिसकी vehicleid या tripid कुंजी को उस वाहन का आईडी या ट्रिप आईडी जिसके लिए कॉल किया जा रहा है.

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

उपभोक्ता SDK टूल, हमेशा tripid दावे का इस्तेमाल करता है.

राइडशेयर या डिलीवरी की सेवा देने वाली कंपनी को "*" के साथ vehicleid या tripid का इस्तेमाल करना चाहिए से सभी वाहनों और यात्राओं से मैच कर सकता है. ध्यान दें कि JWT में दोनों टोकन हो सकते हैं, यह सुविधा ज़रूरी न होने पर भी, टोकन पर हस्ताक्षर करने की प्रोसेस को आसान बना सकती है.

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

यहां Provider सर्वर के लिए टोकन का एक उदाहरण दिया गया है:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_provider_service_account"
}
.
{
  "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
  "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "*",
     "tripid": "*"
   }
}

कंज़्यूमर ऐप्लिकेशन के लिए टोकन का उदाहरण नीचे दिया गया है:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "tripid": "trip_54321"
   }
}

यहां Driver ऐप्लिकेशन के लिए टोकन का उदाहरण दिया गया है:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_driver_service_account"
}
.
{
  "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
  "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "driver_12345"
   }
}
  • हेडर में kid फ़ील्ड के लिए, अपने सेवा खाते की निजी कुंजी बताएं आईडी. आपको यह वैल्यू, अपनी सेवा के private_key_id फ़ील्ड में मिलेगी खाते की JSON फ़ाइल.
  • iss और sub फ़ील्ड के लिए, अपने सेवा खाते का ईमेल पता बताएं. आपको यह वैल्यू, अपने सेवा खाते के client_email फ़ील्ड में दिखेगी JSON फ़ाइल.
  • aud फ़ील्ड के लिए, https://SERVICE_NAME/ बताएं.
  • iat फ़ील्ड के लिए, टोकन बनाने के समय का टाइमस्टैंप इस्तेमाल करें, जिसे 1 जनवरी, 1970 को 00:00:00 UTC के बाद से सेकंड बीत चुका है. तिरछा होने पर 10 मिनट दें. अगर टाइमस्टैंप काफ़ी पहले का है, तो ऐसा भी हो सकता है कि आने वाले समय में सर्वर किसी गड़बड़ी की शिकायत करे.
  • exp फ़ील्ड के लिए, टोकन की समयसीमा खत्म होने के बाद का टाइमस्टैंप इस्तेमाल करें, 1 जनवरी, 1970 को 00:00:00 यूटीसी से सेकंड के तौर पर दिखाया गया है. ज़्यादा से ज़्यादा iat + 3,600 की वैल्यू दी जा सकती है.

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

इसी तरह, खास अधिकारों वाले कॉल के लिए JWT पर हस्ताक्षर करते समय, का इस्तेमाल, सुपर उपयोगकर्ता की भूमिका वाले सेवा खाते के लिए किया जा सकता है. या फिर, कार्रवाई नहीं की जा सकेगी.

जांच के लिए JWT जनरेट करना

टर्मिनल से टोकन जनरेट करना, जांच के दौरान मददगार हो सकता है.

इन चरणों का पालन करने के लिए, आपका उपयोगकर्ता खाते में सेवा खाता टोकन क्रिएटर की भूमिका होनी चाहिए:

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

नीचे दिए गए कॉन्टेंट के साथ unsigned_token.json नाम की एक नई फ़ाइल बनाएं. iat प्रॉपर्टी, epoch के बाद के सेकंड की संख्या का मौजूदा समय है, जो अपने टर्मिनल में date +%s चलाकर वापस लाया है. exp प्रॉपर्टी समय अवधि को epoch के बाद सेकंड में तय करें, जिसका हिसाब इस तरह लगाया जा सकता है: iat में 3600 जोड़ रहा है. समयसीमा खत्म होने की तारीख, आने वाले समय में इस्तेमाल करें.

{
  "aud": "https://fleetengine.googleapis.com/",
  "iss": "super-user-service-account@project-id.iam.gserviceaccount.com",
  "sub": "super-user-service-account@project-id.iam.gserviceaccount.com",
  "iat": iat,
  "exp": exp,
  "authorization": {
     "vehicleid": "*",
     "tripid": "*"
   }
}

इसके बाद, अपने सुपर की ओर से टोकन पर साइन करने के लिए, नीचे दिया गया gcloud निर्देश चलाएं उपयोगकर्ता सेवा खाता:

gcloud beta iam service-accounts sign-jwt --iam-account=super-user-service-account@project-id.iam.gserviceaccount.com unsigned_token.json signed_token.jwt

अब साइन किए गए Base64-एन्कोडेड JWT को फ़ाइल में सेव किया जाना चाहिए signed_token.jwt. यह टोकन अगले एक घंटे के लिए मान्य है.

अब वाहन की सूची के लिए curl कमांड चलाकर, टोकन की जांच की जा सकती है REST एंडपॉइंट:

curl -X GET "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles" -H "Authorization: Bearer $(cat signed_token.jwt)"

वाहन और उनका लाइफ़साइकल

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

अगर कोई वाहन सात दिनों के बाद भी UpdateVehicle के ज़रिए अपडेट नहीं किया गया है, तो अपने-आप मिट जाएगी. साथ ही, अगर कोई यात्रा है, तो उसे असाइन नहीं किया गया है. वाहन को उपलब्ध रखने का सुझाया गया तरीका अपनी जगह की जानकारी को समय-समय पर अपडेट करते रहना चाहिए. ज़्यादातर से अपडेट Vehicle इकाई के अन्य फ़ील्ड भी इसकी अवधि बढ़ाएंगे. हालांकि, इसके लिए ज़रूरी है कि नई फ़ील्ड की वैल्यू मौजूदा फ़ील्ड की वैल्यू से अलग है.

ध्यान दें: device_settings जैसी Vehicle इकाई के कुछ फ़ील्ड पूरी तरह से डीबग होते हैं ऐसी जानकारी जो फ़्लीट इंजन में सेव नहीं होती है. उन्हें अपडेट करने से Vehicle इकाई के जीवन की अवधि को बढ़ाया जा सकता है.

CreateVehicle को इस सेवा देने वाली कंपनी का आईडी/वाहन के आईडी का जोड़ा पहले से मौजूद. ऐसे वाहनों का मामला बार-बार अपडेट नहीं किए जाते, तो इनसे दो तरीकों से निपटा जा सकता है: बार-बार CreateVehicle में, कंपनी का अनुमानित आईडी/वाहन का आईडी जोड़ा जा सकता है और खारिज किया जा रहा है अगर वाहन पहले से मौजूद है, तो गड़बड़ी होगी; या, किसी विशेष समय के बाद CreateVehicle UpdateVehicle, NOT_FOUND गड़बड़ी के साथ लौटता है.

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

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

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

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

वाहन की इकाई में, VehicleType फ़ील्ड शामिल करना ज़रूरी है. इसमें यह फ़ील्ड होना चाहिए Category ईनम, जिसे AUTO, TAXI, TRUCK, TWO_WHEELER, BICYCLE या PEDESTRIAN. इस वाहन का इस्तेमाल, SearchVehicles और ListVehicles में फ़िल्टर करने की शर्तें.

वाहनों के लिए, सभी रूटिंग में RouteTravelMode का इस्तेमाल किया जाएगा, अगर: कैटगरी को AUTO, TWO_WHEELER, BICYCLE या PEDESTRIAN पर सेट किया गया है. अगर कैटगरी को TAXI या TRUCK पर सेट किया जाता है, तो रूटिंग को इसके जैसा ही माना जाता है AUTO मोड.

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

वाहन की इकाई में, VehicleAttribute का दोहराया गया फ़ील्ड मौजूद है. ये एट्रिब्यूट को फ़्लीट इंजन समझा नहीं जाता. SearchVehicles एपीआई में एक ऐसा फ़ील्ड शामिल है जिसके लिए Vehicles से मेल खाने वाले फ़ील्ड में सभी वैल्यू शामिल होनी चाहिए शामिल किए गए एट्रिब्यूट, दी गई वैल्यू पर सेट हों.

ध्यान दें कि एट्रिब्यूट फ़ील्ड, इस्तेमाल किए जा सकने वाले कई अन्य फ़ील्ड के साथ-साथ होता है Vehicle मैसेज में, जैसे कि vehicle_type और supported_trip_types.

वाहन के लिए बचे हुए वेपॉइंट

वाहन की इकाई में, TripWaypoint (RPC | REST) का दोहराया गया फ़ील्ड मौजूद है, नाम waypoints(RPC | REST) होता है. इस फ़ील्ड में यात्राओं में बचे हुए वेपॉइंट शामिल होते हैं, ताकि गाड़ी उन तक पहुंचती है. फ़्लीट इंजन इस फ़ील्ड को यात्रा के तौर पर कैलकुलेट करता है असाइन किया जाता है. साथ ही, यात्रा की स्थिति बदलने पर इसे अपडेट भी कर देता है. इन वेपॉइंट की पहचान, TripId फ़ील्ड और WaypointType फ़ील्ड से की जा सकती है.

मैच के लिए वाहन की ज़रूरी शर्तें पूरी की जा रही हैं

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

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

कैसे करें: वाहन बनाने का तरीका

हर वाहन को फ़्लीट में ट्रैक करने के लिए, Vehicle इकाई बनानी होगी.

बनाने के लिए CreateVehicleRequest के साथ CreateVehicle एंडपॉइंट का इस्तेमाल करें वाहन.

Vehicle का provider_id, प्रोजेक्ट आईडी होना चाहिए (उदाहरण के लिए, my-on-मांग-प्रोजेक्ट) से लिंक किया जाता है, जिसमें ऐसे सेवा खाते जिनका इस्तेमाल फ़्लीट इंजन को कॉल करने के लिए किया जाएगा. ध्यान दें कि हालांकि एक से ज़्यादा सेवा खाते एक ही राइडशेयर के लिए फ़्लीट इंजन को ऐक्सेस कर सकते हैं या डिलीवरी कंपनी के लिए, Fleet इंजन फ़िलहाल इनके सेवा खातों की सुविधा नहीं देता एक ही Vehicles को ऐक्सेस करने वाले कई Google Cloud प्रोजेक्ट.

Vehicle को OFFLINE या ONLINE स्थिति में बनाया जा सकता है. अगर आपने ONLINE बनाया गया. इसे SearchVehicles के जवाब में तुरंत लौटाया जा सकता है क्वेरी.

CreateVehicle कॉल में शुरुआती last_location शामिल किए जा सकते हैं. Vehicle को अनुमति मिलने के बावजूद, ONLINE राज्य में इसके बिना नहीं बनाया जाना चाहिए last_location.

वाहन के बारे में जानकारी पाने के लिए, वाहन का टाइप देखें फ़ील्ड टाइप करें.

ज़्यादा जानकारी के लिए, वाहन की विशेषताएं देखें एट्रिब्यूट फ़ील्ड पर.

CreateVehicle से मिला मान, बनाई गई Vehicle इकाई है.

उदाहरण

शेल

curl -X POST \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles?vehicleId=vid-8241890" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "OFFLINE",
    "supportedTripTypes": ["EXCLUSIVE"],
    "maximumCapacity": 4,
    "vehicleType": {"category": "AUTO"},
    "attributes": [{"key": "on_trip", "value": "false"}]
}
EOM

यहां जाएं: providers.vehicles.create संदर्भ.

Java

static final String PROJECT_ID = "project-id";

VehicleServiceBlockingStub vehicleService =
    VehicleService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
Vehicle vehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.OFFLINE)  // Initial state
    .addSupportedTripTypes(TripType.EXCLUSIVE)
    .setMaximumCapacity(4)
    .setVehicleType(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
    .addAttributes(VehicleAttribute.newBuilder()
        .setKey("on_trip").setValue("false"))  // Opaque to the Fleet Engine
    // Add .setBackToBackEnabled(true) to make this vehicle eligible for trip
    // matching while even if it is on a trip.  By default this is disabled.
    .build();

CreateVehicleRequest createVehicleRequest =
    CreateVehicleRequest.newBuilder()  // no need for the header
        .setParent(parent)
        .setVehicleId("vid-8241890")  // Vehicle ID assigned by Rideshare or Delivery Provider
        .setVehicle(vehicle)  // Initial state
        .build();

// In this case, the Vehicle is being created in the OFFLINE state and
// no initial position is being provided.  When the Driver App checks
// in with the Rideshare or Delivery Provider, the state can be set to ONLINE and
// the Driver App will update the Vehicle Location.

try {
  Vehicle createdVehicle =
      vehicleService.createVehicle(createVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle created successfully.

वाहन बनाने के लिए, Google Cloud Platform के लॉग

Fleet Engine API, Google Cloud Platform के लॉग से लॉग एंट्री लिखता है. ऐसा तब होता है, जब CreateVehicle एंडपॉइंट पर कॉल रिसीव किया गया है. लॉग एंट्री में यह शामिल है CreateVehicle अनुरोध में मौजूद वैल्यू के बारे में जानकारी. अगर कॉल अपलोड कर देता है, तो इसमें उस Vehicle के बारे में जानकारी भी शामिल होगी वापस किया गया.

शेल

gcloud --project=project-id logging read --freshness=1h '
  jsonPayload.request.vehicleId="vid-8241890"
  jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog"
'

नीचे दिए गए रिकॉर्ड जैसा कोई रिकॉर्ड प्रिंट करना चाहिए:

---
insertId: c2cf4d3a180251c1bdb892137c14f022
jsonPayload:
  '@type': type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog
  request:
    vehicle:
      attributes:
      - key: on_trip
        value: 'false'
      maximumCapacity: 4
      state: VEHICLE_STATE_OFFLINE
      supportedTrips:
      - EXCLUSIVE_TRIP
      vehicleType:
        vehicleCategory: AUTO
    vehicleId: vid-8241890
  response:
    attributes:
    - key: on_trip
      value: 'false'
    availableCapacity: 4
    currentRouteSegmentHandle: AdSiwAwCO9gZ7Pw5UZZimOXOo41cJTjg/r3SuwVPQmuuaV0sU3+3UCY+z53Cl9i6mWHLoCKbBt9Vsj5PMRgOJ8zX
    maximumCapacity: 4
    name: providers/project-id/vehicles/vid-8241890
    state: VEHICLE_STATE_OFFLINE
    supportedTrips:
    - EXCLUSIVE_TRIP
    vehicleType:
      vehicleCategory: AUTO
labels:
  vehicle_id: vid-8241890
logName: projects/project-id/logs/fleetengine.googleapis.com%2Fcreate_vehicle
receiveTimestamp: '2021-09-22T03:25:16.361159871Z'
resource:
  labels:
    location: global
    resource_container: projects/project-id
  type: fleetengine.googleapis.com/Fleet
timestamp: '2021-09-22T03:25:15.724998Z'

वाहन बनाने के बारे में Cloud Pub/Sub सूचनाएं

Fleet Engine API, Cloud Pub/Sub के ज़रिए सूचना पब्लिश करता है. ऐसा तब होता है, जब वाहन बनाया गया है. ये सूचनाएं पाने के लिए, कृपया निर्देश यहां पढ़ें.

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

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

उदाहरण

शेल

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
}
EOM

यहां जाएं: providers.vehicles.update संदर्भ.

Java

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setLastLocation(VehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(LocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("last_location"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

कैसे करें: वाहन के अन्य फ़ील्ड अपडेट करना

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

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

जैसा कि वाहन की विशेषताओं में बताया गया है, attributes फ़ील्ड को सुरक्षित रखने के लिए सभी एट्रिब्यूट को लिखना ज़रूरी है. यह सिर्फ़ एक की-वैल्यू पेयर की वैल्यू अपडेट नहीं की जा सकती UpdateVehicle कॉल. खास एट्रिब्यूट की वैल्यू अपडेट करने के लिए, UpdateVehicleAttributes एपीआई का इस्तेमाल किया जा सकता है.

उदाहरण

इस उदाहरण में, back_to_back चालू है.

शेल

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "ONLINE",
    "attributes": [
      {"key": "on_trip", "value": "true"},
      {"key": "cash_only", "value": "false"}
    ],
    "backToBackEnabled": true
}
EOM

यहां जाएं: providers.vehicles.update संदर्भ.

Java

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.ONLINE)
    .addAllAttributes(ImmutableList.of(
        VehicleAttribute.newBuilder().setKey("on_trip").setValue("true").build(),
        VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
    .setBackToBackEnabled(true)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_state")
        .addPaths("attributes")
        .addPaths("back_to_back_enabled"))
    .build();

// Attributes and vehicle state are being updated, so both are
// included in the field mask.  Note that of on_trip were
// not being updated, but rather cash_only was being changed,
// the desired value of "on_trip" would still need to be written
// as the attributes are completely replaced in an update operation.

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

वाहन के अपडेट के लिए Google Cloud Platform के लॉग

Fleet Engine API, Google Cloud Platform के लॉग से लॉग एंट्री लिखता है. ऐसा तब होता है, जब UpdateVehicle एंडपॉइंट पर कॉल रिसीव किया गया है. लॉग एंट्री में यह शामिल है UpdateVehicle अनुरोध में मौजूद वैल्यू के बारे में जानकारी. अगर कॉल अपलोड कर देता है, तो इसमें उस Vehicle के बारे में जानकारी भी शामिल होगी वापस किया गया.

शेल

gcloud --project=project-id logging read --freshness=1h '
  jsonPayload.request.vehicleId="vid-8241890"
  jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.UpdateVehicleLog"
'

वाहन के अपडेट के लिए, Cloud Pub/Sub की सूचनाएं

Fleet Engine API, Cloud Pub/Sub के ज़रिए सूचना पब्लिश करता है. ऐसा तब होता है, जब गाड़ी की जानकारी अपडेट कर दी गई है. ये सूचनाएं पाने के लिए, कृपया निर्देश यहां पढ़ें.

कैसे करें: वाहन ढूंढें

फ़्लीट इंजन की मदद से, वाहन खोजने में मदद मिलती है. SearchVehicles एपीआई की मदद से, आपके आस-पास मौजूद ऐसे ड्राइवर खोजे जा सकते हैं जो काम के लिए सबसे सही हों, जैसे कि राइड बुक करना या डिलीवरी का अनुरोध करना. SearchVehicles एपीआई, वाहन की विशेषताओं के साथ टास्क एट्रिब्यूट से मेल खाने वाले ड्राइवरों की रैंक की सूची: शामिल हैं. ज़्यादा जानकारी के लिए, यह देखें आस-पास मौजूद ड्राइवर ढूंढें जा रहे हैं.

उदाहरण

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

शेल

सबसे पहले, पिछले चरण में वाहन की जगह की जानकारी अपडेट करें, ताकि यह योग्य है. असल में, यह काम ड्राइवर SDK टूल की मदद से किया जाता है Android या iOS डिवाइस पर Android या iOS डिवाइस का इस्तेमाल कर सकते हैं.

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location,attributes" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
  "lastLocation": {
    "updateTime": "$( date -u +"%Y-%m-%dT%H:%M:%SZ" )",
    "location": {
      "latitude": "-6.195139",
      "longitude": "106.820826"
    }
  },
  "attributes": [{"key": "on_trip", "value": "false"}]
}
EOM

खोजने से कम से कम वह वाहन मिलेगा.

curl -X POST \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:search" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
  "pickupPoint": {
    "point": {"latitude": "-6.195139", "longitude": "106.820826"}
  },
  "dropoffPoint": {
    "point": {"latitude": "-6.1275", "longitude": "106.6537"}
  },
  "pickupRadiusMeters": 2000,
  "count": 10,
  "minimumCapacity": 2,
  "tripTypes": ["EXCLUSIVE"],
  "vehicleTypes": [{"category": "AUTO"}],
  "filter": "attributes.on_trip=\"false\"",
  "orderBy": "PICKUP_POINT_ETA",
  "includeBackToBack": true
}
EOM

यहां जाएं: providers.vehicles.search संदर्भ.

Java

static final String PROJECT_ID = "project-id";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
    .setParent(parent)
    .setPickupPoint( // Grand Indonesia East Mall
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint( // Balai Sidang Jakarta Convention Center
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
    .setPickupRadiusMeters(2000)
    .setCount(10)
    .setMinimumCapacity(2)
    .addTripTypes(TripType.EXCLUSIVE)
    .addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
    .setFilter("attributes.on_trip=\"false\"")
    .setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
    .setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
    .build();

// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully

try {
  SearchVehiclesResponse searchVehiclesResponse =
      vehicleService.searchVehicles(searchVehiclesRequest);

  // Search results: Each vehicle match contains a vehicle entity and information
  // about the distance and ETA to the pickup point and dropoff point.
  List<VehicleMatch> vehicleMatches = searchVehiclesResponse.getMatchesList();
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

वाहन को फ़िल्टर करने से जुड़ी क्वेरी

SearchVehicles और ListVehicles में, वाहन के एट्रिब्यूट को फ़िल्टर किया जा सकता है फ़िल्टर क्वेरी का इस्तेमाल करके. फ़िल्टर क्वेरी सिंटैक्स के लिए, देखें उदाहरणों के लिए AIP-160.

ध्यान दें कि फ़िल्टर क्वेरी का इस्तेमाल, सिर्फ़ वाहन के एट्रिब्यूट के हिसाब से फ़िल्टर करने के लिए किया जा सकता है. का इस्तेमाल अन्य फ़ील्ड के लिए नहीं किया जा सकता. फ़िल्टर क्वेरी, AND क्लॉज़ के तौर पर काम करती है में minimum_capacity या vehicle_types जैसी अन्य पाबंदियों के साथ SearchVehiclesRequest.

कैसे करें: वाहनों की सूची बनाएं

SearchVehicles को, रैंक की गई कुछ गाड़ियों को खोजने के लिए ऑप्टिमाइज़ किया गया है बहुत तेज़ी से ऑर्डर करते हैं और इसका उपयोग मुख्य रूप से आस-पास के उन ड्राइवरों को खोजने में किया जाता है जो सबसे बढ़िया हैं टास्क को पूरा किया जा सकता है. हालांकि, कभी-कभी आपको उन सभी वाहनों को ढूंढना होगा जो कई शर्तों को पूरा करना ज़रूरी है. ListVehicles है डिज़ाइन किया गया है.

ListVehicles एपीआई की मदद से, उन सभी वाहनों को ढूंढा जा सकता है जो कुछ खास अनुरोध के विकल्प. ListVehicles एपीआई, वाहनों की जानकारी वाले पेजों की सूची दिखाता है वह प्रोजेक्ट जो कुछ ज़रूरतों को पूरा करता है.

वाहन के एट्रिब्यूट के हिसाब से फ़िल्टर करने के लिए, कृपया यहां जाएं वाहन को फ़िल्टर करने से जुड़ी क्वेरी.

उदाहरण

यह उदाहरण, vehicle_type और एट्रिब्यूट पर फ़िल्टर करने की प्रोसेस को पूरा करता है. इसके लिए, filter स्ट्रिंग.

शेल

curl -X POST \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:list" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
  "vehicleTypes": [{"category": "AUTO"}],
  "filter": "attributes.on_trip=\"false\"",
}
EOM

यहां जाएं: providers.vehicles.list संदर्भ.

Java

static final String PROJECT_ID = "project-id";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
ListVehiclesRequest listVehiclesRequest = ListVehiclesRequest.newBuilder()
    .setParent(parent)
    .addTripTypes(TripType.EXCLUSIVE)
    .addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
    .setFilter("attributes.on_trip=\"false\"")
    .setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
    .build();

// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully

try {
  ListVehiclesResponse listVehiclesResponse =
      vehicleService.listVehicles(listVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

यात्राएं और उनका लाइफ़साइकल

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

Trip में स्टेटस फ़ील्ड होता है, ताकि लाइफ़साइकल के ज़रिए इसकी प्रोग्रेस को ट्रैक किया जा सके. वैल्यू, NEW से COMPLETE प्लस CANCELED और UNKNOWN_TRIP_STATUS में बदल जाती हैं को अपनाएं. आरपीसी के लिए trip_status पर जाएं या REST के लिए यात्रा की स्थिति.

  • NEW
  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE

आपकी सेवा इनमें से किसी भी स्थिति से, CANCELED की यात्रा को अपडेट कर सकती है. जब आपकी सेवा कोई यात्रा बनाती है, तो इंजन स्टेटस को NEW के तौर पर सेट करता है. ऐप्लिकेशन vehicle_id का इस्तेमाल करना ज़रूरी नहीं है. वाहनों की तरह ही, असाइन नहीं की गई यात्राओं की जानकारी अपने-आप मिट जाती है सात दिन बाद बिना किसी अपडेट के मिलता है. अगर आपकी सेवा यह आईडी पहले से मौजूद है, तो एक गड़बड़ी का मैसेज दिखता है. किसी यात्रा को ‘ऐक्टिव’ माना जाता है, अगर यह COMPLETE या CANCELED के अलावा किसी दूसरी स्थिति में है. यह फ़र्क़ वाहन की इकाई और SearchTripsRequest के active_trips फ़ील्ड में ज़रूरी वैल्यू डालें.

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

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

यात्रा के लिए बचे हुए वेपॉइंट

यात्रा की इकाई में, TripWaypoint (RPC | REST) का दोहराया गया फ़ील्ड होता है, remainingWaypoints(RPC | REST) कहा जाता है. इस फ़ील्ड में वे सभी वेपॉइंट शामिल हैं जहां वाहन को ऑर्डर में यात्रा करनी होगी की इस यात्रा के अंतिम ड्रॉप ऑफ़ पॉइंट से पहले करें. यह इससे हिसाब लगाता है वाहन के बचे हुए वेपॉइंट. बैक-टू-बैक और कारपूल इस्तेमाल के मामलों में, इस सूची में वेपॉइंट शामिल हैं इस यात्रा से पहले की जाने वाली अन्य यात्राएं, लेकिन इसमें वेपॉइंट शामिल नहीं हैं इस यात्रा के बाद. सूची में वेपॉइंट की पहचान, TripId से की जा सकती है और WaypointType.

यात्रा की स्थिति और वाहन के बचे हुए वेपॉइंट के बीच संबंध

वाहन के बाकी वेपॉइंट (आरपीसी | REST) फ़्लीट इंजन को यात्रा की स्थिति बदलने का अनुरोध मिलने पर इसे अपडेट किया जाएगा. कॉन्टेंट बनाने जब पिछला वेपॉइंट वाहन के बचे हुए वेपॉइंट की सूची से हटा दिया जाएगा, तब tripStatus(RPC | REST) अन्य स्थिति से ENROUTE_TO_XXX में बदल गया है. इसका मतलब है कि जब यात्रा की स्थिति ENROUTE_TO_PICKUP से ARRIVED_AT_PICKUP में बदल गई है, यात्रा की पिकअप पॉइंट अब भी वाहन के वेपॉइंट की बची हुई सूची में रहेगा. हालांकि, यात्रा के दौरान ऐसा होगा स्थिति ENROUTE_TO_INTERMEDIATE_DESTINATION या ENROUTE_TO_DROPOFF में बदल दी गई है, इसके बाद, इसका पिक अप पॉइंट, वाहन के बचे हुए वेपॉइंट से हटा दिया जाएगा.

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

यात्रा की स्थिति को COMPLETED में बदलने पर, इस यात्रा से कोई वेपॉइंट नहीं होगा वाहन के बाकी वेपॉइंट सूची में.

कैसे करें: यात्रा बनाएं

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

यात्रा बनाने के लिए इन एट्रिब्यूट की ज़रूरत होती है:

  • parent - एक स्ट्रिंग जिसमें कंपनी का वह आईडी शामिल होता है जो Google की क्लाउड प्रोजेक्ट बनाया गया.
  • trip_id - ऐसी स्ट्रिंग जो राइडशेयर की सुविधा देने वाली कंपनी ने बनाई है.
  • trip - यात्रा की जानकारी देने वाला बुनियादी मेटाडेटा वाला कंटेनर.
    • trip_type - इनम से पता चलता है कि यात्रा में अन्य राइडर हो सकते हैं या नहीं एक ही वाहन (SHARED) में किसी दूसरी जगह और मंज़िल से या सिर्फ़ एक पक्ष (EXCLUSIVE).
    • pickup_point - TerminalLocation, जहां यात्रा. आरपीसी रेफ़रंस देखें या REST रेफ़रंस

यात्रा बनाते समय number_of_passengers, dropoff_point दिए जा सकते हैं और vehicle_id. हालांकि, ये फ़ील्ड ज़रूरी नहीं हैं. हालांकि, अगर आपने इन्हें दिया है, तो उन्हें सेव करके रखा जाता है. यात्रा के दूसरे सभी फ़ील्ड को अनदेखा कर दिया जाता है. उदाहरण के लिए, सभी यात्राएं NEW के trip_status से शुरू करें, भले ही आप trip_status CANCELED को बनाने के अनुरोध में शामिल किया गया है.

उदाहरण

नीचे दिए गए उदाहरण में, ग्रैंड इंडोनेशिया ईस्ट मॉल की यात्रा के बारे में बताया गया है. ट्रिप सिर्फ़ दो यात्रियों के लिए है. Trip का provider_id यह होना चाहिए वही होना चाहिए जो प्रोजेक्ट आईडी के जैसा हो. उदाहरण में, राइडशेयर की सेवा देने वाली कंपनी ने Google Cloud प्रोजेक्ट, project-id. इस प्रोजेक्ट में फ़्लीट इंजन को कॉल करने के लिए इस्तेमाल किए जाने वाले सेवा खाते. यात्रा की स्थिति NEW है.

बाद में, वाहन की यात्रा का मिलान करने के बाद, सेवा देने वाली कंपनी कॉल कर सकती है UpdateTrip और वाहन को यात्रा के समय असाइन किए जाने पर vehicle_id को बदलें.

शेल

curl -X POST \
  "https://fleetengine.googleapis.com/v1/providers/project-id/trips?tripId=tid-1f97" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
  "tripType": "EXCLUSIVE",
  "numberOfPassengers": 2,
  "pickupPoint": {
    "point": {"latitude": "-6.195139", "longitude": "106.820826"}
  },
  "dropoffPoint": {
    "point": {"latitude": "-6.1275", "longitude": "106.6537"}
  }
}
EOM

यहां जाएं: providers.trips.create संदर्भ.

Java

static final String PROJECT_ID = "project-id";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE) // Use TripType.SHARED for carpooling
    .setPickupPoint(                 // Grand Indonesia East Mall
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    // Provide the number of passengers if available.
    .setNumberOfPassengers(2)
    // Provide the drop-off point if available.
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.1275).setLongitude(106.6537)))
    .build();

CreateTripRequest createTripRequest =
    CreateTripRequest.newBuilder()  // no need for the header
        .setParent(parent)
        .setTripId("tid-1f97")  // Trip ID assigned by the Provider
        .setTrip(trip)              // Initial state
        .build();

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

try {
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

यात्रा बनाने के लिए Google Cloud Platform के लॉग

Fleet Engine API, Google Cloud Platform के लॉग का इस्तेमाल करके लॉग एंट्री लिखता है, जब CreateTrip एंडपॉइंट पर कॉल रिसीव किया गया है. लॉग एंट्री में यह शामिल है CreateTrip अनुरोध में मौजूद वैल्यू के बारे में जानकारी. अगर कॉल हो जाता है, तो इसमें लौटाए गए Trip की जानकारी भी शामिल होगी.

कैसे करें: यात्रा अपडेट करना

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

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

  • यात्रा की स्थिति.
  • वाहन का आईडी. ऐसा वाहन बनाते समय या वाहन को सेट करने के बाद यात्रा.
  • पिकअप, ड्रॉपऑफ़ या वेपॉइंट में बदलाव.

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

  • रास्ते
  • ETA
  • बची हुई दूरी
  • वाहन की जगह की जानकारी
  • शेष वेपॉइंट

Trip आरपीसी में देखें या REST में Resource.Trip.

यात्रा से जुड़े अपडेट के लिए Google Cloud Platform के लॉग

Fleet Engine API, Google Cloud Platform के लॉग का इस्तेमाल करके लॉग एंट्री लिखता है, जब UpdateTrip एंडपॉइंट पर कॉल रिसीव किया गया है. लॉग एंट्री में यह शामिल है UpdateTrip अनुरोध में मौजूद वैल्यू के बारे में जानकारी. अगर कॉल पूरा होता है, इसमें, लौटाए गए Trip की जानकारी भी शामिल होगी.

कैसे करें: सर्च ट्रिप

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

SearchTrips एक सुविधाजनक एपीआई है, लेकिन नीचे दी गई सूची में इस्तेमाल के दो उदाहरण दिए गए हैं.

  • वाहन की चालू यात्राओं की जानकारी तय करना -- सेवा देने वाली कंपनी यह तय कर सकती है कि वाहन में फ़िलहाल कौनसी यात्राएं चालू हैं. SearchTripsRequest के अंदर, vehicle_id को वाहन पर सेट किया गया है. साथ ही, इसे active_trips_only पर सेट किया गया है. true पर सेट होना चाहिए.

  • सेवा देने वाले और फ़्लीट इंजन की स्थिति का मिलान करना -- सेवा देने वाली कंपनी, SearchTrips को पक्का किया जाएगा कि उनकी यात्रा की स्थिति और फ़्लीट इंजन की स्थिति आपस में मेल खाती हो. TripStatus के लिए यह खास तौर पर ज़रूरी है. अगर असाइन की गई यात्रा की स्थिति वाहन के लिए ठीक से COMPLETE या CANCELED पर सेट नहीं किया गया है, वाहन SearchVehicles द्वारा शामिल नहीं किया गया है.

SearchTrips को इस तरह इस्तेमाल करने के लिए, vehicle_id को खाली छोड़ें, active_trips_only सेट करें true पर सेट करें और minimum_staleness को यात्रा की ज़्यादातर अवधियों से ज़्यादा समय पर सेट करें. उदाहरण के लिए, एक घंटे का इस्तेमाल किया जा सकता है. नतीजों में ऐसी यात्राएं शामिल हैं जो पूरा नहीं हुआ और न ही रद्द किया गया. साथ ही, इसे एक घंटे से ज़्यादा समय में अपडेट नहीं किया गया. प्रोवाइडर को इन यात्राओं की जाँच करनी चाहिए, ताकि यह पक्का किया जा सके कि फ़्लीट इंजन में उनकी स्थिति सही तरीके से अपडेट किया गया.

समस्या का हल

DEADLINE_EXCEEDED गड़बड़ी होने पर, फ़्लीट इंजन की स्थिति यह है अज्ञात. सेवा देने वाले को CreateTrip को फिर से कॉल करना चाहिए, जिससे या तो 201 (बनाया गया) या 409 (झूला) है. बाद वाले मामले में, पिछला अनुरोध सफल रहा DEADLINE_EXCEEDED से पहले करें. ज़्यादा जानकारी के लिए उपभोक्ता एपीआई की गाइड देखें यात्रा की गड़बड़ियों को ठीक करने के बारे में जानकारी: Android या iOS पर अपग्रेड करें.

कारपूल राइड सहायता

TripType.SHARED की सुविधा वाले वाहन के लिए, एक से ज़्यादा SHARED यात्राएं असाइन की जा सकती हैं. आपको असाइन की गई सभी यात्राओं के लिए, पास नहीं किए गए सभी वेपॉइंट का क्रम तय करना होगा जब आप असाइन करते हैं, तब Trip.vehicle_waypoints के ज़रिए इस शेयर की गई राइड में शामिल वाहन शेयर की गई यात्रा के लिए vehicle_id (CreateTrip या UpdateTrip के अनुरोध में). आरपीसी के लिए vehicle_waypoints पर जाएं या REST के लिए vehicleWaypoints.

एक से ज़्यादा डेस्टिनेशन मैनेज किए जा सकते हैं

किसी मध्यवर्ती गंतव्य की पहचान करना

फ़ील्ड intermediateDestinations और फ़ील्ड intermediateDestinationIndex यात्रा में (RPC | REST) जिन्हें गंतव्य दिखाने के लिए इस्तेमाल किया जा सकता है.

इंटरमीडिएट डेस्टिनेशन को अपडेट करें

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

यात्रा की स्थिति में बदलाव

(RPC | REST) में intermediateDestinationsVersion फ़ील्ड यात्रा की स्थिति अपडेट करने का अनुरोध करते समय, फ़्लीट इंजन को भेजना ज़रूरी है मध्यवर्ती गंतव्य बीत चुका है. टारगेट किया गया इंटरमीडिएट डेस्टिनेशन को intermediateDestinationIndex फ़ील्ड के ज़रिए दर्ज किया गया है. जब tripStatus (RPC | REST) ENROUTE_TO_INTERMEDIATE_DESTINATION होता है, तो इनके बीच की कोई संख्या [0..N-1] से पता चलता है कि वाहन किस इंटरमीडिएट डेस्टिनेशन से आगे जाएगा. जब tripStatus ARRIVED_AT_INTERMEDIATE_DESTINATION होता है, तो इनके बीच की कोई संख्या [0..N-1] से पता चलता है कि वाहन किस इंटरमीडिएट डेस्टिनेशन पर है.

उदाहरण

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

Java

static final String PROJECT_ID = "project-id";
static final String TRIP_ID = "multi-destination-trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
Trip trip = …; // Fetch trip object from FleetEngine or your storage.

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip settings to update.
Trip trip = Trip.newBuilder()
    // Trip status cannot go back to a previous status once it is passed
    .setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)
    // Enrouting to the first intermediate destination.
    .setIntermediateDestinationIndex(0)
    // intermediate_destinations_version MUST be provided to ensure you
    // have the same picture on intermediate destinations list as FleetEngine has.
    .setIntermediateDestinationsVersion(
        trip.getIntermediateDestinationsVersion())
    .build();

// Trip update request
UpdateTripRequest updateTripRequest =
    UpdateTripRequest.newBuilder()
        .setName(tripName)
        .setTrip(trip)
        .setUpdateMask(
            FieldMask.newBuilder()
                .addPaths("trip_status")
                .addPaths("intermediate_destination_index")
                // intermediate_destinations_version must not be in the
                // update mask.
                .build())
        .build();

// Error handling
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:  // Trip does not exist.
      break;
    case FAILED_PRECONDITION:  // The given trip status is invalid, or the
                                // intermediate_destinations_version
                                // doesn’t match FleetEngine’s.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

कैसे करें: Fleet Engine API से सूचना वाले मैसेज पाने के लिए सदस्यता लें

Fleet Engine API में, Google Cloud Pub/Sub का इस्तेमाल किया जाता है उपभोक्ता Google Cloud के ज़रिए बनाए गए विषय पर सूचनाएं पब्लिश करने के लिए प्रोजेक्ट. आपके Google Cloud पर फ़्लीट इंजन के लिए, Pub/Sub डिफ़ॉल्ट रूप से चालू नहीं होता प्रोजेक्ट. Pub/Sub को चालू करने के लिए, कृपया सहायता मामला दर्ज करें या अपने ग्राहक इंजीनियर से संपर्क करें.

अपने Cloud प्रोजेक्ट के लिए विषय बनाने के लिए, इन निर्देशों का पालन करें. विषय का आईडी 'fleet_engine_Notification' होना चाहिए.

विषय उसी Cloud प्रोजेक्ट में बनाया जाना चाहिए जिससे Fleet Engine को कॉल किया जा रहा है एपीआई.

विषय बनाने के बाद, आपको Fleet Engine API की अनुमति देनी होगी आपको विषय पर पब्लिश करने की अनुमति देनी होगी. ऐसा करने के लिए, आप जिस विषय पर ने अभी-अभी बनाया है और एक नई अनुमति जोड़ी है. अनुमतियों में बदलाव करने वाला टूल खोलने के लिए, आपको जानकारी पैनल दिखाएं पर क्लिक करना पड़ सकता है. मूल रकम geo-fleet-engine@system.gserviceaccount.com होनी चाहिए और भूमिका Pub/Sub publisher होनी चाहिए.

सूचनाएं पाने की सदस्यता लेने के लिए अपना क्लाउड प्रोजेक्ट सेट अप करने के लिए, इन निर्देशों का पालन करें

Fleet Engine API हर सूचना को दो अलग-अलग डेटा में पब्लिश करेगा फ़ॉर्मैट, protobuf और json. हर सूचना के लिए डेटा फ़ॉर्मैट की जानकारी PubsubMessage एट्रिब्यूट कुंजी को data_format के तौर पर और protobuf या json के तौर पर वैल्यू डालें.

सूचना का स्कीमा:

प्रोटोबफ़

// A batch of notifications that is published by the Fleet Engine service using
// Cloud Pub/Sub in a single PubsubMessage.
message BatchNotification {
  // Required. At least one notification must exist.
  // List of notifications containing information related to changes in
  // Fleet Engine data.
  repeated Notification notifications = 1;
}

// A notification related to changes in Fleet Engine data.
// The data provides additional information specific to the type of the
// notification.
message Notification {
  // Required. At least one type must exist.
  // Type of notification.
  oneof type {
    // Notification related to changes in vehicle data.
    VehicleNotification vehicle_notification = 1;
  }
}

// Notification sent when a new vehicle was created.
message CreateVehicleNotification {
  // Required.
  // Vehicle must contain all fields that were set when it was created.
  Vehicle vehicle = 1;
}

// Notification sent when an existing vehicle is updated.
message UpdateVehicleNotification {
  // Required.
  // Vehicle must only contain name and fields that are present in the
  // field_mask field below.
  Vehicle vehicle = 1;

  // Required.
  // Contains vehicle field paths that were specifically requested
  // by the Provider.
  google.protobuf.FieldMask field_mask = 2;
}

// Notification related to changes in vehicle data.
message VehicleNotification {
  // Required. At least one type must be set.
  // Type of notification.
  oneof type {
    // Notification sent when a new vehicle was created.
    CreateVehicleNotification create_notification = 1;
    // Notification sent when an existing vehicle is updated.
    UpdateVehicleNotification update_notification = 2;
  }
}

JSON

BatchNotification: {
  "description": "A batch of notifications that is published by the Fleet Engine service using Cloud Pub/Sub in a single PubsubMessage.",
  "type": "object",
  "required": ["notifications"],
  "properties": {
    "notifications": {
      "description": "At least one notification must exist. List of notifications containing information related to changes in Fleet Engine data.",
      "type": "Notification[]"
    }
  }
}

Notification: {
  "description": "A notification related to changes in Fleet Engine data. The data provides additional information specific to the type of the notification.",
  "type": "object",
  "properties": {
    "vehicleNotification": {
      "description": "Notification related to changes in vehicle data.",
      "type": "VehicleNotification"
    }
  }
}

VehicleNotification: {
  "description": "Notification related to changes in vehicle data.",
  "type": "object",
  "properties": {
    "createNotification": {
      "description": "Notification sent when a new vehicle was created.",
      "type": "CreateVehicleNotification"
    },
    "updateNotification": {
      "description": "Notification sent when an existing vehicle is updated.",
      "type": "UpdateVehicleNotification"
    }
  }
}

CreateVehicleNotification: {
  "description": "Notification sent when a new vehicle was created.",
  "type": "object",
  "required": ["vehicle"],
  "properties": {
    "vehicle": {
      "description": "Vehicle must contain all fields that were set when it was created.",
      "type": "Vehicle"
    }
  }
}

UpdateVehicleNotification: {
  "description": "Notification sent when an existing vehicle is updated.",
  "type": "object",
  "required": ["vehicle", "fieldMask"],
  "properties": {
    "vehicle": {
      "description": "Vehicle must only contain name and fields that are present in the fieldMask field below.",
      "type": "Vehicle"
    },
    "fieldMask": {
      "description": "Contains vehicle field paths that were specifically requested by the Provider.",
      "type": "FieldMask"
    }
  }
}