Build Actions برای Google Assistant با استفاده از Actions SDK (سطح 2)

۱. مرور کلی

پلتفرم توسعه‌دهندگان دستیار گوگل (Google Assistant) به شما امکان می‌دهد نرم‌افزاری برای گسترش عملکرد دستیار گوگل، یک دستیار شخصی مجازی، در بیش از ۱ میلیارد دستگاه، از جمله بلندگوهای هوشمند، تلفن‌ها، اتومبیل‌ها، تلویزیون‌ها، هدفون‌ها و موارد دیگر ایجاد کنید. کاربران برای انجام کارهایی مانند خرید مواد غذایی یا رزرو تاکسی، با دستیار گوگل در مکالمه مشارکت می‌کنند. به عنوان یک توسعه‌دهنده، می‌توانید از پلتفرم توسعه‌دهندگان دستیار گوگل برای ایجاد و مدیریت آسان تجربیات مکالمه‌ای لذت‌بخش و مؤثر بین کاربران و سرویس تکمیل سفارش شخص ثالث خود استفاده کنید.

این آزمایشگاه کد، مفاهیم سطح متوسط ​​برای توسعه با دستیار گوگل را پوشش می‌دهد و بر اساس اکشن ایجاد شده در آزمایشگاه کد « ساخت اکشن‌ها برای دستیار گوگل با استفاده از اکشن‌ها SDK (سطح ۱)» ساخته می‌شود. اکیداً توصیه می‌کنیم قبل از شروع این آزمایشگاه کد، سطح ۱ را تکمیل کنید.

اکشنی که در این آزمایشگاه کد می‌سازید، بر اساس کمکی که کاربران انتخاب می‌کنند، طالع آنها را برای ماموریتشان در سرزمین افسانه‌ای گریفینبرگ پیشگویی می‌کند.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک کنش محاوره‌ای پیچیده با عملکردهای زیر می‌سازید:

  • داده‌ها را از کاربر جمع‌آوری می‌کند و بسته به مقدار، پیام‌های مکالمه را تغییر می‌دهد.
  • برای ادامه گفتگو، با سوالات تکمیلی پاسخ می‌دهد.
  • یک حلقه بازی ایجاد می‌کند تا کاربر بتواند پس از دریافت ثروت، دوباره با اکشن تعامل داشته باشد.

قبل از شروع ساخت، می‌توانید با گفتن «هی گوگل، با سرنوشت و ثروت صحبت کن» با اکشن زنده در دستگاه مجهز به دستیار گوگل خود تعامل داشته باشید. مسیر پیش‌فرض از طریق این اکشن برای یک کاربر در حال بازگشت، مانند تعامل زیر است:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

آنچه یاد خواهید گرفت

  • نحوه استفاده از اسلات‌ها برای جمع‌آوری داده‌ها از کاربر
  • نحوه استفاده از شرط‌ها برای افزودن منطق به صحنه
  • نحوه اضافه کردن حلقه بازی
  • نحوه اضافه کردن یک مسیر حمایتی

آنچه نیاز دارید

پیش‌نیازهای این codelab شامل موارد زیر است:

آشنایی با جاوا اسکریپت (ES6) اکیداً توصیه می‌شود، هرچند الزامی نیست، اما برای درک کد تکمیل این آزمایشگاه کد لازم است.

اختیاری: دریافت کد نمونه

شما می‌توانید به صورت اختیاری کد کامل پروژه سطح ۱ را از مخزن گیت‌هاب Actions Builder Codelab Level 1 دریافت کنید تا بتوانید این آزمایشگاه کد را دنبال کنید. همچنین می‌توانید کد کامل پروژه سطح ۲ را در این مخزن گیت‌هاب مشاهده کنید.

۲. به ساخت رابط کاربری محاوره‌ای ادامه دهید

در کدلاگ اول، شما یک اقدام مکالمه‌ای ساده با یک صحنه به Start ایجاد کردید.

