Actions on Google Node.js क्लाइंट लाइब्रेरी (Dialogflow) की मदद से फ़ुलफ़िलमेंट बनाएं

अगर आपको JavaScript में फ़ुलफ़िलमेंट वेबहुक बनाना है, तो Actions on Google की Node.js क्लाइंट लाइब्रेरी का इस्तेमाल करके, Actions on Google प्लैटफ़ॉर्म को ऐक्सेस और उससे इंटरैक्ट करने का सुझाव दिया जाता है.

परिचय

Node.js क्लाइंट लाइब्रेरी Google पर की जाने वाली ऐसी कार्रवाइयां जिनमें ये सुविधाएं मिलती हैं:

  • Actions on Google की सभी सुविधाओं के साथ काम करती है. इनमें टेक्स्ट और रिच मल्टीमीडिया जवाब शामिल हैं. खाते में साइन-इन, डेटा स्टोरेज, लेन-देन वगैरह.
  • यह JavaScript में ऐब्स्ट्रैक्ट की एक मुहावरेदार लेयर देता है, जो बातचीत एचटीटीपी/JSON वेबहुक एपीआई.
  • ग्राहक को आइटम भेजने और उसे पूरा करने के बीच की कम-लेवल की जानकारी मैनेज की जा सकती है Actions on Google प्लैटफ़ॉर्म पर.
  • इसे जाने-पहचाने पैकेज मैनेजमेंट टूल का इस्तेमाल करके इंस्टॉल किया जा सकता है, जैसे कि npm या yarn.
  • इससे बिना सर्वर वाले कंप्यूटिंग प्लैटफ़ॉर्म पर, ग्राहक को आइटम भेजने के लिए वेबहुक को आसानी से डिप्लॉय किया जा सकता है जैसे कि Firebase के लिए Cloud Functions या AWS Lambda. ग्राहक को आइटम भेजने के लिए वेबहुक भी होस्ट किया जा सकता है क्लाउड सेवा देने वाली कंपनी पर या खुद होस्ट किए गए और खुद मैनेज किए जाने वाले प्लैटफ़ॉर्म पर उपलब्ध कराना हो.
  • Node.js के v6.0.0 और इसके बाद के वर्शन पर काम करता है.

क्लाइंट लाइब्रेरी का इस्तेमाल, Actions on Google के लिए Dialogflow इंटिग्रेशन या Actions SDK टूल के साथ किया जा सकता है.

क्लाइंट लाइब्रेरी का इस्तेमाल करने के लिए, कोड के पूरे सैंपल देखने के लिए, सैंपल पेज पर जाएं.

एपीआई का रेफ़रंस देखें

एपीआई का रेफ़रंस, कार्रवाइयां on Google Node.js क्लाइंट लाइब्रेरी पर होस्ट किया जाता है GitHub पेज.

यहां दिए गए निर्देशों का पालन करके, पहचान फ़ाइल की लोकल कॉपी भी जनरेट की जा सकती है उस डायरेक्ट्री से कमांड दें जहां आपने क्लाइंट लाइब्रेरी डाउनलोड की है कोड:

yarn docs

जनरेट किए गए दस्तावेज़, डायरेक्ट्री के docs फ़ोल्डर में उपलब्ध होंगे जहां आपने क्लाइंट लाइब्रेरी कोड डाउनलोड किया था.

जानें कि यह सुविधा कैसे काम करती है

क्लाइंट लाइब्रेरी का इस्तेमाल करने से पहले, यह जानना ज़रूरी है कि ग्राहक को आइटम भेजने के लिए वेबहुक, क्लाइंट लाइब्रेरी का इस्तेमाल करके ऐसे उपयोगकर्ता के अनुरोधों को प्रोसेस करता है जो Actions on Google आपके वाहन को पूरा करने वाले स्टोर को भेजता है.

JavaScript में फ़ुलफ़िलमेंट वेबहुक बनाने पर, अपने कोड को बिना सर्वर वाले कंप्यूटिंग एनवायरमेंट पर डिप्लॉय और होस्ट किया जा सकता है. जैसे, Google के Firebase के लिए Cloud Functions या AWS Lambda. Express वेब फ़्रेमवर्क का इस्तेमाल करके, कोड को खुद भी होस्ट किया जा सकता है. इसके लिए, आपको कुछ और करने की ज़रूरत नहीं है.

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

वे मुख्य काम जिन्हें आपका वेबहुक पूरा करने वाला वेबहुक, क्लाइंट लाइब्रेरी का सारांश नीचे दिया गया है:

