आरटीयू मुख्य रूप से ऐसे अपडेट के लिए होते हैं जिनका पता आपको नहीं चलता. उदाहरण के लिए, आपातकालीन स्थिति में बंद होने की जानकारी या समय-समय पर बदलने वाला मेटाडेटा (जैसे कि ETA). अगर आपके बदलाव को तुरंत दिखाने की ज़रूरत नहीं होती, तो इसके बजाय बैच फ़ीड में डेटा डालने की सुविधा इस्तेमाल की जा सकती है. रीयल-टाइम अपडेट, पांच मिनट से ज़्यादा समय में प्रोसेस नहीं किए जाते.
Google Cloud Platform का सेटअप
- GCP प्रोजेक्ट सेट अप करें. RTU API को ऐक्सेस करने के लिए, GCP प्रोजेक्ट होना ज़रूरी है.
- बदलाव करने का ऐक्सेस दें food-support@google.com
- अपने Google POC को GCP प्रोजेक्ट नंबर के बारे में बताएं.रीयल-टाइम अपडेट काम कर सकें, इसके लिए आपका GCP प्रोजेक्ट आपके Actions Center खाते से जुड़ा होना चाहिए.
- Maps बुकिंग एपीआई चालू करें:
- GCP में, एपीआई और सेवाएं > लाइब्रेरी पर जाएं.
- “Google Maps का बुकिंग एपीआई” खोजें.
- सैंडबॉक्स इंस्टेंस (“Google Maps Booking API (Dev)”) ढूंढें और चालू करें पर क्लिक करें
- प्रोडक्शन इंस्टेंस (“Google Maps बुकिंग एपीआई”) ढूंढें और चालू करें पर क्लिक करें
- अपने GCP प्रोजेक्ट में एडिटर की भूमिका वाला सेवा खाता बनाएं. ज़्यादा जानकारी के लिए, सेवा खाते का सेटअप देखें.
- पक्का करें कि बैच फ़ीड उसी प्लैटफ़ॉर्म पर अपलोड किए जाएं जिसमें रीयल-टाइम अपडेट पर काम किया जा रहा है.
- एपीआई की पुष्टि करने के लिए, हमारा सुझाव है कि आप अपनी पसंद की भाषा में Google क्लाइंट लाइब्रेरी इंस्टॉल करें. OAuth स्कोप के तौर पर “https://www.googleapis.com/auth/mapsbooking” इस्तेमाल करें. नीचे दिए गए कोड सैंपल में इन लाइब्रेरी का इस्तेमाल किया गया है. अगर ऐसा नहीं है, तो आपको Google API ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करना में बताए गए तरीके से टोकन एक्सचेंज को मैन्युअल तौर पर मैनेज करना होगा.
सेवा खाता सेटअप करना
Google API के लिए पुष्टि किए गए एचटीटीपीएस अनुरोध, जैसे कि रीयल-टाइम अपडेट एपीआई के लिए, आपको सेवा खाते की ज़रूरत होगी.
सेवा खाता सेट अप करने के लिए, ये काम करें:
- Google Cloud Platform कंसोल को ऐक्सेस करना.
- कार्रवाइयां केंद्र पर मौजूद आपके खाते से भी एक Google Cloud प्रोजेक्ट जुड़ा है. अगर वह प्रोजेक्ट पहले से नहीं चुना गया है, तो उसे चुनें.
- बाएं मेन्यू में, सेवा खाते पर क्लिक करें.
- सेवा खाता बनाएं पर क्लिक करें.
- सेवा खाते के लिए कोई नाम डालें और बनाएं पर क्लिक करें.
- भूमिका चुनने के लिए, प्रोजेक्ट > एडिटर चुनें.
- जारी रखें पर क्लिक करें.
- ज़रूरी नहीं: उपयोगकर्ताओं को सेवा खाते का ऐक्सेस देने के लिए, उन्हें जोड़ें और हो गया पर क्लिक करें.
- आपने अभी-अभी जो सेवा खाता बनाया है उसके लिए, ज़्यादा > कुंजी बनाएं पर क्लिक करें.
- फ़ॉर्मैट के रूप में JSON चुनें और बनाएं पर क्लिक करें.
- सार्वजनिक/निजी पासकोड का नया जोड़ा जनरेट होने के बाद, उसे अपने कंप्यूटर पर डाउनलोड करें.
एपीआई का इस्तेमाल करना
रीयल-टाइम अपडेट एपीआई दो तरह के कामों के साथ काम करता है: अपडेट करना और मिटाना. रीयल-टाइम अपडेट एपीआई की मदद से, नई इकाइयां नहीं जोड़ी जा सकतीं. अगर एक ही एपीआई अनुरोध में कई अपडेट शामिल किए जाते हैं, तो रीयल-टाइम अपडेट के बैच बनाए जा सकते हैं. एक एपीआई कॉल में, ज़्यादा से ज़्यादा 1,000 अपडेट भेजे जा सकते हैं. हमारा सुझाव है कि अगर हो सके, तो फ़्रीक्वेंसी-आधारित तरीके (जैसे, हर X मिनट में बदलावों के लिए सिस्टम को स्कैन करें) के बजाय, RTU के ज़रिए अपडेट भेजने के लिए ट्रिगर-आधारित तरीके का इस्तेमाल करें. जैसे, आपके सिस्टम में डेटा बदलने पर Google को रीयल-टाइम अपडेट मिलेगा.
रीयल-टाइम अपडेट एपीआई, सैंडबॉक्स और प्रोडक्शन, दोनों में काम करता है. सैंडबॉक्स एनवायरमेंट का इस्तेमाल, एपीआई अनुरोधों और प्रोडक्शन एनवायरमेंट की जांच करने के लिए किया जाता है. इससे, एंड-टू-एंड उपयोगकर्ताओं को दिखने वाले कॉन्टेंट को अपडेट किया जाता है.
- सैंडबॉक्स -
partnerdev-mapsbooking.googleapis.com
- प्रोडक्शन -
mapsbooking.googleapis.com
एंडपॉइंट
रीयल-टाइम अपडेट एपीआई, इन्वेंट्री से जुड़े अपडेट के लिए आने वाले अनुरोधों को मैनेज करने के लिए, दो एंडपॉइंट दिखाता है:
- अपडेट करें -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
- मिटाएं -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
PARTNER_ID पैरामीटर को, खाता और उपयोगकर्ता पेज पर मौजूद कार्रवाई केंद्र में देखा जा सकता है. जैसा कि नीचे दिए गए स्क्रीनशॉट में दिखाया गया है.
ऊपर दिए गए स्क्रीनशॉट के उदाहरण के तौर पर 10,00,000 को PARTNER_ID की वैल्यू के तौर पर लिया जाता है. सैंडबॉक्स और प्रोडक्शन में एपीआई अनुरोध भेजने के लिए, पूरे यूआरएल नीचे दिए गए उदाहरणों में बताए गए हैं.
सैंडबॉक्स अपडेट
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
सैंडबॉक्स मिटाएं
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
प्रोडक्शन से जुड़ा अपडेट
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
प्रोडक्शन का डेटा मिटाना
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
इकाइयां अपडेट की जा रही हैं
अपनी इन्वेंट्री में इकाइयों को अपडेट करने के लिए, एचटीटीपी पोस्ट अनुरोध में अपडेट एंडपॉइंट का इस्तेमाल करें. हर POST अनुरोध में, 10000001 पैरामीटर के साथ, JSON पेलोड होना चाहिए. इसमें वह इकाई शामिल होनी चाहिए जिसे आपको अपडेट करना है.
ध्यान दें: पक्का करें कि आपके रोज़ के डेटा फ़ीड में वे बदलाव भी शामिल हों जो रीयल-टाइम अपडेट एपीआई की मदद से सबमिट किए गए हैं. ऐसा न करने पर, आपका डेटा पुराना या पुराना हो सकता है.
अनुरोध पेलोड अपडेट करें
अनुरोध का मुख्य हिस्सा एक JSON ऑब्जेक्ट है, जिसमें रिकॉर्ड की सूची शामिल है. हर रिकॉर्ड, अपडेट की जा रही किसी इकाई से जुड़ा होता है. इसमें proto_record
फ़ील्ड और generation_timestamp
शामिल होते हैं, जो इकाई अपडेट के समय के बारे में बताते हैं:
{ "records": [ { "proto_record":"ServiceData PROTO", "generation_timestamp":"UPDATE_TIMESTAMP" } ] }
ServiceData PROTO
: जिस ServiceData इकाई को अपडेट किया जा रहा है उसका प्रोटो या JSON अनुवाद.UPDATE_TIMESTAMP
: आपके बैकएंड सिस्टम में इकाई जनरेट होने के समय का टाइमस्टैंप शामिल करना न भूलें. अगर यह फ़ील्ड शामिल नहीं है, तो इसे Google को अनुरोध मिलने के समय पर सेट कर दिया जाएगा.batchPush
अनुरोध की मदद से किसी इकाई को अपडेट करते समय,generation_timestamp
फ़ील्ड का इस्तेमाल इकाई का वर्शन बनाने के लिए किया जाता है. रिलेशनल इन्वेंट्री स्कीमा में समय की वैल्यू का सही फ़ॉर्मैट देखें.
- पेलोड का साइज़ 5 एमबी से ज़्यादा नहीं होना चाहिए.
- साइज़ कम करने के लिए, खाली सफ़ेद जगहों को हटाएं.
batchPush
के किसी अनुरोध में 1,000 अपडेट शामिल किए जा सकते हैं.
उदाहरण
ETA अपडेट करें
मान लें कि आपको डिलीवरी सेवा के ETA को तुरंत 30-60 से 60-90 मिनट में अपडेट करना है. आपके अपडेट में, सेवा से जुड़ी पूरी इकाई के लिए JSON शामिल होना चाहिए.
कोई ऐसी सेवा इकाई चुनें जो यह देखें:
{ "service": { "service_id": "service/entity002", "service_type": "DELIVERY", "parent_entity_id": "entity002", "lead_time": { "min_lead_time_duration": "600s", "max_lead_time_duration": "1800s" }, "action_link_id": "delivery_link/entity002" } }
HTTP POST से आपका रीयल-टाइम अपडेट इस तरह है (अनुरोध का मुख्य हिस्सा पढ़ने के लिहाज़ से काफ़ी प्रिंट होता है):
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "3600" }, "max_lead_time_duration" : { "seconds": "5400" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }] }
एक से ज़्यादा इकाइयां अपडेट करें
एक एपीआई कॉल में रेस्टोरेंट की कई इकाइयां अपडेट करने के लिए, अनुरोध के मुख्य हिस्से के Proto_record फ़ील्ड में एक से ज़्यादा रिकॉर्ड शामिल करें.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "1800" }, "max_lead_time_duration" : { "seconds": "3600" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee", "fee_type" : "DELIVERY", "fixed_amount" : { "currency_code" : "USD", "units" : "10", "nanos" : "0" }, "service_ids": ["service/entity002"] } }, "generation_timestamp" : "2023-09-13T17:11:10.750Z" }] }
इकाइयां मिटाएं
अपनी इन्वेंट्री से इकाइयों को मिटाने के लिए, एचटीटीपी पोस्ट अनुरोध में मिटाएं एंडपॉइंट का इस्तेमाल करें. हर POST अनुरोध में, JSON पेलोड के साथ PARTNER_ID पैरामीटर शामिल होना चाहिए. इसमें उस इकाई का आइडेंटिफ़ायर होता है जिसे आपको मिटाना है.
ध्यान दें: पक्का करें कि आपके रोज़ के डेटा फ़ीड में रीयल-टाइम अपडेट एपीआई की मदद से सबमिट किए गए सभी बदलाव भी शामिल हों. ऐसा न करने पर, बैच में डेटा डालने पर, रीयल-टाइम में किए गए बदलाव ओवरराइट हो जाएंगे.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery" } }, "delete_time": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee" } }, "delete_time" : "2023-09-13T17:11:10.750Z" }] }
इकाइयां जोड़ना
नई इकाइयां जोड़ने के लिए रीयल-टाइम अपडेट का इस्तेमाल न करें. इसकी वजह से डेटा में अंतर हो सकता है. इसके बजाय, बैच फ़ीड इस्तेमाल करें.
पुष्टि और एपीआई रिस्पॉन्स कोड
रीयल-टाइम अपडेट एपीआई कॉल पर दो तरह की पुष्टि की जाती है:
- अनुरोध-लेवल - इन पुष्टि से यह पता चलता है कि पेलोड, स्कीमा के मुताबिक है या नहीं. साथ ही, हर
proto_record
मेंid
औरtype
फ़ील्ड शामिल हैं या नहीं. ये जांच सिंक्रोनस होती हैं और नतीजे, एपीआई के रिस्पॉन्स के मुख्य हिस्से में दिखाए जाते हैं. रिस्पॉन्स कोड 200 और JSON फ़ॉर्मैट वाला खाली मुख्य हिस्सा{}
का मतलब है कि इन पुष्टि की प्रक्रिया पूरी हो गई है और अनुरोध में शामिल इकाइयों को प्रोसेस करने की सूची में जोड़ दिया गया है. नॉन-200 रिस्पॉन्स कोड का मतलब है कि इनमें से एक या उससे ज़्यादा बार पुष्टि नहीं हो सकी और पूरा अनुरोध अस्वीकार कर दिया गया है. इसमें पेलोड में मौजूद सभी इकाइयां भी शामिल हैं. उदाहरण के लिए, अगरproto_record
में@type
मौजूद नहीं है, तो गड़बड़ी का यह जवाब मिलता है:
{ "error": { "code": 400, "message": "Record:{...}", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." } ] }
- इकाई-लेवल: पेलोड में मौजूद हर इकाई (proto_record) की पुष्टि स्कीमा के हिसाब से की जाती है. पुष्टि के इस चरण में मिलने वाली समस्याओं की जानकारी, एपीआई से मिले रिस्पॉन्स में नहीं दी जाती. इन्हें सिर्फ़ ऐक्शन सेंटर के आरटीयू रिपोर्टिंग डैशबोर्ड में रिपोर्ट किया जाता है.
ध्यान दें: 200 रिस्पॉन्स कोड का मतलब यह नहीं है कि सभी इकाइयों का डेटा सही तरीके से डाला गया है.
एपीआई कोटा
रीयल-टाइम एपीआई अपडेट में,हर 60 सेकंड में 1, 500 अनुरोध या औसतन 25 अनुरोध प्रति सेकंड होते हैं. कोटा पूरा हो जाने पर Google, गड़बड़ी के इस मैसेज के साथ जवाब देता है:
{ "error": { "code": 429, "message": "Insufficient tokens for quota ...", "status": "RESOURCE_EXHAUSTED", "details": [...] } }
इसे मैनेज करने के लिए, बार-बार बड़े इंटरवल पर कॉल को फिर से कोशिश करें, जब तक कि वह काम न कर ले. अगर नियमित तौर पर कोटा खत्म हो जाता है, तो एक एपीआई अनुरोध में और इकाइयां शामिल करें. एक एपीआई कॉल में 1,000 इकाइयां शामिल की जा सकती हैं.
प्रोसेस होने में लगने वाले समय के रीयल-टाइम अपडेट
रीयल-टाइम अपडेट के ज़रिए अपडेट की गई इकाई को पांच मिनट में प्रोसेस किया जाता है.