در این آزمایشگاه کد، شما مکالمه‌ی اکشن خود را گسترش می‌دهید. در بخش‌های بعدی، اکشن خود را برای انجام موارد زیر پیکربندی می‌کنید:

  • انتقال به یک صحنه جدید Fortune وقتی کاربر می‌خواهد فال خود را بشنود
  • از کاربر بپرسید که کدام وسیله کمکی را برای سفر خود انتخاب می‌کند
  • ارائه یک فال سفارشی بر اساس انتخاب کاربر

انتقال به صحنه Fortune و ایجاد آن

در این بخش، موارد زیر را انجام می‌دهید:

  • حذف اعلان موجود از صحنه Start ، که به کاربر پاسخ می‌دهد و مکالمه را پایان می‌دهد
  • تعریف گذار از صحنه Start به صحنه Fortune
  • صحنه Fortune را ایجاد کنید

برای تغییر صحنه Start و افزودن یک گذار به صحنه Fortune ، این مراحل را دنبال کنید:

  1. پروژه Actions خود را از Codelab سطح ۱ در ویرایشگر متن خود باز کنید.
  2. فایل custom/scenes/Start.yaml را باز کنید.
  3. 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
  1. فایل را ذخیره کنید.

برای ایجاد یک صحنه جدید به نام Fortune ، این مراحل را دنبال کنید:

  1. در ترمینال به پروژه اقدامات سطح ۱ کدلب خود بروید.
  2. یک فایل جدید به نام Fortune.yaml در دایرکتوری scenes ایجاد کنید:
touch custom/scenes/Fortune.yaml

این فایل را در بخش بعدی ویرایش خواهید کرد.

منطق مکالمه را برای صحنه Fortune تعریف کنید

در این آزمایشگاه کد، صحنه‌ی Fortune خود را طوری پیکربندی می‌کنید که از کاربر بپرسد: « چه چیزی را برای کمک به خود در ماموریتتان انتخاب می‌کنید، اژدها، مترجم یا قطب‌نما؟» می‌توانید از قابلیتی به نام پر کردن اسلات (slot filling) برای جمع‌آوری اطلاعات لازم از کاربر قبل از ادامه‌ی کار استفاده کنید.

اکشن شما برای سه ابزار کمکی، شانس می‌آورد: اژدها، مترجم و قطب‌نما. برای پیکربندی اکشن خود برای شناسایی این سه گزینه در ورودی کاربر، باید یک نوع جدید ایجاد کنید.

شما می‌توانید از انواع داده در مرحله پر کردن اسلات یک صحنه برای تعریف اطلاعاتی که از کاربر می‌خواهید استفاده کنید. وقتی موتور NLU یک اسلات منطبق را در ورودی کاربر تشخیص می‌دهد، اسلات را به عنوان یک پارامتر تایپ شده استخراج می‌کند، بنابراین می‌توانید منطق را با آن در یک صحنه انجام دهید.

نوع available_options را ایجاد کنید

در این بخش، یک نوع جدید به نام available_options ایجاد می‌کنید که سه گزینه‌ای را که کاربران می‌توانند در پاسخ به درخواست انتخاب کنند (اژدها، مترجم و قطب‌نما) مشخص می‌کند. همچنین چند مترادف برای این گزینه‌ها تعریف می‌کنید تا در صورتی که کاربر چیزی مشابه بگوید، بتوانید از آنها استفاده کنید. در بخش بعدی، نوع available_options را به یک اسلات اضافه خواهید کرد تا مشخص کنید که می‌خواهید انتخاب کاربر را به دست آورید.

برای ایجاد نوع available_options ، مراحل زیر را دنبال کنید:

  1. یک دایرکتوری جدید به نام types ایجاد کنید:
mkdir custom/types
  1. یک فایل جدید به نام available_options.yaml در دایرکتوری types ایجاد کنید:
