1. खास जानकारी
Google Assistant डेवलपर प्लैटफ़ॉर्म की मदद से, ऐसा सॉफ़्टवेयर बनाया जा सकता है जिससे Google Assistant की सुविधाओं को बढ़ाया जा सके. Google Assistant एक वर्चुअल निजी असिस्टेंट है. इसकी सुविधा, स्मार्ट स्पीकर, फ़ोन, कार, टीवी, हेडफ़ोन वगैरह जैसे 100 करोड़ से ज़्यादा डिवाइसों पर उपलब्ध है. लोग, Assistant से बातचीत करके कई काम करते हैं. जैसे, किराने का सामान खरीदना या टैक्सी बुक करना. डेवलपर के तौर पर, Assistant डेवलपर प्लैटफ़ॉर्म का इस्तेमाल करके, उपयोगकर्ताओं और तीसरे पक्ष की फ़ुलफ़िलमेंट सेवा के बीच बातचीत को आसानी से बनाया और मैनेज किया जा सकता है. इससे उपयोगकर्ताओं को बेहतर और असरदार अनुभव मिलता है.
इस कोडलैब में, Google Assistant के साथ डेवलपमेंट करने के लिए इंटरमीडिएट लेवल के कॉन्सेप्ट शामिल हैं. यह Actions SDK का इस्तेमाल करके, Google Assistant के लिए कार्रवाइयां बनाना (लेवल 1) कोडलैब में बनाई गई कार्रवाई पर आधारित है. हमारा सुझाव है कि आप इस कोडलैब को शुरू करने से पहले, लेवल 1 का कोडलैब पूरा करें.
इस कोडलैब में बनाया गया ऐक्शन, उपयोगकर्ताओं को उनकी चुनी गई मदद के आधार पर, काल्पनिक जगह ग्रिफ़िनबर्ग में उनकी खोज के बारे में बताता है.
आपको क्या बनाना है
इस कोडलैब में, आपको बातचीत वाली एक बेहतर सुविधा बनाने का तरीका बताया गया है. इसमें ये फ़ंक्शन शामिल हैं:
- यह कुकी, उपयोगकर्ता से डेटा इकट्ठा करती है. साथ ही, वैल्यू के आधार पर बातचीत के प्रॉम्प्ट में बदलाव करती है.
- बातचीत को आगे बढ़ाने के लिए, फ़ॉलो-अप सवालों के जवाब देता है.
- यह कुकी, गेम लूप बनाती है, ताकि उपयोगकर्ता को जवाब मिलने के बाद, वह फिर से कार्रवाई के साथ इंटरैक्ट कर सके.
बनाना शुरू करने से पहले, Google Assistant की सुविधा वाले डिवाइस पर लाइव कार्रवाई के साथ इंटरैक्ट किया जा सकता है. इसके लिए, "Ok Google, फ़ेट ऐंड फ़ॉर्च्यून से बात करो" कहें. दोबारा आने वाले उपयोगकर्ता के लिए, इस कार्रवाई का डिफ़ॉल्ट पाथ इस तरह के इंटरैक्शन जैसा दिखता है:


