Orders v2 API को 7 अगस्त, 2019 से बंद कर दिया गया है. इसे ऑर्डर से बदल दिया गया है वर्शन 3 में बताया गया है. अगर आपने कोई ऐसी कार्रवाई बनाई है जो तो इस गाइड में दिए गए निर्देशों का पालन करके, Action को अपडेट करके, ऑर्डर v3 का इस्तेमाल करें.
एपीआई से जुड़े बदलाव
Orders API के वर्शन 3 में, वर्शन 2 में हुए ये अहम बदलाव किए गए हैं:
- अनुरोध संरचना - वर्शन 3 के आदेश संरचना में ऑर्डर के विवरण शामिल होने चाहिए.
- ऑर्डर के अपडेट - ऑर्डर एपीआई का वर्शन 3, ऑर्डर अपडेट
ऑर्डर प्लेसमेंट को मैनेज करने के अलावा, आपके एंडपॉइंट को
उपयोगकर्ताओं को उनके ऑर्डर के बारे में अपडेट भेजने के लिए, Actions API का इस्तेमाल करें. आप यह भी भेजते हैं
ऑर्डर एपीआई में PATCH अनुरोधों के तौर पर अपडेट होते हैं, जो मौजूदा वर्शन को अपडेट करते हैं
स्टेटस के अपडेट भेजने के लिए, पीओएसटी तरीके से अनुरोध भेजने के बजाय,
order
ऑब्जेक्ट दिखेगा. - पेमेंट की सुविधा - ऐसी कार्रवाइयां जो वर्शन 3 के साथ Google Pay का इस्तेमाल करती हैं Orders API, अपने पेमेंट गेटवे की जानकारी को नए JSON स्ट्रक्चर में नेस्ट करता है ज़्यादा एक्सटेंशन इस्तेमाल करने और ईयू (यूरोपीय संघ) के कानूनों का पालन करने की अनुमति देता है.
Node.JS को v3 पर माइग्रेट करें
Node.JS क्लाइंट लाइब्रेरी का इस्तेमाल करने वाली कार्रवाई को माइग्रेट करने के लिए, यह तरीका अपनाएं.
1. Orders v3 फ़्लैग जोड़ना
लेन-देन मैनेज करने के लिए, आपने क्लाइंट लाइब्रेरी के जिन फ़ंक्शन का इस्तेमाल किया है वे अपडेट हो जाते हैं ऑर्डर वर्शन 3 के लिए, आपको सिर्फ़ अपने फ़ुलफ़िलमेंट कोड में फ़्लैग जोड़ना होगा जो फ़ंक्शन को अपडेट करके, वर्शन 3 को JSON भेजती है.
वाहन बेचने के तरीके में यह कोड जोड़ें:
const {dialogflow} = require('actions-on-google'); const app = dialogflow({ordersv3: true});
2. अपने कार्ट के असेंबली को अपडेट करना
ProposedOrder
टाइप को ज़्यादा जानकारी वाले Order
से बदल दिया गया है
ऑब्जेक्ट है. अपने ProposedOrder
कार्ट को इसमें बदलने के लिए JSON रेफ़रंस देखें
एक Order
कार्ट.
3. पेमेंट के पैरामीटर अपडेट करना
ऑर्डर प्रस्ताव चरण में क्रेडिट/डेबिट कार्ड की जानकारी का स्ट्रक्चर कि एपीआई वर्शन में क्या अंतर है.
अपने actions.intent.TRANSACTION_DECISION
इंटेंट अनुरोध में, पुराने अनुरोध को बदलें
नए paymentParameters
ऑब्जेक्ट वाला paymentOptions
ऑब्जेक्ट. ज़्यादातर
शामिल फ़ील्ड एक जैसे हैं, तो JSON ऑब्जेक्ट के कुछ बदलावों के लिए सेव करें
स्ट्रक्चर.
ये कोड स्निपेट, actions.intent.TRANSACTION_DECISION
का उदाहरण दिखाते हैं
के लिए इंटेंट का अनुरोध और वर्शन 3 के साथ Google Pay के पुराने वर्शन 2 के
तुलना.
conv.ask(new TransactionDecision({ orderOptions: { requestDeliveryAddress: false, userInfoOptions: { userInfoProperties: [ 'EMAIL', ], }, }, paymentParameters: { googlePaymentOption: { // facilitationSpec is expected to be a serialized JSON string facilitationSpec: JSON.stringify({ apiVersion: 2, apiVersionMinor: 0, merchantInfo: { merchantName: 'Example Merchant', }, allowedPaymentMethods: [ { type: 'CARD', parameters: { allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'], allowedCardNetworks: [ 'AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA'], }, tokenizationSpecification: { type: 'PAYMENT_GATEWAY', parameters: { gateway: 'example', gatewayMerchantId: 'exampleGatewayMerchantId', }, }, }, ], transactionInfo: { totalPriceStatus: 'FINAL', totalPrice: '10.00', currencyCode: 'USD', }, }), }, }, presentationOptions: { actionDisplayName: 'PLACE_ORDER', }, order: order, }));
conv.ask(new TransactionDecision({ orderOptions: { requestDeliveryAddress: false, }, paymentOptions: { googleProvidedOptions: { prepaidCardDisallowed: false, supportedCardNetworks: ['VISA', 'AMEX', 'DISCOVER', 'MASTERCARD'], tokenizationParameters: { tokenizationType: 'PAYMENT_GATEWAY', // These will be provided by payment processor, // like Stripe, Braintree, Vantiv, Ayden, etc. parameters: { 'gateway': 'stripe', 'stripe:publishableKey': (conv.sandbox ? 'pk_test_key' : 'pk_live_key'), 'stripe:version': '2018-11-08' }, }, }, }, proposedOrder: order, }));
ध्यान दें कि नीचे दिया गया Dialogflow JSON, वेबहुक के जवाब के बारे में बताता है.
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.TRANSACTION_DECISION", "data": { "@type": "type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec", "orderOptions": { "requestDeliveryAddress": "false" }, "paymentParameters": { "googlePaymentOption": { "facilitationSpec": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"Example Merchant\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],\"allowedCardNetworks\":[\"AMEX\",\"DISCOVER\",\"JCB\",\"MASTERCARD\",\"VISA\"]},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"example\",\"gatewayMerchantId\":\"exampleGatewayMerchantId\"}}}],\"transactionInfo\":{\"totalPriceStatus\":\"FINAL\",\"totalPrice\":\"10.00\",\"currencyCode\":\"USD\"}}" } }, "presentationOptions": { "actionDisplayName": "PLACE_ORDER" }, "order": { "createTime": "2019-08-01T17:12:13.765Z", "lastUpdateTime": "2019-08-01T17:12:13.765Z", "merchantOrderId": "UNIQUE_ORDER_ID", "userVisibleOrderId": "USER_VISIBLE_ORDER_ID", "transactionMerchant": { "id": "http://www.example.com", "name": "Example Merchant" }, "contents": { "lineItems": [ { "id": "LINE_ITEM_ID", "name": "Pizza", "description": "A four cheese pizza.", "priceAttributes": [ { "type": "REGULAR", "name": "Line Item Price", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 8990000 }, "taxIncluded": true } ], "notes": [ "Extra cheese." ], "purchase": { "quantity": 1, "unitMeasure": { "measure": 1, "unit": "POUND" }, "itemOptions": [ { "id": "ITEM_OPTION_ID", "name": "Pepperoni", "prices": [ { "type": "REGULAR", "state": "ACTUAL", "name": "Item Price", "amount": { "currencyCode": "USD", "amountInMicros": 1000000 }, "taxIncluded": true } ], "note": "Extra pepperoni", "quantity": 1, "subOptions": [] } ] } } ] }, "buyerInfo": { "email": "janedoe@gmail.com", "firstName": "Jane", "lastName": "Doe", "displayName": "Jane Doe" }, "priceAttributes": [ { "type": "TOTAL", "name": "Total Price", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 15770000 }, "taxIncluded": true }, { "type": "TAX", "name": "Tax", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 3780000 }, "taxIncluded": true }, { "type": "SUBTOTAL", "name": "Subtotal", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 9990000 }, "taxIncluded": true }, { "type": "DELIVERY", "name": "Delivery", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 2000000 }, "taxIncluded": true } ], "followUpActions": [ { "type": "VIEW_DETAILS", "title": "View details", "openUrlAction": { "url": "http://example.com" } }, { "type": "CALL", "title": "Call us", "openUrlAction": { "url": "tel:+16501112222" } }, { "type": "EMAIL", "title": "Email us", "openUrlAction": { "url": "mailto:person@example.com" } } ], "termsOfServiceUrl": "www.example.com", "note": "Sale event", "promotions": [ { "coupon": "COUPON_CODE" } ], "purchase": { "status": "CREATED", "userVisibleStatusLabel": "CREATED", "type": "FOOD", "returnsInfo": { "isReturnable": false, "daysToReturn": 1, "policyUrl": "http://www.example.com" }, "fulfillmentInfo": { "id": "FULFILLMENT_SERVICE_ID", "fulfillmentType": "DELIVERY", "expectedFulfillmentTime": { "timeIso8601": "2017-01-16T01:30:15.01Z" }, "location": { "zipCode": "94086", "city": "Sunnyvale", "postalAddress": { "regionCode": "US", "postalCode": "94086", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "222, Some other Street" ] } }, "price": { "type": "REGULAR", "name": "Delivery Price", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 2000000 }, "taxIncluded": true }, "fulfillmentContact": { "email": "johnjohnson@gmail.com", "firstName": "John", "lastName": "Johnson", "displayName": "John Johnson" } }, "purchaseLocationType": "ONLINE_PURCHASE" } } } } } } }
ध्यान दें कि नीचे दिया गया Dialogflow JSON, वेबहुक के जवाब के बारे में बताता है.
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.TRANSACTION_DECISION", "data": { "@type": "type.googleapis.com/google.actions.v2.TransactionDecisionValueSpec", "orderOptions": { "requestDeliveryAddress": false }, "paymentOptions": { "googleProvidedOptions": { "prepaidCardDisallowed": false, "supportedCardNetworks": [ "VISA", "AMEX", "DISCOVER", "MASTERCARD" ], "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_test_key", "stripe:version": "2018-11-08" } } } }, "proposedOrder": { "id": "UNIQUE_ORDER_ID222", "cart": { "merchant": { "id": "book_store_id", "name": "A Book Store" }, "lineItems": [ { "name": "My Memoirs", "id": "mymemoirs_id", "price": { "amount": { "currencyCode": "USD", "nanos": 990000000, "units": 8 }, "type": "ACTUAL" }, "quantity": 1, "subLines": [ { "note": "By Bestselling Novelist" } ], "type": "REGULAR" }, { "name": "Biography", "id": "biography_id", "price": { "amount": { "currencyCode": "USD", "nanos": 990000000, "units": 10 }, "type": "ACTUAL" }, "quantity": 1, "subLines": [ { "note": "Signed copy" } ], "type": "REGULAR" } ], "notes": "Sale event", "otherItems": [] }, "otherItems": [ { "name": "Subtotal", "id": "subtotal", "price": { "amount": { "currencyCode": "USD", "nanos": 980000000, "units": 19 }, "type": "ESTIMATE" }, "type": "SUBTOTAL" }, { "name": "Tax", "id": "tax", "price": { "amount": { "currencyCode": "USD", "nanos": 780000000, "units": 2 }, "type": "ESTIMATE" }, "type": "TAX" } ], "totalPrice": { "amount": { "currencyCode": "USD", "nanos": 760000000, "units": 22 }, "type": "ESTIMATE" } } } } } } }
4. Orders API का इस्तेमाल करके अपडेट भेजना
Orders API का वर्शन 3, ऑर्डर के अपडेट मैनेज करता है. इससे आपको अब ये काम करने की ज़रूरत नहीं पड़ती
Actions API को पीओएसटी अनुरोध भेजने हैं. इसके बजाय, पैच का अनुरोध भेजें
ऑर्डर एपीआई से कनेक्ट करता है, जो आपके Order
ऑब्जेक्ट के कॉन्टेंट को अपडेट करता है.
नया बियरर टोकन वापस पाएं
आप उसी JSON सेवा खाता कुंजी का इस्तेमाल कर सकते हैं जिसका इस्तेमाल आपने Actions API के लिए बियरर टोकन है. आपको इसके लिए नए बियरर टोकन का अनुरोध करना होगा Orders API. अपनी सेवा कुंजी की मदद से बेयरर टोकन पाएं Google API की क्लाइंट लाइब्रेरी और "https://www.googleapis.com/auth/actions.order.developer" का इस्तेमाल करके दायरा.
एपीआई क्लाइंट लाइब्रेरी GitHub पेज पर, इंस्टॉल करने के तरीके और उदाहरण देखे जा सकते हैं.
ऑर्डर एपीआई पासकोड एक्सचेंज के उदाहरण के लिए, हमारे Node.js सैंपल में अपडेट किए गए order-update.js
का रेफ़रंस भी दिया जा सकता है.
अपडेट भेजें
ऑर्डर एपीआई का इस्तेमाल करके, ऑर्डर का अपडेट भेजने की प्रोसेस, भेजने के तरीके जैसी ही है Actions API की मदद से अपडेट किए जाते हैं. हालांकि, आपने पैच का अनुरोध भेजा है ध्यान दें. PATCH अनुरोध को निम्न प्रारूप:
{ "orderUpdate": OrderUpdate" }
OrderUpdate
फ़ॉर्मैट, वर्शन 3 में भी अलग है. PATCH अनुरोध का रेफ़रंस देखें
और उसके हिसाब से अपने OrderUpdate
फ़ील्ड अपडेट करें. यह कोड स्निपेट
PATCH अनुरोध का एक उदाहरण दिखाता है, जो किसी ऑर्डर की स्थिति को "DELIVERED
" में अपडेट करता है:
// Import the 'googleapis' module for authorizing the request. const {google} = require('googleapis'); // Import the 'request' module for sending an HTTP POST request. const request = require('request'); // Import the OrderUpdate class from the Actions on Google client library. const {OrderUpdate} = require('actions-on-google'); // Import the service account key used to authorize the request. Replace the string path with a path to your service account key. const key = require('./service-account.json'); // Create a new JWT client for the Actions API using credentials from the service account key. let jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/actions.order.developer'], null ); // Authorize the client asynchronously, passing in a callback to run upon authorization. jwtClient.authorize((err, tokens) => { if (err) { console.log(err); return; } // Declare the ID of the order to update. const orderId = '<UNIQUE_MERCHANT_ORDER_ID>'; const orderUpdate = new OrderUpdate({ updateMask: [ 'lastUpdateTime', 'purchase.status', 'purchase.userVisibleStatusLabel', ].join(','), order: { merchantOrderId: orderId, lastUpdateTime: new Date().toISOString(), purchase: { status: 'DELIVERED', userVisibleStatusLabel: 'Order delivered', }, }, reason: 'Order status updated to delivered.', }); // Set up the PATCH request header and body, including the authorized token // and order update. const bearer = 'Bearer ' + tokens.access_token; const options = { method: 'PATCH', url: `https://actions.googleapis.com/v3/orders/${orderId}`, headers: { 'Authorization': bearer, }, body: { header: { 'isInSandbox': true, }, orderUpdate, }, json: true, }; // Send the PATCH request to the Orders API. request.patch(options, (err, httpResponse, body) => { if (err) { console.log('There was an error...'); console.log(err); return; } }); });
ऑर्डर की अन्य स्थितियों को मैनेज करना
Orders API का वर्शन 3, ऑर्डर की स्थिति की अन्य वैल्यू के साथ काम करता है जो वर्शन 2 में उपलब्ध नहीं हैं. आपको यह भेजना चाहिए ऑर्डर से जुड़े हर लेन-देन से जुड़े हर स्टेटस के लिए अपडेट पाएं.
ये स्थिति मान वर्शन 3 के लिए नए हैं:
IN_PREPARATION
- ऑर्डर को शिपमेंट/डिलीवरी के लिए तैयार किया जा रहा है, जैसे कि खाने का सामान पकाने में या किसी आइटम को पैक किए जाने से बचाएं.READY_FOR_PICKUP
- ऑर्डर पाने वाले व्यक्ति के पास इसे पिक अप करने का विकल्प है.DELIVERED
- ऑर्डर, ऑर्डर पाने वाले को भेज दिया गया हैOUT_OF_STOCK
- ऑर्डर में एक या एक से ज़्यादा आइटम स्टॉक में नहीं हैं.CHANGE_REQUESTED
- उपयोगकर्ता ने ऑर्डर में बदलाव करने का अनुरोध किया है और यह बदलाव है प्रोसेस किया जा रहा है.
FULFILLED
स्टेटस अब काम नहीं करता. इसे DELIVERED
से बदल दिया गया है.
Java को v3 पर माइग्रेट करें
Java क्लाइंट लाइब्रेरी का इस्तेमाल करने वाली कार्रवाई को माइग्रेट करने के लिए, यह तरीका अपनाएं.
1. अपने कार्ट के असेंबली को अपडेट करना
ProposedOrder
टाइप को ज़्यादा जानकारी वाले Order
से बदल दिया गया है
ऑब्जेक्ट है. अपने ProposedOrder
कार्ट को इसमें बदलने के लिए JSON रेफ़रंस देखें
एक Order
कार्ट.
2. पेमेंट के पैरामीटर अपडेट करना
ऑर्डर प्रस्ताव चरण में क्रेडिट/डेबिट कार्ड की जानकारी का स्ट्रक्चर कि एपीआई वर्शन में क्या अंतर है.
अपने actions.intent.TRANSACTION_DECISION
इंटेंट अनुरोध में, पुराने अनुरोध को बदलें
नए paymentParameters
ऑब्जेक्ट वाला paymentOptions
ऑब्जेक्ट. ज़्यादातर
शामिल फ़ील्ड एक जैसे हैं, तो JSON ऑब्जेक्ट के कुछ बदलावों के लिए सेव करें
स्ट्रक्चर.
ये कोड स्निपेट, actions.intent.TRANSACTION_DECISION
का उदाहरण दिखाते हैं
के लिए इंटेंट का अनुरोध और वर्शन 3 के साथ Google Pay के पुराने वर्शन 2 के
तुलना.
// Create order options OrderOptionsV3 orderOptions = new OrderOptionsV3() .setRequestDeliveryAddress(false) .setUserInfoOptions(new UserInfoOptions() .setUserInfoProperties(Collections.singletonList("EMAIL"))); // Create presentation options PresentationOptionsV3 presentationOptions = new PresentationOptionsV3() .setActionDisplayName("PLACE_ORDER"); // Create payment parameters JSONObject merchantInfo = new JSONObject(); merchantInfo.put("merchantName", "Example Merchant"); JSONObject facilitationSpec = new JSONObject(); facilitationSpec.put("apiVersion", 2); facilitationSpec.put("apiVersionMinor", 0); facilitationSpec.put("merchantInfo", merchantInfo); JSONObject allowedPaymentMethod = new JSONObject(); allowedPaymentMethod.put("type", "CARD"); JSONArray allowedAuthMethods = new JSONArray(); allowedAuthMethods.addAll(Arrays.asList("PAN_ONLY", "CRYPTOGRAM_3DS")); JSONArray allowedCardNetworks = new JSONArray(); allowedCardNetworks.addAll(Arrays.asList("AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA")); JSONObject allowedPaymentMethodParameters = new JSONObject(); allowedPaymentMethodParameters.put("allowedAuthMethods", allowedAuthMethods); allowedPaymentMethodParameters.put("allowedCardNetworks", allowedCardNetworks); allowedPaymentMethod.put("parameters", allowedPaymentMethodParameters); JSONObject tokenizationSpecificationParameters = new JSONObject(); tokenizationSpecificationParameters.put("gateway", "example"); tokenizationSpecificationParameters.put("gatewayMerchantId", "exampleGatewayMerchantId"); JSONObject tokenizationSpecification = new JSONObject(); tokenizationSpecification.put("type", "PAYMENT_GATEWAY"); tokenizationSpecification.put("parameters", tokenizationSpecificationParameters); allowedPaymentMethod.put("tokenizationSpecification", tokenizationSpecification); JSONArray allowedPaymentMethods = new JSONArray(); allowedPaymentMethods.add(allowedPaymentMethod); facilitationSpec.put("allowedPaymentMethods", allowedPaymentMethods); JSONObject transactionInfo = new JSONObject(); transactionInfo.put("totalPriceStatus", "FINAL"); transactionInfo.put("totalPrice", "10.00"); transactionInfo.put("currencyCode", "USD"); facilitationSpec.put("transactionInfo", transactionInfo); GooglePaymentOption googlePaymentOption = new GooglePaymentOption() .setFacilitationSpec(facilitationSpec.toJSONString()); PaymentParameters paymentParameters = new PaymentParameters() .setGooglePaymentOption(googlePaymentOption); // Ask for transaction decision return getResponseBuilder(request) .add("Placeholder for transaction decision text") .add(new TransactionDecision() .setOrder(order) .setOrderOptions(orderOptions) .setPresentationOptions(presentationOptions) .setPaymentParameters(paymentParameters) ) .build();
OrderOptions orderOptions; PaymentOptions paymentOptions; // Setup Google provided payment options Map<String, String> parameters = new HashMap<>(); parameters.put("gateway", "stripe"); parameters.put("stripe:publishableKey", request.isInSandbox() ? "pk_test_key" : "pk_live_key"); parameters.put("stripe:version", "2017-04-06"); PaymentMethodTokenizationParameters tokenizationParameters = new PaymentMethodTokenizationParameters() .setTokenizationType("PAYMENT_GATEWAY") .setParameters(parameters); orderOptions = new OrderOptions().setRequestDeliveryAddress(false); GoogleProvidedPaymentOptions googleProvidedPaymentOptions = new GoogleProvidedPaymentOptions() .setPrepaidCardDisallowed(false) .setSupportedCardNetworks(Arrays.asList("VISA", "AMEX")) .setTokenizationParameters(tokenizationParameters); paymentOptions = new PaymentOptions().setGoogleProvidedOptions(googleProvidedPaymentOptions); return getResponseBuilder(request) .add("Placeholder for transaction decision text") .add( new TransactionDecision() .setOrderOptions(orderOptions) .setPaymentOptions(paymentOptions) .setProposedOrder(proposedOrder)) .build();
ध्यान दें कि नीचे दिया गया Dialogflow JSON, वेबहुक के जवाब के बारे में बताता है.
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.TRANSACTION_DECISION", "data": { "@type": "type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec", "orderOptions": { "requestDeliveryAddress": "false" }, "paymentParameters": { "googlePaymentOption": { "facilitationSpec": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"Example Merchant\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],\"allowedCardNetworks\":[\"AMEX\",\"DISCOVER\",\"JCB\",\"MASTERCARD\",\"VISA\"]},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"example\",\"gatewayMerchantId\":\"exampleGatewayMerchantId\"}}}],\"transactionInfo\":{\"totalPriceStatus\":\"FINAL\",\"totalPrice\":\"10.00\",\"currencyCode\":\"USD\"}}" } }, "presentationOptions": { "actionDisplayName": "PLACE_ORDER" }, "order": { "createTime": "2019-08-01T17:12:13.765Z", "lastUpdateTime": "2019-08-01T17:12:13.765Z", "merchantOrderId": "UNIQUE_ORDER_ID", "userVisibleOrderId": "USER_VISIBLE_ORDER_ID", "transactionMerchant": { "id": "http://www.example.com", "name": "Example Merchant" }, "contents": { "lineItems": [ { "id": "LINE_ITEM_ID", "name": "Pizza", "description": "A four cheese pizza.", "priceAttributes": [ { "type": "REGULAR", "name": "Line Item Price", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 8990000 }, "taxIncluded": true } ], "notes": [ "Extra cheese." ], "purchase": { "quantity": 1, "unitMeasure": { "measure": 1, "unit": "POUND" }, "itemOptions": [ { "id": "ITEM_OPTION_ID", "name": "Pepperoni", "prices": [ { "type": "REGULAR", "state": "ACTUAL", "name": "Item Price", "amount": { "currencyCode": "USD", "amountInMicros": 1000000 }, "taxIncluded": true } ], "note": "Extra pepperoni", "quantity": 1, "subOptions": [] } ] } } ] }, "buyerInfo": { "email": "janedoe@gmail.com", "firstName": "Jane", "lastName": "Doe", "displayName": "Jane Doe" }, "priceAttributes": [ { "type": "TOTAL", "name": "Total Price", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 15770000 }, "taxIncluded": true }, { "type": "TAX", "name": "Tax", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 3780000 }, "taxIncluded": true }, { "type": "SUBTOTAL", "name": "Subtotal", "state": "ESTIMATE", "amount": { "currencyCode": "USD", "amountInMicros": 9990000 }, "taxIncluded": true }, { "type": "DELIVERY", "name": "Delivery", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 2000000 }, "taxIncluded": true } ], "followUpActions": [ { "type": "VIEW_DETAILS", "title": "View details", "openUrlAction": { "url": "http://example.com" } }, { "type": "CALL", "title": "Call us", "openUrlAction": { "url": "tel:+16501112222" } }, { "type": "EMAIL", "title": "Email us", "openUrlAction": { "url": "mailto:person@example.com" } } ], "termsOfServiceUrl": "www.example.com", "note": "Sale event", "promotions": [ { "coupon": "COUPON_CODE" } ], "purchase": { "status": "CREATED", "userVisibleStatusLabel": "CREATED", "type": "FOOD", "returnsInfo": { "isReturnable": false, "daysToReturn": 1, "policyUrl": "http://www.example.com" }, "fulfillmentInfo": { "id": "FULFILLMENT_SERVICE_ID", "fulfillmentType": "DELIVERY", "expectedFulfillmentTime": { "timeIso8601": "2017-01-16T01:30:15.01Z" }, "location": { "zipCode": "94086", "city": "Sunnyvale", "postalAddress": { "regionCode": "US", "postalCode": "94086", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "222, Some other Street" ] } }, "price": { "type": "REGULAR", "name": "Delivery Price", "state": "ACTUAL", "amount": { "currencyCode": "USD", "amountInMicros": 2000000 }, "taxIncluded": true }, "fulfillmentContact": { "email": "johnjohnson@gmail.com", "firstName": "John", "lastName": "Johnson", "displayName": "John Johnson" } }, "purchaseLocationType": "ONLINE_PURCHASE" } } } } } } }
ध्यान दें कि नीचे दिया गया Dialogflow JSON, वेबहुक के जवाब के बारे में बताता है.
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.TRANSACTION_DECISION", "data": { "@type": "type.googleapis.com/google.actions.v2.TransactionDecisionValueSpec", "orderOptions": { "requestDeliveryAddress": false }, "paymentOptions": { "googleProvidedOptions": { "prepaidCardDisallowed": false, "supportedCardNetworks": [ "VISA", "AMEX", "DISCOVER", "MASTERCARD" ], "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_test_key", "stripe:version": "2018-11-08" } } } }, "proposedOrder": { "id": "UNIQUE_ORDER_ID222", "cart": { "merchant": { "id": "book_store_id", "name": "A Book Store" }, "lineItems": [ { "name": "My Memoirs", "id": "mymemoirs_id", "price": { "amount": { "currencyCode": "USD", "nanos": 990000000, "units": 8 }, "type": "ACTUAL" }, "quantity": 1, "subLines": [ { "note": "By Bestselling Novelist" } ], "type": "REGULAR" }, { "name": "Biography", "id": "biography_id", "price": { "amount": { "currencyCode": "USD", "nanos": 990000000, "units": 10 }, "type": "ACTUAL" }, "quantity": 1, "subLines": [ { "note": "Signed copy" } ], "type": "REGULAR" } ], "notes": "Sale event", "otherItems": [] }, "otherItems": [ { "name": "Subtotal", "id": "subtotal", "price": { "amount": { "currencyCode": "USD", "nanos": 980000000, "units": 19 }, "type": "ESTIMATE" }, "type": "SUBTOTAL" }, { "name": "Tax", "id": "tax", "price": { "amount": { "currencyCode": "USD", "nanos": 780000000, "units": 2 }, "type": "ESTIMATE" }, "type": "TAX" } ], "totalPrice": { "amount": { "currencyCode": "USD", "nanos": 760000000, "units": 22 }, "type": "ESTIMATE" } } } } } } }
3. Orders API का इस्तेमाल करके अपडेट भेजना
Orders API का वर्शन 3, ऑर्डर के अपडेट मैनेज करता है. इससे आपको अब ये काम करने की ज़रूरत नहीं पड़ती
Actions API को पीओएसटी अनुरोध भेजने हैं. इसके बजाय, पैच का अनुरोध भेजें
ऑर्डर एपीआई से कनेक्ट करता है, जो आपके Order
ऑब्जेक्ट के कॉन्टेंट को अपडेट करता है.
नया बियरर टोकन वापस पाएं
आप उसी JSON सेवा खाता कुंजी का इस्तेमाल कर सकते हैं जिसका इस्तेमाल आपने Actions API के लिए बियरर टोकन है. आपको इसके लिए नए बियरर टोकन का अनुरोध करना होगा Orders API. अपनी सेवा कुंजी की मदद से बेयरर टोकन पाएं Google API की क्लाइंट लाइब्रेरी और "https://www.googleapis.com/auth/actions.order.developer" का इस्तेमाल करके दायरा.
एपीआई क्लाइंट लाइब्रेरी GitHub पेज पर, इंस्टॉल करने के तरीके और उदाहरण देखे जा सकते हैं.
ऑर्डर एपीआई पासकोड के एक्सचेंज के उदाहरण के लिए, हमारे Java सैंपल में अपडेट किए गए order-update.js
का रेफ़रंस भी दिया जा सकता है.
अपडेट भेजें
ऑर्डर एपीआई का इस्तेमाल करके, ऑर्डर का अपडेट भेजने की प्रोसेस, भेजने के तरीके जैसी ही है Actions API की मदद से अपडेट किए जाते हैं. हालांकि, आपने पैच का अनुरोध भेजा है ध्यान दें. PATCH अनुरोध को निम्न प्रारूप:
{ "orderUpdate": OrderUpdate" }
OrderUpdate
फ़ॉर्मैट, वर्शन 3 में भी अलग है. PATCH अनुरोध का रेफ़रंस देखें
और उसके हिसाब से अपने OrderUpdate
फ़ील्ड अपडेट करें. यह कोड स्निपेट
PATCH अनुरोध का एक उदाहरण दिखाता है, जो किसी ऑर्डर की स्थिति को "DELIVERED
" में अपडेट करता है:
// Create order update FieldMask fieldMask = FieldMask.newBuilder().addAllPaths(Arrays.asList( "last_update_time", "purchase.status", "purchase.userVisibleStatusLabel")) .build(); OrderUpdateV3 orderUpdate = new OrderUpdateV3() .setOrder(new OrderV3() .setMerchantOrderId(orderId) .setLastUpdateTime(Instant.now().toString()) .setPurchase(new PurchaseOrderExtension() .setStatus("DELIVERED") .setUserVisibleStatusLabel("Order delivered."))) .setUpdateMask(FieldMaskUtil.toString(fieldMask)) .setReason("Order status was updated to delivered."); // Setup JSON body containing order update JsonParser parser = new JsonParser(); JsonObject orderUpdateJson = parser.parse(new Gson().toJson(orderUpdate)).getAsJsonObject(); JsonObject body = new JsonObject(); body.add("orderUpdate", orderUpdateJson); JsonObject header = new JsonObject(); header.addProperty("isInSandbox", true); body.add("header", header); StringEntity entity = new StringEntity(body.toString()); entity.setContentType(ContentType.APPLICATION_JSON.getMimeType()); request.setEntity(entity); // Make request HttpClient httpClient = HttpClientBuilder.create().build(); HttpResponse response = httpClient.execute(request);
ऑर्डर की अन्य स्थितियों को मैनेज करना
Orders API का वर्शन 3, ऑर्डर की स्थिति की अन्य वैल्यू के साथ काम करता है जो वर्शन 2 में उपलब्ध नहीं हैं. आपको यह भेजना चाहिए ऑर्डर से जुड़े हर लेन-देन से जुड़े हर स्टेटस के लिए अपडेट पाएं.
ये स्थिति मान वर्शन 3 के लिए नए हैं:
IN_PREPARATION
- ऑर्डर को शिपमेंट/डिलीवरी के लिए तैयार किया जा रहा है, जैसे कि खाने का सामान पकाने में या किसी आइटम को पैक किए जाने से बचाएं.READY_FOR_PICKUP
- ऑर्डर पाने वाले व्यक्ति के पास इसे पिक अप करने का विकल्प है.DELIVERED
- ऑर्डर, ऑर्डर पाने वाले को भेज दिया गया हैOUT_OF_STOCK
- ऑर्डर में एक या एक से ज़्यादा आइटम स्टॉक में नहीं हैं.CHANGE_REQUESTED
- उपयोगकर्ता ने ऑर्डर में बदलाव करने का अनुरोध किया है और यह बदलाव है प्रोसेस किया जा रहा है.
FULFILLED
स्टेटस अब काम नहीं करता. इसे DELIVERED
से बदल दिया गया है.