✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

מדריך לפיתוח יכולת חדשה (skill) לאלקסה – העוזרת הווירטואלית של אמזון – חלק ב׳

איתן סלע
|
Dec 13, 2017
alt="blogs"
alt="blogs"
alt="blogs"
Events
Event
title="Google"

בחלק א׳ של המדריך, סקרתי על אלקסה (Alexa) - הסייעת הדיגיטלית החכמה של אמזון. תאריך היציאה לשוק, היקף השימוש וסוגי המכשירים. כמו כן, הבאתי דוגמה כיצד לפתח יכולת (skill) בסיסי של Hello World לאלקסה.

מומלץ לעבור על חלק א׳ של המדריך, לפני שקוראים את המדריך הזה.

חדשות אלקסה

מאז שפורסם חלק א׳ של המדריך ועד היום, עבר פחות מחודש, ובינתיים אמזון לא שקטה על השמרים בכל מה שקשור באלקסה:

מכשיר Echo חדש ומשופר

מכשיר Echo Plus חדש עם שליטה משופרת על הבית החכם

מכשיר Echo spot חדש –  Echo עם מסך

אלקסה מגיעה להודו! אלקסה כעת זמינה ל 1.35 מיליארד הודים דוברי אנגלית.

החדשות שסקרתי הן מעט מכל ההכרזות של אמזון לגבי אלקסה. לכל החדשות וההכרזות, מומלץ לבקר בפורטל המפתחים של אלקסה.

מדוע חלק א׳ של המדריך לא מספיק כדי להתחיל לפתח יכולת (skill) חדשה לאלקסה?

בחלק א׳ של המדריך פיתחנו את היכולת ״Greeter״ שבירכה אותנו כאשר ביקשנו כך מאלקסה.

זאת היתה דוגמה מצויינת למי שרוצה להתחיל לפתח יכולת חדשה ובסיסית לאלקסה. אך כפי שהזכרתי, אין להשתמש במדריך הזה כבסיס לפיתוח יכולת שלמה שאמורה לעבור סרטיפיקציה בחנות של אמזון

ולכן, לקריאה ופיתוח את היכולת (skill) החדשה בחלק ב׳ של המדריך חשיבות קריטית, למי שרוצה לפתח יכולות אמיתיות לאלקסה. כאלה שיעברו סרטיפיקציה ויוצגו בחנות של אמזון.

מה נלמד בחלק ב׳ של המדריך?

במאמר הזה נסקור את הנושאים הבאים:

1. ה Intents הבסיסיים, המובנים באלקסה, והחיוניים לסרטיפיקציה, שלא כיסינו בחלק א׳ של המדריך.

2. מהם Slots ואיך הם משתלבים בתוך ה Intent?

3. מהם ה Custom Slot Types ומתי נשתמש בהם?

4. ניהול sessions, שבשימוש בהם, אלקסה עונה לשאלה של המשתמש ומחכה לתשובה נוספת.

פיתוח היכולת (skill) החדשה – Color Expert בחלק ב׳ של המדריך

הפעם נפתח יכולת (skill) מורכבת יותר מהיכולת “greeter” שפיתחנו בחלק א׳ של המדריך.

אנו נפתח יכולת (skill) חדשה שתשאל אותנו לצבע האהוב עלינו, ולכשנענה לשאלה ונאמר את הצבע, אלקסה תקלוט את תשובתנו ותאמר לנו את הצבע שאמרנו לה קודם לכן.

הדוגמא לקוחה מהמדריך ״Host a Custom Skill as an AWS Lambda Function״ של אמזון: http://amzn.to/1LzFrj6

Interaction flow - הדגמה במילים של היכולת החדשה ״Color Expert״

User: “Alexa open Color Expert”

Alexa: “Welcome to the Alexa color expert skill. Please tell me your favorite color by saying, my favorite color is red.”

בשלב זה, אם המשתמש לא עונה או אומר משהו שלא מובן לאלקסה, אז יקרה הדבר הבא:

Alexa: “Please tell me your favorite color by saying, my favorite color is red.”

המשתמש עונה:

User: “my favorite color is blue.”

Alexa: “Your favorite color is blue. Goodbye.”

בכל שלב במהלך ריצת היכולת (skill) אם המשתמש אומר ״cancel״ או ״stop״:

Alexa: “Thank you for trying the Alexa Skills Kit sample. Have a nice day!”

בכל שלב במהלך ריצת היכולת (skill) אם המשתמש אומר ״help״:

Alexa: “Welcome to the Alexa color expert skill. Please tell me your favorite color by saying, my favorite color is red.”

מסקירה של הInteraction flow אנו רואים מספר דברים חדשים ביכולת (skill):

• שימוש במילים ״cancel״,״stop״,״help״.

• שימוש בפרמטרים ב Intent – אנחנו עונים איזה צבע הוא האהוב עלינו וזהו הפרמטר ליכולת (skill). דבר זה נקרא ״slots״.

• שימוש ב session – אלקסה אינה יוצאת מהיכולת (skill) עם קבלת ההוראה מהמשתמש אלא מחכה לקלט נוסף ו״זוכרת״ את מה שענינו לה ועושה בזה שימוש בהמשך.

נושאים מתקדמים -ב Interaction Model שנסקור בחלק ב׳ של התרגיל

ה Intents הבסיסיים, המובנים באלקסה, והחיוניים לסרטיפיקציה, שלא כיסינו בחלק א׳ של המדריך

בחלק א׳ של המדריך כיסינו שני Intents בלבד: ״LaunchRequest״ שמגיע מובנה שיוזמים קריאה ראשונית ליכולת (skill), ו ״HelloWorldIntent״ שאותו למעשה פיתחנו במיוחד במדריך.

דבר זה אינו מספיק על מנת לספק את מלוא החוויה למשתמשים באלקסה.

על מנת להקל על המשתמשים בשימוש באלקסה ולספק שפה אחידה בשימוש במגוון היכולות (skills) הקיימות בחנות אמזון, ישנם Intents סטנדרטים שכל יכולת (skill) חייבת לממש:

