۱. مرور کلی
پلتفرم توسعهدهندگان دستیار گوگل (Google Assistant) به شما امکان میدهد نرمافزاری برای گسترش عملکرد دستیار گوگل، یک دستیار شخصی مجازی، در بیش از ۱ میلیارد دستگاه، از جمله بلندگوهای هوشمند، تلفنها، اتومبیلها، تلویزیونها، هدفونها و موارد دیگر ایجاد کنید. کاربران برای انجام کارهایی مانند خرید مواد غذایی یا رزرو تاکسی، با دستیار گوگل در مکالمه مشارکت میکنند. به عنوان یک توسعهدهنده، میتوانید از پلتفرم توسعهدهندگان دستیار گوگل برای ایجاد و مدیریت آسان تجربیات مکالمهای لذتبخش و مؤثر بین کاربران و سرویس تکمیل سفارش شخص ثالث خود استفاده کنید.
این آزمایشگاه کد، مفاهیم سطح متوسط برای توسعه با دستیار گوگل را پوشش میدهد و بر اساس اکشن ایجاد شده در آزمایشگاه کد « ساخت اکشنها برای دستیار گوگل با استفاده از اکشنها SDK (سطح ۱)» ساخته میشود. اکیداً توصیه میکنیم قبل از شروع این آزمایشگاه کد، سطح ۱ را تکمیل کنید.
اکشنی که در این آزمایشگاه کد میسازید، بر اساس کمکی که کاربران انتخاب میکنند، طالع آنها را برای ماموریتشان در سرزمین افسانهای گریفینبرگ پیشگویی میکند.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما یک کنش محاورهای پیچیده با عملکردهای زیر میسازید:
- دادهها را از کاربر جمعآوری میکند و بسته به مقدار، پیامهای مکالمه را تغییر میدهد.
- برای ادامه گفتگو، با سوالات تکمیلی پاسخ میدهد.
- یک حلقه بازی ایجاد میکند تا کاربر بتواند پس از دریافت ثروت، دوباره با اکشن تعامل داشته باشد.
قبل از شروع ساخت، میتوانید با گفتن «هی گوگل، با سرنوشت و ثروت صحبت کن» با اکشن زنده در دستگاه مجهز به دستیار گوگل خود تعامل داشته باشید. مسیر پیشفرض از طریق این اکشن برای یک کاربر در حال بازگشت، مانند تعامل زیر است:


آنچه یاد خواهید گرفت
- نحوه استفاده از اسلاتها برای جمعآوری دادهها از کاربر
- نحوه استفاده از شرطها برای افزودن منطق به صحنه
- نحوه اضافه کردن حلقه بازی
- نحوه اضافه کردن یک مسیر حمایتی
آنچه نیاز دارید
پیشنیازهای این codelab شامل موارد زیر است:
- یک IDE/ویرایشگر متن به دلخواه شما.
- یک ترمینال برای اجرای دستورات shell با NodeJS ، npm و git نصب شده.
- یک مرورگر وب، مانند گوگل کروم .
- یک پروژه اقدامات سطح ۱ تکمیلشده در آزمایشگاه کد .
آشنایی با جاوا اسکریپت (ES6) اکیداً توصیه میشود، هرچند الزامی نیست، اما برای درک کد تکمیل این آزمایشگاه کد لازم است.
اختیاری: دریافت کد نمونه
شما میتوانید به صورت اختیاری کد کامل پروژه سطح ۱ را از مخزن گیتهاب Actions Builder Codelab Level 1 دریافت کنید تا بتوانید این آزمایشگاه کد را دنبال کنید. همچنین میتوانید کد کامل پروژه سطح ۲ را در این مخزن گیتهاب مشاهده کنید.
۲. به ساخت رابط کاربری محاورهای ادامه دهید
در کدلاگ اول، شما یک اقدام مکالمهای ساده با یک صحنه به Start ایجاد کردید.
در این آزمایشگاه کد، شما مکالمهی اکشن خود را گسترش میدهید. در بخشهای بعدی، اکشن خود را برای انجام موارد زیر پیکربندی میکنید:
- انتقال به یک صحنه جدید
Fortuneوقتی کاربر میخواهد فال خود را بشنود - از کاربر بپرسید که کدام وسیله کمکی را برای سفر خود انتخاب میکند
- ارائه یک فال سفارشی بر اساس انتخاب کاربر
انتقال به صحنه Fortune و ایجاد آن
در این بخش، موارد زیر را انجام میدهید:
- حذف اعلان موجود از صحنه
Start، که به کاربر پاسخ میدهد و مکالمه را پایان میدهد - تعریف گذار از صحنه
Startبه صحنهFortune - صحنه
Fortuneرا ایجاد کنید
برای تغییر صحنه Start و افزودن یک گذار به صحنه Fortune ، این مراحل را دنبال کنید:
- پروژه Actions خود را از Codelab سطح ۱ در ویرایشگر متن خود باز کنید.
- فایل
custom/scenes/Start.yamlرا باز کنید. -
handlerمربوط به هدفyesرا بهروزرسانی کنید تا کد شما با قطعه کد زیر مطابقت داشته باشد:
شروع.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 ، این مراحل را دنبال کنید:
- در ترمینال به پروژه اقدامات سطح ۱ کدلب خود بروید.
- یک فایل جدید به نام
Fortune.yamlدر دایرکتوریscenesایجاد کنید:
touch custom/scenes/Fortune.yaml
این فایل را در بخش بعدی ویرایش خواهید کرد.
منطق مکالمه را برای صحنه Fortune تعریف کنید
در این آزمایشگاه کد، صحنهی Fortune خود را طوری پیکربندی میکنید که از کاربر بپرسد: « چه چیزی را برای کمک به خود در ماموریتتان انتخاب میکنید، اژدها، مترجم یا قطبنما؟» میتوانید از قابلیتی به نام پر کردن اسلات (slot filling) برای جمعآوری اطلاعات لازم از کاربر قبل از ادامهی کار استفاده کنید.
اکشن شما برای سه ابزار کمکی، شانس میآورد: اژدها، مترجم و قطبنما. برای پیکربندی اکشن خود برای شناسایی این سه گزینه در ورودی کاربر، باید یک نوع جدید ایجاد کنید.
شما میتوانید از انواع داده در مرحله پر کردن اسلات یک صحنه برای تعریف اطلاعاتی که از کاربر میخواهید استفاده کنید. وقتی موتور 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
- فایل را ذخیره کنید.
اکنون اکشن شما متوجه میشود که available_options ، dragon، translator و compass هستند و همچنین میتواند چند مترادف مربوطه را تشخیص دهد.
پیکربندی پر کردن اسلات
در مرحله بعد، باید پر کردن اسلات را در صحنه Fortune پیکربندی کنید. برای پیکربندی منطق پر کردن اسلات، این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yamlرا در ویرایشگر متن خود باز کنید. - دادههای
slotsزیر را به فایلFortune.yamlاضافه کنید:
فورچون.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 شما میگوید قبل از ادامه، چه اطلاعاتی را باید از کاربر (انتخاب کمک توسط او) جمعآوری کنید. همچنین یک اعلان (prompt) را در اسلات پیکربندی کردهاید که وقتی کاربر به مرحله پر شدن اسلات صحنه میرسد، به صف اعلان اضافه میشود.
وقتی نام اسلات را 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اضافه کنید:
فورچون.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 را انتخاب کردید» را دریافت کنید.
در بخش بعدی، شما میتوانید دستورالعملهای مربوط به هر کمکی که کاربر میتواند انتخاب کند را سفارشی کنید.
سفارشیسازی اعلانها با استفاده از شرطها
در این بخش، برای هر گزینهای که کاربر میتواند انتخاب کند، شرطهایی اضافه میکنید و برای هر شرط، یک اعلان سفارشی اضافه میکنید.
ثروت dragon را سفارشی کنید
برای بهروزرسانی شرط و سفارشیسازی اعلان برای زمانی که کاربر "اژدها" را انتخاب میکند، این مراحل را دنبال کنید:
-
custom/scenes/Fortune.yamlرا در ویرایشگر متن خود باز کنید. - دادههای
conditionalEventsرا با قطعه کد زیر در فایلFortune.yamlجایگزین کنید:
فورچون.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اضافه کنید:
فورچون.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 را بزنید. - در فیلد ورودی، بله را تایپ کنید و Enter را فشار دهید. همچنین، روی تراشه پیشنهاد بله کلیک کنید.
- کلیک کنید، تایپ کنید یا بگویید
Translator.