आपको क्या सीखने को मिलेगा
- उपयोगकर्ता से डेटा इकट्ठा करने के लिए, स्लॉट का इस्तेमाल कैसे करें
- किसी सीन में लॉजिक जोड़ने के लिए, शर्तों का इस्तेमाल कैसे करें
- गेम लूप जोड़ने का तरीका
- सहायक पाथ जोड़ने का तरीका
आपको किन चीज़ों की ज़रूरत होगी
इस कोडलैब के लिए, ये ज़रूरी शर्तें पूरी करनी होंगी:
- अपनी पसंद का आईडीई/टेक्स्ट एडिटर.
- टर्मिनल पर NodeJS, npm, और git इंस्टॉल होना चाहिए, ताकि शेल कमांड चलाई जा सकें.
- कोई वेब ब्राउज़र, जैसे कि Google Chrome.
- लेवल 1 का कोडलैब पूरा किया गया हो.
इस कोडलैब के फ़ुलफ़िलमेंट कोड को समझने के लिए, JavaScript (ES6) के बारे में जानकारी होना ज़रूरी है. हालांकि, ऐसा न होने पर भी इस कोडलैब को पूरा किया जा सकता है.
ज़रूरी नहीं: सैंपल कोड पाना
अगर आपको लेवल 1 के प्रोजेक्ट का पूरा कोड चाहिए, तो Actions Builder Codelab Level 1 की GitHub रिपॉज़िटरी से इसे डाउनलोड किया जा सकता है. इससे आपको इस कोडलैब को समझने में आसानी होगी. इस GitHub रिपॉज़िटरी में, लेवल 2 के प्रोजेक्ट का पूरा कोड भी देखा जा सकता है.
2. बातचीत वाले इंटरफ़ेस को बनाना जारी रखें
पहले कोडलैब में, आपने एक सीन वाली सामान्य बातचीत वाली कार्रवाई बनाई थी, Start.
इस कोडलैब में, आपको अपने ऐक्शन की बातचीत को आगे बढ़ाने का तरीका बताया जाएगा. यहां दिए गए सेक्शन में, आपको अपने ऐक्शन को कॉन्फ़िगर करना होगा, ताकि वह ये काम कर सके:
- जब उपयोगकर्ता को अपनी किस्मत के बारे में जानना हो, तब नए
Fortuneसीन पर ट्रांज़िशन करना - उपयोगकर्ता से पूछें कि उसे अपनी यात्रा के लिए कौनसी सहायता चाहिए
- उपयोगकर्ता की पसंद के हिसाब से, उसे उसकी किस्मत के बारे में जानकारी देना
Fortune सीन पर ट्रांज़िशन करना और उसे बनाना
इस सेक्शन में, ये काम किए जाते हैं:
Startसीन से मौजूदा प्रॉम्प्ट को हटाना है. यह प्रॉम्प्ट, उपयोगकर्ता को जवाब देता है और बातचीत खत्म कर देता हैStartसीन सेFortuneसीन में ट्रांज़िशन तय करनाFortuneसीन बनाना
Start सीन में बदलाव करने और Fortune सीन में ट्रांज़िशन जोड़ने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में, लेवल 1 के कोडलैब से अपना Actions प्रोजेक्ट खोलें.
custom/scenes/Start.yamlफ़ाइल खोलें.yesइंटेंट के लिएhandlerको अपडेट करें, ताकि आपका कोड यहां दिए गए स्निपेट से मेल खाए:
Start.yaml
intentEvents:
- intent: "yes"
transitionToScene: Fortune
- handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: I understand, stranger. Best of luck on your quest! Farewell.
intent: "no"
transitionToScene: actions.scene.END_CONVERSATION
- फ़ाइल सेव करें.
Fortune नाम का नया सीन बनाने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, अपने कोडलैब के लेवल 1 के Actions प्रोजेक्ट पर जाएं.
scenesडायरेक्ट्री मेंFortune.yamlनाम की एक नई फ़ाइल बनाएं:
touch custom/scenes/Fortune.yaml
अगले सेक्शन में जाकर, इस फ़ाइल में बदलाव किया जा सकता है.
Fortune सीन के लिए बातचीत का लॉजिक तय करना
इस कोडलैब में, आपको Fortune सीन को कॉन्फ़िगर करना है, ताकि उपयोगकर्ता से यह सवाल पूछा जा सके, "आपको अपनी खोज में मदद करने के लिए, इनमें से क्या चाहिए: एक ड्रैगन, एक अनुवादक या एक कंपास?" स्लॉट भरने की सुविधा का इस्तेमाल करके, आगे बढ़ने से पहले उपयोगकर्ता से ज़रूरी जानकारी इकट्ठा की जा सकती है.
इस ऐक्शन में, तीन चीज़ों के बारे में बताया गया है: ड्रैगन, अनुवादक, और कंपास. उपयोगकर्ता के इनपुट में इन तीन विकल्पों की पहचान करने के लिए, आपको एक नया टाइप बनाना होगा.
किसी सीन के स्लॉट भरने के चरण में टाइप का इस्तेमाल करके, यह तय किया जा सकता है कि आपको उपयोगकर्ता से कौनसी जानकारी चाहिए. जब NLU इंजन को उपयोगकर्ता के इनपुट में कोई स्लॉट मैच मिलता है, तो वह स्लॉट को टाइप किए गए पैरामीटर के तौर पर निकालता है. इससे, सीन में लॉजिक को लागू किया जा सकता है.
available_options टाइप बनाएं
इस सेक्शन में, available_options नाम का एक नया टाइप बनाया जाता है. इसमें तीन विकल्प दिए जाते हैं. उपयोगकर्ता, प्रॉम्प्ट के जवाब में इनमें से कोई विकल्प चुन सकते हैं: ड्रैगन, ट्रांसलेटर, और कंपास. अगर कोई उपयोगकर्ता इन विकल्पों से मिलता-जुलता कुछ कहता है, तो उसके लिए कुछ समानार्थी शब्द भी तय किए जाते हैं. बाद के सेक्शन में, आपको किसी स्लॉट में available_options टाइप जोड़ना होगा. इससे यह पता चलेगा कि आपको उपयोगकर्ता की पसंद जाननी है.
available_options टाइप बनाने के लिए, यह तरीका अपनाएं:
typesनाम की नई डायरेक्ट्री बनाएं:
mkdir custom/types
typesडायरेक्ट्री मेंavailable_options.yamlनाम की एक नई फ़ाइल बनाएं:
touch custom/types/available_options.yaml
- अपने टेक्स्ट एडिटर में
custom/types/available_options.yamlखोलें.
टाइप को जानकारी के की-वैल्यू पेयर के तौर पर कॉन्फ़िगर किया जाता है. इसमें कुंजी, टाइप का नाम होती है और वैल्यू, उस कुंजी के लिए समानार्थी शब्द होते हैं. कुंजी तय करने पर, उसे वैल्यू के तौर पर अपने-आप जोड़ दिया जाता है. Actions SDK की मदद से, कुंजियों को entities और वैल्यू को synonyms के तौर पर दिखाया जाता है.
उपयोगकर्ता के लिए तीन विकल्प जोड़ने के लिए, यह तरीका अपनाएं:
available_options.yamlफ़ाइल में, यहां दिए गएentitiesऔरsynonymsजोड़ें:
available_options.yaml
synonym:
entities:
dragon:
synonyms:
- dragon
- hydra
- lizard
translator:
synonyms:
- translator
- communicator
- machine
- decoder
- translate
compass:
synonyms:
- compass
- direction
- guide
- navigator
matchType: EXACT_MATCH
- फ़ाइल सेव करें.
अब आपकी कार्रवाई समझ गई है कि available_options का मतलब ड्रैगन, अनुवादक, और कंपास है. साथ ही, वह इनसे मिलते-जुलते कुछ शब्दों को भी पहचान सकती है.
स्लॉट भरने की सुविधा कॉन्फ़िगर करना
इसके बाद, आपको Fortune सीन में स्लॉट भरने की सुविधा कॉन्फ़िगर करनी होगी. स्लॉट भरने का लॉजिक कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. Fortune.yamlफ़ाइल में यहslotsडेटा जोड़ें:
Fortune.yaml
slots:
- commitBehavior:
writeSessionParam: chosenOptions
name: chosenOptions
promptSettings:
initialPrompt:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
suggestions:
- title: Dragon
- title: Translator
- title: Compass
required: true
type:
name: available_options
- फ़ाइल सेव करें.
आपने अब स्लॉट में available_options टाइप जोड़ दिया है. इससे आपकी कार्रवाई को यह जानकारी मिलती है कि आगे बढ़ने से पहले, आपको उपयोगकर्ता से कौनसी जानकारी इकट्ठा करनी है (सहायता के लिए उनकी पसंद). आपने स्लॉट में एक प्रॉम्प्ट भी कॉन्फ़िगर किया है. जब उपयोगकर्ता सीन के स्लॉट भरने वाले चरण पर पहुंचता है, तब यह प्रॉम्प्ट, प्रॉम्प्ट की सूची में जुड़ जाता है.
स्लॉट का नाम chosenOptions रखने पर, chosenOptions फ़ील्ड को उसी नाम ($session.params.chosenOptions) से अपडेट किया जाता है. इस पैरामीटर को प्रॉम्प्ट में और क्लाइंट लाइब्रेरी के ज़रिए फ़ुलफ़िलमेंट में ऐक्सेस किया जा सकता है.writeSessionsParam
शर्त जोड़ें
आपने एक ऐसा स्लॉट जोड़ा है जिसमें उपयोगकर्ता को सहायता के लिए अपनी पसंद का विकल्प चुनना होगा. अब शर्त जोड़ी जा सकती है, ताकि यह पता चल सके कि उपयोगकर्ता के बातचीत जारी रखने से पहले, स्लॉट का डेटा मिल गया है.
इस सेक्शन में, scene.slots.status == "FINAL" शर्त जोड़ी जाती है. इससे यह पता चलता है कि स्लॉट में पूरी जानकारी भरी गई है या नहीं. सभी स्लॉट भरने के बाद, शर्त के तौर पर प्रॉम्प्ट को प्रॉम्प्ट क्यू में जोड़ दिया जाता है (You picked $session.params.chosenOptions.).
scene.slots.status == "FINAL" शर्त को कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. Fortune.yamlफ़ाइल में सबसे ऊपरconditionalEventsडेटा जोड़ें:
Fortune.yaml
conditionalEvents:
- condition: scene.slots.status == "FINAL"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: You picked $session.params.chosenOptions.
- फ़ाइल सेव करें.
सिम्युलेटर में अपने ऐक्शन की जांच करना
इस चरण में, आपने यह तय कर लिया है कि स्लॉट भरने के लिए उपयोगकर्ता को कौनसे विकल्प चुनने चाहिए. उपयोगकर्ता से यह जानकारी मिलने के बाद, आपके ऐक्शन को एक प्रॉम्प्ट दिखाना चाहिए. इसमें उस विकल्प का रेफ़रंस होना चाहिए जिसे उपयोगकर्ता ने चुना है.
अपने ऐक्शन को आज़माने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appपर क्लिक करें या टाइप करें. इसके बाद, Enter दबाएं. - इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करके भी ऐसा किया जा सकता है.