touch custom/types/available_options.yaml
  1. custom/types/available_options.yaml را در ویرایشگر متن خود باز کنید.

نوع‌ها به صورت جفت‌های اطلاعاتی کلید-مقدار پیکربندی می‌شوند، که در آن کلید ، نام نوع و مقادیر ، مترادف‌های آن کلید هستند. وقتی کلید را تعریف می‌کنید، به طور خودکار به عنوان یک مقدار اضافه می‌شود. با Actions SDK، کلیدها را به عنوان entities و مقادیر را به عنوان synonyms نمایش می‌دهید.

برای افزودن سه گزینه‌ای که کاربر می‌تواند انتخاب کند، مراحل زیر را دنبال کنید:

  1. 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
  1. فایل را ذخیره کنید.

اکنون اکشن شما متوجه می‌شود که available_options ، dragon، translator و compass هستند و همچنین می‌تواند چند مترادف مربوطه را تشخیص دهد.

پیکربندی پر کردن اسلات

در مرحله بعد، باید پر کردن اسلات را در صحنه Fortune پیکربندی کنید. برای پیکربندی منطق پر کردن اسلات، این مراحل را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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
  1. فایل را ذخیره کنید.

اکنون نوع available_options را به اسلات اضافه کرده‌اید، که به Action شما می‌گوید قبل از ادامه، چه اطلاعاتی را باید از کاربر (انتخاب کمک توسط او) جمع‌آوری کنید. همچنین یک اعلان (prompt) را در اسلات پیکربندی کرده‌اید که وقتی کاربر به مرحله پر شدن اسلات صحنه می‌رسد، به صف اعلان اضافه می‌شود.

وقتی نام اسلات را chosenOptions می‌گذارید، فیلد writeSessionsParam با همان نام به‌روزرسانی می‌شود ( $session.params.chosenOptions ). می‌توانید با استفاده از آن نام در اعلان و در تکمیل درخواست خود از طریق کتابخانه کلاینت به این پارامتر دسترسی داشته باشید.

اضافه کردن شرط

حالا که یک اسلات اضافه کرده‌اید که نیاز به انتخاب کمک توسط کاربر دارد، می‌توانید شرطی اضافه کنید تا بررسی شود که آیا داده‌های اسلات قبل از اینکه کاربر بتواند مکالمه را ادامه دهد، دریافت شده‌اند یا خیر.

در این بخش، شرط scene.slots.status == "FINAL" را اضافه می‌کنید که بررسی می‌کند آیا پر شدن اسلات‌ها کامل شده است یا خیر. پس از پر شدن تمام اسلات‌ها، شرط یک اعلان ( You picked $session.params.chosenOptions. ) را به صف اعلان اضافه می‌کند.

برای پیکربندی شرط scene.slots.status == "FINAL" ، این مراحل را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های conditionalEvents را به بالای فایل Fortune.yaml اضافه کنید:

فورچون.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. فایل را ذخیره کنید.

اکشن خود را در شبیه‌ساز آزمایش کنید

در این مرحله، شما گزینه‌هایی را که کاربر باید برای پر کردن جای خالی انتخاب کند، تعریف کرده‌اید. پس از دریافت این اطلاعات از کاربر، اقدام شما باید یک اعلان ارائه دهد که به گزینه خاصی که انتخاب کرده است، اشاره کند.

برای آزمایش اکشن خود، مراحل زیر را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. روی Talk to my test app کلیک کنید یا در فیلد ورودی تایپ کنید و Enter را فشار دهید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. همچنین می‌توانید روی تراشه پیشنهاد بله کلیک کنید.

a899d45c542668f6.png

  1. کلیک کنید، تایپ کنید یا بگویید dragon . باید پیام «شما dragon را انتخاب کردید» را دریافت کنید.

در بخش بعدی، شما می‌توانید دستورالعمل‌های مربوط به هر کمکی که کاربر می‌تواند انتخاب کند را سفارشی کنید.