पहली इमेज. Node.js क्लाइंट लाइब्रेरी का हाई-लेवल आर्किटेक्चर
  1. उपयोगकर्ता के अनुरोध पाना: जब कोई उपयोगकर्ता Google Assistant से कोई क्वेरी करता है, Actions on Google प्लैटफ़ॉर्म आपके ग्राहक को आइटम भेजने के वेबहुक पर एक एचटीटीपी अनुरोध भेजता है; अनुरोध इसमें JSON पेलोड शामिल होता है, जिसमें इंटेंट और अन्य डेटा होता है. जैसे, रॉ डेटा उपयोगकर्ता के इनपुट का टेक्स्ट और उपयोगकर्ता के डिवाइस की सतह की क्षमताएं. JSON पेलोड कॉन्टेंट के और उदाहरण देखने के लिए, यहां जाएं: Dialogflow वेबहुक फ़ॉर्मैट और बातचीत के लिए वेबहुक का फ़ॉर्मैट देखें.
  2. फ़्रेमवर्क कॉल फ़ॉर्मैट की पहचान: काम करने वाले फ़्रेमवर्क के लिए, क्लाइंट लाइब्रेरी, फ़्रेमवर्क के कॉल फ़ॉर्मैट का अपने-आप पता लगाती है (उदाहरण के लिए, अगर अनुरोध Express वेब फ़्रेमवर्क या AWS Lambda से आया है) और Actions on Google प्लैटफ़ॉर्म के साथ, आसानी से कम्यूनिकेशन करने का तरीका बताया गया है.
  3. सर्विस हैंडलर प्रोसेसिंग: क्लाइंट लाइब्रेरी Dialogflow और Actions SDK टूल के लिए, बातचीत का एचटीटीपी/JSON वेबहुक एपीआई का एक सेवा फ़ंक्शन के तौर पर इस्तेमाल किया जा सकता है. ग्राहक को आइटम भेजने के लिए वेबहुक, इन कामों के लिए सही सेवा का इस्तेमाल करता है ग्लोबल app इंस्टेंस बनाएं. app इंस्टेंस, एचटीटीपी के लिए हैंडलर के तौर पर काम करता है सेवा के खास प्रोटोकॉल का अनुरोध करता है और उसे समझता है.
  4. बातचीत की प्रोसेसिंग: क्लाइंट लाइब्रेरी हर बातचीत की जानकारी को Conversation ऑब्जेक्ट के तौर पर app इंस्टेंस. ग्राहक को आइटम भेजने के लिए वेबहुक, Conversation ऑब्जेक्ट का इस्तेमाल करके क्रॉस-बातचीत से सेव किया गया डेटा या स्थिति की जानकारी फिर से पाएं, जवाब भेजें या माइक बंद कर सकते हैं.
  5. मिडलवेयर प्रोसेसिंग: क्लाइंट लाइब्रेरी से, बातचीत की सेवाओं का मिडलवेयर. इसमें एक या उससे ज़्यादा फ़ंक्शन होते हैं आप तय करते हैं कि कॉल करने से पहले क्लाइंट लाइब्रेरी अपने-आप काम करती है इंटेंट हैंडलर. ग्राहक को आइटम भेजने के लिए वेबहुक, प्रॉपर्टी जोड़ने के लिए आपके मिडलवेयर का इस्तेमाल कर सकता है या हेल्पर क्लास को Conversation ऑब्जेक्ट पर ले जाते हैं.
  6. इंटेंट हैंडलर प्रोसेसिंग: क्लाइंट लाइब्रेरी की मदद से, ऐसे इंटेंट के लिए हैंडलर जिसे पूरा करने वाला वेबहुक आपके वेबहुक को समझता हो. Dialogflow के लिए, क्लाइंट लाइब्रेरी, अनुरोध को इसके ज़रिए सही इंटेंट हैंडलर पर रूट करती है इंटेंट के नाम की सटीक स्ट्रिंग से मैपिंग Dialogflow कंसोल. Actions SDK टूल के लिए, इसे भेजी गई intent प्रॉपर्टी के हिसाब से रूट किया जाता है Actions on Google से मिला है.
  7. उपयोगकर्ताओं को जवाब भेजना: जवाबों को बनाने के लिए, आपका वेबहुक पूरा करने के लिए Conversation#ask() फ़ंक्शन को कॉल करता है. ask() फ़ंक्शन ये हो सकता है: कई बार कॉल किया जाता है, ताकि जवाब को तेज़ी से बनाया जा सके. क्लाइंट लाइब्रेरी, रिस्पॉन्स को JSON पेलोड के साथ एचटीटीपी अनुरोध में बदल देती है और उसे Actions on Google को भेज देती है. close() फ़ंक्शन का काम ask() फ़ंक्शन की तरह ही होता है. हालांकि, यह बातचीत को बंद कर देता है.

अपना लोकल डेवलपमेंट एनवायरमेंट सेट अप करना

फ़ुलफ़िलमेंट वेबहुक लागू करने से पहले, पक्का करें कि आपने पहले क्लाइंट लाइब्रेरी इंस्टॉल कर ली हो.

क्लाइंट लाइब्रेरी इंस्टॉल करना

अपने लोकल डेवलपमेंट एनवायरमेंट में क्लाइंट लाइब्रेरी इंस्टॉल करने का सबसे आसान तरीका, npm या yarn जैसे पैकेज मैनेजर का इस्तेमाल करना है.