dragonपर क्लिक करें, टाइप करें या बोलें. आपको "आपने ड्रैगन चुना है." प्रॉम्प्ट मिलना चाहिए
अगले सेक्शन में, उपयोगकर्ता के लिए उपलब्ध हर सहायता के लिए प्रॉम्प्ट को पसंद के मुताबिक बनाया जाता है.
शर्तों का इस्तेमाल करके प्रॉम्प्ट को पसंद के मुताबिक बनाना
इस सेक्शन में, उपयोगकर्ता के लिए उपलब्ध हर विकल्प के लिए शर्तें जोड़ी जाती हैं. साथ ही, हर शर्त के लिए कस्टम प्रॉम्प्ट जोड़ा जाता है.
dragon की किस्मत को अपनी पसंद के मुताबिक बनाना
जब कोई उपयोगकर्ता "ड्रैगन" चुनता है, तब शर्त को अपडेट करने और प्रॉम्प्ट को पसंद के मुताबिक बनाने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. conditionalEventsफ़ाइल में,conditionalEventsके डेटा को इस स्निपेट से बदलें:Fortune.yaml
Fortune.yaml
conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: The people of Gryffinberg will be awestruck by the beauty and
power of the ancient dragon. Much to your dismay, the townspeople
fall into dispute over who will receive the honor of riding the dragon
first. You return home from your quest without everlasting glory or
a dragon.
- फ़ाइल सेव करें.
अब जब कोई उपयोगकर्ता "ड्रैगन" या इससे मिलता-जुलता कोई शब्द बोलता है, तो आपका ऐक्शन उस विकल्प के आधार पर फ़ॉर्च्यून कुकी की जानकारी देता है. इसके बाद, आपको बाकी दो विकल्प जोड़ने होंगे.
translator और compass के फ़ॉर्च्यून को पसंद के मुताबिक बनाना
जब कोई उपयोगकर्ता "अनुवादक" या "कंपास" कहता है, तब शर्तें जोड़ने और प्रॉम्प्ट को पसंद के मुताबिक बनाने के लिए, यह तरीका अपनाएं:
custom/scenes/Fortune.yamlफ़ाइल में,dragonशर्त के तहत अन्य दो शर्तें जोड़ें:
Fortune.yaml
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: With the help of the translator, the rival factions in Gryffinberg
are finally able to communicate with each other and resolve their
disputes. You will complete your quest to restore peace in the town.
The translator will be used on many other journeys across the
earth. After its work is done, it retires honorably to a premier location
in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: The compass will help you find the mystical and ancient Library
of Gryffinberg. Among its infinite stacks of dusty books, you find
one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
tome, the townspeople have forgotten their problems. You will write
a second edition of "Wisdom of the Ages", but have limited commercial
success.
- फ़ाइल सेव करें.
सिम्युलेटर में अपने ऐक्शन की जांच करना
इस चरण में, आपकी कार्रवाई को उपयोगकर्ता के लिए, उसकी पसंद के विकल्प के हिसाब से फ़ॉर्च्यून उपलब्ध कराना चाहिए.
अपने ऐक्शन को आज़माने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appलिखें और Enter दबाएं. - इनपुट फ़ील्ड में Yes लिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करें.
Translatorपर क्लिक करें, टाइप करें या बोलें.