سفارشی‌سازی اعلان‌ها با استفاده از شرط‌ها

در این بخش، برای هر گزینه‌ای که کاربر می‌تواند انتخاب کند، شرط‌هایی اضافه می‌کنید و برای هر شرط، یک اعلان سفارشی اضافه می‌کنید.

ثروت dragon را سفارشی کنید

برای به‌روزرسانی شرط و سفارشی‌سازی اعلان برای زمانی که کاربر "اژدها" را انتخاب می‌کند، این مراحل را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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.
  1. فایل را ذخیره کنید.

حالا، وقتی کاربری می‌گوید «اژدها» یا چیزی شبیه به آن، اکشن شما بر اساس آن انتخاب، ثروتی را ارائه می‌دهد. در مرحله بعد، دو انتخاب باقی‌مانده را اضافه خواهید کرد.

translator و compass بخت و اقبال را سفارشی کنید

برای افزودن شرایط و سفارشی‌سازی پیام‌های مربوط به زمانی که کاربر می‌گوید «مترجم» یا «قطب‌نما» ، این مراحل را دنبال کنید:

  1. در فایل 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.
  1. فایل را ذخیره کنید.

اکشن خود را در شبیه‌ساز آزمایش کنید

در این مرحله، اکشن شما باید بر اساس گزینه‌ای که کاربر انتخاب می‌کند، یک بخت‌آزمایی سفارشی برای او فراهم کند.

برای آزمایش اکشن خود، مراحل زیر را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. در فیلد ورودی Talk to my test app تایپ کرده و Enter را بزنید.
  3. در فیلد ورودی، بله را تایپ کنید و Enter را فشار دهید. همچنین، روی تراشه پیشنهاد بله کلیک کنید.
  4. کلیک کنید، تایپ کنید یا بگویید Translator .

29e17f950bd0dd71.png

شما باید فال مناسب برای گزینه «مترجم» را دریافت کنید.

۳. اضافه کردن حلقه بازی

در این بخش، شما اکشن خود را طوری پیکربندی می‌کنید که کاربر بتواند گزینه دیگری را انتخاب کند و پس از انتخاب، فال متفاوتی بشنود. این تغییر مشابه پیام "آیا می‌خواهید دوباره بازی کنید؟" در پایان یک بازی است. برای ساخت این حلقه، می‌توانید از intent های yes و no که قبلاً ایجاد شده‌اند، دوباره استفاده کنید و آنها را به صحنه جدیدی به نام Again اضافه کنید.

صحنه‌ی «بازسازی» را Again خلق کنید

در این بخش، یک صحنه‌ی جدید Again ایجاد می‌کنید و اعلانی اضافه می‌کنید که از کاربر می‌پرسد آیا مایل به انتخاب گزینه‌ی دیگری است یا خیر.

برای ایجاد و پیکربندی صحنه Again ، مراحل زیر را دنبال کنید:

  1. یک فایل جدید به نام Again.yaml در دایرکتوری scenes ایجاد کنید:
touch custom/scenes/Again.yaml
  1. custom/scenes/Again.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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"
  1. فایل را ذخیره کنید.

اضافه کردن گذار از صحنه Fortune به Again

بعد از اینکه کاربر ثروت خود را دریافت کرد، مکالمه باید به صحنه جدید Again منتقل شود.

برای اضافه کردن یک گذار از صحنه Fortune به صحنه Again ، این مراحل را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. همانطور که در قطعه کد زیر نشان داده شده است، 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
  1. فایل را ذخیره کنید.

اکشن خود را در شبیه‌ساز آزمایش کنید

در این مرحله، اقدام شما باید پس از دریافت ثروت، پیام زیر را به کاربر ارائه دهد: «این چیزی است که من برای شما می‌بینم. آیا مایلید گزینه دیگری را انتخاب کنید و آینده دیگری را کشف کنید؟»