इंस्टॉल करने के लिए, टर्मिनल से इनमें से कोई एक कमांड चलाएं:

  • अगर एनपीएम का इस्तेमाल किया जा रहा है: npm install actions-on-google
  • अगर धागे का इस्तेमाल किया जा रहा है, तो: yarn add actions-on-google

प्रोजेक्ट फ़ोल्डर सेट अप करना

इस बात पर निर्भर करता है कि ग्राहक को आइटम भेजने के लिए वेबहुक को कहां डिप्लॉय करना है (Google के Cloud Functions Firebase, AWS Lambda या खुद होस्ट किए गए Express के लिए, आपको एक खास प्रोजेक्ट फ़ोल्डर का इस्तेमाल कर सकते हैं.

उदाहरण के लिए, अगर Firebase के लिए Cloud Functions का इस्तेमाल किया जा रहा है, तो में बताए गए चरणों को पूरा करके, ज़रूरी प्रोजेक्ट फ़ोल्डर Node.js और Firebase सीएलआई सेट अप करना और Cloud Functions के लिए Firebase शुरू करना. Firebase के लिए Cloud Functions में, आम तौर पर /functions/index.js फ़ाइल में फ़ुलफ़िलमेंट वेबहुक लिखा जाता है.

कोई ऐप्लिकेशन इंस्टेंस बनाएं

Actions on Google, अनुरोधों और जवाबों का लेन-देन करने के लिए खास मैसेज सेवा फ़ॉर्मैट का इस्तेमाल करता है वेबहुक के साथ काम करता है. यह वेबहुक पर निर्भर करता है कि Dialogflow या कार्रवाइयां SDK टूल का इस्तेमाल करने वाली कार्रवाई या कोई स्मार्ट होम ऐक्शन बनाया हो.

इन अलग-अलग अनुरोध और रिस्पॉन्स प्रोटोकॉल को दिखाने के लिए, क्लाइंट लाइब्रेरी में तीन सेवा फ़ंक्शन उपलब्ध हैं:

बातचीत के लिए वेबहुक प्रोटोकॉल इसका इस्तेमाल बातचीत वाली सेवाओं (Dialogflow और Actions SDK) दोनों में किया जाता है. हालांकि, इनमें से हर एक सेवा संदेशों को अलग तरीके से रैप करती है.

app इंस्टेंस बनाने के लिए, किसी सेवा का इस्तेमाल किया जाता है. app इंस्टेंस, आपके वेबहुक के लिए ग्लोबल स्टेटस और फ़ुलफ़िलमेंट लॉजिक को शामिल करता है. साथ ही, सेवा के हिसाब से प्रोटोकॉल का इस्तेमाल करके, Actions on Google और आपके फ़ुलफ़िलमेंट के बीच कम्यूनिकेशन को मैनेज करता है.

app इंस्टेंस की प्रॉपर्टी कॉन्फ़िगर की जा सकती हैं और इसके तरीकों को ग्राहक को आइटम भेजने के लिए वेबहुक का व्यवहार तय करें. app इंस्टेंस को आसानी से प्लग भी किया जा सकता है बिना सर्वर वाले कंप्यूटिंग एनवायरमेंट में, जैसे कि Firebase के लिए Cloud Functions, जो एचटीटीपी अनुरोधों के लिए हैंडलर के तौर पर JavaScript फ़ंक्शन को स्वीकार करता है.

अपने फ़ुलफ़िलमेंट वेबहुक में app इंस्टेंस बनाने के लिए, यह तरीका अपनाएं:

  1. 'action-on-google' इंपोर्ट करने के लिए require() फ़ंक्शन को कॉल करें मॉड्यूल और उस सेवा को लोड करें. उदाहरण के लिए, नीचे दिए गए स्निपेट से पता चलता है कि यह dialogflow सेवा और जवाब बनाने के लिए इस्तेमाल किए जाने वाले कुछ एलिमेंट लोड कर सकता है, और उसे dialogflow नाम वाले कॉन्स्टेंट को असाइन करें:

    // Import the service function and various response classes
    const {
      dialogflow,
      actionssdk,
      Image,
      Table,
      Carousel,
    } = require('actions-on-google');

    यहां actions-on-google एक ऐसी डिपेंडेंसी के बारे में बताता है जिसे आपकी इसमें package.json फ़ाइल प्रोजेक्ट फ़ोल्डर (इन्हें इस उदाहरण की package.json फ़ाइल उदाहरण के लिए).

    app इंस्टेंस पाते समय, आपके पास क्लास को तय करने का विकल्प होता है ज़्यादा बेहतर जवाब दिखाए जाते हैं, हेल्पर इंटेंट और Actions on Google के अन्य फ़ंक्शन, जिनका आप इस्तेमाल करना चाहते हैं. लोड की जा सकने वाली मान्य क्लास की पूरी सूची देखें. इसके लिए, रेफ़रंस दस्तावेज़ देखें बातचीत का जवाब और हेल्पर इंटेंट मॉड्यूल देखें.

  2. आपने जिस सेवा को लोड किया है उसे कॉल करके app इंस्टेंस बनाएं. जैसे:

    const app = dialogflow();

  3. शुरू करते समय, app इंस्टेंस को कॉन्फ़िगर करने के लिए, सेवा को कॉल करने पर, पहले आर्ग्युमेंट के तौर पर options ऑब्जेक्ट. (देखें ज़्यादा जानकारी के लिए, DialogflowOptions देखें.) उदाहरण के लिए, यहां दिए गए स्निपेट में, { debug: true } फ़्लैग सेट करके, उपयोगकर्ता के अनुरोध या रिस्पॉन्स से रॉ JSON पेलोड को लॉग करने का तरीका बताया गया है:

const app = dialogflow({
  debug: true
});

इवेंट के लिए हैंडलर सेट करना

क्लाइंट लाइब्रेरी के ज़रिए बनाए गए Actions on Google से जुड़े इवेंट प्रोसेस करने के लिए आपकी सेट की गई कार्रवाई के साथ उपयोगकर्ता इंटरैक्शन की लाइफ़साइकल के हिसाब से, आप क्लाइंट लाइब्रेरी के लिए हैंडलर बनाया जा सकता है, ताकि उपयोगकर्ता के अनुरोधों को प्रोसेस किया जा सके और उन्हें वापस भेजा जा सके जवाब.

आपके पास ऐसे फ़ंक्शन बनाने का विकल्प है जो इन मुख्य तरह के इवेंट के लिए हैंडलर के तौर पर काम करते हैं जिसे क्लाइंट लाइब्रेरी पहचानती है:

  • इंटेंट इवेंट: इंटेंट, ऐसे यूनीक आइडेंटिफ़ायर होते हैं जिन्हें Actions on Google भेजता है जब भी कोई उपयोगकर्ता किसी खास सुविधा का अनुरोध करता है, तो उसे ग्राहक को भेजा जाता है. अगर आपने आप Dialogflow का इस्तेमाल कर रहे हैं, तो यह किसी उपयोगकर्ता की क्वेरी से मेल खाने वाले Dialogflow से मेल खाता है इंटेंट पर जाएं.
  • गड़बड़ी वाले इवेंट: JavaScript या क्लाइंट लाइब्रेरी में गड़बड़ी होने पर, गड़बड़ी के अपवाद को सही तरीके से प्रोसेस करने के लिए, app इंस्टेंस के catch फ़ंक्शन का इस्तेमाल किया जा सकता है. सभी को मैनेज करने के लिए, आपको एक ही catch फ़ंक्शन लागू करना चाहिए ऐसी गड़बड़ियां हो सकती हैं जिनका ध्यान रखना ज़रूरी है.
  • फ़ॉलबैक इवेंट: फ़ॉलबैक इवेंट तब होता है, जब उपयोगकर्ता एक ऐसी क्वेरी भेजता है जिसे Actions on Google पहचान नहीं पाया. app का इस्तेमाल किया जा सकता है का fallback फ़ंक्शन है, जो सामान्य फ़ॉलबैक आने वाले अनुरोधों को पूरा करने के लिए किसी भी इंटेंट हैंडलर का मैच न होने पर ट्रिगर होगा अनुरोध. सभी को मैनेज करने के लिए, आपको एक ही fallback फ़ंक्शन लागू करना चाहिए फ़ॉलबैक इवेंट. अगर Dialogflow का इस्तेमाल किया जा रहा है, तो वह किसी खास प्रॉम्प्ट को ट्रिगर कर सकता है किसी दूसरे इंटेंट का मैच न होने पर फ़ॉलबैक इंटेंट. आपको एक उस फ़ॉलबैक इंटेंट के लिए संबंधित इंटेंट हैंडलर.

जब भी उपयोगकर्ता आपकी कार्रवाई के लिए अनुरोध भेजता है, तो app इंस्टेंस एक ऐसा Conversation ऑब्जेक्ट बनाता है जो उस बातचीत के सेशन को दिखाता है. इस ऑब्जेक्ट को, conv वैरिएबल के नाम से ऐक्सेस किया जाता है. यह नाम, इंटेंट हैंडलर फ़ंक्शन में पहले फ़ंक्शन आर्ग्युमेंट के तौर पर पास किया जाता है. आम तौर पर, कन्वर्ज़न ट्रैकिंग की मदद से conv ऑब्जेक्ट सबमिट करें, ताकि उपयोगकर्ता को जवाब भेजा जा सके.

उपयोगकर्ता क्वेरी में ऐसे पैरामीटर भी शामिल हो सकते हैं जिन्हें आपकी सेट की गई कार्रवाई, एक्सट्रैक्ट करके इस्तेमाल कर सकती है ताकि जवाबों को बेहतर बनाया जा सके.

  • अगर Actions SDK टूल का इस्तेमाल किया जा रहा है, तो ऐक्शन पैकेज में पैरामीटर तय किए जाते हैं. इंटेंट से पैरामीटर कैसे एक्सट्रैक्ट किए जा सकते हैं, इसका उदाहरण देखने के लिए, Eliza के कोड का सैंपल.
  • अगर आप Dialogflow का इस्तेमाल कर रहे हैं, तो आप params वैरिएबल. इंटेंट को हैंडल करने के उदाहरण देखने के लिए Dialogflow में पैरामीटर के लिए, ऐक्सेस पैरामीटर और कॉन्टेक्स्ट देखें.

इंटेंट के लिए हैंडलर सेट करना

किसी इंटेंट के लिए हैंडलर सेट करने के लिए, अपने app इंस्टेंस के intent() फ़ंक्शन को कॉल करें. उदाहरण के लिए, अगर Dialogflow का इस्तेमाल किया जा रहा है, तो यह DialogflowApp#intent() फ़ंक्शन का इस्तेमाल करना होगा. आर्ग्युमेंट में, इंटेंट का नाम बताएं और हैंडलर फ़ंक्शन दें.

अगर आप Dialogflow का इस्तेमाल कर रहे हैं, तो आपको इसमें हर इंटेंट के लिए हैंडलर सेट करने की ज़रूरत नहीं है आपका एजेंट. इसके बजाय, आप Dialogflow में पहले से मौजूद जवाब का फ़ायदा ले सकते हैं हैंडलर को लागू किए बिना इंटेंट को अपने-आप हैंडल करने के लिए फ़ंक्शन. उदाहरण के लिए, वेलकम करने के लिए डिफ़ॉल्ट इंटेंट को इस तरह Dialogflow को सौंपा जा सकता है.

इस उदाहरण में, 'ग्रीटिंग' मैसेज के लिए इंटेंट हैंडलर दिखाए गए हैं और 'अलविदा' इंटेंट. इनकी पहचान छिपाने वाला हैंडलर फ़ंक्शन conv आर्ग्युमेंट करता है और उसे वापस भेजता है conv.ask() फ़ंक्शन के ज़रिए उपयोगकर्ता को दिया गया आसान स्ट्रिंग रिस्पॉन्स:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('How are you?');
});

