जब कोई उपयोगकर्ता कार्ट बनाता है, तब चेकआउट प्रोसेस शुरू हो जाती है. इसका कॉन्टेंट उपयोगकर्ता का कार्ट और ऑर्डर का ब्यौरा आपके ऑर्डर के एंड-टू-एंड वेब पर भेजा जाता है सेवा. आपकी वेब सेवा इस जानकारी की पुष्टि करती है. इसके बाद, आपके पास ये काम करने का विकल्प होता है आगे बढ़ सकते हैं या ज़रूरत के हिसाब से उनके कार्ट में बदलाव कर सकते हैं.
आपकी वेब सेवा के लिए चेकआउट हैंडलर को पोस्ट अनुरोधों का जवाब देना चाहिए. जब
ग्राहक चेक आउट करना चुनता है, तो Google ऑर्डरिंग एंड-टू-एंड वेब सेवा
JSON के अनुरोध का मुख्य हिस्सा, CheckoutRequestMessage
के तौर पर होता है. इसमें यह शामिल होता है
ग्राहक की Cart
की जानकारी. इसके बाद, आपकी वेब सेवा जवाब देने के लिए
CheckoutResponseMessage
. नीचे दिया गया डायग्राम, प्रोसेस को दिखाता है.
चेकआउट का अनुरोध मिलने पर, ऑर्डर करने वाली पूरी वेब सेवा को निम्न:
- आइटम की मौजूदा कीमतों, खरीदारी के लिए उपलब्धता, और सेवा देने वाली कंपनी.
- कुल कीमत का हिसाब लगाएं (इसमें सभी छूट, टैक्स, और डिलीवरी शामिल हैं) शुल्क).
- अगर यह विकल्प सफल होता है, तो कार्ट में बदलाव करके जवाब दें.
- अगर विफल हो, तो एक त्रुटि संदेश और एक नए प्रस्तावित आदेश के साथ जवाब दें.
चेकआउट की प्रोसेस शुरू करने से पहले, हमारा सुझाव है कि आप ग्राहक को आइटम भेजने की प्रक्रिया, खास जानकारी दस्तावेज़.
चेकआउट के अनुरोध का मैसेज
खरीदार के कार्ट की पुष्टि करने के लिए, जब कोई खरीदार चेक आउट करने का विकल्प चुनता है, तो
Google, आपकी वेब सेवा को JSON बॉडी के साथ अनुरोध इस तरह भेजता है:
CheckoutRequestMessage
. ग्राहक का ऑर्डर इस अवधि के बाद तक सबमिट नहीं किया जाता:
सीधे खाना ऑर्डर करने की सुविधा.
इसमें शामिल डेटा:
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
में इसके बजाय एकFoodErrorExtension
औरProposedOrder
को सही किया गया.otherItems
: सेवा देने वाली कंपनी की ओर से जोड़े गए आइटम, जैसे कि डिलीवरी के शुल्क, टैक्स, और अन्य शुल्क. इसमें उपयोगकर्ता की जोड़ी गई ग्रेच्यूटी भी शामिल हो सकती है.totalPrice
: ऑर्डर की कुल कीमत.extension
:FoodOrderExtension
, जो ग्राहक को आइटम भेजने की जानकारी देता है ऑर्डर के लिए, जैसे कि डिलीवरी में लगने वाला समय.
PaymentOptions
- पेमेंट प्रोसेस करने की सुविधा सेट अप करने की सुविधा, बाद में 'Google सेट अप करें' सेक्शन में दी गई है
पैसे चुकाएं.
CheckoutResponseMessage
में प्लेसहोल्डर JSON का इस्तेमाल तब तक किया जा सकता है, जब तक: जो पैसे चुकाने की प्रोसेस लागू करने के लिए तैयार है. - अपने
CheckoutResponseMessage
में प्लेसहोल्डर से पेमेंट पाने के विकल्प जोड़ने के लिए, नीचे दिया गया उदाहरण देखें, जिसमेंPaymentOptions
के लिए पेमेंट गेटवे का उदाहरण.
- पेमेंट प्रोसेस करने की सुविधा सेट अप करने की सुविधा, बाद में 'Google सेट अप करें' सेक्शन में दी गई है
पैसे चुकाएं.
सही जवाब का उदाहरण
{
"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
. ज़रूरत पड़ने पर, इस तरह की गड़बड़ी दिखाएं:
गड़बड़ी का टाइप इस्तेमाल का उदाहरण अमान्य ग्राहक को आइटम भेजने का टाइप अमान्य है. NOT_FOUND ग्राहक को आइटम भेजने का टाइप नहीं मिला. बंद है - ऑर्डर के लिए कोई OperationHours विंडो नहीं है.
- यह ऑर्डर जल्द से जल्द दिया जा रहा है. साथ ही, इस समय के लिए, जल्द से जल्द ServiceHours उपलब्ध नहीं हैं.
- आपातकाल में बंद है या सेवा
isDisabled
सही है.
UNAVAILABLE_SLOT पहले से किया गया ऑर्डर पूरा नहीं किया जा सकता. NO_CAPACITY रेस्टोरेंट व्यस्त है और फ़िलहाल ऑर्डर नहीं ले रहा है. OUT_OF_SERVICE_AREA ऑर्डर, उपयोगकर्ता के पते पर डिलीवर नहीं किया जा सकता. उदाहरण के लिए डिलीवरी के पते की पुष्टि करना देखें. NO_COURIER_AVAILABLE डिलीवरी कर्मचारी की संख्या सीमित होने की वजह से, ऑर्डर डिलीवर नहीं किया जा सका.
पुष्टि करें और कार्ट की कीमत डालें
हर कार्ट को खोजें.
lineItems
और व्यापारी/कंपनी/कारोबारी के सिस्टम में मौजूद है या नहीं. कॉन्टेंट बनाने MenuItemOffer.फ़ीड इकाई सेsku
वैल्यू शामिल की गई है जैसे कि LineItem.offerId
. किसी प्रॉडक्ट की पिच के लिए अगर ज़रूरी हो, तो हर लाइन आइटम के लिए FoodOrderError. किसी प्रॉडक्ट की पिच के लिए हर आइटम के लिए ज़्यादा से ज़्यादा एक गड़बड़ी होनी चाहिए. गड़बड़ी के ये टाइप तब दिखाएं, जब ज़रूरी है:गड़बड़ी का टाइप इस्तेमाल का उदाहरण रिकवर किया जा सकता है अमान्य आइटम डेटा या कोई भी विकल्प डेटा अमान्य है. नहीं NOT_FOUND आइटम या कोई विकल्प नहीं मिला. नहीं PRICE_CHANGED किसी आइटम या ऐड-ऑन के कॉम्बिनेशन की कीमत बदल गई है. इस गड़बड़ी को ठीक किया जा सकता है. हां AVAILABILITY_CHANGED लाइन आइटम या किसी भी विकल्प के लिए अनुरोध की गई रकम उपलब्ध नहीं है. हां REQUIREMENTS_NOT_MET ऑर्डर की कम से कम या ज़्यादा से ज़्यादा सीमा पूरी नहीं हुई. इसका पता लगाने के लिए, यह देखें कि कार्ट की कीमत शुल्क. eligibleTransactionVolumeMin
से कम है या शुल्क से ज़्यादा है.eligibleTransactionVolumeMax
. ऑर्डर की कम से कम वैल्यू की पुष्टि में इसका उदाहरण देखें.नहीं LineItemType के साथ LineItem की पुष्टि की गई सूची दिखाएं
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 कोई अन्य वजह. डील के हिसाब से डील की कीमत का हिसाब लगाएं.
discount
या ऑफ़र.discountPercentage
.इस आधार पर कार्ट की कुल कीमत या कुल शुल्क का इस्तेमाल करके, डील की कीमत की रकम लागू करें ऑफ़र.
dealType
.लागू प्रमोशन के साथ कार्ट.
promotions
लौटाएं.प्रमोशन को LineItem के तौर पर दिखाएं LineItemType
DISCOUNT
. छूट को कार्ट.otherItems
की सूची में प्रॉडक्ट की कीमत नेगेटिव होनी चाहिए.
जवाब दें
- ProposedOrder बनाएं.
cart
, जवाब देने वाला कार्ट इसे अनुरोध कार्ट में डालें. ऐसा तब करें, जब पुष्टि के दौरान कोई गड़बड़ी न हो. - ProposedOrder.
otherItems
सूची दें. इसमें ये चीज़ें भी शामिल हैं अगर लागू हो, तो टैक्स, शुल्क, ग्रेच्यूटी, और छूट. Gratuity के बारे में यहां देखें ग्रेच्यूटी आइटम को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानकारी देखें. - कार्ट जोड़कर ProposedOrder.
totalPrice
शामिल करें कीमत, शुल्क, छूट, टैक्स, और ग्रेच्यूटी. - वापस जाएँ
FoodOrderExtension.
availableFulfillmentOptions
के साथ संबंधित FulfillmentOption को अपनाएं. अनुमानित कीमत अपडेट करें पिक अप या डिलीवरी में लगने वाला समय, अनुमानित समय तक. - अगर पुष्टि की पिछली जांचों से, FoodOrderErrors जनरेट होती हैं:
- StructuredResponse.
error
और सूची FoodErrorExtension में गड़बड़ियां.foodOrderErrors
. - इस आइटम में ProposedOrder वापस करें
अगर सभी गड़बड़ियों को ठीक किया जा सकता है, तो
correctedProposedOrder
फ़ील्ड. paymentOptions
में PaymentOptions वापस करें फ़ील्ड को खाली छोड़ दें.- विकल्प के तौर पर, अगर
additionalPaymentOptions
शामिल है, तो उसे भी शामिल करें पेमेंट के विकल्प उपलब्ध हैं और सभी गड़बड़ियों को ठीक किया जा सकता है.
- StructuredResponse.
- अगर पुष्टि करने से जुड़ी कोई गड़बड़ी नहीं दिखती है, तो
proposedOrder
, CheckoutResponse ऑब्जेक्ट मेंpaymentOptions
. विकल्प के तौर पर, अगरadditionalPaymentOptions
शामिल है, तो उसे भी शामिल करें भुगतान विकल्प उपलब्ध हैं.