1. סקירה כללית
פלטפורמת הפיתוח של Google Assistant מאפשרת ליצור תוכנה להרחבת הפונקציונליות של Google Assistant, עוזרת אישית וירטואלית, ביותר ממיליארד מכשירים, כולל רמקולים חכמים, טלפונים, מכוניות, טלוויזיות, אוזניות ועוד. המשתמשים יכולים לנהל שיחה עם Assistant כדי לבצע פעולות, כמו לקנות מצרכים או להזמין נסיעה. מפתחים יכולים להשתמש בפלטפורמת הפיתוח של Assistant כדי ליצור ולנהל בקלות חוויות שיחה נעימות ויעילות בין משתמשים לבין שירותי מימוש משלהם של צד שלישי.
ב-codelab הזה נסביר מושגים ברמה בינונית לפיתוח באמצעות Google Assistant, והוא מבוסס על הפעולה שנוצרה ב-codelab ברמה 1. מומלץ מאוד להשלים את ה-codelab לרמה 1 לפני שמתחילים את ה-codelab הזה.
הפעולה שתיצרו בשיעור הזה תגיד למשתמשים מה צופן להם העתיד במסע שלהם בארץ המיתית גריפינברג, על סמך העזרה שהם יבחרו.
מה תפַתחו
ב-codelab הזה תבנו פעולה מתקדמת לניהול שיחות עם הפונקציות הבאות:
- איסוף נתונים מהמשתמש, ובהתאם לערך, שינוי ההנחיות לשיחה
- מגיב בשאלות המשך כדי לקדם את השיחה
- יוצר לולאת משחק כדי שמשתמש יוכל לקיים אינטראקציה עם הפעולה שוב אחרי שהוא מקבל ניחוש עתידות
לפני שמתחילים לבנות, אפשר לקיים אינטראקציה עם הפעולה הפעילה במכשיר עם Google Assistant על ידי אמירת "Ok Google, talk to Fate and Fortune". נתיב ברירת המחדל דרך הפעולה הזו למשתמש חוזר נראה כך:


מה תלמדו
- איך משתמשים במשבצות כדי לאסוף נתונים מהמשתמש
- איך משתמשים בתנאים כדי להוסיף לוגיקה לסצנה
- איך מוסיפים game loop
- איך מוסיפים נתיב תומך
מה נדרש
הדרישות המוקדמות ל-codelab הזה כוללות את הדברים הבאים:
- דפדפן אינטרנט, כמו Google Chrome
- פרויקט Actions שהושלם ברמה 1 ( Build Actions for Google Assistant using Actions Builder Level 1)
מומלץ מאוד להכיר את JavaScript (ES6) כדי להבין את קוד הביצוע של Codelab הזה, אבל זה לא חובה.
2. המשך בניית ממשק שיחה
ב-Codelab הראשון יצרתם פעולה פשוטה לשיחה עם סצנה אחת, Start.
ב-codelab הזה, תרחיבו את השיחה של הפעולה. בקטעים הבאים מוסבר איך להגדיר את הפעולה כך שתבצע את הפעולות הבאות:
- מעבר ל
Fortuneסצנה חדשה כשהמשתמש רוצה לשמוע את העתיד שלו - שואלים את המשתמש איזו עזרה הוא רוצה לבחור לתהליך שלו
- הצגת ניבוי מותאם אישית על סמך הבחירה של המשתמש
יצירת סצנה Fortune
בקטע הזה יוצרים את סצנת Fortune ומגדירים איך המשתמש עובר אליה במהלך השיחה.
כדי ליצור סצנה חדשה בשם Fortune, פועלים לפי השלבים הבאים:
- פותחים את פרויקט הפעולות ברמה 1 של ה-codelab.
- בסרגל הניווט, לוחצים על פיתוח.
- בקטע סצנות, לוחצים על הסצנה התחלה.
- לוחצים על כוונת yes (התיבה When yes is matched) כדי לפתוח את האפשרויות.
- כדי להסיר את ההנחיה, מבטלים את הסימון של שליחת הנחיות.
- בקטע מעבר, לוחצים על התפריט הנפתח, לוחצים בתיבת הטקסט ומקלידים
Fortune. - לוחצים על Add (הוספה). הפעולה הזו יוצרת סצנה חדשה בשם
Fortune. בנוסף, מתווסף מעבר מסצנתStartלסצנתFortuneכשהמשתמש רוצה לשמוע את העתיד שלו.