app.intent('bye', (conv) => {
  conv.close('See you later!');
});

ध्यान दें कि close() फ़ंक्शन, ask() फ़ंक्शन से मिलता-जुलता है. हालांकि, इस फ़ंक्शन से माइक बंद हो जाता है और बातचीत खत्म हो जाती है.

इंटेंट के लिए हैंडलर बनाने के तरीके के बारे में ज़्यादा जानने के लिए, यह देखें अपना इंटेंट हैंडलर बनाएं.

गड़बड़ी वाले इवेंट के लिए हैंडलर सेट करना

गड़बड़ियों के लिए हैंडलर सेट करने के लिए, अपने app के catch() फ़ंक्शन को कॉल करें इंस्टेंस. (उदाहरण के लिए, अगर Dialogflow का इस्तेमाल किया जा रहा है, तो यह DialogflowApp#catch() function.)

नीचे दिए गए उदाहरण में एक साधारण कैच एरर हैंडलर दिखाया गया है, जो कंसोल आउटपुट के ज़रिए, उपयोगकर्ता को निर्देश देने के लिए एक सामान्य स्ट्रिंग रिस्पॉन्स भेजता है conv.ask() फ़ंक्शन:

app.catch((conv, error) => {
  console.error(error);
  conv.ask('I encountered a glitch. Can you say that again?');
});

फ़ॉलबैक इवेंट के लिए हैंडलर सेट करें

जब किसी इंटेंट से, अनुरोध पूरा करने के लिए आने वाले अनुरोध का मिलान न हो, तो सामान्य फ़ॉलबैक हैंडलर सेट करने के लिए, अपने app इंस्टेंस के fallback() फ़ंक्शन को कॉल करें. (उदाहरण के लिए, अगर Dialogflow का इस्तेमाल किया जा रहा है, तो यह DialogflowApp#fallback() function.)

यहां दिए गए उदाहरण में एक आसान फ़ॉलबैक हैंडलर दिखाया गया है, जो conv.ask()फ़ंक्शन के ज़रिए उपयोगकर्ता को प्रॉम्प्ट करने के लिए, एक आसान स्ट्रिंग रिस्पॉन्स भेजता है:

app.fallback((conv) => {
  conv.ask(`I couldn't understand. Can you say that again?`);
});

अपना इंटेंट हैंडलर बनाएं

इस सेक्शन में, इंटेंट हैंडलर लागू करते समय इस्तेमाल के कुछ सामान्य उदाहरण शामिल किए गए हैं पर जाकर, संपर्क करने की सुविधा का इस्तेमाल करें. यह देखने के लिए कि क्लाइंट लाइब्रेरी कैसे मैच करती है इंटेंट, 'इंटेंट हैंडलर प्रोसेसिंग' देखें सेक्शन में जानें कि यह कैसे काम करता है.

पैरामीटर और कॉन्टेक्स्ट ऐक्सेस करना

अगर Dialogflow का इस्तेमाल किया जा रहा है, तो अपने Dialogflow एजेंट में पैरामीटर और कॉन्टेक्स्ट तय किए जा सकते हैं. इससे, स्थिति की जानकारी को बनाए रखने और बातचीत के फ़्लो को कंट्रोल करने में मदद मिलती है.

पैरामीटर का इस्तेमाल, उपयोगकर्ता में ज़रूरी शब्दों, वाक्यांशों या वैल्यू को कैप्चर करने में किया जाता है क्वेरी. Dialogflow, रनटाइम के दौरान उपयोगकर्ता की क्वेरी से मिलते-जुलते पैरामीटर निकालता है. साथ ही, उपयोगकर्ताओं को जवाब देने का तरीका तय करने के लिए, अपने फ़ुलफ़िलमेंट वेबहुक में इन पैरामीटर की वैल्यू को प्रोसेस किया जा सकता है.

जब भी उपयोगकर्ता आपकी कार्रवाई के लिए अनुरोध भेजता है, तो DialogflowApp इंस्टेंस parameters बनाता है ऑब्जेक्ट जो उस पैरामीटर वैल्यू को दिखाता है जिसे Dialogflow ने से निकाला है अनुरोध. इस ऑब्जेक्ट को params वैरिएबल नाम से ऐक्सेस किया जा सकता है.

नीचे दिए गए स्निपेट में बताया गया है किname जब उपयोगकर्ता कोई अनुरोध भेजता है, तो params ऑब्जेक्ट:

app.intent('Default Welcome Intent', (conv, params) => {
  conv.ask(`How are you, ${params.name}?`);
});

यहां एक वैकल्पिक स्निपेट दिया गया है, जो यही काम करता है. द कर्ली ब्रेसेस ({}) JavaScript डिस्ट्रक्चर करें parameters ऑब्जेक्ट से name प्रॉपर्टी लेकर उसे लोकल के तौर पर इस्तेमाल करने के लिए वैरिएबल:

app.intent('Default Welcome Intent', (conv, {name}) => {
  conv.ask(`How are you, ${name}?`);
});

नीचे दिए गए स्निपेट में, पैरामीटर का नाम full-name है, लेकिन अनलिंक करके, name नाम के एक लोकल वैरिएबल में असाइन किया गया:

app.intent('Default Welcome Intent', (conv, {'full-name': name}) => {
  conv.ask(`How are you, ${name}?`);
});

कॉन्टेक्स्ट, Dialogflow की एक बेहतर सुविधा है. कॉन्टेक्स्ट विंडो के हिसाब से, बातचीत की स्थिति, फ़्लो, और जवाब देना. क्लाइंट लाइब्रेरी, DialogflowConversation#contexts ऑब्जेक्ट है. नीचे दिए गए स्निपेट में बताया गया है कि प्रोग्राम के हिसाब से कॉन्टेक्स्ट कैसे सेट किया जा सकता है इन्हें पूरा करने के लिए वेबहुक में और संदर्भ ऑब्जेक्ट को वापस पाने का तरीका बताया गया है:

app.intent('intent1', (conv) => {
  const lifespan = 5;
  const contextParameters = {
    color: 'red',
  };
  conv.contexts.set('context1', lifespan, contextParameters);
  // ...
  conv.ask('...');
});

app.intent('intent2', (conv) => {
  const context1 = conv.contexts.get('context1');
  const contextParameters = context1.parameters;
  // ...
  conv.ask('...');
});

app.intent('intent3', (conv) => {
  conv.contexts.delete('context1');
  // ...
  conv.ask('...');
});

हेल्पर इंटेंट के नतीजे ऐक्सेस करें

सुविधा के लिए, क्लाइंट लाइब्रेरी हेल्पर इंटेंट क्लास इसमें उपयोगकर्ता का वह सामान्य डेटा शामिल होता है जिसका अक्सर अनुरोध किया जाता है. इनमें, Google पर की जाने वाली अलग-अलग कार्रवाइयों के लिए, हेल्पर इंटेंट के नतीजों को दिखाने वाली क्लास शामिल हैं. हेल्पर इंटेंट का इस्तेमाल तब किया जाता है, जब की बातचीत के वे हिस्से Google Assistant से मैनेज करने की अनुमति चाहिए जहाँ उपयोगकर्ता को बातचीत जारी रखने के लिए इनपुट दें.

उदाहरण: पुष्टि करने वाले हेल्पर नतीजे

पुष्टि करने वाले हेल्पर इंटेंट की मदद से तब आप उपयोगकर्ता से हां/नहीं में जवाब पाने के लिए कह सकते हैं. नीचे दिया गया स्निपेट दिखाता है कि वेबहुक किस तरह अपने वेबहुक को, पुष्टि करने वाले हेल्पर इंटेंट से मिलने वाले नतीजों के लिए. ज़्यादा बेहतर उदाहरण के लिए, Confirmation क्लास के रेफ़रंस दस्तावेज़ देखें.

// Create Dialogflow intent with `actions_intent_CONFIRMATION` event
app.intent('get_confirmation', (conv, input, confirmation) => {
  if (confirmation) {
    conv.close(`Great! I'm glad you want to do it!`);
  } else {
    conv.close(`That's okay. Let's not do it now.`);
  }
});

नीचे दिया गया स्निपेट दिखाता है कि ग्राहक को आइटम भेजने के लिए वेबहुक, अपने जवाब को पसंद के मुताबिक कैसे बना सकता है के लिए उपयोगकर्ता के इनपुट के आधार पर कैरोसेल है. कैरसेल कॉम्पोनेंट से आपकी सेट की गई कार्रवाई में उपयोगकर्ताओं को चुनने के लिए विकल्प दिए गए हैं. और ज़्यादा ज़्यादा जानकारी के लिए, Carousel देखें क्लास के रेफ़रंस के लिए दस्तावेज़.

app.intent('carousel', (conv) => {
  conv.ask('Which of these looks good?');
  conv.ask(new Carousel({
    items: {
      car: {
        title: 'Car',
        description: 'A four wheel vehicle',
        synonyms: ['automobile', 'vehicle'],
      },
      plane: {
        title: 'Plane',
        description: 'A flying machine',
        synonyms: ['aeroplane', 'jet'],
      }
    }
  }));
});

// Create Dialogflow intent with `actions_intent_OPTION` event
app.intent('get_carousel_option', (conv, input, option) => {
  if (option === 'one') {
    conv.close(`Number one is a great choice!`);
  } else {
    conv.close(`Number ${option} is a great choice!`);
  }
});

बातचीत के रिस्पॉन्स ऑब्जेक्ट कॉन्फ़िगर करें

क्लाइंट लाइब्रेरी बातचीत के जवाब की क्लास जो बेहतर जवाब या मल्टीमीडिया एलिमेंट दिखाती हैं, जिन्हें आपकी सेट की गई कार्रवाई भेज सकती है. आम तौर पर, ये जवाब या एलिमेंट तब भेजे जाते हैं, जब उपयोगकर्ताओं को देने की ज़रूरत न हो बातचीत जारी रखने के लिए, इनपुट दें.

उदाहरण: इमेज

नीचे दिया गया स्निपेट दिखाता है कि ग्राहक को आइटम भेजने के लिए, वेबहुक किस तरह Image इसका जवाब BasicCard के साथ अपने-आप अटैच कर दिया जाएगा लाइब्रेरी:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('Hi, how is it going?');
  conv.ask(`Here's a picture of a cat`);
  conv.ask(new Image({
    url: '/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
    alt: 'A cat',
  }));
});