आपको "अनुवादक" विकल्प के लिए सही जवाब मिलेगा.
3. गेम लूप जोड़ना
इस सेक्शन में, आपको अपनी कार्रवाई को कॉन्फ़िगर करना होगा, ताकि उपयोगकर्ता कोई दूसरा विकल्प चुन सके. साथ ही, विकल्प चुनने के बाद उसे अलग तरह की जानकारी मिल सके. यह बदलाव, गेम के आखिर में दिखने वाले "क्या आपको फिर से खेलना है?" मैसेज की तरह है. इस लूप को बनाने के लिए, पहले बनाए गए yes और no इंटेंट का फिर से इस्तेमाल किया जा सकता है. साथ ही, उन्हें Again नाम के नए सीन में जोड़ा जा सकता है.
Again सीन बनाना
इस सेक्शन में, आपको एक नया Again सीन बनाना होता है. साथ ही, एक ऐसा प्रॉम्प्ट जोड़ना होता है जिसमें उपयोगकर्ता से पूछा जाता है कि क्या उसे कोई दूसरा विकल्प चुनना है.
Again सीन बनाने और उसे कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:
scenesडायरेक्ट्री मेंAgain.yamlनाम की एक नई फ़ाइल बनाएं:
touch custom/scenes/Again.yaml
- अपने टेक्स्ट एडिटर में
custom/scenes/Again.yamlखोलें. Again.yamlमें यहonEnterडेटा जोड़ें:
Again.yaml
onEnter:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: That is what I see for you. Would you like to choose a different option and explore another future?
suggestions:
- title: "Yes"
- title: "No"
- फ़ाइल सेव करें.
Fortune से Again सीन में ट्रांज़िशन जोड़ें
उपयोगकर्ता को उसकी किस्मत के बारे में बताने के बाद, बातचीत को नए Again सीन पर ले जाना होगा.
Fortune सीन से Again सीन में ट्रांज़िशन जोड़ने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. - हर शर्त में
transitionToScene: Againजोड़ें. जैसा कि यहां दिए गए स्निपेट में दिखाया गया है:
Fortune.yaml
conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: The people of Gryffinberg will be awestruck by the beauty and
power of the ancient dragon. Much to your dismay, the townspeople
fall into dispute over who will receive the honor of riding the dragon
first. You return home from your quest without everlasting glory or
a dragon.
transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: With the help of the translator, the rival factions in Gryffinberg
are finally able to communicate with each other and resolve their
disputes. You will complete your quest to restore peace in the town.
The translator will be used on many other journeys across the
earth. After its work is done, it retires honorably to a premier location
in the Gryffinberg History Museum.
transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: The compass will help you find the mystical and ancient Library
of Gryffinberg. Among its infinite stacks of dusty books, you find
one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
tome, the townspeople have forgotten their problems. You will write
a second edition of "Wisdom of the Ages", but have limited commercial
success.
transitionToScene: Again
- फ़ाइल सेव करें.
सिम्युलेटर में अपने ऐक्शन की जांच करना
इस समय, आपके ऐक्शन को उपयोगकर्ता को यह प्रॉम्प्ट दिखाना चाहिए: "मुझे आपके लिए यही जानकारी मिली है. क्या आपको कोई दूसरा विकल्प चुनकर, किसी और भविष्य के बारे में जानना है?"
अपने ऐक्शन को आज़माने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appलिखें और Enter दबाएं. - इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करें. dragonपर क्लिक करें, टाइप करें या बोलें.

