आरटीयू मुख्य रूप से ऐसे अपडेट के लिए होते हैं जिनके बारे में आपको पहले से पता नहीं होता. जैसे, आपातकालीन स्थिति में बंद होने की जानकारी या समय-समय पर बदलने वाला मेटाडेटा (जैसे कि ईटीए). अगर आपके बदलाव को तुरंत दिखाना ज़रूरी नहीं है, तो इसके बजाय बैच फ़ीड में डेटा डालने की सुविधा का इस्तेमाल किया जा सकता है. रीयल-टाइम अपडेट पांच मिनट से ज़्यादा समय में प्रोसेस नहीं किए जाते हैं.
Google Cloud Platform का सेटअप
- GCP प्रोजेक्ट सेट अप करें. RTU API को ऐक्सेस करने के लिए, GCP प्रोजेक्ट की ज़रूरत होती है.
- food-support@google.com को एडिटर ऐक्सेस देने की अनुमति दें
- अपने Google पीओसी को GCP प्रोजेक्ट नंबर के बारे में बताएं.रीयल-टाइम अपडेट काम कर सकें, इसके लिए आपका GCP प्रोजेक्ट आपके Actions Center खाते से जुड़ा होना चाहिए.
- मैप बुकिंग API सक्षम करें:
- GCP में, एपीआई और सेवाएं > लाइब्रेरी.
- “Google Maps का बुकिंग एपीआई” खोजें.
- सैंडबॉक्स इंस्टेंस (“Google Maps बुकिंग एपीआई (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 चुनें और बनाएं पर क्लिक करें.
- आपकी नई सार्वजनिक/निजी कुंजी का जोड़ा जनरेट होने के बाद, उसे अपने मशीन पर डाउनलोड करें.
API के साथ काम करना
रीयल-टाइम अपडेट एपीआई दो तरह की कार्रवाइयों के साथ काम करता है: अपडेट करें और मिटाएं. रीयल-टाइम अपडेट एपीआई की मदद से नई इकाइयां नहीं जोड़ी जा सकतीं. अगर एक एपीआई अनुरोध में कई अपडेट शामिल किए जाते हैं, तो रीयल-टाइम अपडेट बैच में भेजे जा सकते हैं. एक एपीआई कॉल में, ज़्यादा से ज़्यादा 1,000 अपडेट बैच में भेजे जा सकते हैं. हमारा सुझाव है कि अगर संभव हो, तो फ़्रीक्वेंसी-आधारित तरीके (यानी हर X मिनट में अपने सिस्टम को बदलावों के लिए स्कैन करें) के बजाय, आरटीयू के ज़रिए अपडेट भेजने के लिए ट्रिगर-आधारित तरीके का इस्तेमाल करें (जैसे, आपके सिस्टम में डेटा बदलने पर 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 पैरामीटर, खाता और उपयोगकर्ता पेज पर कार्रवाई केंद्र में मिल सकता है, जैसा कि नीचे स्क्रीनशॉट में दिखाया गया है.
ऊपर दिए गए स्क्रीनशॉट में, PARTNER_ID की वैल्यू 10000001 लेने पर, सैंडबॉक्स और प्रोडक्शन में एपीआई अनुरोध भेजने के पूरे यूआरएल, यहां दिए गए उदाहरणों की तरह दिखेंगे.
सैंडबॉक्स का अपडेट
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
इकाइयां अपडेट करना
अपनी इन्वेंट्री में इकाइयों को अपडेट करने के लिए, एचटीटीपी पोस्ट अनुरोध में अपडेट एंडपॉइंट का इस्तेमाल करें. हर पीओएसटी अनुरोध में 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
फ़ील्ड का इस्तेमाल इकाई के वर्शन के लिए किया जाता है. रिलेशनल इन्वेंट्री स्कीमा में समय की वैल्यू का सही फ़ॉर्मैट देखें.
- पेलोड बॉडी का साइज़ पांच एमबी से ज़्यादा नहीं होना चाहिए.
- साइज़ कम करने के लिए, खाली सफ़ेद जगह को हटा दें.
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" } }
एचटीटीपी पीओएसटी से होने वाले रीयल-टाइम अपडेट के बारे में यहां बताया गया है (अनुरोध के मुख्य हिस्से, पढ़ने के लिहाज़ से अच्छे होते हैं):
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" }] }
इकाइयां मिटाएं
अपनी इन्वेंट्री से इकाइयों को मिटाने के लिए, एचटीटीपी पोस्ट अनुरोध में मिटाएं एंडपॉइंट का इस्तेमाल करें. हर पीओएसटी अनुरोध में, 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 इकाइयां शामिल की जा सकती हैं.
प्रोसेस होने के समय के रीयल-टाइम अपडेट
रीयल-टाइम अपडेट के ज़रिए अपडेट की गई इकाई पांच मिनट में प्रोसेस होती है.