הגדרת לוגיקה לשיחה בסצנה Fortune
ב-codelab הזה, מגדירים את סצנת Fortune השאלה למשתמש: What do you choose to help you on your quest, a dragon, a translator, or a compass? (מה תבחר שיעזור לך במסע שלך, דרקון, מתרגם או מצפן?) כדי לאסוף את המידע הנדרש מהמשתמש לפני שממשיכים, אפשר להשתמש בתכונה שנקראת מילוי משבצות.
הפעולה מספקת תחזיות לשלושה אמצעי עזר: דרקון, מתרגם ומצפן. כדי להגדיר את הפעולה כך שתזהה את שלוש האפשרויות האלה בקלט של המשתמש, צריך ליצור סוג חדש.
אפשר להשתמש בסוגים בשלב מילוי המשבצות של סצנה כדי להגדיר את המידע שרוצים לקבל מהמשתמש. כשמנוע ה-NLU מזהה התאמה של משבצת בקלט של המשתמש, הוא מחלץ את המשבצת כפרמטר מוקלד, כך שאפשר להשתמש בה לביצוע לוגיקה בסצנה.
יצירת סוג available_options
בקטע הזה יוצרים סוג חדש בשם available_options, שמציין את שלוש האפשרויות שהמשתמשים יכולים לבחור (dragon, translator ו-compass) בתגובה להנחיה. אתם גם מגדירים כמה מילים נרדפות לאפשרויות האלה, למקרה שמשתמש יגיד משהו דומה. בקטע מאוחר יותר, מוסיפים את הסוג available_options למקום שמור כדי לציין שרוצים לקבל את הבחירה של המשתמש.
כדי ליצור את הסוג available_options, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על סוגים.
- לוחצים על + (סמל הפלוס), מקלידים
available_optionsולוחצים עלEnter. - לוחצים על
available_optionsכדי לפתוח את האפשרויות.
הסוגים מוגדרים כצמדי מפתח/ערך של מידע, כאשר המפתח הוא שם הסוג והערכים הם מילים נרדפות למפתח הזה. כשמגדירים את המפתח, הוא מתווסף אוטומטית כערך.
כדי להוסיף את שלוש האפשרויות שהמשתמש יכול לבחור, פועלים לפי השלבים הבאים:
- גוללים לקטע הוספת רשומות.
- בשדה New entry, מקלידים
dragonולוחצים עלEnter. הפעולה הזו יוצרת מפתחdragon. - מקלידים
hydraבשדה הוספת ערכים ולוחצים עלEnterכדי להוסיף אותו כערך (מילה נרדפת). לאחר מכן, חוזרים על השלב הזה עבור הערךlizard. - מוסיפים את שאר המפתחות והערכים התואמים:
translator | translator,communicator,machine,decoder,translatecompass | compass,direction,guide

- לוחצים על שמירה.
הפעולה מבינה עכשיו שavailable_options הם דרקון, מתרגם ומצפן, ויכולה גם לזהות כמה מילים נרדפות מתאימות.
הגדרת מילוי משבצות
בשלב הבא, צריך להגדיר מילוי משבצות בסצנה Fortune. כדי להגדיר את הלוגיקה של מילוי המשבצות:
- בסרגל הניווט, בקטע סצנות, לוחצים על מזל.
- בסצנה
Fortune, לוחצים על + (סימן הפלוס) לצד מילוי משבצת. - בשדה Enter slot name (הזנת שם משבצת), מוסיפים את
chosenOptionsכשם המשבצת. - ברשימה הנפתחת בחירת סוג בוחרים באפשרות
available_optionsכסוג המיקום. - מסמנים את תיבת הסימון חובה למלא את המשבצת הזו.