شما باید فال مناسب برای گزینه «مترجم» را دریافت کنید.
۳. اضافه کردن حلقه بازی
در این بخش، شما اکشن خود را طوری پیکربندی میکنید که کاربر بتواند گزینه دیگری را انتخاب کند و پس از انتخاب، فال متفاوتی بشنود. این تغییر مشابه پیام "آیا میخواهید دوباره بازی کنید؟" در پایان یک بازی است. برای ساخت این حلقه، میتوانید از 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اضافه کنید:
فورچون.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
در این بخش، شما اینتنتهای yes و no را به صحنه Again اضافه میکنید تا Action شما بفهمد که آیا کاربر میخواهد گزینه جدیدی را انتخاب کند یا خیر. همچنین انتقالهای مناسب را برای اینتنتهای yes و no اضافه میکنید. اینتنت yes به صحنه Fortune منتقل میشود، در حالی که اینتنت no به صحنه System End conversation منتقل میشود.
برای افزودن اهداف و انتقالها به صحنه 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
- فایل را ذخیره کنید.
اکشن خود را در شبیهساز آزمایش کنید
حالا اکشن شما باید تشخیص دهد که آیا کاربر میخواهد گزینه جدیدی را انتخاب کند یا مکالمه را پایان دهد.
برای آزمایش نیت 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 را دریافت کنید: «باعث خوشحالی من است که از انتخاب خود راضی هستید. برای شما در ماموریتتان آرزوی موفقیت دارم. خداحافظ.»
۴. یک مسیر حمایتی اضافه کنید
اکنون مسیر اصلی که اکثر کاربران در اقدام شما طی میکنند را ساختهاید. با این حال، کاربر میتواند به سوال صحنهی Fortune اقبال، « چه چیزی را برای کمک به خود در ماموریتتان انتخاب میکنید، اژدها، مترجم یا قطبنما؟»، با انتخابی که جزو گزینههای ارائه شده نیست، پاسخ دهد.
در این بخش، شما اکشن خود را طوری پیکربندی میکنید که وقتی کاربر میگوید "magic" ، "money" ، "horse" یا "phone" متوجه شود و وقتی کاربر یکی از این گزینهها را انتخاب میکند، دوباره از کاربر بخواهد که از بین سه گزینه اصلی یکی را انتخاب کند. برای پیکربندی این منطق، باید یک type جدید ایجاد کنید که شامل این گزینههای دیگر و یک intent جدید، other_option ، باشد که وقتی کاربر یکی از این گزینهها را میگوید، مطابقت دارد. همچنین باید عبارات آموزشی را در intent other_option حاشیهنویسی کنید تا پارامترهای intent شناسایی و استخراج شوند.
وقتی موتور پردازش زبان طبیعی دستیار، پارامتری منطبق با ورودی کاربر را تشخیص میدهد، مقدار را به عنوان یک پارامتر تایپ شده استخراج میکند تا بتوانید در یک صحنه با آن منطق انجام دهید. در این آزمایشگاه کد، شما اکشن خود را طوری پیکربندی میکنید که کمکی را که کاربر انتخاب میکند استخراج کند و در یک اعلان به آن انتخاب ارجاع دهد.
نوع unavailable_options ایجاد کنید
اکنون میتوانید یک نوع unavailable_options ایجاد کنید که شامل گزینههای مختلفی باشد تا اکشن شما بتواند آن دادهها را در ورودی کاربر شناسایی کند.
برای ایجاد نوع 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
در مرحله بعد، یک اینتنت به نام other_option ایجاد میکنید و عبارات آموزشی را که شامل گزینههای موجود در نوع unavailable_options هستند، اضافه میکنید. این اینتنت زمانی تطبیق داده میشود که کاربر گزینهای را که در نوع unavailable_options قرار دارد، انتخاب کند.
برای ایجاد و پیکربندی اینتنت 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 برای سفارشیسازی اعلان بر اساس ورودی کاربر استفاده میکنید.
برای افزودن اینتنت other_option به صحنه Fortune ، مراحل زیر را دنبال کنید:
-
custom/scenes/Fortune.yamlرا در ویرایشگر متن خود باز کنید. - دادههای
intentEventsزیر را بین دادههایconditionalEventsو دادههایslotsاضافه کنید:
فورچون.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 را انتخاب میکند و مشخص میکند که کاربر کدام کمک را انتخاب کرده است. اکشن شما سپس باید دوباره از کاربر بخواهد یکی از گزینههای اصلی (اژدها، مترجم یا قطبنما) را انتخاب کند.
برای آزمایش اکشن خود در شبیهساز، مراحل زیر را دنبال کنید:
- در ترمینال، دستور زیر را اجرا کنید:
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 را بزنید.

