जब कोई उपयोगकर्ता कार्ट बनाता है, तब चेकआउट की प्रोसेस शुरू होती है. उपयोगकर्ता के कार्ट के कॉन्टेंट और ऑर्डर की जानकारी, ऑर्डर करने की आपकी एंड-टू-एंड वेब सेवा पर भेजी जाती है. आपकी वेब सेवा इस जानकारी की पुष्टि करती है. इसके बाद, आपके पास खरीदारी जारी रखने या ज़रूरत के हिसाब से खरीदार के कार्ट में बदलाव करने का विकल्प होता है.
आपकी वेब सेवा के चेकआउट हैंडलर को POST अनुरोधों का जवाब देना होगा. जब कोई ग्राहक चेक आउट करने का विकल्प चुनता है, तो Google, ऑर्डर करने की पूरी प्रोसेस की सुविधा देने वाली वेब सेवा को CheckoutRequestMessage
के तौर पर JSON अनुरोध बॉडी भेजता है. इसमें ग्राहक के Cart
की जानकारी होती है. इसके बाद, आपकी वेब सेवा CheckoutResponseMessage
के साथ जवाब देती है. इस डायग्राम में इस प्रोसेस के बारे में बताया गया है.
चेकआउट का अनुरोध मिलने पर, आपकी ऑर्डरिंग एंड-टू-एंड वेब सेवा को ये काम करने होंगे:
- सामान की मौजूदा कीमतों, उपलब्धता, और सेवा देने वाली कंपनी के आधार पर, कार्ट की समयसीमा देखें.
- कुल कीमत का हिसाब लगाएं. इसमें छूट, टैक्स, और डिलीवरी के लिए खरीदार से लिए जाने वाले शुल्क भी शामिल हैं.
- अगर अनुरोध पूरा हो जाता है, तो बिना बदलाव किए गए कार्ट के साथ जवाब दें.
- अगर ऐसा नहीं होता है, तो गड़बड़ी का मैसेज और सुझाया गया नया क्रम भेजें.
चेकआउट की सुविधा लागू करने से पहले, हमारा सुझाव है कि आप ऑर्डर डिलीवरी की खास जानकारी वाला दस्तावेज़ देखें.
चेकआउट का अनुरोध करने वाला मैसेज
जब कोई खरीदार चेक आउट करने का विकल्प चुनता है, तो खरीदार के कार्ट की पुष्टि करने के लिए, Google आपकी वेब सेवा को CheckoutRequestMessage
के तौर पर JSON बॉडी के साथ अनुरोध भेजता है. सीधे खाना ऑर्डर करने की सुविधा के पूरे प्रोसेस के दौरान, ग्राहक का ऑर्डर तब तक सबमिट नहीं किया जाता, जब तक कि वह प्रोसेस पूरी नहीं हो जाती.
CheckoutRequestMessage
में मौजूद डेटा में ये चीज़ें शामिल हैं:
- इंटेंट: हर चेकआउट अनुरोध के मुख्य भाग के
inputs[0].intent
फ़ील्ड में,actions.foodordering.intent.CHECKOUT
स्ट्रिंग वैल्यू होती है. - कार्ट: चेकआउट अनुरोध के
inputs[0].arguments[0].extension
फ़ील्ड में एकCart
ऑब्जेक्ट होता है, जो ग्राहक के कार्ट को दिखाता है. - डिलीवरी या टेकआउट:
Cart
ऑब्जेक्ट के एक्सटेंशन फ़ील्ड में एकFoodCartExtension
ऑब्जेक्ट होता है. इसमें डिलीवरी या टेकआउट के लिए प्रॉपर्टी की जानकारी होती है:- डिलीवरी ऑर्डर के लिए,
FoodCartExtension
ऑब्जेक्ट में डिलीवरी का पता शामिल होता है. - पिकअप या टेकआउट ऑर्डर के लिए,
FoodCartExtension
ऑब्जेक्ट में जगह की कोई जानकारी नहीं होती.
- डिलीवरी ऑर्डर के लिए,
- सैंडबॉक्स: चेकआउट अनुरोध के
isInSandbox
फ़ील्ड में एक बोलियन वैल्यू होती है. इससे पता चलता है कि लेन-देन में सैंडबॉक्स पेमेंट का इस्तेमाल किया गया है या नहीं.
चेकआउट के अनुरोध का उदाहरण
यहां CheckoutRequestMessage
का उदाहरण दिया गया है:
{
"user": {},
"conversation": {
"conversationId": "CTZbZfUlHCybEdcz_5PB3Ttf"
},
"inputs": [
{
"intent": "actions.foodordering.intent.CHECKOUT",
"arguments": [
{
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.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"
]
}
}
}
}
}
]
}
],
"directActionOnly": true,
"isInSandbox": true
}
चेकआउट रिस्पॉन्स मैसेज
ऑर्डर करने की पूरी प्रोसेस की सेवा से अनुरोध मिलने के बाद, आपकी चेकआउट वेब सेवा को उसे प्रोसेस करना होगा और CheckoutResponseMessage
के साथ जवाब देना होगा. CheckoutResponseMessage
में, किसी कामयाब या असफल अनुरोध की जानकारी होनी चाहिए.
अनुरोध पूरा हो गया
अगर चेक आउट का अनुरोध स्वीकार कर लिया जाता है, तो CheckoutResponseMessage
में ProposedOrder
और PaymentOptions
शामिल होने चाहिए:
ProposedOrder
cart
:cart
ऑब्जेक्ट,CheckoutRequestMessage
में दिए गए कार्ट से मेल खाता है. अगर कार्ट के किसी कॉन्टेंट में बदलाव करना है, तोCheckoutResponseMessage
के बजाय, सही किए गएProposedOrder
के साथFoodErrorExtension
शामिल किया जाना चाहिए.otherItems
: सेवा देने वाली कंपनी के जोड़े गए आइटम, जैसे कि डिलीवरी शुल्क, टैक्स, और अन्य शुल्क. इसमें उपयोगकर्ता की ओर से जोड़ी गई टिप भी शामिल हो सकती है.totalPrice
: ऑर्डर की कुल कीमत.extension
: एकFoodOrderExtension
, जो ऑर्डर के लिए डिलीवरी की जानकारी देता है. जैसे, डिलीवरी का समय.
PaymentOptions
- पेमेंट प्रोसेसिंग को सेट अप करने के बारे में, Google Pay सेट अप करना में बताया गया है.
जब तक पेमेंट प्रोसेसिंग लागू करने के लिए तैयार न हों, तब तक
CheckoutResponseMessage
में प्लेसहोल्डर JSON का इस्तेमाल किया जा सकता है. - अपने
CheckoutResponseMessage
में पेमेंट के विकल्पों के प्लेसहोल्डर जोड़ने के लिए, यहां दिया गया उदाहरण देखें. इसमेंPaymentOptions
के लिए, पेमेंट गेटवे के उदाहरण का इस्तेमाल किया गया है.
- पेमेंट प्रोसेसिंग को सेट अप करने के बारे में, Google Pay सेट अप करना में बताया गया है.
जब तक पेमेंट प्रोसेसिंग लागू करने के लिए तैयार न हों, तब तक
सही रिस्पॉन्स का उदाहरण
{
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"checkoutResponse": {
"proposedOrder": {
"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"
]
}
}
}
},
"totalPrice": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "AUD",
"units": "43",
"nanos": 100000000
}
},
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
"availableFulfillmentOptions": [
{
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "P0M"
}
}
}
]
},
"otherItems": [
{
"name": "Delivery fee",
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "AUD",
"units": "3",
"nanos": 500000000
}
},
"type": "DELIVERY"
}
]
},
"paymentOptions": {
"googleProvidedOptions": {
"facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"AUD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"43.1\"}} "
}
},
"additionalPaymentOptions": [
{
"actionProvidedOptions": {
"paymentType": "ON_FULFILLMENT",
"displayName": "Pay when you get your food.",
"onFulfillmentPaymentData": {
"supportedPaymentOptions": []
}
}
}
]
}
}
}
]
}
}
}
अनुरोध पूरा नहीं हो सका
अगर चेकआउट का अनुरोध पूरा नहीं हो पाता है, तो CheckoutResponseMessage
में FoodErrorExtension
को शामिल करना ज़रूरी है. इसमें FoodOrderError
आइटम की सूची होती है, जिसमें हुई गड़बड़ियों के बारे में बताया जाता है. अगर ऑर्डर में ऐसी कोई गड़बड़ी है जिसे ठीक किया जा सकता है, जैसे कि कार्ट में किसी आइटम की कीमत में बदलाव, तो FoodErrorExtension
में correctedProposedOrder
शामिल होना चाहिए.
अनुरोध पूरा न होने का उदाहरण
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"error": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
"foodOrderErrors": [
{
"error": "CLOSED",
"description": "The restaurant is closed."
}
]
}
}
}
]
}
}
}
चेकआउट की सुविधा लागू करना
चेकआउट की सुविधा लागू करते समय, यह तरीका अपनाएं.
सेवा की पुष्टि करना
सेवा में पहली गड़बड़ी मिलने पर, FoodOrderError दिखाएं. इन गड़बड़ियों को वापस नहीं लाया जा सकता. इसलिए, पहली गड़बड़ी को दिखाया जाना चाहिए. ठीक की जा सकने वाली गड़बड़ियों के बारे में जानने के लिए, गड़बड़ियों को ठीक करना लेख पढ़ें.
- यह पता लगाने के लिए कि वाहन बेचने का तरीका
delivery
याpickup
के लिए है, अनुरोध में FulfillmentOptionInfo प्रॉपर्टी पढ़ें. ज़रूरत पड़ने पर, गड़बड़ी के इन टाइप को दिखाएं:
गड़बड़ी का टाइप इस्तेमाल का उदाहरण INVALID ऑर्डर पूरा करने का तरीका अमान्य है. NOT_FOUND ऑर्डर पूरा करने का तरीका नहीं मिला. बंद है - ऑर्डर के लिए, OperationHours विंडो नहीं हैं.
- ऑर्डर, जल्द से जल्द डिलीवरी करने के लिए किया गया है और फ़िलहाल, जल्द से जल्द डिलीवरी करने के लिए ServiceHours उपलब्ध नहीं है.
- आपातकालीन स्थिति की वजह से कारोबार बंद है या सेवा
isDisabled
की स्थिति 'सही' है.
UNAVAILABLE_SLOT ऑर्डर करने के लिए तय किया गया समय पूरा नहीं किया जा सका. NO_CAPACITY रेस्टोरेंट में बहुत सारे लोग हैं और फ़िलहाल वह ऑर्डर नहीं ले रहा है. OUT_OF_SERVICE_AREA ऑर्डर को उपयोगकर्ता के पते पर डिलीवर नहीं किया जा सकता. उदाहरण के लिए, डिलीवरी के पते की पुष्टि करना देखें. NO_COURIER_AVAILABLE डिलीवरी करने वाले लोगों की संख्या कम होने की वजह से, ऑर्डर डिलीवर नहीं किया जा सकता.
कार्ट की पुष्टि करना और उसकी कीमत तय करना
हर कार्ट को देखें.
lineItems
साथ ही, अपने सिस्टम या व्यापारी/कंपनी के सिस्टम में मौजूद मौजूदा डेटा की पुष्टि करें. फ़ीड इकाई की MenuItemOffer.sku
वैल्यू को LineItem.offerId
के तौर पर शामिल किया गया है. अगर ज़रूरी हो, तो हर लाइन आइटम के लिए एक FoodOrderError बनाएं. हर आइटम के लिए ज़्यादा से ज़्यादा एक गड़बड़ी बनाएं. ज़रूरत पड़ने पर, गड़बड़ी के इन टाइप दिखाएं:गड़बड़ी का टाइप इस्तेमाल का उदाहरण वापस पाया जा सकता है INVALID आइटम का डेटा या विकल्पों का कोई भी डेटा अमान्य है. नहीं NOT_FOUND आइटम या कोई भी विकल्प नहीं मिला. नहीं PRICE_CHANGED किसी सामान या ऐड-ऑन के कॉम्बिनेशन की कीमत बदल गई है. इस गड़बड़ी को ठीक किया जा सकता है. हां AVAILABILITY_CHANGED लाइन आइटम या किसी भी विकल्प के लिए अनुरोध की गई रकम उपलब्ध नहीं है. हां REQUIREMENTS_NOT_MET ऑर्डर की कम से कम या ज़्यादा से ज़्यादा संख्या की शर्त पूरी नहीं हुई. यह पता लगाने के लिए कि खरीदार को शुल्क देना होगा या नहीं, यह देखें कि कार्ट में मौजूद आइटम की कीमत, शुल्क eligibleTransactionVolumeMin
से कम है या शुल्कeligibleTransactionVolumeMax
से ज़्यादा. ऑर्डर की कम से कम वैल्यू की पुष्टि में दिया गया उदाहरण देखें.नहीं LineItemType के साथ, पुष्टि किए गए lineItems की सूची दिखाता है
REGULAR
. कार्ट में मौजूद सभी लाइन आइटम की कीमतों का कुल जोड़, कार्ट की कीमत याSUBTOTAL
होता है.
कार्ट में मौजूद आइटम की पुष्टि में उदाहरण देखें.
सेवा शुल्क का हिसाब लगाना
eligibleRegion
,validFrom
,validThrough
, औरpriority
के आधार पर, सेवा के लिए सही शुल्क इकाई ढूंढें.- शुल्क की रकम का हिसाब लगाने के लिए, यह देखें कि इकाई को
price
,percentageOfCart
याpricePerMeter
प्रॉपर्टी के साथ तय किया गया था या नहीं. - डिलीवरी या टेकआउट सेवा शुल्क को LineItem के तौर पर दिखाएं. इसके लिए, LineItemType के तौर पर
DELIVERY
याFEE
का इस्तेमाल करें. शुल्क को कार्टotherItems
की सूची में जोड़ें.
प्रमोशन लागू करना
- प्रमोशन.
coupon
वैल्यू को डील.dealCode
से मैच करके, डील इकाई ढूंढें. ऑफ़र की पुष्टि करें और अगर ज़रूरी हो, तो FoodOrderError दिखाएं. इन गड़बड़ियों को ठीक किया जा सकता है. ज़रूरत पड़ने पर, गड़बड़ी के इन टाइप को दिखाएं:
गड़बड़ी का टाइप इस्तेमाल का उदाहरण PROMO_NOT_RECOGNIZED कूपन कोड की पहचान नहीं की जा सकी. PROMO_EXPIRED ऑफ़र की समयसीमा खत्म हो गई है. PROMO_ORDER_INELIGIBLE ऑर्डर पर कूपन लागू नहीं हो सकता. PROMO_NOT_APPLICABLE कोई और वजह. Deal.
discount
या Deal.discountPercentage
के आधार पर, डील की कीमत का हिसाब लगाएं.ऑफ़र के हिसाब से, कार्ट में मौजूद प्रॉडक्ट की कुल कीमत या शुल्क की कुल रकम का इस्तेमाल करके, ऑफ़र की कीमत लागू करें.
dealType
.लागू किए गए प्रमोशन के साथ कार्ट.
promotions
दिखाएं.प्रमोशन को LineItem के तौर पर दिखाएं. इसके लिए, LineItemType
DISCOUNT
का इस्तेमाल करें. छूट को कार्ट.otherItems
की सूची में, नेगेटिव कीमत के साथ जोड़ें.
जवाब दिखाना
- ProposedOrder बनाएं.
cart
, अगर पुष्टि के दौरान कोई गड़बड़ी नहीं होती है, तो रिस्पॉन्स कार्ट, अनुरोध वाले कार्ट जैसा ही होता है. - ProposedOrder.
otherItems
सूची दिखाएं. इसमें टैक्स, शुल्क, उपहार में दी जाने वाली रकम, और छूट (अगर लागू हो) शामिल है. बोनस आइटम को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानने के लिए, बोनस देखें. - कार्ट की कीमत, शुल्क, छूट, टैक्स, और उपहार में दी जाने वाली रकम जोड़कर, ProposedOrder
totalPrice
शामिल करें. - FulfillmentOption के साथ, FoodOrderExtension.
availableFulfillmentOptions
दिखाएं. पिकअप या डिलीवरी के अनुमानित समय को अपडेट करें. - अगर पुष्टि करने से जुड़ी पिछली जांचों से, FoodOrderErrors जनरेट हुए हैं, तो:
- StructuredResponse.
error
और FoodErrorExtension.foodOrderErrors
में गड़बड़ियों की सूची शामिल करें. - अगर सभी गड़बड़ियां ठीक की जा सकती हैं, तो
correctedProposedOrder
फ़ील्ड में ProposedOrder दिखाएं. - अगर सभी गड़बड़ियों को ठीक किया जा सकता है, तो
paymentOptions
फ़ील्ड में PaymentOptions दिखाएं. - अगर पेमेंट के अन्य विकल्प उपलब्ध हैं और सभी गड़बड़ियों को ठीक किया जा सकता है, तो
additionalPaymentOptions
को शामिल करें.
- StructuredResponse.
- अगर पुष्टि करने में कोई गड़बड़ी नहीं होती है, तो CheckoutResponse ऑब्जेक्ट में
proposedOrder
,paymentOptions
दिखाएं. अगर पेमेंट के अन्य विकल्प उपलब्ध हैं, तोadditionalPaymentOptions
को शामिल करें.