आपको ड्रैगन के विकल्प के लिए, Again प्रॉम्प्ट के साथ-साथ फ़ॉर्च्यून भी मिलेगा.
इंटेंट जोड़ना और Again सीन पर ट्रांज़िशन करना
इस सेक्शन में, Again सीन में yes और no इंटेंट जोड़े जाते हैं, ताकि आपकी कार्रवाई को यह पता चल सके कि उपयोगकर्ता को नया विकल्प चुनना है या नहीं. आपको yes और no इंटेंट के लिए सही ट्रांज़िशन भी जोड़ने होंगे. yes इंटेंट, Fortune सीन पर ट्रांज़िशन करता है. वहीं, no इंटेंट, सिस्टम सीन End conversation पर ट्रांज़िशन करता है.
Again सीन में इंटेंट और ट्रांज़िशन जोड़ने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Again.yamlखोलें. Again.yamlफ़ाइल में सबसे ऊपर,OnEnterके ऊपरintentEventsडेटा जोड़ें:
Again.yaml
intentEvents:
- intent: "yes"
transitionToScene: Fortune
- handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: It pleases me that you are satisfied with your choice. Best
of luck on your quest. Farewell.
intent: "no"
transitionToScene: actions.scene.END_CONVERSATION
- फ़ाइल सेव करें.
सिम्युलेटर में अपने ऐक्शन की जांच करना
आपके ऐक्शन को अब यह समझना चाहिए कि उपयोगकर्ता को कोई नया विकल्प चुनना है या बातचीत खत्म करनी है.
yes इंटेंट को टेस्ट करने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appलिखें और Enter दबाएं. - इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करें. - किसी एक विकल्प पर क्लिक करें, उसे टाइप करें या बोलें.
- इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं.