एसिंक्रोनस फ़ंक्शन कॉल करें

Actions on Google की Node.js क्लाइंट लाइब्रेरी, असाइनोक्रोनस प्रोग्रामिंग के लिए डिज़ाइन की गई है. आपका इंटेंट हैंडलर, प्रॉमिस का इस्तेमाल करे, जिसका समाधान तब होता है, जब वेबहुक को पूरा करने के लिए, जवाब जनरेट हो गया है.

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

इस उदाहरण में, मौसम का डेटा पाने के लिए हम नकली एपीआई का इस्तेमाल कर रहे हैं.

/**
 * Make an external API call to get weather data.
 * @return {Promise<string>}
 */
const forecast = () => {
  // ...
};

app.intent('Default Welcome Intent', (conv) => {
  return forecast().then((weather) => {
    conv.ask('How are you?');
    conv.ask(`Today's weather is ${weather}.`);
  });
});

नीचे दिए गए व्यवस्थित कोड स्निपेट का भी यही प्रभाव है, लेकिन यह ECMA 2017 (Node.js के वर्शन 8) में async await की सुविधा शुरू की गई है. इस्तेमाल करने के लिए यह कोड Firebase के लिए Cloud Functions के साथ है, तो पक्का करें कि आप Firebase टूल का सही वर्शन और उनका कॉन्फ़िगरेशन सही हो.

