ऑर्डर की स्थिति अपडेट करने के लिए, एक साथ काम नहीं करने वाली प्रोसेस

जब कोई ग्राहक खाने का ऑर्डर सबमिट करता है, तो ऑर्डर में हुए बदलाव की सूचना देने के लिए, ऑर्डर करने की एंड-टू-एंड सेवा को ऑर्डर अपडेट करने का मैसेज भेजा जा सकता है.

ऑर्डर के अपडेट भेजने की कुछ आम वजहें यहां दी गई हैं:

  • ऑर्डर पूरा होने का अनुमानित समय उपलब्ध हो जाता है या उसमें बदलाव हो जाता है.
  • ऑर्डर की स्थिति बदल जाती है.
  • अब ऑर्डर पूरा नहीं किया जा सकता.
  • ऑर्डर में शामिल मेन्यू आइटम की कीमत बदल गई.
  • ग्राहक के पास अपने ऑर्डर को मैनेज करने का एक नया तरीका होता है. जैसे, ग्राहक सहायता केंद्र या रेस्टोरेंट का फ़ोन नंबर.
  • ऑर्डर की रसीद उपलब्ध हो जाती है.

अगले सेक्शन में, ऑर्डर अपडेट का इस्तेमाल करके इन अलग-अलग स्थितियों को हल करने का तरीका बताया गया है.

ऑर्डर की स्थिति में बदलाव

किसी ऑर्डर की छह संभावित स्थितियां होती हैं. इन स्थितियों और उनके संभावित ट्रांज़िशन के बारे में नीचे दिए गए डायग्राम में बताया गया है:

ऑर्डर की स्थिति में बदलाव

जब कोई खरीदार पहली बार ऑर्डर सबमिट करता है, तो ऑर्डर का स्टेटस 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 होनी चाहिए.

ऑर्डर पूरा होने का अनुमानित समय देना

उपयोगकर्ताओं को यह जानकारी दी जा सकती है कि उनका ऑर्डर कब तक पिकअप के लिए तैयार होगा (या डिलीवर हो जाएगा). FoodOrderUpdateExtension के estimatedFulfillmentTimeIso8601 फ़ील्ड का इस्तेमाल करके, ग्राहक के ऑर्डर के पिकअप या डिलीवरी के लिए तैयार होने का अनुमानित समय बताएं.

estimatedFulfillmentTimeIso8601 को इन समय पर भेजें:

  • जब अनुमानित समय उपलब्ध हो, तो ऑर्डर की स्थिति CREATED या CONFIRMED होनी चाहिए.
  • जब अनुमानित समय बदलता है, जैसे कि ऑर्डर IN_TRANSIT होने पर, अनुमानित समय को ज़्यादा सटीक बनाने के लिए अपडेट करना.

उपयोगकर्ताओं की उम्मीदों को बेहतर तरीके से मैनेज करने के लिए, अपने अनुमान को कम से कम रखें. साथ ही, तय तारीख और समय के बजाय, तारीख और समय की सीमा दें. जहां तक हो सके, आपको ट्रैफ़िक की स्थिति जैसे वैरिएशन को ध्यान में रखना चाहिए. उदाहरण के लिए, अगर डिलीवरी का अनुमानित समय दोपहर 1:00 बजे है, तो ऑर्डर के लिए दोपहर 12:45 बजे (कम से कम) से दोपहर 1:15 बजे (ज़्यादा से ज़्यादा) तक का अनुमान भेजा जा सकता है.

ऑर्डर मैनेजमेंट से जुड़ी कार्रवाइयां उपलब्ध कराना

ऑर्डर का अपडेट भेजते समय, ग्राहकों को 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"
            }
          }
        }
      ]
    }
  }
}
    

इस उदाहरण में, ऑर्डर अपडेट करने के अनुरोध का एक सैंपल दिखाया गया है. इससे उपयोगकर्ता को यह सूचना मिलती है कि फ़िलहाल, खाना तैयार किया जा रहा है.

{
  "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"
            }
          }
        }
      ]
    }
  }
}
    

अलग-अलग इस्तेमाल के उदाहरणों में, ऑर्डर अपडेट करने के अनुरोधों के ज़्यादा उदाहरणों के लिए, ऑर्डर अपडेट करने की बेहतर सुविधा लागू करना लेख पढ़ें.

अनुमति टोकन जनरेट करना और मैसेज भेजना

ऑर्डर से जुड़े अपडेट के लिए, अनुमति देने वाला टोकन ज़रूरी है. इससे, ऑर्डर करने की पूरी प्रोसेस को एंड-टू-एंड एन्क्रिप्ट (E2EE) करने वाली सेवा यह पुष्टि कर सकती है कि मैसेज, ऑर्डर करने की पूरी प्रोसेस को एंड-टू-एंड एन्क्रिप्ट (E2EE) करने वाली आपकी वेब सेवा से आया है.

अपने प्रोजेक्ट के लिए ऑर्डर से जुड़े अपडेट लागू करने के लिए, यह तरीका अपनाएं:

  1. अनुमति वाला टोकन जनरेट करने के लिए, यह तरीका अपनाएं:
    1. अपने सेवा खाते की फ़ाइल से क्रेडेंशियल पढ़ने के लिए, Google Auth लाइब्रेरी का इस्तेमाल करें.
    2. यहां दिए गए एपीआई स्कोप का इस्तेमाल करके, टोकन का अनुरोध करें: https://www.googleapis.com/auth/actions.fulfillment.conversation
  2. इस टोकन का इस्तेमाल करके, नीचे दिए गए एंडपॉइंट पर पुष्टि किया गया एचटीटीपी पोस्ट अनुरोध भेजें: https://actions.googleapis.com/v2/conversations:send
  3. अपने अनुरोध के हिस्से के तौर पर, Content-Type हेडर को application/json पर सेट करें.

ऑर्डर के अपडेट लागू करने का तरीका यहां दिए गए उदाहरणों में बताया गया है:

Node.jsPythonJava

यह कोड, 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 के लिए 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 के लिए 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 गड़बड़ी का मैसेज दिखाता है.