जब कोई ग्राहक खाने का ऑर्डर सबमिट करता है, तो आपके पास इस ईमेल पते पर ऑर्डर अपडेट करने का मैसेज भेजने का विकल्प होता है हम ग्राहक को इस बदलाव के बारे में सूचना देंगे.
ऑर्डर के अपडेट भेजने की कुछ सामान्य वजहें यहां दी गई हैं:
- ऑर्डर पूरा होने का अनुमानित समय उपलब्ध हो जाता है या बदल जाता है.
- ऑर्डर का स्टेटस बदल जाता है.
- ऑर्डर अब पूरा नहीं किया जा सकता.
- ऑर्डर में शामिल मेन्यू आइटम की कीमत बदल गई है.
- ग्राहक के पास अपने ऑर्डर को मैनेज करने का एक नया तरीका है, जैसे कि ग्राहक सहायता या रेस्टोरेंट का फ़ोन नंबर बताओ.
- ऑर्डर की रसीद उपलब्ध हो जाएगी.
अगले सेक्शन में, इन अलग-अलग स्थितियों को ठीक करने के तरीके के बारे में बताया गया है ऑर्डर अपडेट का इस्तेमाल करके.
ऑर्डर की स्थितियों का ट्रांज़िशन करना
किसी ऑर्डर में छह संभावित स्थितियां होती हैं. ये स्थितियां और उनके संभावित ट्रांज़िशन यहां दिए गए डायग्राम में दिखाया जा सकता है:
जब कोई ग्राहक पहली बार ऑर्डर सबमिट करता है, तो ऑर्डर की शुरुआत
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
की स्थिति में होने पर ऑर्डर रद्द किया जा सकता है.
सीधे तौर पर ऑर्डर करने वाली सेवा को रिफ़ंड जारी करना चाहिए. यह रिफ़ंड इस बात पर निर्भर करता है कि आपका
रद्द करने की नीति और रद्द करते समय पेमेंट की स्थिति की जानकारी देता है.
सीधे खाना ऑर्डर करने की सुविधा, सभी उपलब्ध राज्यों में काम नहीं करती
और ट्रांज़िशन शामिल हैं. हालांकि, ऑर्डर की आखिरी स्थिति FULFILLED
होनी चाहिए,
REJECTED
या CANCELLED
.
ऑर्डर पूरा होने में लगने वाला अनुमानित समय देना
उपयोगकर्ताओं को यह अनुमानित समयसीमा दी जा सकती है कि उनका ऑर्डर कब तक डिलीवर होगा
पिकअप के लिए तैयार है या डिलीवर हो गया है. estimatedFulfillmentTimeIso8601
फ़ील्ड का इस्तेमाल करना
अनुमानित समय सीमा उपलब्ध कराने के लिए FoodOrderUpdateExtension
ग्राहक का ऑर्डर पिक अप के लिए तैयार हो जाएगा या डिलीवरी के लिए तैयार होगा.
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
की कार्रवाई
ग्राहक को आइटम भेजने वाले रेस्टोरेंट का फ़ोन नंबर.
ऑर्डर के अपडेट भेजे जा रहे हैं
ऑर्डर भेजने के लिए, AsyncOrderUpdateRequestMessage
तरह के मैसेज का इस्तेमाल किया जाता है
सीधे ऑर्डर करने की सुविधा पर अपडेट करें. जवाब देने के लिए, Google
AsyncOrderUpdateResponseMessage
. उदाहरण के लिए, अगर आपको
ग्राहक को यह बताना होगा कि उनका ऑर्डर मान्य और स्वीकार कर लिया गया है, तो आप
ऑर्डर की स्थिति को CONFIRMED
में बदलने के लिए AsyncOrderUpdateRequestMessage
Accepted by restaurant
लेबल के साथ.
ऑर्डर अपडेट करने के लिए मैसेज सेट करना
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" } } } ] } } }
IN_PREPARATION
इस उदाहरण में, ऑर्डर को अपडेट करने के अनुरोध का एक सैंपल दिखाया गया है. इससे लोगों को ऑर्डर के बारे में सूचना दी जाती है कि खाना अभी पक रहा है.
{ "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" } } } }
READY_FOR_PICKUP
इस उदाहरण में, ऑर्डर को अपडेट करने के अनुरोध का एक सैंपल दिखाया गया है. इससे लोगों को ऑर्डर के बारे में सूचना दी जाती है खाना ले जाने के लिए तैयार है.
{ "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" } } } }
IN_TRANSIT
इस उदाहरण में, ऑर्डर को अपडेट करने के अनुरोध का एक सैंपल दिखाया गया है. इससे लोगों को ऑर्डर के बारे में सूचना दी जाती है यह कि ऑर्डर डिलीवरी के अनुमानित समय के साथ ट्रांज़िट में है.
{ "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 प्राधिकरण लाइब्रेरी का उपयोग करें खाता फ़ाइल.
- नीचे दिए गए एपीआई के दायरे का इस्तेमाल करके, टोकन के लिए अनुरोध करें:
https://www.googleapis.com/auth/actions.fulfillment.conversation
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
- इस टोकन का इस्तेमाल करके
नीचे दिया गया एंडपॉइंट:
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 गड़बड़ी दिखाता है.