app.intent('Default Welcome Intent', async (conv) => {
  const weather = await forecast();
  conv.ask('How are you?');
  conv.ask(`Today's weather is ${weather}.`);
});

बातचीत वाला डेटा सेव करना

क्लाइंट लाइब्रेरी की मदद से, ग्राहक को आइटम भेजने के लिए बनाया गया वेबहुक बातचीत में डेटा सेव करने के लिए इस्तेमाल नहीं किया जा सकेगा. डेटा स्टोरेज के लिए इस्तेमाल किए जा सकने वाले मुख्य ऑब्जेक्ट में ये शामिल हैं:

  • DialogflowConversation#data या ActionsSdkConversation#data: बातचीत के किसी एक सेशन की अवधि के लिए, डेटा को JSON फ़ॉर्मैट में सेव करता है उपयोगकर्ता और आपकी कार्रवाई के बीच.
  • Conversation#user.storage: कई बातचीत सेशन में, डेटा को JSON फ़ॉर्मैट में सेव करता है.

यहां दिए गए स्निपेट में बताया गया है कि आपका फ़ुलफ़िलमेंट वेबहुक, आपकी तय की गई किसी भी प्रॉपर्टी (someProperty) में डेटा को कैसे सेव कर सकता है और उसे Conversation#user.storage ऑब्जेक्ट से कैसे अटैच कर सकता है. बेहतर उदाहरण के लिए, देखें Conversation#user.storage क्लास के रेफ़रंस के लिए दस्तावेज़.