आपको यह प्रॉम्प्ट दिखेगा: "आपको अपने सफ़र में मदद करने के लिए, इनमें से क्या चुनना है: एक ड्रैगन, एक अनुवादक या एक कंपास?"
no इंटेंट को टेस्ट करने के लिए, यह तरीका अपनाएं:
- किसी एक विकल्प पर क्लिक करें, उसे टाइप करें या बोलें.
- इनपुट फ़ील्ड में
Noलिखें और Enter दबाएं.
आपको यह End conversation प्रॉम्प्ट मिलेगा: "हमें खुशी है कि आपको हमारा जवाब पसंद आया. शुभकामनाएँ. अलविदा."
4. सहायता करने वाला पाथ जोड़ना
आपने अब वह मुख्य पाथ बना लिया है जिसका इस्तेमाल ज़्यादातर लोग आपकी कार्रवाई में करते हैं. हालांकि, उपयोगकर्ता Fortune सीन में दिए गए प्रॉम्प्ट, "आपको अपनी खोज में मदद करने के लिए, इनमें से क्या चुनना है: एक ड्रैगन, एक अनुवादक या एक कंपास?" का जवाब, दिए गए विकल्पों में से किसी एक को चुनकर दे सकता है.
इस सेक्शन में, अपने ऐक्शन को कॉन्फ़िगर करें, ताकि वह यह समझ सके कि उपयोगकर्ता ने "मैजिक", "मनी", "हॉर्स" या "फ़ोन" कहा है. साथ ही, जब उपयोगकर्ता इनमें से कोई विकल्प चुनता है, तो उसे तीन ओरिजनल विकल्पों में से कोई एक चुनने के लिए फिर से प्रॉम्प्ट किया जा सके. इस लॉजिक को कॉन्फ़िगर करने के लिए, आपको एक नया type बनाना होगा. इसमें ये अन्य विकल्प और एक नया इंटेंट, other_option शामिल होगा. जब कोई उपयोगकर्ता इनमें से कोई विकल्प चुनता है, तब यह इंटेंट मैच होता है. आपको other_option इंटेंट में मौजूद ट्रेनिंग वाक्यांशों को एनोटेट भी करना होगा, ताकि इंटेंट पैरामीटर की पहचान की जा सके और उन्हें निकाला जा सके.
जब Assistant का नैचुरल लैंग्वेज प्रोसेसिंग इंजन, उपयोगकर्ता के इनपुट में किसी पैरामीटर से मेल खाने वाली वैल्यू का पता लगाता है, तो वह वैल्यू को टाइप किए गए पैरामीटर के तौर पर निकालता है. इससे आपको किसी सीन में उस वैल्यू का इस्तेमाल करने में मदद मिलती है. इस कोडलैब में, आपको उपयोगकर्ता की चुनी गई सहायता को निकालने के लिए, अपने ऐक्शन को कॉन्फ़िगर करना होगा. साथ ही, प्रॉम्प्ट में उस विकल्प का रेफ़रंस देना होगा.
unavailable_options टाइप बनाएं
अब unavailable_options टाइप बनाया जा सकता है. इसमें कई तरह के विकल्प शामिल होते हैं, ताकि आपकी कार्रवाई, उपयोगकर्ता के इनपुट में मौजूद डेटा की पहचान कर सके.
unavailable_options टाइप बनाने के लिए, यह तरीका अपनाएं:
typesडायरेक्ट्री मेंunavailable_options.yamlनाम की एक नई फ़ाइल बनाएं:
touch custom/types/unavailable_options.yaml
- अपने टेक्स्ट एडिटर में
custom/types/unavailable_options.yamlखोलें. unavailable_options.yamlफ़ाइल में यहsynonymsडेटा जोड़ें:
unavailable_options.yaml
synonym:
entities:
money:
synonyms:
- money
- cash
- gold
horse:
synonyms:
- horse
- stallion
- steed
magic:
synonyms:
- magic
- enchanted
- spells
phone:
synonyms:
- phone
- cell
- apps
matchType: EXACT_MATCH
- फ़ाइल सेव करें.
other_option इंटेंट बनाएं
इसके बाद, other_option नाम का एक इंटेंट बनाएं. साथ ही, ट्रेनिंग के ऐसे वाक्यांश जोड़ें जिनमें unavailable_options टाइप के विकल्प शामिल हों. इस इंटेंट का मिलान तब होता है, जब उपयोगकर्ता unavailable_options टाइप में मौजूद कोई विकल्प चुनता है.
other_option इंटेंट बनाने और उसे कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:
intentsडायरेक्ट्री मेंother_option.yamlनाम की एक नई फ़ाइल बनाएं:
touch custom/intents/other_option.yaml
- अपने टेक्स्ट एडिटर में
custom/intents/other_option.yamlखोलें. other_option.yamlफ़ाइल में, यहparametersडेटा औरtrainingPhrasesडेटा जोड़ें:
other_option.yaml
parameters:
- name: chosenUnavailableOption
type:
name: unavailable_options
trainingPhrases:
- I want to use ($chosenUnavailableOption 'spells' auto=true)
- I really really want to use a ($chosenUnavailableOption 'phone' auto=true)
- ($chosenUnavailableOption 'magic' auto=true)!
- ($chosenUnavailableOption 'cash' auto=true)
- I want to ride a ($chosenUnavailableOption 'horse' auto=true)
यहां, ट्रेनिंग के लिए इस्तेमाल होने वाले वाक्यांशों को मैन्युअल तरीके से एनोटेट किया जाता है. इसके लिए, पिछले सेक्शन में बताए गए उन विकल्पों का इस्तेमाल किया जाता है जो उपलब्ध नहीं हैं. इंटेंट पैरामीटर, chosenUnavailableOption की मदद से, विकल्प का नाम निकाला जा सकता है. साथ ही, उस विकल्प का इस्तेमाल प्रॉम्प्ट में किया जा सकता है. यह काम आपको अगले सेक्शन में करना होगा.
- फ़ाइल सेव करें.
Fortune सीन में other_option इंटेंट जोड़ें
अब आपके पास एक इंटेंट, other_option है. यह इंटेंट, उपयोगकर्ता के ऐसे विकल्प को हैंडल कर सकता है जो ओरिजनल विकल्पों में से एक नहीं है. इस सेक्शन में, Fortune सीन में other_option इंटेंट जोड़ा जाता है. उपयोगकर्ता के इनपुट के आधार पर प्रॉम्प्ट को पसंद के मुताबिक बनाने के लिए, इंटेंट पैरामीटर का इस्तेमाल किया जाता है.
Fortune सीन में other_option इंटेंट जोड़ने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. conditionalEventsडेटा औरslotsडेटा के बीच, यहintentEventsडेटा जोड़ें:
Fortune.yaml
intentEvents:
- handler:
staticPrompt:
candidates:
- promptResponse:
firstSimple:
variants:
- speech: I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
intent: other_option
- फ़ाइल सेव करें.
एक्सप्रेशन $intent.params.chosenUnavailableOption, इंटेंट पैरामीटर ऑब्जेक्ट को दिखाता है. वहीं, $intent.params.chosenUnavailableOption.original उस ऑब्जेक्ट की वैल्यू को दिखाता है. original प्रॉपर्टी, उपयोगकर्ता के दिए गए रॉ इनपुट को दिखाती है.
जब कोई उपयोगकर्ता Fortune सीन के दौरान unavailable_options टाइप में शामिल कोई विकल्प चुनता है, तो other_option इंटेंट मैच हो जाता है. साथ ही, प्रॉम्प्ट को प्रॉम्प्ट क्यू में जोड़ दिया जाता है. कोई ट्रांज़िशन तय न होने की वजह से, सीन को लागू करने वाला लूप, शर्तों की जांच करके जारी रहता है. इसके बाद, chosenOptions स्लॉट, प्रॉम्प्ट को प्रॉम्प्ट क्यू में जोड़ देता है. इसके बाद, प्रॉम्प्ट क्यू को उपयोगकर्ता को डिलीवर कर दिया जाता है.
सिम्युलेटर में अपने ऐक्शन की जांच करना
अब आपके ऐक्शन को, unavailable_options टाइप में दी गई सूची में से किसी विकल्प को चुनने पर, उपयोगकर्ता को सही जवाब देना चाहिए. साथ ही, यह भी बताना चाहिए कि उपयोगकर्ता ने कौनसी सहायता चुनी है. इसके बाद, आपकी कार्रवाई को उपयोगकर्ता से ओरिजनल विकल्पों (ड्रैगन, अनुवादक या कंपास) में से किसी एक को चुनने के लिए फिर से कहना चाहिए.
सिम्युलेटर में अपने ऐक्शन की जांच करने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appलिखें और Enter दबाएं. - इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करें. - इनपुट फ़ील्ड में
magicलिखें और Enter दबाएं.

