1. بررسی اجمالی
پلتفرم توسعهدهنده Google Assistant به شما امکان میدهد نرمافزاری ایجاد کنید تا عملکرد Google Assistant، یک دستیار شخصی مجازی، را در بیش از 1 میلیارد دستگاه، از جمله بلندگوهای هوشمند، تلفنها، خودروها، تلویزیونها، هدفونها و موارد دیگر گسترش دهید. کاربران برای انجام کارهایی مانند خرید مواد غذایی یا رزرو سواری، دستیار را در مکالمه قرار می دهند. بهعنوان یک توسعهدهنده، میتوانید از پلتفرم توسعهدهنده Assistant برای ایجاد و مدیریت تجربیات گفتگوی لذتبخش و مؤثر بین کاربران و سرویسهای شخص ثالث خود استفاده کنید.
این کد لبه مفاهیم سطح متوسط را برای توسعه با Google Assistant پوشش می دهد و از Action ایجاد شده در Build Actions برای Google Assistant با استفاده از Actions SDK (سطح 1) Codelab استفاده می کند. ما اکیداً توصیه میکنیم قبل از شروع این کد، آزمایشگاه سطح 1 را تکمیل کنید.
اکشنی که در این کد لبه میسازید، بر اساس کمکی که انتخاب میکنند، به کاربران میگوید که شانس آنها برای جستجویشان در سرزمین افسانهای، گریفینبرگ، چیست.
چیزی که خواهی ساخت
در این کد لبه، شما یک اکشن مکالمه پیچیده با توابع زیر می سازید:
- داده ها را از کاربر جمع آوری می کند و بسته به مقدار، درخواست های مکالمه را اصلاح می کند.
- برای ادامه گفتگو با سؤالات بعدی پاسخ می دهد.
- یک حلقه بازی ایجاد می کند تا کاربر بتواند پس از دریافت ثروت دوباره با Action تعامل داشته باشد.
قبل از شروع ساخت، میتوانید با گفتن «Hey Google, talk to Fate and Fortune» در دستگاه دارای Google Assistant خود با Live Action تعامل کنید. مسیر پیشفرض این Action برای یک کاربر بازگشتی شبیه تعامل زیر است:
چیزی که یاد خواهید گرفت
- نحوه استفاده از اسلات ها برای جمع آوری داده ها از کاربر
- نحوه استفاده از شرایط برای افزودن منطق به صحنه
- چگونه یک حلقه بازی اضافه کنیم
- نحوه اضافه کردن یک مسیر پشتیبانی
آنچه شما نیاز دارید
پیش نیازهای این کد لبه شامل موارد زیر است:
- یک ویرایشگر IDE/متن به انتخاب شما.
- ترمینالی برای اجرای دستورات پوسته با نصب NodeJS ، npm و git .
- یک مرورگر وب، مانند Google Chrome .
- یک پروژه اقدامات انجام شده در سطح 1 Codelab .
آشنایی با جاوا اسکریپت (ES6) اکیداً توصیه میشود، اگرچه لازم نیست، برای درک کد تکمیلی این کد لبه.
اختیاری: کد نمونه را دریافت کنید
شما می توانید به صورت اختیاری کد پروژه سطح 1 کامل را از مخزن Actions Builder Codelab Level 1 GitHub دریافت کنید تا بتوانید این کد لبه را دنبال کنید. همچنین می توانید کد پروژه سطح 2 را در این مخزن Github مشاهده کنید.
2. به ساخت رابط مکالمه ادامه دهید
در اولین کد لبه، شما یک اکشن مکالمه ساده با یک صحنه، Start
ایجاد کردید.
در این لبه کد، مکالمه Action خود را گسترش می دهید. در بخش های زیر، Action خود را برای انجام موارد زیر پیکربندی می کنید:
- زمانی که کاربر میخواهد بخت خود را بشنود، به صحنه جدید
Fortune
بروید - از کاربر بپرسید که کدام کمک را میخواهد برای سفر خود انتخاب کند
- یک ثروت سفارشی بر اساس انتخاب کاربر ارائه دهید
انتقال به صحنه Fortune
و ایجاد آن
در این بخش کارهای زیر را انجام می دهید:
- درخواست موجود را از صحنه
Start
که به کاربر پاسخ می دهد و مکالمه را پایان می دهد، حذف کنید - انتقال از صحنه
Start
به صحنهFortune
را تعریف کنید - صحنه
Fortune
ایجاد کنید
برای تغییر صحنه Start
و افزودن یک انتقال به صحنه Fortune
، مراحل زیر را دنبال کنید:
- پروژه Actions خود را از لاب کد سطح 1 در ویرایشگر متن خود باز کنید.
- فایل
custom/scenes/Start.yaml
را باز کنید. -
handler
را برای هدفyes
به روز کنید تا کد شما با قطعه زیر مطابقت داشته باشد:
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
مراحل زیر را دنبال کنید:
- به پروژه اقدامات Lab 1 خود در ترمینال بروید.
- یک فایل جدید به نام
Fortune.yaml
در دایرکتوریscenes
ایجاد کنید:
touch custom/scenes/Fortune.yaml
شما این فایل را در بخش بعدی ویرایش خواهید کرد.
منطق مکالمه را برای صحنه Fortune
تعریف کنید
در این کد لبه، شما صحنه Fortune
خود را طوری پیکربندی میکنید که از کاربر بپرسید: " چه چیزی را برای کمک به شما در تلاش خود انتخاب میکنید، یک اژدها، یک مترجم یا یک قطب نما؟" شما می توانید از قابلیتی به نام slot filling برای جمع آوری اطلاعات لازم از کاربر قبل از ادامه استفاده کنید.
اکشن شما ثروتی برای سه کمک فراهم می کند: اژدها، مترجم و قطب نما. برای پیکربندی Action خود برای شناسایی این سه گزینه در ورودی کاربر، باید یک نوع جدید ایجاد کنید.
میتوانید از انواع در مرحله پر کردن شکاف صحنه برای تعریف اطلاعاتی که از کاربر میخواهید استفاده کنید. هنگامی که موتور NLU تطابق اسلات را در ورودی کاربر تشخیص میدهد، شکاف را به عنوان یک پارامتر تایپ شده استخراج میکند، بنابراین میتوانید منطق را با آن در یک صحنه انجام دهید.
نوع available_options
ایجاد کنید
در این بخش، یک نوع جدید به نام available_options
ایجاد میکنید که سه گزینه را که کاربران میتوانند انتخاب کنند (اژدها، مترجم و قطبنما) را در پاسخ به درخواست مشخص میکند. شما همچنین چند مترادف برای این گزینه ها تعریف می کنید در صورتی که کاربر چیزی مشابه را بگوید. در بخش بعدی، نوع available_options
را به یک اسلات اضافه میکنید تا مشخص کنید که میخواهید انتخاب کاربر را به دست آورید.
برای ایجاد نوع available_options
، مراحل زیر را دنبال کنید:
- یک دایرکتوری جدید به نام
types
ایجاد کنید:
mkdir custom/types
- یک فایل جدید به نام
available_options.yaml
در فهرستtypes
ایجاد کنید:
touch custom/types/available_options.yaml
-
custom/types/available_options.yaml
را در ویرایشگر متن خود باز کنید.
نوع ها به صورت جفت اطلاعات کلید-مقدار پیکربندی می شوند، جایی که کلید نام نوع و مقادیر مترادف آن کلید هستند. وقتی کلید را تعریف می کنید، به طور خودکار به عنوان یک مقدار اضافه می شود. با Actions SDK، کلیدها را به عنوان entities
و مقادیر را به عنوان synonyms
نشان می دهید.
برای افزودن سه گزینه ای که کاربر می تواند انتخاب کند، این مراحل را دنبال کنید:
-
entities
وsynonyms
زیر را در فایلavailable_options.yaml
اضافه کنید:
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
- فایل را ذخیره کنید.
اکنون Action شما میداند که available_options
اژدها، مترجم و قطبنما هستند و میتوانند چند مترادف مربوطه را نیز تشخیص دهند.
پر کردن اسلات را پیکربندی کنید
در مرحله بعد، باید پر کردن اسلات را در صحنه Fortune
پیکربندی کنید. برای پیکربندی منطق پر کردن اسلات، مراحل زیر را دنبال کنید:
-
custom/scenes/Fortune.yaml
را در ویرایشگر متن خود باز کنید. - داده های
slots
زیر را به فایلFortune.yaml
اضافه کنید:
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
را به شکاف اضافه کردهاید، که اطلاعاتی را که باید قبل از ادامه از کاربر (انتخاب کمک او) جمعآوری کنید، به Action شما میگوید. شما همچنین یک اعلان را در اسلات پیکربندی کردهاید که وقتی کاربر به مرحله پر کردن اسلات صحنه میرسد، به صف اعلان اضافه میشود.
هنگامی که اسلات chosenOptions
عنوان گزینه نام گذاری می کنید، فیلد writeSessionsParam
با همان نام به روز می شود ( $session.params.chosenOptions
). شما می توانید با آن نام به این پارامتر در اعلان و در انجام خود از طریق کتابخانه مشتری دسترسی داشته باشید.
شرط اضافه کنید
اکنون که شکافی را اضافه کردهاید که به کمک کاربر نیاز دارد، میتوانید شرطی را اضافه کنید تا قبل از ادامه مکالمه، بررسی کنید که دادههای شکاف به دست آمده است.
در این بخش، شرط scene.slots.status == "FINAL"
را اضافه میکنید که تکمیل شدن شکاف را بررسی میکند. هنگامی که همه شکاف ها پر شدند، شرط یک اعلان ( You picked $session.params.chosenOptions.
) به صف درخواست اضافه می کند.
برای پیکربندی وضعیت scene.slots.status == "FINAL"
این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yaml
را در ویرایشگر متن خود باز کنید. - داده های
conditionalEvents
را به بالای فایلFortune.yaml
اضافه کنید:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- فایل را ذخیره کنید.
اکشن خود را در شبیه ساز تست کنید
در این مرحله، شما تعریف کرده اید که کاربر کدام گزینه را برای پر کردن شکاف انتخاب کند. پس از دریافت این اطلاعات از کاربر، Action شما باید به گزینه خاصی که انتخاب کرده است اشاره کند.
برای آزمایش Action خود، این مراحل را دنبال کنید:
- در ترمینال دستور زیر را اجرا کنید:
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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
در قسمت Input کلیک کنید یا تایپ کنید و Enter را فشار دهید. -
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید. همچنین، میتوانید روی تراشه پیشنهاد بله کلیک کنید.
- کلیک کنید، تایپ کنید، یا بگویید
dragon
. شما باید اعلان "شما اژدها را انتخاب کردید" دریافت کنید.
در بخش بعدی، درخواستها را برای هر کمکی که کاربر میتواند انتخاب کند، سفارشی میکنید.
درخواست ها را با استفاده از شرایط سفارشی کنید
در این بخش، شرایطی را برای هر گزینه ای که کاربر می تواند انتخاب کند، اضافه می کند و برای هر شرط یک درخواست سفارشی اضافه می کند.
ثروت dragon
را سفارشی کنید
برای بهروزرسانی شرایط و سفارشی کردن درخواست زمانی که کاربر «dragon» را انتخاب میکند، این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yaml
را در ویرایشگر متن خود باز کنید. - داده های
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.
- فایل را ذخیره کنید.
اکنون، وقتی کاربر میگوید «اژدها» یا چیزی که شبیه به آن به نظر میرسد، Action شما بر اساس آن انتخاب، ثروتی را فراهم میکند. در مرحله بعد، دو انتخاب باقی مانده را اضافه می کنید.
ثروت 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.
- فایل را ذخیره کنید.
اکشن خود را در شبیه ساز تست کنید
در این مرحله، Action شما باید بر اساس گزینه ای که کاربر انتخاب می کند، یک ثروت سفارشی برای کاربر فراهم کند.
برای آزمایش Action خود، این مراحل را دنبال کنید:
- در ترمینال دستور زیر را اجرا کنید:
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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
را در قسمت Input تایپ کنید و Enter را فشار دهید. - Yes را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید.
- کلیک کنید، تایپ کنید، یا بگویید
Translator
.
شما باید ثروت مناسب برای گزینه "مترجم" دریافت کنید.
3. حلقه بازی را اضافه کنید
در این بخش Action خود را به گونه ای پیکربندی می کنید که کاربر بتواند گزینه دیگری را انتخاب کند و پس از انتخاب، فال متفاوتی را بشنود. این تغییر شبیه به "آیا می خواهید دوباره بازی کنید؟" پیام در پایان بازی برای ساخت این حلقه، میتوانید از intentهای yes
و no
که قبلا ایجاد شدهاند، دوباره استفاده کنید و آنها را به صحنه جدیدی به نام Again
اضافه کنید.
ایجاد Again
صحنه
در این بخش، یک صحنه Again
جدید ایجاد میکنید و یک اعلان اضافه میکنید که از کاربر میپرسد آیا مایل است گزینه دیگری را انتخاب کند.
برای ایجاد و پیکربندی صحنه Again
، مراحل زیر را دنبال کنید:
- یک فایل جدید به نام
Again.yaml
در دایرکتوریscenes
ایجاد کنید:
touch custom/scenes/Again.yaml
-
custom/scenes/Again.yaml
را در ویرایشگر متن خود باز کنید. - دادههای
onEnter
زیر را بهAgain.yaml
اضافه کنید:
دوباره.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
- فایل را ذخیره کنید.
اکشن خود را در شبیه ساز تست کنید
در این مرحله، Action شما باید پس از دریافت ثروت کاربر، اعلان زیر را در اختیار کاربر قرار دهد: "این چیزی است که من برای شما می بینم. آیا می خواهید گزینه دیگری را انتخاب کنید و آینده دیگری را کشف کنید؟"
برای آزمایش Action خود، این مراحل را دنبال کنید:
- در ترمینال دستور زیر را اجرا کنید:
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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
را در قسمت Input تایپ کنید و Enter را فشار دهید. -
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید. - کلیک کنید، تایپ کنید، یا بگویید
dragon
.
شما باید شانس گزینه اژدها و اعلان Again
را دریافت کنید.
اضافه کردن مقاصد و انتقال به صحنه Again
در این بخش، قصدهای yes
و no
را به صحنه Again
اضافه می کنید تا Action شما متوجه شود که کاربر می خواهد گزینه جدیدی را انتخاب کند یا خیر. شما همچنین انتقال های مناسب را برای intent های yes
و no
اضافه می کنید. قصد yes
به صحنه Fortune
منتقل می شود، در حالی که قصد no
به صحنه سیستم انتقال می یابد End conversation
.
برای افزودن intent و انتقال به صحنه Again
، این مراحل را دنبال کنید:
-
custom/scenes/Again.yaml
را در ویرایشگر متن خود باز کنید. - دادههای
intentEvents
را در بالای فایلAgain.yaml
، بالایOnEnter
اضافه کنید:
دوباره.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
- فایل را ذخیره کنید.
اکشن خود را در شبیه ساز تست کنید
اکنون Action شما باید متوجه شود که آیا کاربر میخواهد گزینه جدیدی را انتخاب کند یا مکالمه را پایان دهد.
برای آزمایش قصد 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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
را در قسمت Input تایپ کنید و Enter را فشار دهید. -
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید. - یکی از گزینه ها را کلیک کنید، تایپ کنید یا بگویید.
-
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید.
شما باید این پیام را دریافت کنید، "چه چیزی را برای کمک به شما در تلاش خود انتخاب می کنید، یک اژدها، یک مترجم یا یک قطب نما؟"
برای تست no
intent مراحل زیر را دنبال کنید:
- یکی از گزینه ها را کلیک کنید، تایپ کنید یا بگویید.
-
No
را در قسمت ورودی تایپ کنید و Enter را فشار دهید.
شما باید اعلان End conversation
را دریافت کنید: "خوشحالم که از انتخاب خود راضی هستید. در تلاشتان موفق باشید. خداحافظ."
4. یک مسیر پشتیبانی اضافه کنید
شما اکنون مسیر اصلی را که اکثر کاربران در Action خود طی می کنند ساخته اید. با این حال، کاربر میتواند با انتخابی که یکی از گزینههای ارائه شده نیست، به درخواست از صحنه Fortune
، " چه چیزی را برای کمک به شما در تلاش خود انتخاب میکنید، یک اژدها، یک مترجم یا یک قطب نما؟" پاسخ دهد.
در این بخش، Action خود را به گونهای پیکربندی میکنید که بفهمد کاربر چه زمانی میگوید "جادو" ، "پول" ، "اسب" یا "تلفن" ، و از کاربر مجدداً درخواست کنید که یکی از سه گزینه اصلی را انتخاب کند. یکی از این گزینه ها برای پیکربندی این منطق، باید یک type
جدید ایجاد کنید که شامل این انتخابهای دیگر و یک intent جدید، other_option
، که وقتی کاربر یکی از این گزینهها را میگوید مطابقت دارد. همچنین باید عبارات آموزشی را در intent other_option
برای شناسایی و استخراج پارامترهای intent حاشیه نویسی کنید .
هنگامی که موتور پردازش زبان طبیعی دستیار یک تطابق پارامتر را در ورودی کاربر تشخیص می دهد، مقدار را به عنوان یک پارامتر تایپ شده استخراج می کند تا بتوانید منطق را با آن در یک صحنه انجام دهید. در این لبه کد، Action خود را برای استخراج کمکی که کاربر انتخاب می کند پیکربندی می کنید و در یک اعلان به آن انتخاب مراجعه می کنید.
نوع unavailable_options
را ایجاد کنید
اکنون میتوانید یک نوع unavailable_options
ایجاد کنید که حاوی گزینههای مختلف باشد تا Action شما بتواند آن دادهها را در ورودی کاربر شناسایی کند.
برای ایجاد نوع unavailable_options
، مراحل زیر را دنبال کنید:
- یک فایل جدید به نام
unavailable_options.yaml
در فهرستtypes
ایجاد کنید:
touch custom/types/unavailable_options.yaml
-
custom/types/unavailable_options.yaml
را در ویرایشگر متن خود باز کنید. - داده های
synonyms
زیر را به فایلunavailable_options.yaml
اضافه کنید:
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
را ایجاد کنید
بعد، یک intent به نام other_option
ایجاد میکنید و عبارات آموزشی را اضافه میکنید که شامل گزینههای نوع unavailable_options
میشود. این هدف زمانی مطابقت داده می شود که کاربر انتخابی را که در نوع unavailable_options
قرار دارد انتخاب کند.
برای ایجاد و پیکربندی intent other_option
، این مراحل را دنبال کنید:
- یک فایل جدید به نام
other_option.yaml
در دایرکتوریintents
ایجاد کنید:
touch custom/intents/other_option.yaml
-
custom/intents/other_option.yaml
را در ویرایشگر متن خود باز کنید. - داده های
parameters
زیر و داده هایtrainingPhrases
را به فایلother_option.yaml
اضافه کنید:
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)
در اینجا شما به صورت دستی عبارات آموزشی را با گزینه های غیرقابل دسترس که در قسمت قبل مشخص کرده اید حاشیه نویسی می کنید. پارامتر intent، chosenUnavailableOption
، به شما امکان می دهد نام گزینه را استخراج کنید و از آن گزینه در یک درخواست استفاده کنید، که در بخش زیر انجام خواهید داد.
- فایل را ذخیره کنید.
قصد other_option
را به صحنه Fortune
اضافه کنید
شما اکنون یک intent، other_option
دارید، که می تواند کاربر را انتخاب کند که یکی از گزینه های اصلی نیست. در این قسمت، intent other_option
را به صحنه Fortune
اضافه می کنید. شما از پارامتر intent برای سفارشی کردن اعلان بر اساس ورودی کاربر استفاده می کنید.
برای افزودن intent other_option
به صحنه Fortune
، این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yaml
را در ویرایشگر متن خود باز کنید. - دادههای
intentEvents
زیر را بین دادههایconditionalEvents
و دادههایslots
اضافه کنید:
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 و $intent.params.chosenUnavailableOption.original
به مقدار آن شی اشاره می کند. ویژگی original
به ورودی خامی که کاربر مشخص می کند اشاره دارد.
وقتی کاربر در صحنه Fortune
گزینهای را در نوع unavailable_options
میگوید، هدف other_option
مطابقت داده میشود و یک درخواست به صف درخواست اضافه میکند. از آنجایی که هیچ انتقالی مشخص نشده است، حلقه اجرای صحنه با ارزیابی مجدد مرحله شرایط ادامه می یابد. سپس شیار chosenOptions
دستور خود را به صف درخواست اضافه می کند و صف درخواست به کاربر تحویل داده می شود.
اکشن خود را در شبیه ساز تست کنید
اکنون زمانی که کاربر یکی از گزینه های فهرست شده در نوع unavailable_options
را انتخاب می کند و مشخص می کند که کاربر کدام کمک را انتخاب کرده است، Action شما باید پاسخ مناسبی بدهد. سپس Action شما باید مجدداً از کاربر بخواهد که یکی از گزینه های اصلی (اژدها، مترجم یا قطب نما) را انتخاب کند.
برای آزمایش Action خود در شبیه ساز، مراحل زیر را دنبال کنید:
- در ترمینال دستور زیر را اجرا کنید:
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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
را در قسمت Input تایپ کنید و Enter را فشار دهید. -
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید. -
magic
را در قسمت Input تایپ کنید و Enter را فشار دهید.
ممکن است متوجه شوید که وقتی کاربر "جادو" را انتخاب می کند، به دلیل مقاله "a" که قبل از آن قرار داده شده است، اعلان درست به نظر نمی رسد. شما در بخش های بعدی به این موضوع می پردازید.
کنترل کننده unavailable_options
را اضافه کنید
برای قرار دادن مقاله "a" قبل از انتخاب های مناسب از نوع unavailable_options
، می توانید یک کنترل کننده رویداد را در منطق تحقق خود پیکربندی کنید تا بررسی کنید آیا گزینه ای که کاربر انتخاب می کند به یک "a" قبل از آن نیاز دارد یا خیر. ابتدا باید اکشن خود را برای فراخوانی کنترل کننده از صحنه Fortune
پیکربندی کنید.
برای افزودن کنترل کننده unavailable_options
به صحنه Fortune
، این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yaml
را در ویرایشگر متن خود باز کنید. - فایل
Fortune.yaml
را با داده هایintentEvents
زیر به روز کنید:
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- فایل را ذخیره کنید.
به روز رسانی و استقرار تکمیل
اکنون که Action خود را برای فراخوانی رویداد unavailable_options
پیکربندی کردهاید، میتوانید کنترلکننده را در اجرای خود بهروزرسانی کرده و آن را اجرا کنید.
برای بهروزرسانی اجرای خود، این مراحل را دنبال کنید:
-
webhooks/ActionsOnGoogleFulfillment/index.js
را در ویرایشگر متن خود باز کنید. - کد زیر را به
index.js
در زیر کنترل کنندهgreeting
اضافه کنید:
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
کارهای زیر را انجام می دهد:
- داده های
option
از شیconv
دریافت می کند وoption
به ویژگیoriginal
، که ورودی خام کاربر است، اختصاص می دهد. -
optionKey
را به ویژگیresolved
اختصاص می دهد، که کلید نوعunavailable_options
است. - بررسی می کند که
optionKey
یکی از گزینه هایی است که به "a" نیاز دارد یا خیر. اگر باشد، پیام را با یک "a" اضافه می سازد. - پیام را از طریق
conv.add(message)
اضافه می کند
کنترل کننده های به روز رسانی
برای اجازه دادن به Action برای استفاده از unavailable_options
، کنترل کننده unavailable_options
را به webhooks/ActionsOnGoogleFulfillment.yaml
اضافه کنید.
- نام کنترل کننده
unavailable_options
را بهActionsOnGoogleFulfillment.yaml
اضافه کنید:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- فایل را ذخیره کنید.
اکشن خود را در شبیه ساز تست کنید
Action شما اکنون باید درخواست را بر اساس اینکه انتخاب کاربر از نوع unavailable_options
نیاز به یک مقاله "a" قبل از آن دارد تنظیم کند.
برای آزمایش Action خود، این مراحل را دنبال کنید:
- در ترمینال دستور زیر را اجرا کنید:
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
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
-
Talk to my test app
در قسمت Input کلیک کنید یا تایپ کنید و Enter را فشار دهید. -
Yes
را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید. -
magic
را در قسمت Input تایپ کنید و Enter را فشار دهید. سپس در قسمت Input عبارتhorse
را تایپ کرده و Enter را فشار دهید.
اکشن شما باید مقاله "a" را قبل از انتخاب "اسب" اضافه کند، در حالی که دستور را بدون مقاله "a" برای انتخاب "جادویی" می سازد.
5. Action را در کنسول Actions تجسم کنید
Action SDK دارای قابلیت همکاری با یک IDE مبتنی بر وب به نام Actions Builder است که در کنسول Actions ادغام شده است. شما می توانید سیستم فایل محلی خود را به پیش نویس Action خود در کنسول با دستور gactions push
دهید. کنسول Actions یک نمایش بصری از پیکربندی Action شما ارائه می دهد. دیدن Action شما که به صورت بصری ترسیم شده است می تواند در طول توسعه مفید باشد و بر نسخه ای از Action شما که برای آزمایش ارائه می شود تأثیر نمی گذارد.
برای انجام پروژه Actions خود و مشاهده آن در کنسول Actions، این مراحل را دنبال کنید:
- در ترمینال، دستور زیر را اجرا کنید تا پروژه خود را به کنسول Actions هدایت کنید:
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.
- URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
- در کنسول Actions ، روی Develop در نوار پیمایش بالا کلیک کنید.
- روی پیکان کشویی کنار صحنه ها کلیک کنید و روی Start کلیک کنید. همانطور که در تصویر زیر نشان داده شده است، باید یک نمایش بصری از صحنه
Start
Action خود را ببینید:
پروژه خود را تمیز کنید [توصیه می شود]
برای جلوگیری از تحمیل هزینه های احتمالی، توصیه می شود پروژه هایی را که قصد استفاده از آنها را ندارید حذف کنید. برای حذف پروژه هایی که در این کد لبه ایجاد کرده اید، مراحل زیر را دنبال کنید:
- برای حذف پروژه Cloud و منابع، مراحل ذکر شده در بخش Shutting down (حذف) پروژه ها را کامل کنید.
- اختیاری: برای حذف فوری پروژه از کنسول Actions، مراحل فهرست شده در بخش Delete a project را تکمیل کنید. اگر این مرحله را کامل نکنید، پروژه شما پس از تقریباً 30 روز به طور خودکار حذف خواهد شد.
6. تبریک می گویم!
اکنون مهارتهای متوسط لازم برای ایجاد Actions برای Google Assistant را با Actions SDK میدانید.
آنچه شما پوشش داده اید
- نحوه توسعه کنش های مکالمه با استفاده از کتابخانه تکمیل Node.js
- نحوه استفاده از اسلات ها برای جمع آوری داده ها از کاربر
- نحوه استفاده از شرایط برای افزودن منطق به صحنه
- چگونه یک حلقه بازی اضافه کنیم
- نحوه اضافه کردن یک مسیر پشتیبانی
بیشتر بدانید
میتوانید این منابع را برای یادگیری درباره ساخت Actions برای Google Assistant کاوش کنید:
- اسنادی برای توسعه Actions for Google Assistant
- اقدامات در صفحه Google GitHub برای کد نمونه و کتابخانه ها
- انجمن رسمی Reddit برای توسعه دهندگانی که با Google Assistant کار می کنند
- دستورالعملهای طراحی مکالمه برای بهترین شیوهها و دستورالعملهای مربوط به اقدامات مکالمه
ما را در توییتر @ActionsOnGoogle دنبال کنید تا با آخرین اطلاعیههای ما همراه باشید و برای #AoGDevs توییت کنید تا آنچه ساختهاید به اشتراک بگذارید!
نظرسنجی بازخورد
قبل از رفتن، لطفاً یک نظرسنجی مختصر در مورد تجربه خود پر کنید.