जब कोई ग्राहक खाने का ऑर्डर सबमिट करता है, तो ऑर्डर में बदलाव होने की सूचना देने के लिए, ऑर्डर पर Google की ओर से सेवा के अपडेट वाला मैसेज भेजा जा सकता है.
ऑर्डर के अपडेट भेजने की कुछ आम वजहें ये हैं:
- ऑर्डर पूरा करने के लिए, अनुमानित समय उपलब्ध हो जाता है या बदल जाता है.
- ऑर्डर की स्थिति बदल जाती है.
- यह ऑर्डर अब पूरा नहीं किया जा सकता.
- ऑर्डर में शामिल मेन्यू आइटम की कीमत बदल गई है.
- ग्राहक के पास ऑर्डर मैनेज करने का नया तरीका है, जैसे कि ग्राहक सहायता या रेस्टोरेंट का फ़ोन नंबर.
- ऑर्डर की रसीद उपलब्ध हो जाती है.
अगले सेक्शन में, ऑर्डर अपडेट का इस्तेमाल करके इन अलग-अलग स्थितियों के बारे में बताया गया है.
ट्रांज़िशन ऑर्डर के स्टेटस
किसी ऑर्डर में छह स्थितियां हो सकती हैं. इन स्थितियों और उनके संभावित ट्रांज़िशन को नीचे दिए गए डायग्राम में दिखाया गया है:
जब कोई ग्राहक पहली बार ऑर्डर सबमिट करता है, तो ऑर्डर की कीमत
CREATED
, CONFIRMED
या REJECTED
से शुरू होती है. ऑर्डर की स्थिति अपडेट करने के लिए, ऑर्डर के अपडेट होने का मैसेज भेजा जा सकता है. हालांकि, ऐसा तब ही किया जा सकता है, जब राज्य का ट्रांज़िशन मान्य हो. CREATED
स्टेट का इस्तेमाल तब किया जाता है, जब पार्टनर का प्लैटफ़ॉर्म तुरंत ऑर्डर को स्वीकार या अस्वीकार नहीं कर सकता. उदाहरण के लिए, जब कोई ग्राहक किसी डिलीवरी एग्रीगेटर की मदद से ऑर्डर करता है, डिलीवरी एग्रीगेटर को Google से डिलीवरी मिल जाती है और वह एग्रीगेटर, रेस्टोरेंट को जानकारी भेज देता है. रेस्टोरेंट को मिलने और ऑर्डर की उपलब्धता की पुष्टि होने के बाद, राज्य की स्थिति अब CONFIRMED
हो सकती है, नहीं तो REJECTED
हो सकती है.
CONFIRMED
स्थिति में एक ऑर्डर, IN_PREPARATION
के स्टेटस में चला जाएगा. ऑर्डर पिक अप किया जा सकता है या डिलीवरी के लिए, इसके बाद READY_FOR_PICKUP
या IN_TRANSIT
का इस्तेमाल किया जा सकता है. जब खाना डिलीवर या पिक अप किया जाता है, तो ऑर्डर FULFILLED
की स्थिति में सेट हो जाता है.
अगर ग्राहकों को ऑर्डर रद्द करने की अनुमति मिलती है, तो CANCELLED
का इस्तेमाल किया जा सकता है. CREATED
, CONFIRMED
, IN_PREPARATION
, READY_FOR_PICKUP
या IN_TRANSIT
की स्थिति में ऑर्डर रद्द किया जा सकता है.
ऑर्डर रद्द करने की नीति और रद्द करते समय पेमेंट की स्थिति के हिसाब से, Google के साथ पार्टनरशिप वाली सेवा की मदद से आपको रिफ़ंड जारी करना चाहिए.
यह ज़रूरी नहीं है कि आपके ऑर्डर की Google की सेवा, सभी उपलब्ध राज्यों और
ट्रांज़िशन के लिए सही हो. हालांकि, ऑर्डर के,
FULFILLED
,
REJECTED
, या CANCELLED
की आखिरी स्थिति होनी चाहिए.
ऑर्डर पूरा करने का अनुमानित समय बताना
आप उपयोगकर्ताओं को अनुमानित समय सीमा के बारे में बता सकते हैं कि उनका ऑर्डर कब पिक अप के लिए तैयार होगा या डिलीवर किया जाएगा. ग्राहक के ऑर्डर को कब पिक अप या डिलीवर के लिए तैयार किया जाएगा, इसके लिए अनुमानित समयसीमा बताने के लिए FoodOrderUpdateExtension
के estimatedFulfillmentTimeIso8601
फ़ील्ड का इस्तेमाल करें.
नीचे दिए गए समय पर estimatedFulfillmentTimeIso8601
भेजें:
- जब अनुमानित समय उपलब्ध हो जाए, तब आदर्श रूप से
CREATED
याCONFIRMED
स्थिति का इस्तेमाल करें. - जब अनुमानित समय बदलता है, जैसे कि ऑर्डर
IN_TRANSIT
होने पर अनुमानित समय को ज़्यादा सटीक बनाने के लिए अपडेट करना.
उपयोगकर्ताओं की उम्मीदों को असरदार तरीके से मैनेज करने के लिए, अपने अनुमानों में सतर्क रहें और एक तय तारीख और समय के बजाय तारीख और समय सीमा दें. जहां तक हो सके, आपको ट्रैफ़िक की स्थिति जैसे वैरिएशन का ध्यान रखना चाहिए. उदाहरण के लिए, ऐसे ऑर्डर के लिए दोपहर 12:45 बजे (कम से कम सीमा) का अनुमान दोपहर 1:15 बजे (ऊपर की ओर) भेजा जा सकता है जहां डिलीवरी का अनुमानित समय दोपहर 1:00 बजे है.
ऑर्डर मैनेज करने से जुड़ी कार्रवाइयां उपलब्ध कराना
ऑर्डर का अपडेट भेजते समय, ग्राहकों को ऐसे संसाधन दिए जा सकते हैं जिनसे वे अपने ऑर्डर को OrderManagementAction
के रूप में मैनेज कर सकें. जब कोई खरीदार
ऑर्डर करता है, तो हो सकता है कि उसे ऑर्डर पूरा करने के लिए, आपसे या रेस्टोरेंट से संपर्क करके ऑर्डर को पूरा करना पड़े, ऑर्डर में बदलाव करना हो या ऑर्डर रद्द करना पड़े.
OrderManagementAction
ग्राहकों को सीधे उनके डिवाइस से यूआरएल ईमेल करने, कॉल करने या उससे लिंक करने की सुविधा देता है. उसी जानकारी का इस्तेमाल
OrderManagementAction
में करें जिसका इस्तेमाल आपने उपयोगकर्ता को ईमेल से भेजे गए ऑर्डर की पुष्टि में किया है.
ऑर्डर मैनेजमेंट की कार्रवाइयों में ये टाइप शामिल हैं:
CUSTOMER_SERVICE
: ग्राहकों को ग्राहक सेवा से संपर्क करने की कार्रवाई करें. ऑर्डर से जुड़े अपडेट के लिए, यह मैनेजमेंट ऐक्शन टाइप ज़रूरी है.EMAIL
: दिए गए ईमेल पते पर ईमेल भेजने के लिए, ग्राहकों को कार्रवाई करने की सुविधा दें.CALL
दिए गए फ़ोन नंबर पर कॉल करने के लिए, ग्राहकों को कोई कार्रवाई उपलब्ध कराएं.VIEW_DETAIL
ग्राहकों को उनके ऑर्डर की जानकारी देखने के लिए कार्रवाई करने का विकल्प दें.
ऑर्डर के हर अपडेट में, ऑर्डर मैनेज करने से जुड़ी कम से कम एक कार्रवाई होनी चाहिए. हालांकि,
ऑर्डर की स्थिति के हिसाब से, आपको अलग-अलग ऑर्डर मैनेज करने की कार्रवाइयां अलग-अलग हो सकती हैं.
उदाहरण के लिए, जब कोई ऑर्डर CONFIRMED
स्थिति में होता है, तो CUSTOMER_SERVICE
कार्रवाई, आपके ग्राहक सेवा फ़ोन नंबर पर ले जा सकती है. ऑर्डर की स्थिति IN_TRANSIT
में अपडेट होने पर, CUSTOMER_SERVICE
कार्रवाई पूरी करने वाले रेस्टोरेंट के फ़ोन नंबर की ओर संकेत कर सकती है.
ऑर्डर से जुड़े अपडेट भेजे जा रहे हैं
आप Google की सेवा का इस्तेमाल करके, ऑर्डर का अपडेट भेजने के लिए, AsyncOrderUpdateRequestMessage
तरह के मैसेज का इस्तेमाल करते हैं. Google, AsyncOrderUpdateResponseMessage
पर जवाब देता है. उदाहरण के लिए, अगर आप किसी ग्राहक को यह बताना चाहते हैं कि उनका ऑर्डर मान्य है और उसे स्वीकार कर लिया गया है, तो आप Accepted by restaurant
की मदद से, ऑर्डर की स्थिति को बदलकर CONFIRMED
कर सकते हैं.AsyncOrderUpdateRequestMessage
ऑर्डर के अपडेट का मैसेज सेट करना
जब आप Google को AsyncOrderUpdateRequestMessage
भेजते हैं, तो OrderUpdate
फ़ील्ड का इस्तेमाल करके, ऑर्डर की स्थिति की जानकारी शामिल करें.
नीचे दिए गए उदाहरण हर एक ऑर्डर की स्थिति के लिए एक सैंपल AsyncOrderUpdateRequestMessage
दिखाते हैं:
पुष्टि हो गई
यह उदाहरण एक सैंपल ऑर्डर अपडेट का अनुरोध दिखाता है. यह उपयोगकर्ता को बताता है कि ऑर्डर की पुष्टि रसीद के साथ और डिलीवरी में लगने वाले अनुमानित समय की जानकारी दी गई है.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
नामंजूर
यह उदाहरण एक सैंपल ऑर्डर अपडेट का अनुरोध दिखाता है. यह उपयोगकर्ता को बताता है कि ऑर्डर को अस्वीकार किए जाने की वजह से उसे अस्वीकार कर दिया गया.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, the restaurant cannot take your order right now." }, "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] } } } }
रद्द कर दी गई
इस उदाहरण में सैंपल ऑर्डर को अपडेट करने का अनुरोध शामिल है. इससे उपयोगकर्ता को पता चलता है कि ऑर्डर रद्द करने की वजह से उसे रद्द किया गया.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CANCELLED", "label": "Order cancelled" }, "updateTime": "2017-05-10T02:30:00.000Z", "cancellationInfo": { "reason": "Customer requested" }, "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
इस बारे में जानकारी
इस उदाहरण में सैंपल ऑर्डर को अपडेट करने का अनुरोध दिखाया गया है. इससे उपयोगकर्ता को यह पता चलता है कि खाना अभी तैयार किया जा रहा है.
{ "isInSandbox":true, "customPushMessage":{ "orderUpdate":{ "actionOrderId":"sample_action_order_id", "orderState":{ "state":"IN_PREPARATION", "label":"Order is being prepared" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime":"2018-04-15T11:30:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension":{ "@type":"type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601":"PT20M" } } } }
फ़िशिंग के लिए तैयार
इस उदाहरण में ऑर्डर के अपडेट का अनुरोध किया गया है, जिससे उपयोगकर्ता को पता चलेगा कि खाना पिक अप के लिए तैयार है.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "READY_FOR_PICKUP", "label": "Order is ready for pickup" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2018-04-15T12:00:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
आईएनएन_ट्रांज़िट
इस उदाहरण में सैंपल ऑर्डर को अपडेट करने का अनुरोध शामिल है. इससे उपयोगकर्ता को यह सूचना मिलती है कि ऑर्डर की डिलीवरी होने का अनुमानित समय है.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
भरा गया
यह उदाहरण एक सैंपल ऑर्डर अपडेट का अनुरोध दिखाता है. इससे उपयोगकर्ता को पता चलता है कि ऑर्डर पिक अप किया गया है या डिलीवर किया गया है:
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "FULFILLED", "label": "Order delivered" }, "updateTime": "2017-05-10T02:30:00.000Z", "fulfillmentInfo": { "deliveryTime": "2017-05-10T02:30:00.000Z" }, "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
इस्तेमाल के अलग-अलग मामलों में ऑर्डर अपडेट करने के अनुरोधों के ज़्यादा उदाहरणों के लिए, बेहतर ऑर्डर अपडेट लागू करना पढ़ें.
ऑथराइज़ेशन टोकन जनरेट करें और मैसेज भेजें
ऑर्डर के अपडेट होने के लिए, ऑथराइज़ेशन टोकन की ज़रूरत होती है. ऐसा इसलिए, ताकि ऑर्डर करने की प्रक्रिया Google की सेवा से की जा सके.
अपने प्रोजेक्ट के लिए ऑर्डर अपडेट लागू करने के लिए, यह तरीका अपनाएं:
- यह तरीका अपनाकर, ऑथराइज़ेशन टोकन जनरेट करें:
- अपनी सेवा खाता फ़ाइल से क्रेडेंशियल पढ़ने के लिए, Google की पुष्टि लाइब्रेरी का इस्तेमाल करें.
- इस एपीआई स्कोप का इस्तेमाल करके टोकन के लिए अनुरोध करें:
https://www.googleapis.com/auth/actions.fulfillment.conversation
- नीचे दिए गए एंडपॉइंट पर पुष्टि किया गया एचटीटीपी POST अनुरोध भेजने के लिए इस टोकन का इस्तेमाल करें:
https://actions.googleapis.com/v2/conversations:send
- अपने अनुरोध के हिस्से के तौर पर,
Content-Type
हेडर कोapplication/json
पर सेट करें.
नीचे दिए गए उदाहरणों में, ऑर्डर के अपडेट लागू करने का तरीका बताया गया है:
Node.js
यह कोड Node.js के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.
const {auth} = require('google-auth-library') const request = require('request'); // The service account client secret file downloaded from the Google Cloud Console const serviceAccountJson = require('./service-account.json') // order-update.json is a file that contains the payload const jsonBody = require('./order-update.json') /** * Get the authorization token using a service account. */ async function getAuthToken() { let client = auth.fromJSON(serviceAccountJson) client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'] const tokens = await client.authorize() return tokens.access_token; } /** * Send an order update request */ async function sendOrderUpdate() { const token = await getAuthToken() request.post({ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, url: 'https://actions.googleapis.com/v2/conversations:send', body: jsonBody, json: true }, (err, res, body) => { if (err) { return console.log(err); } console.log(`Response: ${JSON.stringify(res)}`) }) }
Python
यह कोड Python के लिए, Google पुष्टि लाइब्रेरी का इस्तेमाल करता है.
from google.oauth2 import service_account from google.auth.transport.requests import AuthorizedSession import json # service-account.json is the service account client secret file downloaded from the # Google Cloud Console credentials = service_account.Credentials.from_service_account_file( 'service-account.json') scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/actions.fulfillment.conversation']) authed_session = AuthorizedSession(scoped_credentials) # order-update.json is a file that contains the payload json_payload=json.load(open('order-update.json')) response = authed_session.post( 'https://actions.googleapis.com/v2/conversations:send', json=json_payload)
Java
यह कोड, Java के लिए Google की पुष्टि करने वाली लाइब्रेरी का इस्तेमाल करता है.
/** * Get the authorization token using a service account. */ private static String getAuthToken() { InputStream serviceAccountFile = Example.class.getClassLoader().getResourceAsStream("service-account.json"); ServiceAccountCredentials.Builder credentialsSimpleBuilder = ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder(); credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/actions.fulfillment.conversation")); AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken(); return accessToken.getTokenValue(); } /** * Send an order update request */ public void sendOrderUpdate() { String authToken = getAuthToken(); // Execute POST request executePostRequest("https://actions.googleapis.com/v2/conversations:send", authToken, "update_order_example.json",); }
ऑर्डर के अपडेट हो जाने के बाद, Google बिना किसी गड़बड़ी के एचटीटीपी 200 रिस्पॉन्स दिखाता है. अगर कोई गड़बड़ी होती है, जैसे कि अपडेट का फ़ॉर्मैट ठीक नहीं होता, तो Google गड़बड़ी दिखाता है.