उपयोगकर्ता के "मैजिक" चुनने पर, आपको लग सकता है कि प्रॉम्प्ट सही नहीं है. ऐसा इसलिए है, क्योंकि इसके पहले "a" आर्टिकल रखा गया है. इस समस्या को ठीक करने के लिए, यहां दिए गए सेक्शन देखें.
unavailable_options हैंडलर जोड़ें
unavailable_options टाइप के सही विकल्पों से पहले "a" आर्टिकल जोड़ने के लिए, ऑर्डर पूरा करने की प्रोसेस में इवेंट हैंडलर को कॉन्फ़िगर किया जा सकता है. इससे यह पता चलेगा कि उपयोगकर्ता ने जो विकल्प चुना है उसके आगे "a" जोड़ने की ज़रूरत है या नहीं. सबसे पहले, आपको अपने ऐक्शन को कॉन्फ़िगर करना होगा, ताकि वह Fortune सीन से हैंडलर को कॉल कर सके.
unavailable_options सीन में unavailable_options हैंडलर जोड़ने के लिए, यह तरीका अपनाएं:Fortune
- अपने टेक्स्ट एडिटर में
custom/scenes/Fortune.yamlखोलें. Fortune.yamlफ़ाइल में, यहां दिया गयाintentEventsडेटा अपडेट करें:
Fortune.yaml
intentEvents:
- handler:
webhookHandler: unavailable_options
intent: other_option
- फ़ाइल सेव करें.
फ़ुलफ़िलमेंट को अपडेट करना और डिप्लॉय करना
आपने unavailable_options इवेंट हैंडलर को कॉल करने के लिए, अपनी कार्रवाई को कॉन्फ़िगर कर लिया है. अब अपने फ़ुलफ़िलमेंट में हैंडलर को अपडेट किया जा सकता है और उसे डिप्लॉय किया जा सकता है.
फ़ुलफ़िलमेंट की जानकारी अपडेट करने के लिए, यह तरीका अपनाएं:
- अपने टेक्स्ट एडिटर में
webhooks/ActionsOnGoogleFulfillment/index.jsखोलें. greetingहैंडलर के तहत,index.jsमें यह कोड जोड़ें:
index.js
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
const app = conversation({debug:true});में यह कोड जोड़ें:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- फ़ाइल सेव करें.
कोड को समझना
unavailable_options हैंडलर ये काम करता है:
- यह
convऑब्जेक्ट सेoptionडेटा को ऐक्सेस करता है औरoptionकोoriginalप्रॉपर्टी असाइन करता है. यह उपयोगकर्ता से मिला रॉ इनपुट होता है resolvedप्रॉपर्टी कोoptionKeyअसाइन करता है. यहunavailable_optionsटाइप के लिए कुंजी है- यह जांच करता है कि क्या
optionKeyउन विकल्पों में से एक है जिनके लिए "a" की ज़रूरत होती है; अगर ऐसा है, तो "a" जोड़कर मैसेज बनाता है conv.add(message)के ज़रिए मैसेज जोड़ता है
हैंडलर अपडेट करना
कार्रवाई को unavailable_options का इस्तेमाल करने की अनुमति देने के लिए, webhooks/ActionsOnGoogleFulfillment.yaml में unavailable_options हैंडलर जोड़ें.
ActionsOnGoogleFulfillment.yamlमेंunavailable_optionsहैंडलर का नाम जोड़ें:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- फ़ाइल सेव करें.
सिम्युलेटर में अपने ऐक्शन की जांच करना
अब आपके ऐक्शन को प्रॉम्प्ट में बदलाव करना चाहिए. यह बदलाव इस आधार पर होना चाहिए कि unavailable_options टाइप के लिए उपयोगकर्ता के चुने गए विकल्प से पहले "a" आर्टिकल की ज़रूरत है या नहीं.
अपने ऐक्शन को आज़माने के लिए, यह तरीका अपनाएं:
- टर्मिनल में, यह कमांड चलाएं:
gactions deploy preview
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- इनपुट फ़ील्ड में
Talk to my test appपर क्लिक करें या टाइप करें. इसके बाद, Enter दबाएं. - इनपुट फ़ील्ड में
Yesलिखें और Enter दबाएं. इसके अलावा, हां सुझाव वाले चिप पर क्लिक करें. - इनपुट फ़ील्ड में
magicलिखें और Enter दबाएं. इसके बाद, इनपुट फ़ील्ड मेंhorseटाइप करें और Enter दबाएं.