app.intent('Default Welcome Intent', (conv) => {
  conv.user.storage.someProperty = 'someValue';
  conv.ask('...');
});

आप Conversation#user का इस्तेमाल कर सकते हैं उपयोगकर्ता के बारे में जानकारी पाने के लिए आपत्ति जताई है. इसमें एक स्ट्रिंग आइडेंटिफ़ायर भी शामिल है और निजी जानकारी. कुछ फ़ील्ड, जैसे कि conv.user.name.display और conv.user.email के लिए, conv.ask(new Permission) का अनुरोध करना ज़रूरी है 'Google साइन इन' के लिए NAME और conv.ask(new SignIn).

const {Permission} = require('actions-on-google');
app.intent('Default Welcome Intent', (conv) => {
  if (conv.user.last.seen) {
    conv.ask('Welcome back! How are you?');
  } else {
    conv.ask('Nice to meet you! How are you doing?');
  }
});

app.intent('permission', (conv) => {
  conv.ask(new Permission({
    context: 'To greet you personally',
    permissions: 'NAME',
  }));
});

// Create Dialogflow intent with `actions_intent_PERMISSION` event
app.intent('get_permission', (conv, input, granted) => {
  if (granted) {
    conv.close(`Hi ${conv.user.name.display}!`);
  } else {
    // User did not grant permission
    conv.close(`Hello!`);
  }
});

