चेकआउट कॉल के बाद, उपयोगकर्ता अपडेट किए गए कार्ट की समीक्षा करता है. इसमें टैक्स, डिलीवरी शुल्क, छूट, और आपसे खरीदे गए अन्य शुल्क शामिल होते हैं. उपयोगकर्ता ऑर्डर की पुष्टि करता है और उसे सबमिट करता है. इसके बाद, Google आपके फ़ुलफ़िलमेंट एंडपॉइंट को एक JSON अनुरोध भेजता है, जिसमें ऑर्डर की जानकारी होती है. आपकी वेब सेवा को यह ऑर्डर मिलना चाहिए, इसे प्रोसेस करना होगा, और ऑर्डर की स्थिति के बारे में Google को जवाब देना होगा.
इस सेक्शन में, Google के भेजे गए ऑर्डर के अनुरोध के मैसेज के फ़ॉर्मैट के बारे में बताया गया है. इस फ़ॉर्मैट को SubmitOrderRequestMessage
कहा जाता है. इसमें यह भी बताया गया है कि आपको रिस्पॉन्स के तौर पर जो मैसेज देना ज़रूरी है उस फ़ॉर्मैट को SubmitOrderResponseMessage
कहा जाता है.
ऑर्डर पूरा करने की लाइफ़साइकल के बारे में ज़्यादा जानकारी के लिए, पूरा करने के तरीके की खास जानकारी देखें.
ऑर्डर पूरा करने की सुविधा लागू करना
ऑर्डरिंग एंड-टू-एंड के साथ काम करने के लिए बनाई गई ऑर्डरिंग एंड-टू-एंड वेब सेवा में, Google से ऑर्डर मैसेज पाने के लिए एक यूआरएल एंडपॉइंट शामिल होना चाहिए. ऑर्डर प्रोसेस करने के लिए, आपकी वेब सेवा को Google से पोस्ट अनुरोध के तौर पर JSON फ़ॉर्मैट में SubmitOrderRequestMessage
मिलता है. इस अनुरोध में ग्राहक का एक ऑर्डर होता है,
जिसमें टैक्स, शुल्क, और क्रेडिट/डेबिट कार्ड की जानकारी शामिल होती है. ऑर्डर सबमिट करने का अनुरोध मिलने पर, आपकी वेब सेवा को ये काम करने होंगे:
- लेन-देन से जुड़ी ज़रूरी शर्तें देखें. जैसे- कार्ड की पुष्टि या धोखाधड़ी का पता लगाना.
- अपने सिस्टम में कोई ऑर्डर बनाएं.
- पेमेंट के तरीके को अनुमति दें और लागू होने पर, पेमेंट प्रोसेस करने वाली कंपनी के Charge API को कॉल करें.
- आदेश की सही स्थिति के साथ जवाब दें:
CREATED
,CONFIRMED
याREJECTED
.
ऑर्डर प्रोसेस होने के बाद, यह ज़रूरी है कि ऑर्डर पूरा करने वाला कोड Google को SubmitOrderResponseMessage
JSON मैसेज के तौर पर जवाब दे.
ऑर्डर पूरा करने के लिए वेब सेवा लागू करने की ज़रूरी शर्तों के बारे में ज़्यादा जानकारी के लिए, ग्राहक को आइटम भेजने के बारे में खास जानकारी देखें.
ऑर्डर के अनुरोध का मैसेज
जब कोई ग्राहक ऑर्डरिंग के एंड-टू-एंड फ़्लो के दौरान कोई आइटम ऑर्डर करने का विकल्प चुनता है, तो
Google आपकी वेब सेवा को एक JSON मैसेज के साथ एक अनुरोध भेजता है.
SubmitOrderRequestMessage
में यह डेटा शामिल होता है:
- इंटेंट: सबमिट किए जाने वाले हर ऑर्डर के अनुरोध के मुख्य हिस्से के
inputs[0].intent
फ़ील्ड मेंactions.intent.TRANSACTION_DECISION
स्ट्रिंग की वैल्यू होती है. - ऑर्डर: ऑर्डर सबमिट करने के अनुरोध के
inputs[0].arguments[0].transactionDecisionValue
फ़ील्ड में एकOrder
ऑब्जेक्ट होता है. इसमें ग्राहक को दिए जाने वाले ऑर्डर के साथ-साथ पेमेंट के तरीके की जानकारी भी दिखती है. - सैंडबॉक्स फ़्लैग: ऑर्डर के सबमिट करने के अनुरोध के
isInSandbox
फ़ील्ड से पता चलता है कि लेन-देन में सैंडबॉक्स पेमेंट का इस्तेमाल होता है या नहीं.
ऑर्डर के अनुरोध का उदाहरण
SubmitOrderRequestMessage
का एक उदाहरण यह है:
JSON
{ "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
भेज देती है. इस 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
का एक उदाहरण यह है:
JSON
{ "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
ऑब्जेक्ट शामिल होता है.
असफल जवाब का उदाहरण
JSON
{ "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
का इस्तेमाल करें. अगर पेमेंट प्रोसेस नहीं हो पा रहा है, तोPAYMENT_DECLINED
टाइप के साथ RejectionInfo दिखाएं. ज़्यादा जानकारी के लिए पेमेंट प्रोसेस करें देखें. - ऑर्डर प्रोसेस होने के तुरंत बाद, उपयोगकर्ता को ईमेल या एसएमएस से सूचना दें.
जवाब दें
- अगर कोई गड़बड़ी नहीं है, तो OrderState.
state
कोCREATED
याCONFIRMED
पर सेट करें. - अगर गड़बड़ियां होती हैं, तो OrderState.
state
कोREJECTED
पर सेट करें. साथ ही, RejectionInfo ऑब्जेक्ट को उससे जुड़े RejectionInfoType के साथ शामिल करें. - OrderUpdate सेट करें.
orderManagementActions
.