- בוחרים באפשרות שליחת הנחיות ומוסיפים את ההודעה הבאה ואת הלחצנים להצעות:
candidates:
- first_simple:
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'
- לוחצים על שמירה.
הוספתם את סוג העזרה available_options למשבצת, ועכשיו הפעולה יודעת איזה מידע צריך לאסוף מהמשתמש (סוג העזרה שהוא רוצה) לפני שממשיכים. הגדרתם גם הנחיה במשבצת, שנוספת לתור ההנחיות כשהמשתמש מגיע לשלב מילוי המשבצת בסצנה.
שימו לב: כשנתתם שם למשבצת chosenOptions, השם הזה ($session.params.chosenOptions) התעדכן גם בשדה Customize slot value writeback. תוכלו לגשת לפרמטר הזה באמצעות השם הזה ב-Actions Builder וב-fulfillment דרך ספריית הלקוח.
הגדרת תנאי scene.slots.status == "FINAL"
כשמוסיפים משבצת, התנאי scene.slots.status == "FINAL" מתווסף אוטומטית לרשימת התנאים.
התנאי scene.slots.status == "FINAL" בודק אם מילוי המשבצת הושלם. כשכל המשבצות מלאות, התנאי יכול להפעיל webhook, לעבור לסצנה חדשה או להוסיף הנחיות לתור ההנחיות.
בקטע הזה מגדירים את scene.slots.status == "FINAL" כך שיוסיף הנחיה לתור ההנחיות אחרי שהמשבצות יתמלאו.
כדי להוסיף את ההנחיה הזו לתנאי FINAL, פועלים לפי השלבים הבאים:
- לוחצים על
scene.slots.status == "FINAL"כדי לפתוח את חלון האפשרויות. - בוחרים באפשרות שליחת הנחיות ומוסיפים את ההנחיה הבאה:
candidates:
- first_simple:
variants:
- speech: You picked $session.params.chosenOptions.
- לוחצים על שמירה.
בדיקת הפעולה בסימולטור
בשלב הזה, הגדרתם אילו אפשרויות המשתמש צריך לבחור כדי למלא את המשבצת. אחרי קבלת המידע הזה מהמשתמש, הפעולה שלכם צריכה להציג הנחיה שמתייחסת לאפשרות הספציפית שהוא בחר.
כדי לבדוק את הפעולה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- לוחצים על
Talk to my test appאו מקלידים אותו בשדה Input (קלט) ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. (אפשרות אחרת היא ללחוץ על הצ'יפ עם ההצעה כן).

- לוחצים, מקלידים או אומרים
dragon. אמורה להופיע ההנחיה "בחרת דרקון".
בקטע הבא, מתאימים אישית את ההנחיות לכל עזרה שהמשתמש יכול לבחור.
התאמה אישית של הנחיות באמצעות תנאים
בקטע הזה, מוסיפים תנאים לכל אפשרות שהמשתמש יכול לבחור, ומוסיפים הנחיה מותאמת אישית לכל תנאי.
התאמה אישית של הניחוש dragon
כדי לעדכן את התנאי ולהתאים אישית את ההודעה שמוצגת כשמשתמש בוחר באפשרות 'דרקון', פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על פיתוח.
- בסרגל הניווט, לוחצים על הסצנה Fortune.
- לוחצים על
scene.slots.status == "FINAL"כדי לפתוח את חלון האפשרויות. - מעדכנים את משפט התנאי ל:
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" - בוחרים באפשרות שליחת הנחיות.
- מעדכנים את ההנחיה עם הניחוש הבא בעורך הקוד:
candidates:
- first_simple:
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.
- לוחצים על שמירה.

עכשיו, כשמשתמש אומר dragon או מילה שנשמעת דומה, הפעולה מספקת לו ניבוי עתידות על סמך הבחירה הזו. לאחר מכן מוסיפים את שתי הבחירות הנותרות.
התאמה אישית של הניחוש translator
כדי להוסיף את התנאי ולהתאים אישית את ההנחיה שמוצגת כשמשתמש בוחר באפשרות 'תרגום', פועלים לפי השלבים הבאים:
- לוחצים על + (סמל הפלוס) לצד תנאי.
- מוסיפים את
scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"לשדה else if. - לוחצים על שליחת הנחיות.
- מוסיפים את ההנחיה הבאה בעורך הקוד:
candidates:
- first_simple:
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 subsequent journeys across the
earth. After its work is done, it retires honorably to a premier
location in the Gryffinberg History Museum.
- לוחצים על שמירה.

התאמה אישית של הניחוש compass
כדי להוסיף את התנאי ולהתאים אישית את ההנחיה שמוצגת כשמשתמש בוחר באפשרות 'מצפן', פועלים לפי השלבים הבאים:
- לוחצים על + (סמל הפלוס) לצד תנאי.
- מוסיפים את
scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"לתיבת הטקסט else if. - לוחצים על שליחת הנחיות.
- מוסיפים את ההנחיה הבאה בעורך הקוד:
candidates:
- first_simple:
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.
- לוחצים על שמירה.
בדיקת הפעולה בסימולטור
בשלב הזה, הפעולה שלכם צריכה לספק למשתמש ניבוי עתידות מותאם אישית על סמך האפשרות שהוא בוחר.
כדי לבדוק את הפעולה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- מקלידים
Talk to my test appבשדה Input ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. אפשר גם ללחוץ על הצ'יפ של ההצעה כן. - לוחצים, מקלידים או אומרים
Translator.

אמורה להתקבל התוצאה המתאימה לאפשרות 'מתרגם'.
3. הוספת game loop
בקטע הזה מגדירים את הפעולה כך שהמשתמש יוכל לבחור אפשרות אחרת ולשמוע ניחוש אחר אחרי שהוא בוחר. השינוי הזה דומה להודעה "רוצה לשחק שוב?" שמופיעה בסוף משחק. כדי ליצור את הלולאה הזו, אפשר להשתמש שוב בכוונות yes ו-no שנוצרו קודם, ולהוסיף אותן לסצנה חדשה בשם Again.
יצירת סצנה Again
בקטע הזה יוצרים Againסצנה חדשה ומוסיפים הנחיה ששואלת את המשתמש אם הוא רוצה לבחור באפשרות אחרת.
כדי ליצור את Again הסצנה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על פיתוח.
- לוחצים על + (סימן הפלוס) בקטע סצנות.
- מקלידים
Againומקישים עלEnter. - בסרגל הניווט, לוחצים על הסצנה
Again. - לוחצים על + (סמל הפלוס) לצד On enter (בכניסה).
- בוחרים באפשרות שליחת הנחיות ומוסיפים את ההנחיה הבאה ואת הצ'יפים של ההצעות:
candidates:
- first_simple:
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, פועלים לפי השלבים הבאים:
- לוחצים על הסצנה מזל.
- לוחצים על התנאי הראשון (
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon") כדי לפתוח את חלון האפשרויות. - גוללים ובוחרים באפשרות
Againבקטע מעבר. - לוחצים על שמירה.
- לוחצים על התנאי השני כדי לפתוח את חלון האפשרויות.
- גוללים ובוחרים באפשרות
Againבקטע מעבר. - לוחצים על שמירה.
- לוחצים על התנאי השלישי כדי לפתוח את חלון האפשרויות.
- גוללים ובוחרים באפשרות
Againבקטע מעבר. - לוחצים על שמירה.
בדיקת הפעולה בסימולטור
בשלב הזה, הפעולה שלכם צריכה להציג למשתמש את ההנחיה הבאה אחרי שהוא מקבל את התחזית: "זה מה שאני רואה בשבילך. רוצה לבחור באפשרות אחרת ולראות איך העתיד ייראה אם תבחר בה?"
כדי לבדוק את הפעולה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- מקלידים
Talk to my test appבשדה Input ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. אפשר גם ללחוץ על הצ'יפ של ההצעה כן. - לוחצים, מקלידים או אומרים
dragon.

אחרי שתבחרו באפשרות של הדרקון, תקבלו את הניחוש ואת ההנחיה Again.
הוספת כוונות ומעבר לסצנה Again
בקטע הזה, מוסיפים כוונות (intent) של yes ושל no לסצנה Again כדי שהפעולה תבין אם המשתמש רוצה לבחור אפשרות חדשה או לא. מוסיפים גם את המעברים המתאימים לכוונות yes ו-no. הכוונה yes עוברת לסצנה Fortune, והכוונה no עוברת לסצנת המערכת End conversation.
כדי להוסיף כוונות ומעברים לAgain סצנה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על פיתוח.
- לוחצים על הסצנה
Again. - לוחצים על + (סמל הפלוס) לצד User intent handling (טיפול בכוונת המשתמש).
- בתפריט הנפתח של הכוונה, בוחרים באפשרות כן.
- בתפריט הנפתח מעבר, בוחרים באפשרות
Fortune. - לוחצים על שמירה.

- לוחצים על + (סמל הפלוס) לצד User intent handling (טיפול בכוונת המשתמש).
- בתפריט הנפתח של הכוונה, בוחרים באפשרות לא.
- בתפריט הנפתח מעבר, בוחרים באפשרות סיום השיחה.
- בוחרים באפשרות שליחת הנחיות ומוסיפים את ההנחיה הבאה בעורך הקוד:
candidates:
- first_simple:
variants:
- speech: >-
It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.
- לוחצים על שמירה.
בדיקת הפעולה בסימולטור
הפעולה שלכם אמורה להבין עכשיו אם המשתמש רוצה לבחור אפשרות חדשה או לסיים את השיחה.
כדי לבדוק את כוונת המשתמש yes, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- מקלידים
Talk to my test appבשדה Input ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. אפשר גם ללחוץ על הצ'יפ של ההצעה כן. - לוחצים על אחת מהאפשרויות, מקלידים אותה או אומרים אותה.
- מקלידים
Yesבשדה Input ומקישים עלEnter.

צריכה להופיע ההנחיה "What do you choose to help you on your quest, a dragon, a translator, or a compass?" (מה תבחר שיעזור לך במסע שלך, דרקון, מתרגם או מצפן?)
כדי לבדוק את כוונת המשתמש no, פועלים לפי השלבים הבאים:
- לוחצים על אחת מהאפשרויות, מקלידים אותה או אומרים אותה.
- מקלידים
Noבשדה הקלט ומקישים עלEnter.
צריכה להופיע ההודעה End conversation: "שמחתי לשמוע שאתה מרוצה מהבחירה שלך. בהצלחה בקווסט. להתראות".
4. הוספת נתיב תומך
יצרתם את הנתיב הראשי שרוב המשתמשים עוברים בו באינטראקציה עם הפעולה. עם זאת, המשתמש יכול להשיב להנחיה מהסצנה Fortune, מה תבחר שיעזור לך במסע, דרקון, מתרגם או מצפן?, עם בחירה שלא מופיעה בין האפשרויות שסופקו.
בקטע הזה מגדירים את הפעולה כך שתבין מתי משתמש בוחר באפשרות 'קסם', 'כסף', 'סוס' או 'טלפון', ותציג למשתמש הנחיה לבחור אחת משלוש האפשרויות המקוריות אם הוא בוחר באחת מהאפשרויות האלה. כדי להגדיר את הלוגיקה הזו, צריך ליצור type חדש שמכיל את האפשרויות האחרות האלה ואת הכוונה החדשה other_option, שמוגדרת להתאמה כשמשתמש אומר אחת מהאפשרויות האלה. בנוסף, צריך להוסיף הערות לביטויי ההדרכה בתוך כוונת other_option כדי לזהות ולחלץ פרמטרים של כוונות.
כשמנוע עיבוד השפה הטבעית (NLU) של Assistant מזהה התאמה של פרמטר בקלט של המשתמש, הוא מחלץ את הערך כפרמטר מוקלד כדי שתוכלו לבצע איתו לוגיקה בסצנה. ב-Codelab הזה, תגדירו את הפעולה כך שתחלץ את העזרה שהמשתמש בוחר ותתייחס לבחירה הזו בהנחיה.
יצירת סוג unavailable_options
עכשיו אפשר ליצור סוג unavailable_options שמכיל מגוון אפשרויות שונות, כדי שהפעולה תוכל לזהות את הנתונים האלה בקלט של המשתמש.
כדי ליצור את הסוג unavailable_options, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על פיתוח.
- לוחצים על + (סמל הפלוס) בקטע סוגים.
- מקלידים
unavailable_optionsומקישים עלEnter. - לוחצים על
unavailable_optionsכדי לפתוח את האפשרויות. - בקטע Add entries (הוספת רשומות), מזינים את הרשומות הבאות ואת הערכים התואמים:
|
|
|
|
|
|
|
|
טבלת זוגות מפתח/ערך צריכה להיראות כך:

- לוחצים על שמירה.
יצירת כוונת other_option
לאחר מכן יוצרים כוונת משתמש בשם other_option ומוסיפים ביטויי אימון שכוללים את האפשרויות בסוג unavailable_options. הכוונה הזו מתאימה כשמשתמש בוחר אפשרות שכלולה בסוג unavailable_options.
כדי ליצור ולהגדיר את other_option הכוונה, פועלים לפי השלבים הבאים:
- לוחצים על + (סמל הפלוס) בקטע קהלים בהתאמה אישית עם כוונת רכישה.
- מקלידים
other_optionומקישים עלEnter. - לוחצים על
other_optionכדי לפתוח את החלון. - מוסיפים את הביטויים הבאים להדרכה ולוחצים על
Enterאחרי כל אחד מהם:
I want to use spellsI really really want to use a phonemagic!cashI want to ride a horse
- בקטע Add intent parameters (הוספת פרמטרים של כוונת המשתמש), מעדכנים את שם הפרמטר ל-
chosenUnavailableOption. - לוחצים על שמירה.
כשמזינים את הביטויים לאימון, הכלי Actions Builder מזהה את spells, phone, magic, cash ו-horse מהסוג unavailable_options ומדגיש (מסמן) את המילים האלה באופן אוטומטי. כלי בניית הפעולות מוסיף באופן אוטומטי פרמטר של Intent בקטע Add intent parameters (הוספת פרמטרים של Intent), כמו שמוצג בתמונה הבאה.
פרמטר הכוונה מאפשר לכם לחלץ את שם האפשרות ולהשתמש באפשרות הזו בהנחיה.

הוספת כוונה other_option לסצנה Fortune
עכשיו יש לך כוונה, other_option, שיכולה לטפל במשתמש שמציין אפשרות שלא נכללת באפשרויות המקוריות. בקטע הזה מוסיפים את כוונת other_option לסצנת Fortune. משתמשים בפרמטר הכוונה כדי להתאים אישית את ההנחיה על סמך הקלט של המשתמש.
כדי להוסיף את כוונת המשתמש other_option לסצנה Fortune, פועלים לפי השלבים הבאים:
- לוחצים על הסצנה מזל.
- לוחצים על + (סמל הפלוס) לצד User intent handling (טיפול בכוונת המשתמש).
- בתפריט הנפתח של הכוונה, בוחרים באפשרות
other_option. - בוחרים באפשרות שליחת הנחיות ומוסיפים את ההנחיה הבאה:
candidates:
- first_simple:
variants:
- speech: >-
I have seen the future and a $intent.params.chosenUnavailableOption.original
will not aid you on your journey.
הביטוי $intent.params.chosenUnavailableOption מתייחס לאובייקט של פרמטר ה-Intent, והביטוי $intent.params.chosenUnavailableOption.original מתייחס לערך של האובייקט הזה. השדה original property מתייחס לקלט הגולמי שהמשתמש מציין.
- לוחצים על שמירה.

כשמשתמש אומר אפשרות שמופיעה ברשימה של unavailable_options type במהלך Fortune scene, המערכת מתאימה את הכוונה other_option ומוסיפה הנחיה לתור ההנחיות. מכיוון שלא צוין מעבר, לולאת הביצוע של הסצנה ממשיכה בהערכה מחדש של שלב התנאים. לאחר מכן, המשבצת chosenOptions מוסיפה את ההנחיה שלה לתור ההנחיות, והתור מועבר למשתמש.
בדיקת הפעולה בסימולטור
עכשיו הפעולה שלכם צריכה להגיב בצורה מתאימה כשמשתמש בוחר באחת מהאפשרויות שמופיעות בסוג unavailable_options ולציין איזו עזרה המשתמש בחר. לאחר מכן, הפעולה צריכה להציג למשתמש את אחת מהאפשרויות המקוריות (דרקון, מתרגם או מצפן).
כדי לבדוק את הפעולה בסימולטור, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- מקלידים
Talk to my test appבשדה Input ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. אפשר גם ללחוץ על הצ'יפ של ההצעה כן. - מקלידים
magicבשדה Input ומקישים עלEnter.

יכול להיות שתשימו לב שההנחיה לא נשמעת נכון כשהמשתמש בוחר באפשרות 'קסם', בגלל המילה 'a' שמופיעה לפני כן. הבעיה הזו מוסברת בקטעים הבאים.
הוספת handler של unavailable_options
כדי להוסיף את המילה a לפני האפשרויות המתאימות מהסוג unavailable_options, אפשר להגדיר את הפונקציה event handler בלוגיקת האספקה כדי לבדוק אם צריך להוסיף את המילה a לפני האפשרות שהמשתמש בוחר. קודם צריך להגדיר את הפעולה כך שתפעיל את ה-handler במסוף.
כדי להוסיף את רכיב ה-handler unavailable_options, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על פיתוח.
- לוחצים על הסצנה
Fortune. - בקטע User intent handling, לוחצים על When other_option is matched כדי לפתוח את החלון.
- מבטלים את הסימון של התיבה שליחת הנחיות.
- מסמנים את תיבת הסימון התקשרות אל ה-webhook.
- מזינים
unavailable_optionsבתיבת הטקסט של הגורם המטפל באירועים.

- לוחצים על שמירה.
עדכון ופריסה של תהליך מילוי ההזמנה
עכשיו, אחרי שהגדרתם את הפעולה לקריאה ל-handler של האירוע unavailable_options, אתם יכולים לעדכן את ה-handler ב-fulfillment ולפרוס אותו.
כדי לעדכן את תהליך השלמת ההזמנה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על Webhook.
- מוסיפים את הקוד הבא מתחת ל-handler
greeting:
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();:
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- לוחצים על שמירת ההזמנה.
- לוחצים על Deploy Fulfillment (פריסת מילוי הזמנות). בסיום הפריסה, תוצג הודעה מעל העורך: Your Cloud Function deployment is up to date (הפריסה של הפונקציה ב-Cloud Functions עדכנית).
הסבר על הקוד
ה-handler unavailable_options מבצע את הפעולות הבאות:
- מקבל נתוני
optionמאובייקטconvומקצה אתoptionלמאפייןoriginal, שהוא הקלט הגולמי מהמשתמש - הפונקציה מקצה את הערך
optionKeyלמאפייןresolved, שהוא המפתח לסוגunavailable_options - בודק אם
optionKeyהיא אחת מהאפשרויות שצריך להוסיף להן את האות a. אם כן, יוצר את ההודעה עם האות a. - הוספת ההודעה דרך
conv.add(message)
בדיקת הפעולה בסימולטור
הפעולה אמורה להתאים את ההנחיה בהתאם לבחירה של המשתמש מתוך סוג unavailable_options, ולבדוק אם צריך להוסיף את המילה "a" לפני הבחירה.
כדי לבדוק את הפעולה, פועלים לפי השלבים הבאים:
- בסרגל הניווט, לוחצים על בדיקה.
- לוחצים על
Talk to my test appאו מקלידים אותו בשדה Input (קלט) ומקישים עלEnter. - מקלידים
Yesבשדה Input ומקישים עלEnter. אפשר גם ללחוץ על הצ'יפ של ההצעה כן. - מקלידים
magicבשדה Input ומקישים עלEnter. - מקלידים
horseבשדה Input ומקישים עלEnter.

הפעולה שלכם צריכה להוסיף את המילה 'a' לפני האפשרות 'horse', וליצור את ההנחיה בלי המילה 'a' לפני האפשרות 'magic'.
פינוי מקום בפרויקט [מומלץ]
כדי להימנע מחיובים אפשריים, מומלץ להסיר פרויקטים שאתם לא מתכוונים להשתמש בהם. כדי למחוק את הפרויקטים שיצרתם ב-codelab הזה, פועלים לפי השלבים הבאים:
- כדי למחוק את הפרויקט ב-Cloud ואת המשאבים, מבצעים את השלבים שמפורטים בקטע השבתה (מחיקה) של פרויקטים.
- אופציונלי: כדי להסיר את הפרויקט מיד ממסוף הפעולות, אפשר לעיין במאמר בנושא מחיקת פרויקט. אם לא תבצעו את השלב הזה, הפרויקט יוסר אוטומטית אחרי כ-30 יום.
5. מעולה!
עכשיו יש לכם את הכישורים ברמת הביניים שדרושים כדי ליצור פעולות ל-Google Assistant.
מה כיסיתם
- איך מפתחים פעולות לשיחה באמצעות ספריית ה-fulfillment של Node.js
- איך משתמשים במשבצות כדי לאסוף נתונים מהמשתמש
- איך משתמשים בתנאים כדי להוסיף לוגיקה לסצנה
- איך מוסיפים game loop
- איך מוסיפים נתיב תומך
מידע נוסף
כדי לקבל מידע נוסף על יצירת פעולות ל-Google Assistant, אפשר לעיין במקורות המידע הבאים:
- מאמרי עזרה לפיתוח פעולות ל-Google Assistant
- דף GitHub של Actions on Google עם דוגמאות קוד וספריות
- הקהילה הרשמית ב-Reddit למפתחים שעובדים עם Google Assistant
- הנחיות לעיצוב שיחות בנוגע לשיטות מומלצות והנחיות לגבי פעולות שיחה
כדאי לעקוב אחרי @ActionsOnGoogle בטוויטר כדי להתעדכן בהכרזות האחרונות שלנו, ולצייץ אל #AoGDevs כדי לשתף את מה שיצרתם.
סקר משוב
לפני שנסיים, נשמח אם תמלא/י את הסקר הקצר הזה לגבי חוויית התמיכה.