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

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 برای یک کاربر بازگشتی شبیه تعامل زیر است:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

چیزی که یاد خواهید گرفت

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

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

پیش نیازهای این کد لبه شامل موارد زیر است:

  • یک ویرایشگر 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 ، مراحل زیر را دنبال کنید:

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

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

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

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

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

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

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

می‌توانید از انواع در مرحله پر کردن شکاف صحنه برای تعریف اطلاعاتی که از کاربر می‌خواهید استفاده کنید. هنگامی که موتور 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. فایل را ذخیره کنید.

اکنون Action شما می‌داند که available_options اژدها، مترجم و قطب‌نما هستند و می‌توانند چند مترادف مربوطه را نیز تشخیص دهند.

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

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

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

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

هنگامی که اسلات 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 اضافه کنید:

Fortune.yaml

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

اکشن خود را در شبیه ساز تست کنید

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

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

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

a899d45c542668f6.png

  1. کلیک کنید، تایپ کنید، یا بگویید dragon . شما باید اعلان "شما اژدها را انتخاب کردید" دریافت کنید.

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

درخواست ها را با استفاده از شرایط سفارشی کنید

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

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

برای به‌روزرسانی شرایط و سفارشی کردن درخواست زمانی که کاربر «dragon» را انتخاب می‌کند، این مراحل را دنبال کنید:

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

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

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

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

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

اکشن خود را در شبیه ساز تست کنید

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

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

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

29e17f950bd0dd71.png

شما باید ثروت مناسب برای گزینه "مترجم" دریافت کنید.

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

در این بخش Action خود را به گونه ای پیکربندی می کنید که کاربر بتواند گزینه دیگری را انتخاب کند و پس از انتخاب، فال متفاوتی را بشنود. این تغییر شبیه به "آیا می خواهید دوباره بازی کنید؟" پیام در پایان بازی برای ساخت این حلقه، می‌توانید از 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 به هر شرط، همانطور که در قطعه زیر نشان داده شده است:

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

اکشن خود را در شبیه ساز تست کنید

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

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

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

b299e9fed9aedb69.png

شما باید شانس گزینه اژدها و اعلان Again را دریافت کنید.

اضافه کردن مقاصد و انتقال به صحنه Again

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

برای افزودن intent و انتقال به صحنه 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. فایل را ذخیره کنید.

اکشن خود را در شبیه ساز تست کنید

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

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

5d0690332efe2e29.png

شما باید این پیام را دریافت کنید، "چه چیزی را برای کمک به شما در تلاش خود انتخاب می کنید، یک اژدها، یک مترجم یا یک قطب نما؟"

برای تست no intent مراحل زیر را دنبال کنید:

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

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

4. یک مسیر پشتیبانی اضافه کنید

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

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

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

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

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

برای ایجاد نوع 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 را ایجاد کنید

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

برای ایجاد و پیکربندی intent 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 برای سفارشی کردن اعلان بر اساس ورودی کاربر استفاده می کنید.

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

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

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

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

اکشن خود را در شبیه ساز تست کنید

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

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

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

3a42c33eca435f32.png

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

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

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

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

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

Fortune.yaml

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

به روز رسانی و استقرار تکمیل

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

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

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

index.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) اضافه می کند

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

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

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

ActionsOnGoogleFulfillment.yaml

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

اکشن خود را در شبیه ساز تست کنید

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

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

  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. URL ارائه شده را کپی کرده و در مرورگر پیست کنید.
  2. Talk to my test app در قسمت Input کلیک کنید یا تایپ کنید و Enter را فشار دهید.
  3. Yes را در قسمت Input تایپ کرده و Enter را فشار دهید. یا روی تراشه پیشنهاد بله کلیک کنید.
  4. magic را در قسمت Input تایپ کنید و Enter را فشار دهید. سپس در قسمت Input عبارت horse را تایپ کرده و Enter را فشار دهید.

54ee24c5c3c56e.png

اکشن شما باید مقاله "a" را قبل از انتخاب "اسب" اضافه کند، در حالی که دستور را بدون مقاله "a" برای انتخاب "جادویی" می سازد.

5. Action را در کنسول Actions تجسم کنید

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

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

cae526c647f8d40f.png

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

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

  1. برای حذف پروژه Cloud و منابع، مراحل ذکر شده در بخش Shutting down (حذف) پروژه ها را کامل کنید.
  1. اختیاری: برای حذف فوری پروژه از کنسول Actions، مراحل فهرست شده در بخش Delete a project را تکمیل کنید. اگر این مرحله را کامل نکنید، پروژه شما پس از تقریباً 30 روز به طور خودکار حذف خواهد شد.

6. تبریک می گویم!

اکنون مهارت‌های متوسط ​​لازم برای ایجاد Actions برای Google Assistant را با Actions SDK می‌دانید.

آنچه شما پوشش داده اید

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

بیشتر بدانید

می‌توانید این منابع را برای یادگیری درباره ساخت Actions برای Google Assistant کاوش کنید:

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

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

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