चेकआउट कॉल के बाद, उपयोगकर्ता टैक्स, डिलीवरी शुल्क, छूट, और आपके दिखाए गए अन्य शुल्कों के साथ अपडेट किए गए कार्ट की समीक्षा करता है. उपयोगकर्ता, ऑर्डर की पुष्टि करता है और उसे सबमिट करता है. इसके बाद, Google आपके ऑर्डर फ़ुलफ़िलमेंट एंडपॉइंट को एक जेएसओएन अनुरोध भेजता है. इसमें ऑर्डर की जानकारी होती है. आपकी वेब सेवा को यह ऑर्डर मिलना चाहिए, उसे प्रोसेस करना चाहिए, और ऑर्डर की स्थिति के बारे में Google को जवाब देना चाहिए.
इस सेक्शन में, Google से भेजे गए ऑर्डर के अनुरोध के मैसेज के फ़ॉर्मैट के बारे में बताया गया है. इसे SubmitOrderRequestMessage
कहा जाता है. साथ ही, जवाब के मैसेज के फ़ॉर्मैट के बारे में भी बताया गया है. इसे SubmitOrderResponseMessage
कहा जाता है.
ऑर्डर पूरा करने के लाइफ़साइकल के बारे में ज़्यादा जानने के लिए, ऑर्डर पूरा करने की खास जानकारी देखें.
ऑर्डर पूरा करने की सुविधा लागू करना
सीधे खाना ऑर्डर करने की सुविधा के साथ काम करने के लिए बनाई गई वेब सेवा में, Google से ऑर्डर मैसेज पाने के लिए यूआरएल एंडपॉइंट होना चाहिए. ऑर्डर प्रोसेस करने के लिए, आपकी वेब सेवा को Google से POST अनुरोध के तौर पर, JSON फ़ॉर्मैट में SubmitOrderRequestMessage
मिलता है. इस अनुरोध में ग्राहक का ऑर्डर शामिल होता है. इसमें टैक्स, शुल्क, और पेमेंट की जानकारी भी शामिल होती है. ऑर्डर सबमिट करने का अनुरोध मिलने पर, आपकी वेब सेवा को ये काम करने होंगे:
- लेन-देन की ज़रूरी शर्तें देखें. जैसे, कार्ड की पुष्टि या धोखाधड़ी का पता लगाना.
- अपने सिस्टम में ऑर्डर बनाएं.
- पेमेंट के तरीके को अनुमति दें और लागू होने पर, अपने पेमेंट प्रोसेसर के चार्ज एपीआई को कॉल करें.
- ऑर्डर की सही स्थिति के साथ जवाब दें:
CREATED
,CONFIRMED
याREJECTED
.
ऑर्डर प्रोसेस करने के बाद, आपका फ़ुलफ़िलमेंट कोड, Google को SubmitOrderResponseMessage
JSON मैसेज के तौर पर जवाब देगा.
ऑर्डर की पूरी प्रोसेस को पूरा करने वाली वेब सेवा को लागू करने से जुड़ी ज़रूरी शर्तों के बारे में ज़्यादा जानने के लिए, ऑर्डर की प्रोसेस के बारे में खास जानकारी देखें.
ऑर्डर के अनुरोध का मैसेज
जब कोई ग्राहक ऑर्डर करने के पूरे फ़्लो के दौरान ऑर्डर करने का विकल्प चुनता है, तो Google आपकी वेब सेवा को एक अनुरोध भेजता है. यह अनुरोध, SubmitOrderRequestMessage
नाम के JSON मैसेज के साथ भेजा जाता है. इस मैसेज में यह डेटा शामिल होता है:
- इंटेंट: ऑर्डर सबमिट करने के हर अनुरोध के मुख्य हिस्से में मौजूद
inputs[0].intent
फ़ील्ड में,actions.intent.TRANSACTION_DECISION
स्ट्रिंग वैल्यू होती है. - ऑर्डर: ऑर्डर सबमिट करने के अनुरोध के
inputs[0].arguments[0].transactionDecisionValue
फ़ील्ड में एकOrder
ऑब्जेक्ट होता है. यह ऑब्जेक्ट, पेमेंट की जानकारी के साथ-साथ ग्राहक के ऑर्डर की जानकारी दिखाता है. - सैंडबॉक्स फ़्लैग: ऑर्डर सबमिट करने के अनुरोध के
isInSandbox
फ़ील्ड से पता चलता है कि लेन-देन में सैंडबॉक्स पेमेंट का इस्तेमाल किया गया है या नहीं.
ऑर्डर के अनुरोध का उदाहरण
SubmitOrderRequestMessage
का उदाहरण यहां दिया गया है:
{ "user": {}, "conversation": { "conversationId": "CTKbKfUlHCyDEdcz_5PBJTtf" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "merchant": { "id": "restaurant/Restaurant/QWERTY", "name": "Tep Tep Chicken Club" }, "lineItems": [ { "name": "Spicy Fried Chicken", "type": "REGULAR", "id": "299977679", "quantity": 2, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } }, "offerId": "MenuItemOffer/QWERTY/scheduleId/496/itemId/143", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": -33.8376441, "longitude": 151.0868736 }, "formattedAddress": "Killoola St, 1, Concord West NSW 2138", "zipCode": "2138", "city": "Concord West", "postalAddress": { "regionCode": "AU", "postalCode": "2138", "administrativeArea": "NSW", "locality": "Concord West", "addressLines": [ "Killoola St", "1" ] } }, "contact": { "displayName": "Hab Sy", "email": "hab9878.sy@gmail.com", "phoneNumber": "+61000000000", "firstName": "Hab", "lastName": "Sy" } } }, "otherItems": [ { "name": "Delivery fee", "type": "DELIVERY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "3", "nanos": 500000000 } } }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "43", "nanos": 100000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "01412971004192156198", "orderDate": "2020-10-22T09:02:06.173Z", "paymentInfo": { "displayName": "Pay when you get your food", "paymentType": "ON_FULFILLMENT" } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
ऑर्डर के जवाब का मैसेज
अनुरोध मिलने के बाद, ऑर्डर करने की आपकी एंड-टू-एंड वेब सेवा, अनुरोध को प्रोसेस करती है और एक SubmitOrderResponseMessage
भेजती है. इसमें यह डेटा शामिल होता है:
OrderUpdate
: यह एक ऑब्जेक्ट है, जिसमें ऑर्डर की स्थिति और उपयोगकर्ता के लिए ऑर्डर के बाद की कोई भी कार्रवाई शामिल होती है. जैसे, सहायता टीम से संपर्क करना और ऑर्डर की जानकारी देखना. इन कार्रवाइयों को रिस्पॉन्स केfinalResponse.richResponse.items[0].structuredResponse.orderUpdate
फ़ील्ड में तय किया जाता है.
ऑर्डर अपडेट फ़ील्ड
जब आपकी वेब सेवा कोई SubmitOrderResponseMessage
भेजती है, तो उसमें एक OrderUpdate
फ़ील्ड होता है. इसमें ये फ़ील्ड शामिल होते हैं:
actionOrderId
: ऑर्डर का यूनीक आईडी, जिसका इस्तेमाल आपके सिस्टम में ऑर्डर की यूनीक पहचान करने के लिए किया जाता है. साथ ही, ऑर्डर के अपडेट भेजते समय इसका रेफ़रंस दिया जाता है.orderState
: ऑर्डर की स्थिति दिखाने वालाOrderState
ऑब्जेक्ट.orderManagementActions
: उपयोगकर्ता के लिए ऑर्डर के बाद की कार्रवाइयां, जैसे कि ग्राहक सहायता टीम से संपर्क करना और ऑर्डर की जानकारी देखना.totalPrice
: ऑर्डर की कुल कीमत. हालांकि, ऐसा करना ज़रूरी नहीं है. सिर्फ़ तब भेजें, जब ऑर्डर सबमिट करने के बाद ऑर्डर की कुल कीमत बदल गई हो.
किसी ऑर्डर की स्थिति, इनमें से कोई एक हो सकती है:
CREATED
: ऑर्डर पूरा करने वाले आपके एंडपॉइंट ने ऑर्डर को प्रोसेस कर दिया है, लेकिन सेवा देने वाली कंपनी ने अब तक ऑर्डर की पुष्टि नहीं की है.CONFIRMED
: ऑर्डर पूरा करने वाले आपके एंडपॉइंट ने ऑर्डर को प्रोसेस कर दिया है और सेवा देने वाली कंपनी ने ऑर्डर की पुष्टि कर दी है.REJECTED
: कोई समस्या हुई और ऑर्डर पूरा करने वाला आपका एंडपॉइंट, ऑर्डर नहीं बना सका या उसकी पुष्टि नहीं कर सका. इसकी वजह, पेमेंट से जुड़ी समस्याएं हो सकती हैं.
अगर आपने किसी ऑर्डर की स्थिति को REJECTED
पर सेट किया है, तो OrderUpdate
के rejectionInfo
फ़ील्ड में इसकी वजह बताएं. UNKNOWN
टाइप की rejectionInfo
के साथ
FoodOrderUpdateExtension.FoodOrderErrors
वैल्यू का इस्तेमाल करें और ब्यौरा दें.
ऑर्डर के रिस्पॉन्स का उदाहरण
SubmitOrderResponseMessage
का उदाहरण यहां दिया गया है:
{ "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "1603357328160", "orderState": { "state": "CONFIRMED", "label": "Pending" }, "updateTime": "2020-10-22T02:02:08-07:00", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+61234561000" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order details", "openUrlAction": { "url": "https://partner.com/view/orderstatus" } } } ], "receipt": { "userVisibleOrderId": "BXZ-1603357328" } } } } ] } } }
अनुरोध पूरा नहीं हो सका
अगर अनुरोध सबमिट नहीं हो पाता है, तो SubmitOrderResponseMessage
को OrderState.state
को REJECTED
पर सेट करना होगा. जवाब में RejectionInfo भी शामिल होना चाहिए. इसमें गड़बड़ी के टाइप के बारे में बताने के लिए, RejectionType
ऑब्जेक्ट होता है.
अनुरोध पूरा न होने का उदाहरण
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PAYMENT_DECLINED", "reason": "Insufficient funds" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order", "openUrlAction": { "url": "https://orderview.partner.com?orderid=sample_action_order_id" } } } ] } } } ] } } }
ऑर्डर लागू करने का अनुरोध सबमिट करना
सबमिट ऑर्डर एपीआई को लागू करते समय, यह तरीका अपनाया जाना चाहिए.
पुष्टि
- चेकआउट सेट अप करना में बताए गए तरीके से, सेवा, कार्ट, और प्रमोशन की पुष्टि करें.
- ज़रूरत पड़ने पर, RejectionInfo को इनमें से किसी एक टाइप के साथ दिखाएं:
RejectionInfoType | इस्तेमाल का उदाहरण |
---|---|
UNAVAILABLE_SLOT |
ऑर्डर पूरा होने का समय अब मान्य नहीं है. |
PROMO_USER_INELIGIBLE |
उपयोगकर्ता के लिए प्रमोशन की ज़रूरी शर्तों की पुष्टि करने के लिए, अनुरोध में संपर्क ऑब्जेक्ट में ईमेल का इस्तेमाल करें. प्रमोशन के साथ ऑर्डर सबमिट करने की सुविधा लागू करना में दिया गया उदाहरण देखें. |
INELIGIBLE |
|
PAYMENT_DECLINED |
पेमेंट प्रोसेस नहीं किया जा सका. उदाहरण के लिए, ऐसा खाते में पैसे कम होने की वजह से हो सकता है. |
UNKNOWN |
पुष्टि करने से जुड़ी किसी भी अन्य गड़बड़ी के लिए. |
पुष्टि करने से जुड़ी गड़बड़ियां होने पर, OrderState.state
को REJECTED
पर सेट करें. इसके अलावा, FoodOrderUpdateExtension का इस्तेमाल करके, अस्वीकार किए जाने की खास वजह बताई जा सकती है.foodOrderErrors
. उदाहरण देखने के लिए,
ऑर्डर की पुष्टि सबमिट करें पर जाएं.
पेमेंट प्रोसेस करना
- कार्ट की कीमत, शुल्क, छूट, टैक्स, और उपहार में दी जाने वाली रकम को जोड़कर,
totalPrice
का हिसाब लगाएं.totalPrice
, CheckoutResponseMessage में दिखाए गएtotalPrice
के बराबर होना चाहिए. साथ ही, अगर उपयोगकर्ता टिप की रकम में बदलाव कर सकता है, तो टिप की रकम में हुए बदलाव को भी शामिल किया जाना चाहिए. ज़्यादा जानकारी के लिए, ऑर्डर सबमिट करने के दौरान कीमत में बदलाव देखें. - अगर ऑर्डर की स्थिति
CREATED
याCONFIRMED
के साथ जवाब दिया जाता है, तो ऑर्डर और पेमेंट को प्रोसेस करें. - पक्का करें कि स्कीमा से जनरेट किए गए टाइप का इस्तेमाल करके, मान्य रिस्पॉन्स फ़ॉर्मैट दिखाया गया हो. इसके बारे में ज़्यादा जानने के लिए, क्लाइंट लाइब्रेरी जनरेट करना लेख पढ़ें.
- पेमेंट प्रोसेस करने के लिए, GoogleProvidedPaymentInstrument का इस्तेमाल करें.
instrumentToken
अगर पेमेंट प्रोसेस नहीं हो पा रहा है, तो टाइप के साथ RejectionInfo दिखाएंPAYMENT_DECLINED
. ज़्यादा जानकारी के लिए, पेमेंट प्रोसेस करना लेख पढ़ें. - ऑर्डर प्रोसेस होने के तुरंत बाद, उपयोगकर्ता को ईमेल और/या एसएमएस से सूचना दें.
जवाब दिखाना
- अगर कोई गड़बड़ी नहीं है, तो OrderState.
state
कोCREATED
याCONFIRMED
पर सेट करें. - अगर कोई गड़बड़ी मिलती है, तो OrderState.
state
कोREJECTED
पर सेट करें. साथ ही, उससे जुड़े RejectionInfoType के साथ RejectionInfo ऑब्जेक्ट शामिल करें. - OrderUpdate सेट करें.
orderManagementActions
.