برای آزمایش اکشن خود، مراحل زیر را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. در فیلد ورودی Talk to my test app تایپ کرده و Enter را بزنید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. یا، روی تراشه پیشنهاد بله کلیک کنید.
  4. کلیک کنید، تایپ کنید یا بگویید dragon .

b299e9fed9aedb69.png

شما باید گزینه‌ی «طالع اژدها» و پیام « Again را دریافت کنید.

افزودن اینتنت‌ها و انتقال به صحنه Again

در این بخش، شما اینتنت‌های yes و no را به صحنه Again اضافه می‌کنید تا Action شما بفهمد که آیا کاربر می‌خواهد گزینه جدیدی را انتخاب کند یا خیر. همچنین انتقال‌های مناسب را برای اینتنت‌های yes و no اضافه می‌کنید. اینتنت yes به صحنه Fortune منتقل می‌شود، در حالی که اینتنت no به صحنه System End conversation منتقل می‌شود.

برای افزودن اهداف و انتقال‌ها به صحنه Again ، این مراحل را دنبال کنید:

  1. custom/scenes/Again.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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
  1. فایل را ذخیره کنید.

اکشن خود را در شبیه‌ساز آزمایش کنید

حالا اکشن شما باید تشخیص دهد که آیا کاربر می‌خواهد گزینه جدیدی را انتخاب کند یا مکالمه را پایان دهد.

برای آزمایش نیت yes ، این مراحل را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. در فیلد ورودی Talk to my test app تایپ کرده و Enter را بزنید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. یا، روی تراشه پیشنهاد بله کلیک کنید.
  4. روی یکی از گزینه‌ها کلیک کنید، تایپ کنید یا بگویید.
  5. در قسمت ورودی، Yes را تایپ کنید و Enter را بزنید.

5d0690332efe2e29.png

شما باید این سوال را دریافت کنید: «چه چیزی را برای کمک به خود در ماموریتتان انتخاب می‌کنید، اژدها، مترجم یا قطب‌نما؟»

برای آزمایش no قصد، این مراحل را دنبال کنید:

  1. روی یکی از گزینه‌ها کلیک کنید، تایپ کنید یا بگویید.
  2. در فیلد ورودی، No را تایپ کرده و Enter را بزنید.

شما باید پیام End conversation را دریافت کنید: «باعث خوشحالی من است که از انتخاب خود راضی هستید. برای شما در ماموریتتان آرزوی موفقیت دارم. خداحافظ.»

۴. یک مسیر حمایتی اضافه کنید

اکنون مسیر اصلی که اکثر کاربران در اقدام شما طی می‌کنند را ساخته‌اید. با این حال، کاربر می‌تواند به سوال صحنه‌ی Fortune اقبال، « چه چیزی را برای کمک به خود در ماموریتتان انتخاب می‌کنید، اژدها، مترجم یا قطب‌نما؟»، با انتخابی که جزو گزینه‌های ارائه شده نیست، پاسخ دهد.

در این بخش، شما اکشن خود را طوری پیکربندی می‌کنید که وقتی کاربر می‌گوید "magic" ، "money" ، "horse" یا "phone" متوجه شود و وقتی کاربر یکی از این گزینه‌ها را انتخاب می‌کند، دوباره از کاربر بخواهد که از بین سه گزینه اصلی یکی را انتخاب کند. برای پیکربندی این منطق، باید یک type جدید ایجاد کنید که شامل این گزینه‌های دیگر و یک intent جدید، other_option ، باشد که وقتی کاربر یکی از این گزینه‌ها را می‌گوید، مطابقت دارد. همچنین باید عبارات آموزشی را در intent other_option حاشیه‌نویسی کنید تا پارامترهای intent شناسایی و استخراج شوند.

