जब उपयोगकर्ता कार्ट बनाता है, तब चेकआउट प्रोसेस को शुरू किया जाता है. उपयोगकर्ता के कार्ट का कॉन्टेंट और ऑर्डर की जानकारी, ऑर्डर करने की एंड-टू-एंड वेब सेवा को भेजी जाती है. इस जानकारी की पुष्टि आपकी वेब सेवा करती है. इसके बाद, आपके पास आगे बढ़ने या ज़रूरत के हिसाब से उनके कार्ट में बदलाव करने का विकल्प होता है.
आपकी वेब सेवा के लिए चेकआउट हैंडलर को पोस्ट अनुरोधों का जवाब देना होगा. जब कोई ग्राहक पैसे चुकाने का विकल्प चुनता है, तो Google ऑर्डरिंग से जुड़ी एंड-टू-एंड वेब सेवा को JSON अनुरोध का मुख्य हिस्सा, CheckoutRequestMessage
के तौर पर भेजता है. इस जानकारी में ग्राहक की 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 को दिखाएं. इन गड़बड़ियों को ठीक नहीं किया जा सकता, इसलिए पहली गड़बड़ी दिखाई जानी चाहिए. ठीक की जा सकने वाली गड़बड़ियों की जानकारी के लिए गड़बड़ियां ठीक करना देखें.
- अनुरोध में FulfillmentOptionInfo प्रॉपर्टी पढ़ें
और यह देखें कि ऑर्डर पूरा करने का टाइप
delivery
के लिए है याpickup
के लिए. अगर ज़रूरी हो, तो नीचे दिए गए गड़बड़ी के टाइप दिखाएं:
गड़बड़ी का टाइप इस्तेमाल के बारे में जानकारी 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
REGULAR
के साथ, LineItem की पुष्टि की गई सूची दिखाएं. कार्ट के सभी लाइन आइटम की कीमतों का कुल योग, कार्ट की कीमत या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 कोई अन्य वजह. डील
discount
या डील के आधार पर डील की कीमत का हिसाब लगाएंdiscountPercentage
.डील
dealType
के आधार पर, कार्ट की कुल कीमत या कुल शुल्क का इस्तेमाल करके डील की कीमत की रकम लागू करें.लागू किए गए प्रमोशन के साथ, कार्ट.
promotions
वापस करें.प्रमोशन को LineItemType
DISCOUNT
के साथ, LineItem के तौर पर दिखाएं. छूट को कार्ट.otherItems
की सूची में नेगेटिव कीमत के साथ जोड़ें.
जवाब दें
- ProposedOrder.
cart
बनाएं. अगर पुष्टि करने के दौरान कोई गड़बड़ी नहीं मिलती है, तो रिस्पॉन्स कार्ट, अनुरोध कार्ट के जैसा ही होता है. - ProposedOrder.
otherItems
लिस्ट. इसमें, लागू होने पर टैक्स, शुल्क, ग्रेच्यूटी, और छूट की जानकारी शामिल करें. ग्रेच्यूटी आइटम को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानने के लिए, Gratuity देखें. - कार्ट की कीमत, शुल्क, छूट, टैक्स, और ग्रेच्यूटी जोड़कर, ProposedOrder.
totalPrice
को शामिल करें. - इसके बाद,
FoodOrderExtension.
availableFulfillmentOptions
को FulfillmentOption के साथ रिटर्न करें. पिक अप या डिलीवरी के अनुमानित समय को सही समय पर अपडेट करें. - अगर पुष्टि की पिछली जांचों से FoodOrderErrors जनरेट हुई हैं, तो:
- StructuredResponse.
error
और FoodErrorExtension की गड़बड़ियों की सूची शामिल करें.foodOrderErrors
. - अगर सभी गड़बड़ियां वापस पाई जा सकती हैं, तो
correctedProposedOrder
फ़ील्ड में ProposedOrder फ़ंक्शन दिखाएं. - अगर सभी गड़बड़ियां ठीक हो जाती हैं, तो
paymentOptions
फ़ील्ड में PaymentOptions वापस करें. - इसके अलावा, अगर पेमेंट के दूसरे विकल्प मौजूद हैं और सभी गड़बड़ियों को वापस पाया जा सकता है, तो
additionalPaymentOptions
शामिल करें.
- StructuredResponse.
- अगर पुष्टि करने से जुड़ी कोई गड़बड़ी नहीं मिलती है, तो CheckoutResponse ऑब्जेक्ट में
proposedOrder
,paymentOptions
वापस करें. अगर पैसे चुकाने के दूसरे विकल्प मौजूद हैं, तोadditionalPaymentOptions
भी शामिल करें.