मिडलवेयर की मदद से स्केलिंग करना

मिडलवेयर की मदद से, क्लाइंट लाइब्रेरी को बढ़ाया जा सकता है.

मिडलवेयर लेयर में आपके तय किए गए एक या उससे ज़्यादा फ़ंक्शन होते हैं, जिसे कॉल करने से पहले क्लाइंट लाइब्रेरी अपने-आप चलती है इंटेंट हैंडलर. मिडलवेयर लेयर का इस्तेमाल करके, Conversation इंस्टेंस में बदलाव किया जा सकता है और उसमें अन्य फ़ंक्शन जोड़े जा सकते हैं.

Dialogflow और Actions SDK टूल की सेवाओं से, app.middleware() फ़ंक्शन दिखता है जिसकी मदद से आप Conversation में प्रॉपर्टी या हेल्पर क्लास जोड़ सकते हैं इंस्टेंस.

यहां दिए गए स्निपेट में एक उदाहरण दिया गया है. इसमें बताया गया है कि मिडलवेयर को कैसे इस्तेमाल किया जा सकता है:

class Helper {
  constructor(conv) {
    this.conv = conv;
  }

  func1() {
    this.conv.ask(`What's up?`);
  }
}

app.middleware((conv) => {
  conv.helper = new Helper(conv);
});

app.intent('Default Welcome Intent', (conv) => {
  conv.helper.func1();
});

अपना ऐप्लिकेशन एक्सपोर्ट करें

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

यहां दिए गए स्निपेट में, app को अलग-अलग रनटाइम में एक्सपोर्ट करने का तरीका बताया गया है:

उदाहरण: Firebase के लिए Cloud Functions

const functions = require('firebase-functions');
// ... app code here
exports.fulfillment = functions.https.onRequest(app);

उदाहरण: Dialogflow इनलाइन एडिटर

const functions = require('firebase-functions');

// ... app code here

// Exported function name must be 'dialogflowFirebaseFulfillment'
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

उदाहरण: खुद होस्ट किया गया एक्सप्रेस सर्वर (आसान)

const express = require('express');
const bodyParser = require('body-parser');  

// ... app code here

express().use(bodyParser.json(), app).listen(3000);

उदाहरण: खुद होस्ट किया गया एक्सप्रेस सर्वर (एक से ज़्यादा रास्ते)

const express = require('express');
const bodyParser = require('body-parser');

// ... app code here

const expressApp = express().use(bodyParser.json());

expressApp.post('/fulfillment', app);

expressApp.listen(3000);

उदाहरण: AWS Lambda API गेटवे

// ... app code here

exports.fulfillment = app;