وقتی موتور پردازش زبان طبیعی دستیار، پارامتری منطبق با ورودی کاربر را تشخیص می‌دهد، مقدار را به عنوان یک پارامتر تایپ شده استخراج می‌کند تا بتوانید در یک صحنه با آن منطق انجام دهید. در این آزمایشگاه کد، شما اکشن خود را طوری پیکربندی می‌کنید که کمکی را که کاربر انتخاب می‌کند استخراج کند و در یک اعلان به آن انتخاب ارجاع دهد.

نوع unavailable_options ایجاد کنید

اکنون می‌توانید یک نوع unavailable_options ایجاد کنید که شامل گزینه‌های مختلفی باشد تا اکشن شما بتواند آن داده‌ها را در ورودی کاربر شناسایی کند.

برای ایجاد نوع unavailable_options ، این مراحل را دنبال کنید:

  1. یک فایل جدید به نام unavailable_options.yaml در دایرکتوری types ایجاد کنید:
touch custom/types/unavailable_options.yaml
  1. custom/types/unavailable_options.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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
  1. فایل را ذخیره کنید.

ایجاد هدف other_option

در مرحله بعد، یک اینتنت به نام other_option ایجاد می‌کنید و عبارات آموزشی را که شامل گزینه‌های موجود در نوع unavailable_options هستند، اضافه می‌کنید. این اینتنت زمانی تطبیق داده می‌شود که کاربر گزینه‌ای را که در نوع unavailable_options قرار دارد، انتخاب کند.

برای ایجاد و پیکربندی اینتنت other_option ، مراحل زیر را دنبال کنید:

  1. یک فایل جدید به نام other_option.yaml در دایرکتوری intents ایجاد کنید:
touch custom/intents/other_option.yaml
  1. custom/intents/other_option.yaml را در ویرایشگر متن خود باز کنید.
  2. 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 ، به شما امکان می‌دهد نام گزینه را استخراج کرده و از آن گزینه در یک اعلان استفاده کنید، که در بخش بعدی انجام خواهید داد.

  1. فایل را ذخیره کنید.

افزودن اینتنت other_option به صحنه Fortune

اکنون یک intent other_option دارید که می‌تواند گزینه‌ای را که توسط کاربر مشخص می‌شود و جزو گزینه‌های اصلی نیست، مدیریت کند. در این بخش، intent مربوط other_option را به صحنه Fortune اضافه می‌کنید. از پارامتر intent برای سفارشی‌سازی اعلان بر اساس ورودی کاربر استفاده می‌کنید.

برای افزودن اینتنت other_option به صحنه Fortune ، مراحل زیر را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. داده‌های 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
  1. فایل را ذخیره کنید.

عبارت $intent.params.chosenUnavailableOption به شیء پارامتر intent اشاره دارد و $intent.params.chosenUnavailableOption.original به مقدار آن شیء اشاره دارد. ویژگی original به ورودی خامی که کاربر مشخص می‌کند اشاره دارد.

وقتی کاربر در طول صحنه Fortune گزینه‌ای را که در نوع unavailable_options فهرست شده است، می‌گوید، هدف other_option تطبیق داده می‌شود و یک اعلان به صف اعلان اضافه می‌کند. از آنجایی که هیچ انتقالی مشخص نشده است، حلقه اجرای صحنه با ارزیابی مجدد مرحله شرایط ادامه می‌یابد. سپس اسلات chosenOptions اعلان خود را به صف اعلان اضافه می‌کند و صف اعلان به کاربر تحویل داده می‌شود.

اکشن خود را در شبیه‌ساز آزمایش کنید

اکنون اکشن شما باید به طور مناسب به کاربر پاسخ دهد، زمانی که یکی از گزینه‌های ذکر شده در نوع unavailable_options را انتخاب می‌کند و مشخص می‌کند که کاربر کدام کمک را انتخاب کرده است. اکشن شما سپس باید دوباره از کاربر بخواهد یکی از گزینه‌های اصلی (اژدها، مترجم یا قطب‌نما) را انتخاب کند.