• AMAZON.HelpIntent – מיועד על מנת להסביר למשתמש על היכולת (skill) ומגוון האפשרויות, כאשר הוא מבקש עזרה מהיכולת. בדרך כלל היכולת תענה במשפט זהה למשפט שמוחזר בקריאה הראשונית. המשתמש נדרש לומר ״help״ ולכן זאת היא מילה שמורה בה לא תוכלו להשתמש.

• AMAZON.CancelIntent – כאשר המשתמש רוצה לבטל טרנזאקציה, אבל להישאר ביכולת, או לצאת לגמרי מהיכולת (skill). כל מה שהמשתמש נדרש לומר זה: ״cancel״ או ״never mind״ או ״forget it״.

• AMAZON.StopIntent – כאשר המשתמש רוצה לעצור פעולה, אבל להישאר ביכולת, או לצאת לגמרי מהיכולת (skill). כל מה שהמשתמש נדרש לומר זה: ״stop״ או ״off״ או ״shut up״.

• חשוב לציין שיש עוד Intents רבים, מובנים, שאפשריים לשימוש, אך הם בעיקר רלוונטים למי שמשתמש ב AudioPlayer – ניגון מוזיקה, פודקסטים וכדומה.

אמזון מחייבת כל יכולת (skill) לממש את ה Intents הללו. על מנת לעבור את הסרטיפיקציה ליכולת (skill) החדשה שתפתחו, חובה לפתח אותם.

שימוש בפרמטרים ב Intent – slots

על מנת להעביר פרמטרים ל Intent, במקרה שלנו: הצבע האהוב עלינו, כפי שראינו ביכולת (skill) החדשה שפיתחנו, נשתמש ב slots.

חשוב מאוד להבין!  בניגוד לתוכנות המסורתיות שעד היום פיתחנו, שקולטות קלט מהמקלדת, באלקסה הדבר הזה מורכב הרבה יותר.

צריך להבין שהכח של אלקסה טמון ביכולת שלה לתרגם את המילים הנאמרות על ידי המשתמש לטקסט, וכל זה במהירות של מילי שניות בענן. ולכן, שמשתמשים ב slots, אנו חייבים לציין מהו סוג הפרמטר – Slot Type.

סוגי Slot Types נפוצים:

• AMAZON.DATE – תאריך.

• AMAZON.NUMBER – מספר.

• AMAZON.TIME – שעה ביום.

ויש עוד רבים ומגוונים, על לאפשר לאלקסה לזהות מלל קצת פחות סטנדרטי:

• AMAZON.Actor – שמות של שחקנים - ״emma watson״.

• AMAZON.EUROPE_CITY – שמות של יותר מ5000 ערים באירופה.

• AMAZON.TVSeries – שמות של תוכניות טלוויזיה – ״game of throne״.

כמובן שאפשר גם להגדיר Slot Types Custom משלנו, שמורכבים מערכים שאנחנו נבחר – למשל הצבעים, כמו ביכולת Color Expert  שנפתח עוד מספר דקות.

חשוב מאוד להבין!  לא ניתן להגדיר ערכים שהם לא מילים באנגלית כחלק מ Custom Slot Types.

דוגמא: אם נפתח Custom Slot Types  שהוא השמות של קבוצות הכדורגל בליגה הלאומית: “Hapoeal Beer Sheba”, “Macabi Tel Aviv”, “Beitar Jerusalem” , דבר זה כמובן יעבוד אם שם הקבוצה יהיה קלט טקסט, אך לא יעבוד  כקלט של מילים לאלקסה! אלקסה פשוט לא תהיה מסוגלת לתרגם את שמות הקבוצות לטקסט.

לתיעוד מלא של ה Slot Types:

https://developer.amazon.com/docs/custom-skills/slot-type-reference.html

שימוש ב  sessions

כפי שראינו ב interaction flow, אנחנו אומרים לאלקסה את הצבע האהוב עלינו, ומייד אחרי זה, אלקסה עונה לנו את הצבע האהוב עלינו. פירוש הדבר, שאפר לעשות persist למידע שמתקבל על ידי המשתמש. זאת ניתן לעשות על ידי שימוש ב sessions.

שמפתחים יכולת (skill) לאלקסה, ניתן להשתמש ב sessions. דבר זה מתאפשר על ידי שני מרכיבים:

1. האפשרות שהיכולת תחכה לתשובה נוספת מהמשתמש, אחרי שהמשתמש השתמש ב  Intent ספציפי ואלקסה ענתה לו, ולמעשה ״להשאיר את היכול (skill) פתוח״. בשלב זה נראה שיש אור כחול בטבעת המקיפה של ה Echo Dot, דבר זה מסמן שאלקסה מחכה לקלט מהמשתמש.

2. שמירת מידע שמתקבל מהמשתמש במשתנה גלובלי, במהלך חיי ה session.

דבר זה שימושי מאוד בצ׳ט בוטים למיניהם, משחקי טריוויה, יכולות עם תפריטים וביכולות (skills) מתקדמים יותר.

יצירת ה AWS Lambda Function

המטרה בשלב הזה, היא ליצור את פונקציית הלמבדה שתופעל על ידי שירות האלקסה שנבנה.

1. ביצוע לוגין לAWS Console – Lambda portal : https://console.aws.amazon.com/lambda/home?region=us-east-1

2. AWS Lambda Functions לאלקסה נתמכות כרגע רק באיזורים: US East (N. Virginia)  או

EU (Ireland) לכן יש לוודא שאתם נמצאים באיזור המתאים.

3. לחיצה על כפתור ״Create a function״ :

4.כאן אנחנו נתעלם מהפונקציות המוכנות וניצור פונקציה חדשה – נלחץ על כפתור ״Author from scratch״:

5. נזין את המידע הבסיסי:

          a. שם הפונקציה (Name): colorExpertAlexaSkillFunction

          b. הרשאות הפונקציה (Role): נבחר להשתמש ב Role שיצרנו בתרגיל מחלק א׳ של המדריך, בתרגיל הקודם: ״alexaSkillLambdaFunctionRole״.