ممکن است متوجه شوید که وقتی کاربر «magic» را انتخاب میکند، به دلیل حرف تعریف «a» که قبل از آن قرار گرفته است، پیام درست به نظر نمیرسد. در بخشهای بعدی به این مشکل خواهید پرداخت.
اضافه کردن هندلر unavailable_options
برای قرار دادن مقاله "a" قبل از گزینههای مناسب از نوع unavailable_options ، میتوانید یک کنترلکننده رویداد را در منطق تکمیل خود پیکربندی کنید تا بررسی کند که آیا گزینهای که کاربر انتخاب میکند به "a" قبل از آن نیاز دارد یا خیر. ابتدا، باید Action خود را طوری پیکربندی کنید که کنترلکننده را از صحنه Fortune فراخوانی کند.
برای افزودن کنترلکننده unavailable_options به صحنه Fortune ، مراحل زیر را دنبال کنید:
-
custom/scenes/Fortune.yamlرا در ویرایشگر متن خود باز کنید. - فایل
Fortune.yamlرا با دادههایintentEventsزیر بهروزرسانی کنید:
فورچون.yaml
intentEvents:
- handler:
webhookHandler: unavailable_options
intent: other_option
- فایل را ذخیره کنید.
بهروزرسانی و استقرار تکمیل فرآیند
اکنون که Action خود را برای فراخوانی رویداد unavailable_options پیکربندی کردهاید، میتوانید این رویداد را در تکمیل خود بهروزرسانی کرده و آن را مستقر کنید.
برای بهروزرسانی رضایتنامهتان، مراحل زیر را دنبال کنید:
-
webhooks/ActionsOnGoogleFulfillment/index.jsرا در ویرایشگر متن خود باز کنید. - کد زیر را به
index.jsدر زیر مدیریت کنندهیgreetingاضافه کنید:
ایندکس.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});اضافه کنید:
ایندکس.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)اضافه میکند.
بهروزرسانی کنترلکنندهها
برای اینکه به اکشن اجازه دهید unavailable_options استفاده کند، هندلر unavailable_options به webhooks/ActionsOnGoogleFulfillment.yaml اضافه کنید.
- نام دستگیره
unavailable_optionsرا بهActionsOnGoogleFulfillment.yamlاضافه کنید:
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» را قبل از گزینه «horse» اضافه کند، در حالی که سوال را بدون حرف تعریف «a» برای گزینه «magic» بسازد.
۵. تجسم عمل در کنسول Actions
کیت توسعه نرمافزار اکشنها (Actions SDK) قابلیت همکاری با یک IDE مبتنی بر وب به نام Actions Builder را دارد که در کنسول اکشنها ادغام شده است. میتوانید با دستور gactions push سیستم فایل محلی خود را به پیشنویس اکشن خود در کنسول ارسال کنید. کنسول اکشنها نمایشی بصری از پیکربندی اکشن شما ارائه میدهد. مشاهده نقشهبرداری بصری اکشن شما میتواند در طول توسعه مفید باشد و بر نسخه اکشن شما که برای آزمایش ارائه میشود، تأثیری ندارد.
برای ارسال پروژه 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.
- آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
- در کنسول Actions ، روی Develop در نوار ناوبری بالا کلیک کنید.
- روی فلش کشویی کنار Scenes کلیک کنید و Start را بزنید. شما باید نمایش بصری از صحنه
Startاکشن خود را ببینید، همانطور که در تصویر زیر نشان داده شده است:

پروژه خود را پاکسازی کنید [توصیه میشود]
برای جلوگیری از متحمل شدن هزینههای احتمالی، توصیه میشود پروژههایی را که قصد استفاده از آنها را ندارید، حذف کنید. برای حذف پروژههایی که در این آزمایشگاه کد ایجاد کردهاید، این مراحل را دنبال کنید:
- برای حذف پروژه ابری و منابع آن، مراحل ذکر شده در بخش خاموش کردن (حذف) پروژهها را تکمیل کنید.
- اختیاری: برای حذف فوری پروژه خود از کنسول اقدامات، مراحل ذکر شده در بخش حذف یک پروژه را انجام دهید. اگر این مرحله را انجام ندهید، پروژه شما تقریباً پس از 30 روز به طور خودکار حذف خواهد شد.
۶. تبریک میگویم!
اکنون مهارتهای متوسط لازم برای ساخت اکشنها برای دستیار گوگل با استفاده از اکشنها SDK را میدانید.
آنچه را که پوشش دادید
- نحوه توسعه اقدامات محاورهای با استفاده از کتابخانه تکمیل سفارش Node.js
- نحوه استفاده از اسلاتها برای جمعآوری دادهها از کاربر
- نحوه استفاده از شرطها برای افزودن منطق به صحنه
- نحوه اضافه کردن حلقه بازی
- نحوه اضافه کردن یک مسیر حمایتی
بیشتر بدانید
برای یادگیری نحوه ساخت اکشنها برای دستیار گوگل میتوانید این منابع را بررسی کنید:
- مستندات مربوط به توسعهی اکشنها برای دستیار گوگل
- اقدامات در صفحه گوگل گیتهاب برای نمونه کد و کتابخانهها
- انجمن رسمی ردیت برای توسعهدهندگانی که با دستیار گوگل کار میکنند
- دستورالعملهای طراحی مکالمه برای بهترین شیوهها و دستورالعملهای مربوط به اقدامات مکالمهای
برای اطلاع از آخرین اطلاعیههای ما، ما را در توییتر با شناسه @ActionsOnGoogle دنبال کنید و برای به اشتراک گذاشتن ساختههایتان، به #AoGDevs توییت کنید!
نظرسنجی بازخورد
قبل از رفتن، لطفاً یک نظرسنجی کوتاه در مورد تجربه خود پر کنید.