برای آزمایش اکشن خود در شبیه‌ساز، مراحل زیر را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. در فیلد ورودی Talk to my test app تایپ کرده و Enter را بزنید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. یا، روی تراشه پیشنهاد بله کلیک کنید.
  4. در قسمت ورودی، magic را تایپ کنید و Enter را بزنید.

3a42c33eca435f32.png

ممکن است متوجه شوید که وقتی کاربر «magic» را انتخاب می‌کند، به دلیل حرف تعریف «a» که قبل از آن قرار گرفته است، پیام درست به نظر نمی‌رسد. در بخش‌های بعدی به این مشکل خواهید پرداخت.

اضافه کردن هندلر unavailable_options

برای قرار دادن مقاله "a" قبل از گزینه‌های مناسب از نوع unavailable_options ، می‌توانید یک کنترل‌کننده رویداد را در منطق تکمیل خود پیکربندی کنید تا بررسی کند که آیا گزینه‌ای که کاربر انتخاب می‌کند به "a" قبل از آن نیاز دارد یا خیر. ابتدا، باید Action خود را طوری پیکربندی کنید که کنترل‌کننده را از صحنه Fortune فراخوانی کند.

برای افزودن کنترل‌کننده unavailable_options به صحنه Fortune ، مراحل زیر را دنبال کنید:

  1. custom/scenes/Fortune.yaml را در ویرایشگر متن خود باز کنید.
  2. فایل Fortune.yaml را با داده‌های intentEvents زیر به‌روزرسانی کنید:

فورچون.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. فایل را ذخیره کنید.

به‌روزرسانی و استقرار تکمیل فرآیند

اکنون که Action خود را برای فراخوانی رویداد unavailable_options پیکربندی کرده‌اید، می‌توانید این رویداد را در تکمیل خود به‌روزرسانی کرده و آن را مستقر کنید.

برای به‌روزرسانی رضایت‌نامه‌تان، مراحل زیر را دنبال کنید:

  1. webhooks/ActionsOnGoogleFulfillment/index.js را در ویرایشگر متن خود باز کنید.
  2. کد زیر را به 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);
});
  1. کد زیر را در زیر const app = conversation({debug:true}); اضافه کنید:

ایندکس.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. فایل را ذخیره کنید.

کد را بفهمید

تابع unavailable_options کارهای زیر را انجام می‌دهد:

  • داده‌های option از شیء conv دریافت می‌کند و option به ویژگی original ، که ورودی خام از کاربر است، اختصاص می‌دهد.
  • optionKey به ویژگی resolved اختصاص می‌دهد، که کلید نوع unavailable_options است.
  • بررسی می‌کند که آیا optionKey یکی از گزینه‌هایی است که به "a" نیاز دارد یا خیر؛ اگر چنین است، پیام را با یک "a" اضافه می‌سازد.
  • پیام را از طریق conv.add(message) اضافه می‌کند.

به‌روزرسانی کنترل‌کننده‌ها

برای اینکه به اکشن اجازه دهید unavailable_options استفاده کند، هندلر unavailable_options به webhooks/ActionsOnGoogleFulfillment.yaml اضافه کنید.

  1. نام دستگیره unavailable_options را به ActionsOnGoogleFulfillment.yaml اضافه کنید:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. فایل را ذخیره کنید.

اکشن خود را در شبیه‌ساز آزمایش کنید

اکنون اکشن شما باید اعلان را بر اساس اینکه آیا انتخاب کاربر از نوع unavailable_options نیاز به یک مقاله "a" قبل از آن دارد یا خیر، تنظیم کند.

برای آزمایش اکشن خود، مراحل زیر را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید:
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
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. روی Talk to my test app کلیک کنید یا در فیلد ورودی تایپ کنید و Enter را فشار دهید.
  3. در فیلد ورودی، Yes را تایپ کنید و Enter را فشار دهید. یا، روی تراشه پیشنهاد بله کلیک کنید.
  4. در فیلد ورودی، magic را تایپ کرده و Enter را بزنید. سپس، در فیلد ورودی، کلمه horse را تایپ کرده و Enter را بزنید.