6. כעת נעבור לחלק העיקרי: הזנת הקוד של פונקציית הLambda  שלנו!

          a. בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/src/lambda_function.py

          b. שפת הרצה (Runtime): Python 2.7

          c. שם מתודת הכניסה שבקוד הפונקציה (Handler): lambda_function.lambda_handler

          d. העתק את תכולת הקובץ והדבק אותה בתיבת טקסט שמתחת ל״Edit Code Inline״:

7. הסברים על קוד הפונקציה.

כפי שניתן לראות בקוד שהעתקנו, הפונקציה היא למעשה מספר פונקציות שונות. נסקור כעת את הפונקציות העיקריות:

          a. פונקציה lambda_handler - הפונקציה המרכזית אליה מגיע ה event שנורה 

             כאשר קוראים ליכולת (skill) של האלקסה, היא ה lambda_handler. זוהי  למעשה

             ״פונקציית הכניסה״ ללמבדה וממנה נקרא לפונקציות האחרות. פונקציה זאת, אנו נגדיר 

             כנקודת כניסה בשלב הבא. 

          בפונקציה אנו רואים את הפרמטר שמועבר לנו לפונקציה event. הוא יכלול את כל הפרטים

          על היכולת (Alexa skill) שהפעלנו.

          את הפרמטרים העיקריים שמעניינים אותנו ב- event ניתן לראות בשורה 202, 204 ו- 206 

          בהתאמה: request type.

          דבר זה מהווה אינדיקציה לסוג הבקשה שאלקסה שלחה לנו:

                  • LaunchRequest – “Alexa, open color expert”.

                  • IntentRequest – כאן יכולות להיות כמה אפשרויות:

                          “my favorite color is red”

                          ״Cancel״

                          “Stop”

          b. פונקציה on_intent – פונקציה זאת מופעלת מהפונקציה הראשית 

               lambda_handler כאשר מזהים הפעלה שהיא

              IntentRequest – בקשה ספציפית מאלקסה (לעומת הפעלה ראשונית של היכולת).

          כפי שניתן לראות בקוד, ישנם מספר סוגי Intents:

          i. ״MyColorIsIntent״: משמש בקלט לאלקסה לקבוע את הצבע האהוב ב session.

          ii. ״WhatsMyColorIntent״: זהו ה Intent שבו אלקסה תשלוף את הצבע האהוב עלינו

              מה session ותאמר לנו אותו.

          iii. ״AMAZON.HelpIntent״: בכל שלב במהלך חיי היכולת (skill) נוכל לומר ״help״ 

              ואלקסה תקריא לנו את הטקסט שבפונקציה ״get_welcome_response״.

          iv. ״AMAZON.CancelIntent״ ו ״AMAZON.StopIntent

               ״: בכל שלב במהלך חיי היכולת (skill) נוכל לומר ״cancel״ או ״stop״ ואלקסה תקריא לנו

               את הטקסט שבפונקציה "handle_session_end_request״ ותצא מהיכולת (skill).

          c. פונקצית set_color_in_session – זאת הפונקציה שלמעשה שתקבל מהמשתמש את הצבע

              האהוב עליו ותחזיר את הטקסט לאלקסה.

              כאן ישנו החלק החשוב והמעניין, זהו האחראי לכך שה session לא יסתיים והמשתמש

              יוכל  לשאול את אלקסה לגבי הצבע האהוב עליו: ״what's my favorite color?״ ואז

              אלקסה תשלוף מה session את הצבע ותענה.

               שמירת הצבע האהוב ב session - איך הדבר מתבצע?

              הדבר הראשון שנצטרך לדאוג לו זה שה session לא יסגר, ובכך אלקסה תחכה לתשובה

              נוספת (הצבע האהוב עלינו). לכך אפשר לדאוג בקלות על ידי העברת

              ״shouldEndSession״ בבקשה  לאלקסה. בפונקציה שלנו דואגים לכך בשורה 86.

              פרמטר זה מועבר לבסוף לפונקציה ״build_speechlet_response״ 

              ושם מעבירים את הבקשה לאלקסה.

                

              הדבר השני זהו כמובן, להעביר את הצבע עצמו, כחלק ממשתנה 

              שישמר ב session. דבר זה נעשה בשורה 90. שם מתבצעת ההשמה לאובייקט

              ״session_attributes״ עם הצבע שנלקח מהקלט מהמשתמש. במתודת

              ״build_response״ יתבצע שימוש באובייקט ״session_attributes״ להעברת הצבע

              ב attribute בשם ״favoriteColor״ על גבי ה session.

         d. פונקצית get_color_from_session – כאן אלקסה עונה לנו מהו הצבע האהוב עלינו.

             הצבע שנלקח מה session!

            ניתן לראות בשורה 112, איך הצבע האהוב עלינו, נלקח מאובייקט ה session, מ attribute

            בשם ״favoriteColor ״שהועבר על גביו בשלב הקודם, בפונקציית

            ״set_color_in_session״ שאותה כבר סקרנו.

            כמו כן, ניתן לראות בשורה 115 השמה של True למשתנה ״should_end_session״. 

            דבר זה יגרום לכך שהפעם אלקסה כן תסיים את ה session, קרי חיי היכולת ((skill יסתיימו.

8. כעת אנו נוסיף טריגר ״Alexa Skills Kit״ לפונקציה שלנו. נלחץ על הטאב ״Triggers״:

9. לחץ על ה- "+" Add Trigger:

10. כעת אנו נוסיף טריגר ״Alexa Skills Kit״ לפונקציה שלנו:

11. אנחנו אמורים לראות את המסך הבא:

12. כעת נלחץ על כפתור ״Submit״.

13. שמירת הפונקציה ובדיקתה – לחץ על כפתור ״Save and test״:

14. כעת יוצג המסך הבא, להזנת Event בדיקת הפונקציה:

15. Event Name: הכנס את שם Event הבדיקה: ״testColorExpertEvent״.

16. בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/src/color-expert-alexa-skill_test_event.json

17. בבחינה של הקובץ, ניתן לראות את ״MyColorIsIntent״, עם slots שמכיל בתוכו Color blue:

18. העתק את תכולת הקובץ כולו והדבק אותה בתיבת טקסט שמתחת ל ״Event Name״:

19. לחץ על הכפתור ״Create״.

20. וכעת אחרי ש Event הבדיקה נשמר, נלחץ על כפתור ״Test״ על מנת לבדוק את פונקציית

      הLambda  שסיימנו לפתח:

21. אחרי מספר שניות של פעולת הפונקציה, הפלט הבא אמור להופיע:

בלחיצה על ״Details״, אנחנו נראה את התשובה שחוזרת מפונקציית ה  Lambda.

מעניין לראות את אלמנט ה ״OutputSpeech״ שהוא למעשה הטקסט שיוקרא על ידי אלקסה, וכולל את הטקסט ״I now know your favorite color is blue״, שמדגים את העובדה שאלקסה שמרה את הצבע האהוב עלינו, זה שהתקבל מ Event הבדיקה ב Session, כפי שסקרנו קודם לכן.

יצירת יכולת (skill) האלקסה Color Expert

להלן השלבים:

1. ביצוע לוגין לפורטל Amazon Developer: https://developer.amazon.com

2. מעבר לטאב של Alexa ולחיצה על כפתור ״Get Started״ של Alexa Skills Kit:

3. לחיצה על כפתור ״Add a New Skill״ להוספת היכולת החדשה שלנו:

4. הזנת ״Color Expert״ בשם היכולת (skill) ובשם ההפעלה (Invocation Name):

5. לחץ על כפתור ״Save״ ולאחר מכן כפתור ״Next״.

6. שלב פיתוח ״Interaction Model״:

    כאן ניישם את החומר החדש אותו למדנו במדריך עד כה – slots, slot types וה intents 

    החדשים: ״AMAZON.CancelIntent״, ״AMAZON.StopIntent״ 

     ו ״AMAZON.HelpIntent״.

     • הוספת Intent Schema:

     o בעזרת דפדפן, נווט לכתובת הבאה: 

          https://github.com/eitansela/alexa-color-expert-skill/

          blob/master/speechAssets/IntentSchema.json

     o העתק את תכולת הקובץ והדבק אותו בתיבת הטקסט ״Intent Schema״:

     • הוספת Custom Slot Types:

                     o בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/speechAssets/CustomSlotTypes.txt

                     o העתק את השורה הראשונה בקובץ ״LIST_OF_COLORS״ לתיבת הטקסט 

                        ״Enter Type״.

                     o העתק את שאר השורות בקובץ (שמות הצבעים) והדבק אותם בתיבת הטקסט

                        ״ Enter Values״.

                     o לחץ על כפתור ״Add״:

     • הוספת Sample Utterances:

                    o  בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/speechAssets/SampleUtterances.txt

                    o  העתק את תכולת הקובץ והדבק אותו בתיבת הטקסט ״Sample Utterances״

                    o  לחץ על כפתור ״Next״:

7. קינפוג פונקציית ה Lambda כ backend  ליכולת (skill):

    אם עד עכשיו פיתחנו את הקליינט, קרי יכולת (skill) האלקסה. כעת נמפה את היכולת ל backend 

    פונקציית ה Lambda  שפיתחנו קודם לכן.

    אנחנו נעתיק את ה arn של פונקציית ה Lambda מדף הפורטל של פונקציות הלמבדה:

    ונדביק אותו בשדה ״Default״ (נא לשים לב שמסמנים את האופציה של AWS Lambda ARN 

     ולא HTTPS):

8. לחיצה על כפתור ״Next״.

9. שימוש בסימולטור (Service Simulator) על מנת לבדוק את היכולת (skill) שפיתחנו:

    כאן נוכל לכתוב את המילים שנרצה שהאלקסה ״תשמע״, בתבנית של ה Sample Utterances:

    ולקבל את הפלט מהאלקסה, ואפילו לשמוע אותו.

    חשוב להבין שהסימולטור עובר דרך הרכיבים הבאים, שהגדרנו קודם לכן:

        • Interaction Model – Intent Schema + Sample Utterances

        • AWS Lambda Function

         הכל עובר עיבוד אמיתי. הדבר היחיד שחסר זה הפעלת היכולת בקול האנושי.

         להפעלת הסימולטור:

        • בתיבת הטקסט ״Enter Utterance״ נכתוב את המילה ״help

          ״ על מנת לראות שה intent החדש באמת עובד.

        • נלחץ על הכפתור ״Ask Color Expert״:

         • רואים בתיבת הטקסט ״Service Respone״, שאלקסה שואלת אותנו לצבע האהוב עלינו. 

           דבר זה מצביע על כך שהקריאה לפונקציית ה Lambda שפיתחנו קודם לכן,עברה בהצלחה.

         • כעת נכתוב בתיבת הטקסט ״Enter Utterance״ את המשפט ״my favorite color is blue״:

         • אנו יכולים לראות שאלקסה אמרה לנו את הצבע האהוב עלינו!

           הצבע שנלקח מה session. היכולת (skill) החדשה עובדת.

הדגמת של היכולת (skill) החדשה על Echo Dot

כעת, נראה את היכולת (skill) החדשה שפיתחנו, רצה על מכשיר ה Echo Dot:

https://www.youtube.com/watch?v=qI7a3JEsf7g

ולסיום, אמזון מציעים מעל 250,000 דולר בפרסים למפתחים שיפתחו יכולות (skills) חדשות לילדים.

עכשיו, שלמדתם לכתוב יכולת חדשה, לא תנסו?

https://developer.amazon.com/blogs/alexa/post/f9671946-9039-45a4-83a7-ed1e15de682d/alexa-skills-challenge-offers-250-000-in-prizes-for-best-kid-skills

בחלק א׳ של המדריך, סקרתי על אלקסה (Alexa) - הסייעת הדיגיטלית החכמה של אמזון. תאריך היציאה לשוק, היקף השימוש וסוגי המכשירים. כמו כן, הבאתי דוגמה כיצד לפתח יכולת (skill) בסיסי של Hello World לאלקסה.

מומלץ לעבור על חלק א׳ של המדריך, לפני שקוראים את המדריך הזה.

חדשות אלקסה

מאז שפורסם חלק א׳ של המדריך ועד היום, עבר פחות מחודש, ובינתיים אמזון לא שקטה על השמרים בכל מה שקשור באלקסה:

מכשיר Echo חדש ומשופר

מכשיר Echo Plus חדש עם שליטה משופרת על הבית החכם

מכשיר Echo spot חדש –  Echo עם מסך

אלקסה מגיעה להודו! אלקסה כעת זמינה ל 1.35 מיליארד הודים דוברי אנגלית.

החדשות שסקרתי הן מעט מכל ההכרזות של אמזון לגבי אלקסה. לכל החדשות וההכרזות, מומלץ לבקר בפורטל המפתחים של אלקסה.

מדוע חלק א׳ של המדריך לא מספיק כדי להתחיל לפתח יכולת (skill) חדשה לאלקסה?

בחלק א׳ של המדריך פיתחנו את היכולת ״Greeter״ שבירכה אותנו כאשר ביקשנו כך מאלקסה.

זאת היתה דוגמה מצויינת למי שרוצה להתחיל לפתח יכולת חדשה ובסיסית לאלקסה. אך כפי שהזכרתי, אין להשתמש במדריך הזה כבסיס לפיתוח יכולת שלמה שאמורה לעבור סרטיפיקציה בחנות של אמזון

ולכן, לקריאה ופיתוח את היכולת (skill) החדשה בחלק ב׳ של המדריך חשיבות קריטית, למי שרוצה לפתח יכולות אמיתיות לאלקסה. כאלה שיעברו סרטיפיקציה ויוצגו בחנות של אמזון.

מה נלמד בחלק ב׳ של המדריך?

במאמר הזה נסקור את הנושאים הבאים:

1. ה Intents הבסיסיים, המובנים באלקסה, והחיוניים לסרטיפיקציה, שלא כיסינו בחלק א׳ של המדריך.

2. מהם Slots ואיך הם משתלבים בתוך ה Intent?

3. מהם ה Custom Slot Types ומתי נשתמש בהם?

4. ניהול sessions, שבשימוש בהם, אלקסה עונה לשאלה של המשתמש ומחכה לתשובה נוספת.

פיתוח היכולת (skill) החדשה – Color Expert בחלק ב׳ של המדריך

הפעם נפתח יכולת (skill) מורכבת יותר מהיכולת “greeter” שפיתחנו בחלק א׳ של המדריך.

אנו נפתח יכולת (skill) חדשה שתשאל אותנו לצבע האהוב עלינו, ולכשנענה לשאלה ונאמר את הצבע, אלקסה תקלוט את תשובתנו ותאמר לנו את הצבע שאמרנו לה קודם לכן.

הדוגמא לקוחה מהמדריך ״Host a Custom Skill as an AWS Lambda Function״ של אמזון: http://amzn.to/1LzFrj6

Interaction flow - הדגמה במילים של היכולת החדשה ״Color Expert״

User: “Alexa open Color Expert”

Alexa: “Welcome to the Alexa color expert skill. Please tell me your favorite color by saying, my favorite color is red.”

בשלב זה, אם המשתמש לא עונה או אומר משהו שלא מובן לאלקסה, אז יקרה הדבר הבא:

Alexa: “Please tell me your favorite color by saying, my favorite color is red.”

המשתמש עונה:

User: “my favorite color is blue.”

Alexa: “Your favorite color is blue. Goodbye.”

בכל שלב במהלך ריצת היכולת (skill) אם המשתמש אומר ״cancel״ או ״stop״:

Alexa: “Thank you for trying the Alexa Skills Kit sample. Have a nice day!”

בכל שלב במהלך ריצת היכולת (skill) אם המשתמש אומר ״help״:

Alexa: “Welcome to the Alexa color expert skill. Please tell me your favorite color by saying, my favorite color is red.”

מסקירה של הInteraction flow אנו רואים מספר דברים חדשים ביכולת (skill):

• שימוש במילים ״cancel״,״stop״,״help״.

• שימוש בפרמטרים ב Intent – אנחנו עונים איזה צבע הוא האהוב עלינו וזהו הפרמטר ליכולת (skill). דבר זה נקרא ״slots״.

• שימוש ב session – אלקסה אינה יוצאת מהיכולת (skill) עם קבלת ההוראה מהמשתמש אלא מחכה לקלט נוסף ו״זוכרת״ את מה שענינו לה ועושה בזה שימוש בהמשך.

נושאים מתקדמים -ב Interaction Model שנסקור בחלק ב׳ של התרגיל

ה Intents הבסיסיים, המובנים באלקסה, והחיוניים לסרטיפיקציה, שלא כיסינו בחלק א׳ של המדריך

בחלק א׳ של המדריך כיסינו שני Intents בלבד: ״LaunchRequest״ שמגיע מובנה שיוזמים קריאה ראשונית ליכולת (skill), ו ״HelloWorldIntent״ שאותו למעשה פיתחנו במיוחד במדריך.

דבר זה אינו מספיק על מנת לספק את מלוא החוויה למשתמשים באלקסה.

על מנת להקל על המשתמשים בשימוש באלקסה ולספק שפה אחידה בשימוש במגוון היכולות (skills) הקיימות בחנות אמזון, ישנם Intents סטנדרטים שכל יכולת (skill) חייבת לממש:

• AMAZON.HelpIntent – מיועד על מנת להסביר למשתמש על היכולת (skill) ומגוון האפשרויות, כאשר הוא מבקש עזרה מהיכולת. בדרך כלל היכולת תענה במשפט זהה למשפט שמוחזר בקריאה הראשונית. המשתמש נדרש לומר ״help״ ולכן זאת היא מילה שמורה בה לא תוכלו להשתמש.

• AMAZON.CancelIntent – כאשר המשתמש רוצה לבטל טרנזאקציה, אבל להישאר ביכולת, או לצאת לגמרי מהיכולת (skill). כל מה שהמשתמש נדרש לומר זה: ״cancel״ או ״never mind״ או ״forget it״.

• AMAZON.StopIntent – כאשר המשתמש רוצה לעצור פעולה, אבל להישאר ביכולת, או לצאת לגמרי מהיכולת (skill). כל מה שהמשתמש נדרש לומר זה: ״stop״ או ״off״ או ״shut up״.

• חשוב לציין שיש עוד Intents רבים, מובנים, שאפשריים לשימוש, אך הם בעיקר רלוונטים למי שמשתמש ב AudioPlayer – ניגון מוזיקה, פודקסטים וכדומה.

אמזון מחייבת כל יכולת (skill) לממש את ה Intents הללו. על מנת לעבור את הסרטיפיקציה ליכולת (skill) החדשה שתפתחו, חובה לפתח אותם.

שימוש בפרמטרים ב Intent – slots

על מנת להעביר פרמטרים ל Intent, במקרה שלנו: הצבע האהוב עלינו, כפי שראינו ביכולת (skill) החדשה שפיתחנו, נשתמש ב slots.

חשוב מאוד להבין!  בניגוד לתוכנות המסורתיות שעד היום פיתחנו, שקולטות קלט מהמקלדת, באלקסה הדבר הזה מורכב הרבה יותר.

צריך להבין שהכח של אלקסה טמון ביכולת שלה לתרגם את המילים הנאמרות על ידי המשתמש לטקסט, וכל זה במהירות של מילי שניות בענן. ולכן, שמשתמשים ב slots, אנו חייבים לציין מהו סוג הפרמטר – Slot Type.

סוגי Slot Types נפוצים:

• AMAZON.DATE – תאריך.

• AMAZON.NUMBER – מספר.

• AMAZON.TIME – שעה ביום.

ויש עוד רבים ומגוונים, על לאפשר לאלקסה לזהות מלל קצת פחות סטנדרטי:

• AMAZON.Actor – שמות של שחקנים - ״emma watson״.

• AMAZON.EUROPE_CITY – שמות של יותר מ5000 ערים באירופה.

• AMAZON.TVSeries – שמות של תוכניות טלוויזיה – ״game of throne״.

כמובן שאפשר גם להגדיר Slot Types Custom משלנו, שמורכבים מערכים שאנחנו נבחר – למשל הצבעים, כמו ביכולת Color Expert  שנפתח עוד מספר דקות.

חשוב מאוד להבין!  לא ניתן להגדיר ערכים שהם לא מילים באנגלית כחלק מ Custom Slot Types.

דוגמא: אם נפתח Custom Slot Types  שהוא השמות של קבוצות הכדורגל בליגה הלאומית: “Hapoeal Beer Sheba”, “Macabi Tel Aviv”, “Beitar Jerusalem” , דבר זה כמובן יעבוד אם שם הקבוצה יהיה קלט טקסט, אך לא יעבוד  כקלט של מילים לאלקסה! אלקסה פשוט לא תהיה מסוגלת לתרגם את שמות הקבוצות לטקסט.

לתיעוד מלא של ה Slot Types:

https://developer.amazon.com/docs/custom-skills/slot-type-reference.html

שימוש ב  sessions

כפי שראינו ב interaction flow, אנחנו אומרים לאלקסה את הצבע האהוב עלינו, ומייד אחרי זה, אלקסה עונה לנו את הצבע האהוב עלינו. פירוש הדבר, שאפר לעשות persist למידע שמתקבל על ידי המשתמש. זאת ניתן לעשות על ידי שימוש ב sessions.

שמפתחים יכולת (skill) לאלקסה, ניתן להשתמש ב sessions. דבר זה מתאפשר על ידי שני מרכיבים:

1. האפשרות שהיכולת תחכה לתשובה נוספת מהמשתמש, אחרי שהמשתמש השתמש ב  Intent ספציפי ואלקסה ענתה לו, ולמעשה ״להשאיר את היכול (skill) פתוח״. בשלב זה נראה שיש אור כחול בטבעת המקיפה של ה Echo Dot, דבר זה מסמן שאלקסה מחכה לקלט מהמשתמש.

2. שמירת מידע שמתקבל מהמשתמש במשתנה גלובלי, במהלך חיי ה session.

דבר זה שימושי מאוד בצ׳ט בוטים למיניהם, משחקי טריוויה, יכולות עם תפריטים וביכולות (skills) מתקדמים יותר.

יצירת ה AWS Lambda Function

המטרה בשלב הזה, היא ליצור את פונקציית הלמבדה שתופעל על ידי שירות האלקסה שנבנה.

1. ביצוע לוגין לAWS Console – Lambda portal : https://console.aws.amazon.com/lambda/home?region=us-east-1

2. AWS Lambda Functions לאלקסה נתמכות כרגע רק באיזורים: US East (N. Virginia)  או

EU (Ireland) לכן יש לוודא שאתם נמצאים באיזור המתאים.

3. לחיצה על כפתור ״Create a function״ :

4.כאן אנחנו נתעלם מהפונקציות המוכנות וניצור פונקציה חדשה – נלחץ על כפתור ״Author from scratch״:

5. נזין את המידע הבסיסי:

          a. שם הפונקציה (Name): colorExpertAlexaSkillFunction

          b. הרשאות הפונקציה (Role): נבחר להשתמש ב Role שיצרנו בתרגיל מחלק א׳ של המדריך, בתרגיל הקודם: ״alexaSkillLambdaFunctionRole״.

6. כעת נעבור לחלק העיקרי: הזנת הקוד של פונקציית הLambda  שלנו!

          a. בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/src/lambda_function.py

          b. שפת הרצה (Runtime): Python 2.7

          c. שם מתודת הכניסה שבקוד הפונקציה (Handler): lambda_function.lambda_handler

          d. העתק את תכולת הקובץ והדבק אותה בתיבת טקסט שמתחת ל״Edit Code Inline״:

7. הסברים על קוד הפונקציה.

כפי שניתן לראות בקוד שהעתקנו, הפונקציה היא למעשה מספר פונקציות שונות. נסקור כעת את הפונקציות העיקריות:

          a. פונקציה lambda_handler - הפונקציה המרכזית אליה מגיע ה event שנורה 

             כאשר קוראים ליכולת (skill) של האלקסה, היא ה lambda_handler. זוהי  למעשה

             ״פונקציית הכניסה״ ללמבדה וממנה נקרא לפונקציות האחרות. פונקציה זאת, אנו נגדיר 

             כנקודת כניסה בשלב הבא. 

          בפונקציה אנו רואים את הפרמטר שמועבר לנו לפונקציה event. הוא יכלול את כל הפרטים

          על היכולת (Alexa skill) שהפעלנו.

          את הפרמטרים העיקריים שמעניינים אותנו ב- event ניתן לראות בשורה 202, 204 ו- 206 

          בהתאמה: request type.

          דבר זה מהווה אינדיקציה לסוג הבקשה שאלקסה שלחה לנו:

                  • LaunchRequest – “Alexa, open color expert”.

                  • IntentRequest – כאן יכולות להיות כמה אפשרויות:

                          “my favorite color is red”

                          ״Cancel״

                          “Stop”

          b. פונקציה on_intent – פונקציה זאת מופעלת מהפונקציה הראשית 

               lambda_handler כאשר מזהים הפעלה שהיא

              IntentRequest – בקשה ספציפית מאלקסה (לעומת הפעלה ראשונית של היכולת).

          כפי שניתן לראות בקוד, ישנם מספר סוגי Intents:

          i. ״MyColorIsIntent״: משמש בקלט לאלקסה לקבוע את הצבע האהוב ב session.

          ii. ״WhatsMyColorIntent״: זהו ה Intent שבו אלקסה תשלוף את הצבע האהוב עלינו

              מה session ותאמר לנו אותו.

          iii. ״AMAZON.HelpIntent״: בכל שלב במהלך חיי היכולת (skill) נוכל לומר ״help״ 

              ואלקסה תקריא לנו את הטקסט שבפונקציה ״get_welcome_response״.

          iv. ״AMAZON.CancelIntent״ ו ״AMAZON.StopIntent

               ״: בכל שלב במהלך חיי היכולת (skill) נוכל לומר ״cancel״ או ״stop״ ואלקסה תקריא לנו

               את הטקסט שבפונקציה "handle_session_end_request״ ותצא מהיכולת (skill).

          c. פונקצית set_color_in_session – זאת הפונקציה שלמעשה שתקבל מהמשתמש את הצבע

              האהוב עליו ותחזיר את הטקסט לאלקסה.

              כאן ישנו החלק החשוב והמעניין, זהו האחראי לכך שה session לא יסתיים והמשתמש

              יוכל  לשאול את אלקסה לגבי הצבע האהוב עליו: ״what's my favorite color?״ ואז

              אלקסה תשלוף מה session את הצבע ותענה.

               שמירת הצבע האהוב ב session - איך הדבר מתבצע?

              הדבר הראשון שנצטרך לדאוג לו זה שה session לא יסגר, ובכך אלקסה תחכה לתשובה

              נוספת (הצבע האהוב עלינו). לכך אפשר לדאוג בקלות על ידי העברת

              ״shouldEndSession״ בבקשה  לאלקסה. בפונקציה שלנו דואגים לכך בשורה 86.

              פרמטר זה מועבר לבסוף לפונקציה ״build_speechlet_response״ 

              ושם מעבירים את הבקשה לאלקסה.

                

              הדבר השני זהו כמובן, להעביר את הצבע עצמו, כחלק ממשתנה 

              שישמר ב session. דבר זה נעשה בשורה 90. שם מתבצעת ההשמה לאובייקט

              ״session_attributes״ עם הצבע שנלקח מהקלט מהמשתמש. במתודת

              ״build_response״ יתבצע שימוש באובייקט ״session_attributes״ להעברת הצבע

              ב attribute בשם ״favoriteColor״ על גבי ה session.

         d. פונקצית get_color_from_session – כאן אלקסה עונה לנו מהו הצבע האהוב עלינו.

             הצבע שנלקח מה session!

            ניתן לראות בשורה 112, איך הצבע האהוב עלינו, נלקח מאובייקט ה session, מ attribute

            בשם ״favoriteColor ״שהועבר על גביו בשלב הקודם, בפונקציית

            ״set_color_in_session״ שאותה כבר סקרנו.

            כמו כן, ניתן לראות בשורה 115 השמה של True למשתנה ״should_end_session״. 

            דבר זה יגרום לכך שהפעם אלקסה כן תסיים את ה session, קרי חיי היכולת ((skill יסתיימו.

8. כעת אנו נוסיף טריגר ״Alexa Skills Kit״ לפונקציה שלנו. נלחץ על הטאב ״Triggers״:

9. לחץ על ה- "+" Add Trigger:

10. כעת אנו נוסיף טריגר ״Alexa Skills Kit״ לפונקציה שלנו:

11. אנחנו אמורים לראות את המסך הבא:

12. כעת נלחץ על כפתור ״Submit״.

13. שמירת הפונקציה ובדיקתה – לחץ על כפתור ״Save and test״:

14. כעת יוצג המסך הבא, להזנת Event בדיקת הפונקציה:

15. Event Name: הכנס את שם Event הבדיקה: ״testColorExpertEvent״.

16. בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/src/color-expert-alexa-skill_test_event.json

17. בבחינה של הקובץ, ניתן לראות את ״MyColorIsIntent״, עם slots שמכיל בתוכו Color blue:

18. העתק את תכולת הקובץ כולו והדבק אותה בתיבת טקסט שמתחת ל ״Event Name״:

19. לחץ על הכפתור ״Create״.

20. וכעת אחרי ש Event הבדיקה נשמר, נלחץ על כפתור ״Test״ על מנת לבדוק את פונקציית

      הLambda  שסיימנו לפתח:

21. אחרי מספר שניות של פעולת הפונקציה, הפלט הבא אמור להופיע:

בלחיצה על ״Details״, אנחנו נראה את התשובה שחוזרת מפונקציית ה  Lambda.

מעניין לראות את אלמנט ה ״OutputSpeech״ שהוא למעשה הטקסט שיוקרא על ידי אלקסה, וכולל את הטקסט ״I now know your favorite color is blue״, שמדגים את העובדה שאלקסה שמרה את הצבע האהוב עלינו, זה שהתקבל מ Event הבדיקה ב Session, כפי שסקרנו קודם לכן.

יצירת יכולת (skill) האלקסה Color Expert

להלן השלבים:

1. ביצוע לוגין לפורטל Amazon Developer: https://developer.amazon.com

2. מעבר לטאב של Alexa ולחיצה על כפתור ״Get Started״ של Alexa Skills Kit:

3. לחיצה על כפתור ״Add a New Skill״ להוספת היכולת החדשה שלנו:

4. הזנת ״Color Expert״ בשם היכולת (skill) ובשם ההפעלה (Invocation Name):

5. לחץ על כפתור ״Save״ ולאחר מכן כפתור ״Next״.

6. שלב פיתוח ״Interaction Model״:

    כאן ניישם את החומר החדש אותו למדנו במדריך עד כה – slots, slot types וה intents 

    החדשים: ״AMAZON.CancelIntent״, ״AMAZON.StopIntent״ 

     ו ״AMAZON.HelpIntent״.

     • הוספת Intent Schema:

     o בעזרת דפדפן, נווט לכתובת הבאה: 

          https://github.com/eitansela/alexa-color-expert-skill/

          blob/master/speechAssets/IntentSchema.json

     o העתק את תכולת הקובץ והדבק אותו בתיבת הטקסט ״Intent Schema״:

     • הוספת Custom Slot Types:

                     o בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/speechAssets/CustomSlotTypes.txt

                     o העתק את השורה הראשונה בקובץ ״LIST_OF_COLORS״ לתיבת הטקסט 

                        ״Enter Type״.

                     o העתק את שאר השורות בקובץ (שמות הצבעים) והדבק אותם בתיבת הטקסט

                        ״ Enter Values״.

                     o לחץ על כפתור ״Add״:

     • הוספת Sample Utterances:

                    o  בעזרת דפדפן, נווט לכתובת הבאה: https://github.com/eitansela/alexa-color-expert-skill/blob/master/speechAssets/SampleUtterances.txt

                    o  העתק את תכולת הקובץ והדבק אותו בתיבת הטקסט ״Sample Utterances״

                    o  לחץ על כפתור ״Next״:

7. קינפוג פונקציית ה Lambda כ backend  ליכולת (skill):

    אם עד עכשיו פיתחנו את הקליינט, קרי יכולת (skill) האלקסה. כעת נמפה את היכולת ל backend 

    פונקציית ה Lambda  שפיתחנו קודם לכן.

    אנחנו נעתיק את ה arn של פונקציית ה Lambda מדף הפורטל של פונקציות הלמבדה:

    ונדביק אותו בשדה ״Default״ (נא לשים לב שמסמנים את האופציה של AWS Lambda ARN 

     ולא HTTPS):

8. לחיצה על כפתור ״Next״.

9. שימוש בסימולטור (Service Simulator) על מנת לבדוק את היכולת (skill) שפיתחנו:

    כאן נוכל לכתוב את המילים שנרצה שהאלקסה ״תשמע״, בתבנית של ה Sample Utterances:

    ולקבל את הפלט מהאלקסה, ואפילו לשמוע אותו.

    חשוב להבין שהסימולטור עובר דרך הרכיבים הבאים, שהגדרנו קודם לכן:

        • Interaction Model – Intent Schema + Sample Utterances

        • AWS Lambda Function

         הכל עובר עיבוד אמיתי. הדבר היחיד שחסר זה הפעלת היכולת בקול האנושי.

         להפעלת הסימולטור:

        • בתיבת הטקסט ״Enter Utterance״ נכתוב את המילה ״help

          ״ על מנת לראות שה intent החדש באמת עובד.

        • נלחץ על הכפתור ״Ask Color Expert״:

         • רואים בתיבת הטקסט ״Service Respone״, שאלקסה שואלת אותנו לצבע האהוב עלינו. 

           דבר זה מצביע על כך שהקריאה לפונקציית ה Lambda שפיתחנו קודם לכן,עברה בהצלחה.

         • כעת נכתוב בתיבת הטקסט ״Enter Utterance״ את המשפט ״my favorite color is blue״:

         • אנו יכולים לראות שאלקסה אמרה לנו את הצבע האהוב עלינו!

           הצבע שנלקח מה session. היכולת (skill) החדשה עובדת.

הדגמת של היכולת (skill) החדשה על Echo Dot

כעת, נראה את היכולת (skill) החדשה שפיתחנו, רצה על מכשיר ה Echo Dot:

https://www.youtube.com/watch?v=qI7a3JEsf7g

ולסיום, אמזון מציעים מעל 250,000 דולר בפרסים למפתחים שיפתחו יכולות (skills) חדשות לילדים.

עכשיו, שלמדתם לכתוב יכולת חדשה, לא תנסו?

https://developer.amazon.com/blogs/alexa/post/f9671946-9039-45a4-83a7-ed1e15de682d/alexa-skills-challenge-offers-250-000-in-prizes-for-best-kid-skills

לפרטים נוספים ויצירת קשר עם נציג אורקל

תודה הודעתך התקבלה

הודעתך לא התקבלה - נסה שוב מאוחר יותר

איתן סלע

הירשם לרשימת הדיוור של IsraelClouds

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

מילון מונחיםהשירותים שלנו תנאי שימושהרשמה לניוזלטרמדיניות פרטיות