आपके ऐक्शन को "घोड़ा" विकल्प से पहले "a" आर्टिकल जोड़ना चाहिए. साथ ही, "जादुई" विकल्प के लिए "a" आर्टिकल के बिना प्रॉम्प्ट बनाना चाहिए.
5. Actions Console में कार्रवाई को विज़ुअलाइज़ करना
Actions SDK टूल, वेब पर आधारित IDE के साथ काम करता है. इसे Actions Builder कहा जाता है. यह Actions console में इंटिग्रेट होता है. gactions push कमांड का इस्तेमाल करके, अपने लोकल फ़ाइल सिस्टम को कंसोल में मौजूद अपने ऐक्शन के ड्राफ़्ट में पुश किया जा सकता है. Actions console, आपके ऐक्शन के कॉन्फ़िगरेशन को विज़ुअल के तौर पर दिखाती है. डेवलपमेंट के दौरान, अपने ऐक्शन को विज़ुअलाइज़ करने से आपको मदद मिल सकती है. इससे आपके ऐक्शन के उस वर्शन पर कोई असर नहीं पड़ता जिसे टेस्टिंग के लिए उपलब्ध कराया जाता है.
अपने Actions प्रोजेक्ट को पुश करने और उसे Actions console में देखने के लिए, यह तरीका अपनाएं:
- अपने प्रोजेक्ट को Actions console में पुश करने के लिए, टर्मिनल में यह कमांड चलाएं:
gactions push
आपको इस तरह का आउटपुट मिलेगा:
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- दिए गए यूआरएल को कॉपी करें और उसे किसी ब्राउज़र में चिपकाएं.
- Actions console में, सबसे ऊपर मौजूद नेविगेशन बार में जाकर Develop पर क्लिक करें.
- सीन के बगल में मौजूद ड्रॉप-डाउन ऐरो पर क्लिक करें. इसके बाद, शुरू करें पर क्लिक करें. आपको अपने ऐक्शन के
Startसीन का विज़ुअल दिखेगा. यह विज़ुअल, इस स्क्रीनशॉट में दिखाए गए विज़ुअल की तरह होगा:

अपने प्रोजेक्ट को क्लीन अप करें [सुझाया गया]
संभावित शुल्क से बचने के लिए, हमारा सुझाव है कि आप उन प्रोजेक्ट को हटा दें जिनका आपको इस्तेमाल नहीं करना है. इस कोडलैब में बनाए गए प्रोजेक्ट मिटाने के लिए, यह तरीका अपनाएं:
- Cloud प्रोजेक्ट और संसाधनों को मिटाने के लिए, प्रोजेक्ट बंद करना (मिटाना) सेक्शन में दिया गया तरीका अपनाएं.
- ज़रूरी नहीं: अगर आपको अपने प्रोजेक्ट को Actions console से तुरंत हटाना है, तो प्रोजेक्ट मिटाना सेक्शन में दिए गए चरणों को पूरा करें. अगर आपने यह चरण पूरा नहीं किया, तो आपका प्रोजेक्ट करीब 30 दिनों के बाद अपने-आप हट जाएगा.
6. बधाई हो!
अब आपको Actions SDK की मदद से, Google Assistant के लिए ऐक्शन बनाने के लिए ज़रूरी इंटरमीडिएट लेवल की स्किल्स के बारे में पता चल गया है.
आपने क्या कवर किया
- Node.js फ़ुलफ़िलमेंट लाइब्रेरी का इस्तेमाल करके, बातचीत वाले ऐक्शन कैसे डेवलप करें
- उपयोगकर्ता से डेटा इकट्ठा करने के लिए, स्लॉट का इस्तेमाल कैसे करें
- सीन में लॉजिक जोड़ने के लिए शर्तों का इस्तेमाल कैसे करें
- गेम लूप जोड़ने का तरीका
- सहायक पाथ जोड़ने का तरीका
ज़्यादा जानें
Google Assistant के लिए ऐक्शन बनाने के बारे में जानने के लिए, इन संसाधनों को देखें:
- Google Assistant के लिए ऐक्शन डेवलप करने से जुड़ा दस्तावेज़
- सैंपल कोड और लाइब्रेरी के लिए, Actions on Google का GitHub पेज
- Google Assistant के साथ काम करने वाले डेवलपर के लिए, Reddit की आधिकारिक कम्यूनिटी
- बातचीत के डिज़ाइन से जुड़े दिशा-निर्देश, ताकि Conversational Actions से जुड़े सबसे सही तरीके और दिशा-निर्देशों के बारे में जाना जा सके
हमारे नए अपडेट पाने के लिए, हमें Twitter पर @ActionsOnGoogle पर फ़ॉलो करें. साथ ही, आपने जो भी बनाया है उसे शेयर करने के लिए, #AoGDevs पर ट्वीट करें!
राय जानने के लिए सर्वे
जाने से पहले, कृपया अपने अनुभव के बारे में यह छोटा सा सर्वे भरें.