54ee24c5c3c56e.png

عمل شما باید حرف تعریف «a» را قبل از گزینه «horse» اضافه کند، در حالی که سوال را بدون حرف تعریف «a» برای گزینه «magic» بسازد.

۵. تجسم عمل در کنسول Actions

کیت توسعه نرم‌افزار اکشن‌ها (Actions SDK) قابلیت همکاری با یک IDE مبتنی بر وب به نام Actions Builder را دارد که در کنسول اکشن‌ها ادغام شده است. می‌توانید با دستور gactions push سیستم فایل محلی خود را به پیش‌نویس اکشن خود در کنسول ارسال کنید. کنسول اکشن‌ها نمایشی بصری از پیکربندی اکشن شما ارائه می‌دهد. مشاهده نقشه‌برداری بصری اکشن شما می‌تواند در طول توسعه مفید باشد و بر نسخه اکشن شما که برای آزمایش ارائه می‌شود، تأثیری ندارد.

برای ارسال پروژه Actions و مشاهده آن در کنسول Actions، این مراحل را دنبال کنید:

  1. در ترمینال، دستور زیر را اجرا کنید تا پروژه خود را به کنسول 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.
  1. آدرس اینترنتی ارائه شده را کپی کرده و در مرورگر جایگذاری کنید.
  2. در کنسول Actions ، روی Develop در نوار ناوبری بالا کلیک کنید.
  3. روی فلش کشویی کنار Scenes کلیک کنید و Start را بزنید. شما باید نمایش بصری از صحنه Start اکشن خود را ببینید، همانطور که در تصویر زیر نشان داده شده است:

cae526c647f8d40f.png

پروژه خود را پاکسازی کنید [توصیه می‌شود]

برای جلوگیری از متحمل شدن هزینه‌های احتمالی، توصیه می‌شود پروژه‌هایی را که قصد استفاده از آنها را ندارید، حذف کنید. برای حذف پروژه‌هایی که در این آزمایشگاه کد ایجاد کرده‌اید، این مراحل را دنبال کنید:

  1. برای حذف پروژه ابری و منابع آن، مراحل ذکر شده در بخش خاموش کردن (حذف) پروژه‌ها را تکمیل کنید.
  1. اختیاری: برای حذف فوری پروژه خود از کنسول اقدامات، مراحل ذکر شده در بخش حذف یک پروژه را انجام دهید. اگر این مرحله را انجام ندهید، پروژه شما تقریباً پس از 30 روز به طور خودکار حذف خواهد شد.

۶. تبریک می‌گویم!

اکنون مهارت‌های متوسط ​​لازم برای ساخت اکشن‌ها برای دستیار گوگل با استفاده از اکشن‌ها SDK را می‌دانید.

آنچه را که پوشش دادید

  • نحوه توسعه اقدامات محاوره‌ای با استفاده از کتابخانه تکمیل سفارش Node.js
  • نحوه استفاده از اسلات‌ها برای جمع‌آوری داده‌ها از کاربر
  • نحوه استفاده از شرط‌ها برای افزودن منطق به صحنه
  • نحوه اضافه کردن حلقه بازی
  • نحوه اضافه کردن یک مسیر حمایتی

بیشتر بدانید

برای یادگیری نحوه ساخت اکشن‌ها برای دستیار گوگل می‌توانید این منابع را بررسی کنید:

برای اطلاع از آخرین اطلاعیه‌های ما، ما را در توییتر با شناسه @ActionsOnGoogle دنبال کنید و برای به اشتراک گذاشتن ساخته‌هایتان، به #AoGDevs توییت کنید!

نظرسنجی بازخورد

قبل از رفتن، لطفاً یک نظرسنجی کوتاه در مورد تجربه خود پر کنید.