كيفية بناء مهارة مخصصة للأمازون Alexa ، خطوة بخطوة: لاعبي الشطرنج المفضلين لدي

تريد أن تجعل مهارة الأمازون أليكسا مخصصة؟ إنه أسهل مما تعتقد. إليك كل ما تحتاج إلى معرفته لبناء أول مهارة مخصصة لك من Amazon Alexa.

مقدمة لمهارات اليكسا

Alexa هي خدمة الصوت المستندة إلى مجموعة النظراء من Amazon والتي تعمل على تشغيل مجموعة الأجهزة Echo بالإضافة إلى التطبيق المصاحب على هواتف Android و iOS الذكية.

من خارج الصندوق ، يمكن للمستخدم إعطاء Alexa عددًا من الأوامر الصوتية مثل إنشاء قائمة مهام أو ضبط المنبه أو تشغيل أغنية أو تقديم الأخبار. تسمى المهام التي تنفذها Alexa بناءً على طلب المستخدم "مهارات Alexa". في الأساس ، فإن Alexa Skill هو تطبيق Alexa يحركه الصوت.

لدى Alexa عدد من المهارات المدمجة ، ولكن يمكن للمطورين بناء مهارات مخصصة جديدة ، باستخدام Alexa Skill Kit (ASK). ASK ، وهي مجموعة من واجهات برمجة التطبيقات والأدوات ، تتعامل مع العمل الشاق المتعلق بالواجهات الصوتية بما في ذلك التعرف على الكلام وترميز النص إلى كلام ومعالجة اللغة الطبيعية. ASK يساعد المطورين على بناء مهارات بسرعة وسهولة.

في هذا المنشور ، سنقدم أساسيات تطوير مهارات Alexa من خلال بناء مهارة مخصصة بسيطة تسمى "My Chess Player".

يمكنك بعد ذلك تطبيق نفس العملية لتحويل فكرتك لأمر صوتي مخصص إلى مهارة Amazon Alexa صالحة.

المستخدم - مخصص اليكسا مهارة الاتصالات

يتم تحقيق التواصل بين المستخدم والمهارة المخصصة من خلال جهاز يعمل به Alexa مثل Echo.

يتم تنشيط مهارة معينة من خلال قول اسم استدعاء المهارة مع كلمة المشغل ("Alexa") التي تنشط جهاز الصدى. على سبيل المثال ، فإن أمر "Alexa ، افتح لاعب الشطرنج المفضل لدي" سيبدأ مهارة "My Chess Player".

عند تنشيط المهارة ، يكون المستخدم قادرًا على إرسال أوامر صوتية أخرى أو طلبات الكلام إلى المهارة.

التواصل ضمن Custom Alexa Skill

تتكون مهارة Alexa من عنصرين رئيسيين: واجهة المهارة وخدمة المهارة.

تقوم واجهة المهارة بمعالجة طلبات الكلام الخاصة بالمستخدم ثم تعينها على نوايا داخل نموذج التفاعل. القصد من ذلك هي الإجراءات التي تلبي الطلبات المنطوقة من المستخدم. تحتوي كل نية على جملة واحدة على الأقل أو كلمة أو جملة أو جملة محددة مسبقًا قد يقولها المستخدم لاستدعاء النية. إذا تم الكشف عن نية محددة ، فإن واجهة المهارة تنشئ حدثًا مشفرًا json ، يتم تمريره إلى خدمة المهارة.

تحدد خدمة المهارة الإجراءات التي يجب اتخاذها استجابة للحدث المشفر JSON الذي تم استلامه من واجهة المهارة. عند الوصول إلى قرار ، تقوم خدمة المهارة بإرجاع استجابة مشفرة من JSON إلى واجهة المهارة لمزيد من المعالجة. بعد المعالجة ، يتم إرسال استجابة الكلام إلى المستخدم من خلال الصدى.

اتصال مهارات المستخدم

المكونات الرئيسية لبناء مهارة مخصصة

الآن وقد أصبحنا نعرف ، من حيث المبدأ ، كيفية التواصل مع مهارة مخصصة ، فقد حان الوقت لإعداد الأدوات اللازمة لبناء واحدة.

يتم تطبيق واجهة المهارة داخل منصة مطوري Amazon Alexa. هذا يعني أنك ستحتاج إلى حساب Amazon Developers Services (ADS) من أجل بناء المهارة ونموذج التفاعل الخاص بها.

ملاحظة: إذا لم يكن لديك حساب ADS ، فقد حان الوقت الآن لإنشاء حساب. فمن السهل ومجانا.

سنستخدم خدمة الويب من Amazon (AWS) كخدمة للمهارات ، لذلك ستحتاج أيضًا إلى حساب خدمات AWS. في AWS ، سنكتب وظيفة من شأنها اتخاذ القرارات وإنشاء ردود بناءً على الحدث الذي تم استلامه.

ملاحظة: قد يستغرق إنشاء حساب AWS بعض الوقت ، وذلك بسبب إجراءات التحقق المطلوبة. تعد معلومات بطاقة الخصم / الائتمان ضرورية وتكلفة إعداد الحساب 1 دولار. ومع ذلك ، ستحصل على مجموعة من المستويات المجانية التي يمكنك استخدامها إلى الأبد.

بناء مهارة مخصصة

عند إعداد حسابك ، سنقوم الآن ببناء مهارة Alexa المخصصة الخاصة بنا.

ستقوم مهارة الأمازون Alexa المخصصة لدينا بما يلي: عند تفعيلها ، ستوفر قائمة باللاعبين الشطرنج وتسأل المستخدم عما إذا كان يريد أن يسمع المزيد عن أي من اللاعبين المدرجين في القائمة.

إذا وافق المستخدم وقال شيئًا مثل "أخبرني عن بوبي فيشر" ، فستقرأ المهارة سيرة ذاتية قصيرة تتوافق مع اللاعب المختار إذا كان مدرجًا في القائمة. إذا قرر المستخدم أن الموضوع ممل جدًا ، فيمكنه الرد بـ "لا" وستغلق المهارة. سيكون اسم مهارتنا هو "لاعب الشطرنج المفضل لدي".

لبناء مهارة My Favorite Chess Player:

  • قم بتسجيل الدخول إلى حساب ADS الخاص بك واختر Alexa.
خدمات مطوري الأمازون
  • انقر على "مجموعة مهارات اليكسا"
صفحة أمازون أليكسا
  • انقر على زر "ابدأ مهارة".
مجموعة مهارات اليكسا
  • انقر فوق الزر "إنشاء مهارة" (سيؤدي ذلك إلى فتح نموذج "إنشاء مهارة جديدة").
اليكسا المهارات مجموعة أدوات المطور
  • أدخل "My Chess Player" في "حقل اسم المهارة" ، واختر "Custom".
  • انقر فوق الزر "إنشاء مهارة".
إنشاء نموذج مهارة جديد

الجزء 1: بناء نموذج التفاعل

نموذج التفاعل هو جزء مهم جدا من مهارتنا. أنه يحتوي على اسم الاحتجاج للمهارات ، والأهداف والنصوص ، وما إلى ذلك ، والتي تعتبر ضرورية للتفاعل مع خدمات المهارة.

أولاً سنقوم بإعداد اسم الاحتجاج لمهارتنا:

  • اختر علامة التبويب "الاحتجاج".
  • أدخل "لاعبي الشطرنج" في حقل "اسم استدعاء المهارة".

اسم الاحتجاج هو ما نقوله لبدء التفاعل مع مهارتنا.

إعداد اسم الاحتجاج

الآن نحن بصدد إعداد النوايا. لمهارتنا نحتاج:

  1. نية تتعامل مع طلب خطاب المستخدم لسماع سيرة لاعب الشطرنج ،
  2. نية تتعامل مع طلب خطاب المستخدم الذي يرفض المستخدم التفاعل مع المهارة أو يريد إيقاف التفاعل ،
  3. نية تتعامل مع طلب خطاب المستخدم والتي لا تتطابق مع أي من العبارات المنطوقة ،
  4. نية تعالج طلب خطاب المستخدم للحصول على المساعدة.

لحسن الحظ ، لدى ASK مكتبة كبيرة من النوايا المدمجة ، لذا سيتعين علينا إنشاء هدف مخصص واحد فقط.

ملاحظة: تحتوي النوايا المدمجة على كلمات مضمنة. من الممكن تمديد عدد الكلمات الموجودة عن طريق إضافة كلمات جديدة. عند إنشاء مهارة ، تتم إضافة أربعة نوايا مدمجة إلى نموذج التفاعل بشكل افتراضي. هذه هي: AMAZON.HelpIntent ، AMAZON.CancelIntent ، AMAZON.FallbackIntent و AMAZON.StopIntent.

لإنشاء هدف مخصص ، نحتاج إلى:

  • انقر فوق علامة "إضافة" بالقرب من علامة التبويب "النوايا".
  • اختر "النية المخصصة".
  • أدخل "playerBio" في الحقل أدناه.
  • انقر فوق الزر "إنشاء هدف مخصص".
نية مخصصة

تعالج نية "playerBio" الطلب المنطوق للمستخدم لسماع سيرة لاعب الشطرنج. الآن وقد أنشأنا نية ، يجب علينا إنشاء الكلمات المنطوقة. نظرًا لأننا سنستخدم قائمة من لاعبي الشطرنج ، فسوف نحتاج إلى استخدام فتحة مخصصة لمصطلحاتنا.

لإنشاء كلام:

  • حدد علامة التبويب "playerBio".
  • أدخل النص المنطوق في "نماذج النطق" المودعة في شكل "أخبرني عن {}".
  • قم بإنشاء فتحة جديدة في النافذة ، والتي تظهر عند إدخال "{}" ، عن طريق إدخال "لاعب" في حقل "إنشاء فتحة جديدة" والنقر على الزر "إضافة".
  • انقر فوق علامة "زائد" في الطرف الأيمن من حقل "نماذج النطق".
كلام مع فتحة

يمكننا إنشاء عدد قليل من الكلمات المنطوية مع نفس فتحة "المشغل". في حقل "نماذج النطق" ، سنقوم بإدخال العبارات التالية:

  • "{لاعب}"،
  • "من هو {player}" ،

وأضفها بالنقر فوق علامة "زائد".

ملاحظة: فتحات هي ملحق قوي للغاية لبناء مهارة مخصصة أليكسا. على سبيل المثال ، تعني عبارة "أخبرني عن {player}" أنه يمكن للمستخدم أن يسأل مهارتنا عن أي لاعب شطرنج من لاعب الفتحة. علاوة على ذلك ، توفر فتحات متعددة إمكانية استخدام مربعات حوار تطالب فيها مهارة Alexa المستخدم بملء جميع قيم الفتحات من أجل تحقيق الهدف.

فتحة "اللاعب" فارغة ولا يمكننا ملءها مباشرة بأسماء لاعبي الشطرنج. ومع ذلك ، يمكننا ربط فتحة "اللاعب" بنوع الفتحة الذي يحتوي على أسماء لاعب الشطرنج. يتضمن ASK مكتبة كبيرة من أنواع الفتحات ، ولكن لأغراضنا نحن بحاجة إلى إنشاء نوع فتحة مخصص. لإنشاء نوع فتحة مخصص:

  • انقر فوق علامة "إضافة" ضمن علامة التبويب "أنواع الفتحات".
  • حدد "إنشاء نوع فتحة مخصصة".
  • أدخل "أسماء اللاعبين" في الحقل أدناه.
  • انقر فوق الزر "إنشاء نوع فتحة مخصصة".
نوع فتحة مخصصة

دعنا نملأ نوع فتحة "playerNames" بأسماء لاعب الشطرنج.

  • حدد علامة التبويب "أنواع الفتحات".
  • أدخل الأسماء في حقل "قيم الفتحة".
  • أضف أسماءًا إلى نوع الفتحة بالنقر فوق علامة "زائد" في الطرف الأيمن من حقل "قيم الفتحة". يجب إدراج أربعة أسماء: بوبي فيشر ، ميخائيل تل ، خوسيه راؤول كابابلانكا وغاري كاسباروف.
لاعبالأسماء فتحة نوع

أخيرًا ، فإن الخطوة الأخيرة اللازمة لإعداد نية "playerBio" هي تعيين نوع الفتحة إلى فتحة اللاعب.

  • اختر علامة التبويب "المشغل".
  • اختر نوع "playerNames" من قائمة "Slot Type".
نوع فتحة اللاعب

النوايا المتبقية هي نوايا مضمنة.

ستقوم "AMAZON.NoIntent" و "AMAZON.CancelIntent" و "AMAZON.StopIntent" بمعالجة طلب خطاب المستخدم عندما يرفض المستخدم التفاعل مع المهارة ، أو يريد إيقاف التفاعل.

"الأمازون. سيقوم FallbackIntent "بمعالجة طلب خطاب المستخدم الذي لا يتطابق مع أي من العبارات المنطوقة.

سيقوم "AMAZON.HelpIntent" بمعالجة طلب خطاب المستخدم للحصول على المساعدة.

لا يتم تضمين "AMAZON.NoIntent" افتراضيًا ، مثل النوايا المضمنة الأخرى ، لذلك يتعين علينا إضافتها.

لإضافة "AMAZON.NoIntent":

  • انقر فوق علامة "إضافة" بالقرب من علامة التبويب "النوايا".
  • حدد "استخدام نية موجودة من مكتبة Alexa المدمجة".
  • أدخل "NoIntent" في حقل البحث.
  • انقر فوق الزر "+ إضافة نية".
المدمج في AMAZON.NoIntent

يجب علينا الآن حفظ نموذج التفاعل الخاص بنا من خلال النقر فوق الزر "حفظ النموذج" ، وإنشائه بالنقر فوق الزر "إنشاء نموذج".

هذا هو. ولكن قبل المضي قدمًا في بناء مهاراتنا ، يجب أن نتحدث عن مخطط نموذج التفاعل.

يحتوي كل نموذج تفاعل على مخطط نموذج التفاعل الخاص به ، والذي يمكن الوصول إليه من خلال تحديد علامة التبويب "محرر JSON". يحتوي مخطط نموذج التفاعل ، المكتوب في ملف json ، على نوايا ، وألفاظ ، وفتحات ، أي كل ما يتم تنفيذه داخل نموذج التفاعل.

وبالتالي ، إذا تغير نموذج التفاعل فإن مخطط نموذج التفاعل سوف يتغير وفقًا لذلك ، والعكس صحيح. هذا يعني أنه يمكن بناء نموذج التفاعل بالكامل مباشرةً عن طريق كتابة بعض رموز json في "محرر JSON" أو عن طريق تحميل ملف json.

محرر JSON مع مخطط نموذج التفاعل

في النص أدناه ستجد مخطط نموذج التفاعل الذي يمكنك ببساطة لصقه في JSON Editor وإنشاء نموذج تفاعل My Favorite Chess Player.

{
    "reactModel": {
        "languageModel": {
            "اسم الاحتجاج": "لاعبي الشطرنج" ،
            "النوايا": [
                {
                    "الاسم": "AMAZON.FallbackIntent" ،
                    "العينات": []
                }،
                {
                    "الاسم": "AMAZON.CancelIntent" ،
                    "العينات": []
                }،
                {
                    "الاسم": "AMAZON.HelpIntent" ،
                    "العينات": []
                }،
                {
                    "الاسم": "AMAZON.StopIntent" ،
                    "العينات": []
                }،
                {
                    "الاسم": "playerBio" ،
                    "فتحات": [
                        {
                            "الاسم": "اللاعب" ،
                            "type": "playerNames"
                        }
                    ]،
                    "العينات": [
                        "{لاعب}"،
                        "من هو {player}" ،
                        "أخبرني عن {player}"
                    ]
                }،
                {
                    "الاسم": "AMAZON.NoIntent" ،
                    "العينات": []
                }
            ]،
            "أنواع": [
                {
                    "name": "playerNames" ،
                    "القيم": [
                        {
                            "اسم": {
                                "القيمة": "خوسيه راؤول كابابلانكا"
                            }
                        }،
                        {
                            "اسم": {
                                "القيمة": "ميخائيل تل"
                            }
                        }،
                        {
                            "اسم": {
                                "القيمة": "بوبي فيشر"
                            }
                        }،
                        {
                            "اسم": {
                                "القيمة": "غاري كاسباروف"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

الجزء 2: اختيار نقاط النهاية

يمكن أن تكون خدمة المهارات إما خدمة ويب ينفذها المستخدم أو خدمة AWS. تم تكوين هذا في "نقاط النهاية". لمهارتنا ، سوف نستخدم خدمة AWS ، التي تتواصل مع واجهة المهارة عبر وظيفة AWS Lambda.

لاختيار خدمة AWS:

  • انقر فوق علامة التبويب "نقاط النهاية".
  • حدد "AWS Lambda وظيفة".

من أجل توصيل واجهة المهارات الخاصة بنا بوظيفة AWS Lambda ، نحتاج إلى تمرير معرف المهارة إلى وظيفة Lambda. يوجد معرف المهارة في "نقاط النهاية" ، وسوف نقوم بنسخه بالنقر فوق "نسخ إلى الحافظة".

نقاط النهاية

الجزء 3: إنشاء وظيفة AWS لامدا

لإكمال مهارتنا ، نحتاج إلى إنشاء وتكوين وظيفة AWS lambda. تستقبل هذه الوظيفة الأحداث من وترجع إلى واجهة المهارة. تحتوي الأحداث على معلومات حول الطريقة التي يتفاعل بها المستخدم مع المهارة بما في ذلك نوع الطلب الذي أطلقه المستخدم.

هناك ثلاثة أنواع رئيسية للطلب:

  • يتم إرسال LaunchRequest داخل الحدث إلى وظيفة Lambda عندما يستدعي المستخدم المهارة من خلال قول اسم الاحتجاج.
  • يتم إرسال IntentRequest داخل الحدث إلى وظيفة Lambda عندما يتفاعل المستخدم مع المهارة ، أي عند تعيين طلب الكلام الخاص به إلى هدف. القصد مدرج أيضًا في الحدث.
  • يتم إرسال SessionEndedRequest داخل الحدث إلى وظيفة Lambda عندما تنتهي الجلسة ، بسبب خطأ ، عندما يقول المستخدم "خروج" ، عندما لا يستجيب المستخدم أثناء الاستماع للجهاز ، أو عندما يقول المستخدم شيئًا لا يفعل " تتطابق مع نية محددة في واجهة المهارات الخاصة بك أثناء الاستماع للجهاز.

يتم تشفير الأحداث بتنسيق json بواسطة واجهة المهارة وفقًا لنموذج التفاعل. يتم أيضًا ترميز الردود التي ترسلها خدمة AWS إلى واجهة المهارة بتنسيق json.

لمهارتنا المخصصة البسيطة ، سنقوم بتهيئة وظيفة Lambda باستخدام Python ، المدعوم على خدمات AWS.

ستكون استجابة وظيفة Lambda بالتنسيق التالي:

{
    "الجسم": {
        "الإصدار": "1.0" ،
        "استجابة": {
            "outputSpeech": {
                "النوع": "PlainText" ،
                "النص": ""
            }،
            "بطاقة": {
                "النوع": "بسيط" ،
                "عنوان": ""،
                "يحتوي": ""
            }،
            "reprompt": {
                "outputSpeech": {
                    "النوع": "PlainText" ،
                    "النص": ""
                }
            }،
            "shouldEndSession": القيمة
        }
    }
}

بالنسبة لهذا النوع من تنسيق الاستجابة ، سيكون الإخراج المقدم للمستخدم هو:

  • استجابة كلامية ، يتم تشغيلها بواسطة كائن "outputSpeech". يتم نقل الرسالة المكتوبة في حقل "النص" لهذا الكائن إلى المستخدم عبر الصدى.
  • نص على الجهاز يحتوي على تطبيق Alexa مثل الهاتف الذكي. يتم تشغيل هذا الرد بواسطة كائن "البطاقة" وتقع الرسالة التي سيتم عرضها في حقول "العنوان" و "المحتوى" لهذا الكائن.
  • استجابة سريعة للكلمة من المهارة ، أرسلت إلى المستخدم من خلال الصدى. يتم تشغيل هذه الاستجابة بواسطة كائن "reprompt" الذي يحتوي على كائن "outputSpeech".

نحن على استعداد لإنشاء وظيفة AWS Lambda باستخدام خدمات AWS.

  • سجّل الدخول إلى حسابك واختر خدمات Lambda.
AWS الصفحة الرئيسية
  • في الزاوية اليمنى العليا حدد "N. فرجينيا "، لإتاحة مجموعة أدوات Alexa Skill Kit لوظيفة AWS Lambda.
  • انقر على زر "إنشاء وظيفة".
خدمة AWS لامدا
  • في نموذج "إنشاء وظيفة" ، حدد "المؤلف من البداية"
  • في حقل "الاسم" ، أدخل اسم الوظيفة "chess_lambda_player".
  • من قائمة "وقت التشغيل" ، حدد Python 3.6.
  • من قائمة "الدور" ، حدد "دور مخصص" ، وانتظر حتى يفتح مدير IAM.
خدمة AWS Lambda - نموذج إنشاء وظيفة
  • في مدير IAM ، انقر فوق الزر "السماح" وسيتم إعادة توجيهك إلى نموذج "إنشاء وظيفة".
IAM menager
  • انقر فوق الزر "إنشاء وظيفة" ، الموجود في الركن الأيمن السفلي من نموذج "إنشاء وظيفة".

الآن وقد تم إنشاء وظيفة AWS Lambda ، نحتاج إلى تعيين مشغلات الوظيفة وكتابة التعليمات البرمجية. إذا تم كل شيء بشكل صحيح ، يجب أن يكون لدينا نموذج "chess_lambda_player" في متصفحنا.

لتعيين وظيفة المشغل:

  • حدد "Alexa Skills Kit" في قائمة "إضافة مشغلات".
خدمة AWS Lambda - نموذج chess_lambda_player يعرض لوحة
  • قم بالتمرير لأسفل الصفحة وفي حقل "معرف المهارات" قم بلصق معرف المهارات الذي قمت بنسخه مسبقًا ، من "نقاط النهاية".
  • انقر فوق الزر "إضافة" الموجود في أسفل الصفحة.
نموذج
  • يتم الوصول إلى رمز الوظيفة من خلال النقر على لوحة "chess_lambda_player". قم بالتمرير لأسفل الصفحة للعثور على المحرر حيث يوجد الرمز.
نموذج
  • احذف الكود الموجود والصق الكود التالي في المحرر:
# ------------------------------ PART1 ------------------ --------------
# في هذا الجزء نحدد قائمة تحتوي على أسماء اللاعبين ، و
# القاموس مع السير الذاتية لاعب
Player_LIST = ["خوسيه راؤول كابابلانكا" ، "ميخائيل تل" ، "بوبي فيشر" ، "غاري كاسباروف"]

Player_BIOGRAPHY = {"jose raul capablanca": "كان Jose Jose Raul Capablanca y Graupera (19 نوفمبر 1888 - 8 مارس 1942) لاعب شطرنج كوبي كان بطل العالم في لعبة الشطرنج من 1921 إلى 1927."،

"ميخائيل تال": "كان ميخائيل نيخمييفيتش تال (9 نوفمبر 1936 - 28 يونيو 1992) Grandmaster لاتفيا شطرنج و بطل العالم الثامن للشطرنج من 1960 إلى 1961."،

"بوبي فيشر": "روبرت جيمس فيشر (9 مارس 1943 - 17 يناير 2008) كان كبير شطرنج أمريكي وبطل العالم الحادي عشر للشطرنج." ،

"garry kasparov": "Garry Kimovich Kasparov (3 أبريل 1963) هو غراند شطرنج روسي ، بطل عالمي سابق في الشطرنج ، كاتب ، وناشط سياسي ، يعتبره الكثيرون أعظم لاعب شطرنج في كل العصور"}
#------------------------------الجزء 2------------------ --------------
# هنا نحدد وظيفة Lambda الخاصة بنا ونقوم بتكوين ما تقوم به عندما
يتم إرسال # حدث مع بدء التشغيل وطلبات النوايا ونهاية الجلسة. # ردود Lambda وظيفة لحدث يحمل على وجه الخصوص
# تتم معالجة الطلب بواسطة وظائف مثل on_launch (حدث) و
# intent_scheme (حدث).
def lambda_handler (الحدث ، السياق):
    إذا حدث ['جلسة'] ['جديد']:
        on_start ()
    إذا كان الحدث ['request'] ['type'] == "LaunchRequest":
        إرجاع on_launch (حدث)
    حدث elif ['request'] ['type'] == "IntentRequest":
        إرجاع intent_scheme (حدث)
    حدث elif ['request'] ['type'] == "SessionEndedRequest":
        العودة on_end ()
# ------------------------------ PART3 ------------------ --------------
# هنا نحدد وظائف طلب المعالج
def on_start ():
    طباعة ("بدأت الجلسة".)

def on_launch (حدث):
    onlunch_MSG = "مرحبًا ، مرحبًا بك في My Favorite Chess Player Alexa Skill. اللاعبون المفضلون لدي في لعبة الشطرنج هم:" + '،' .join (map (str، Player_LIST)) + "." \
    "إذا كنت ترغب في معرفة المزيد عن لاعب معين ، يمكنك أن تقول على سبيل المثال: أخبرني عن بوبي فيشر؟"
    reprompt_MSG = "هل تريد أن تسمع المزيد عن لاعب معين؟"
    card_TEXT = "اختر دافع الشطرنج".
    card_TITLE = "اختيار لاعب شطرنج."
    إرجاع الإخراج_json_builder_with_reprompt_and_card (onlunch_MSG ، card_TEXT ، card_TITLE ، reprompt_MSG ، False)

def on_end ():
    طباعة ("الجلسة منتهية".)
# ----------------------------- Part3.1 ----------------- --------------
# يعالج الدالة (الحدث) intent_scheme طلب Intent.
# نظرًا لوجود نوايا مختلفة في مهارتنا ، فنحن بحاجة إلى ذلك
# قم بتكوين ما ستفعله هذه الوظيفة عند تلقيها بعين
# نوايا. يمكن القيام بذلك عن طريق إدخال الوظائف التي تتعامل معها
# كل من النوايا.
def intent_scheme (حدث):
    
    intent_name = الحدث ['request'] ['intent'] ['name']

    إذا intent_name == "playerBio":
        إرجاع player_bio (حدث)
    elif intent_name في ["AMAZON.NoIntent" ، "AMAZON.StopIntent" ، "AMAZON.CancelIntent"]:
        إرجاع stop_the_skill (حدث)
    elif intent_name == "AMAZON.HelpIntent":
        مساعدة العودة (حدث)
    elif intent_name == "AMAZON.FallbackIntent":
        إرجاع fallback_call (حدث)
# --------------------------- Part3.1.1 ------------------- ------------
# هنا نحدد وظائف معالج النوايا
def player_bio (حدث):
    اسم = الحدث [ 'طلب'] [ 'نية'] [ 'فتحات'] [ 'لاعب'] [ 'قيمة']
    player_list_lower = [w.lower () لـ w في Player_LIST]
    إذا name.lower () في player_list_lower:
        reprompt_MSG = "هل تريد أن تسمع المزيد عن لاعب معين؟"
        card_TEXT = "لقد اخترت" + name.lower ()
        card_TITLE = "لقد اخترت" + name.lower ()
        إرجاع output_json_builder_with_reprompt_and_card (Player_BIOGRAPHY [name.lower ()] ، card_TEXT ، card_TITLE ، reprompt_MSG ، False)
    آخر:
        wrongname_MSG = "لم تستخدم الاسم الكامل للاعب. إذا نسيت أي لاعبين يمكنك اختيار" مساعدة "."
        reprompt_MSG = "هل تريد أن تسمع المزيد عن لاعب معين؟"
        card_TEXT = "استخدم الاسم الكامل."
        card_TITLE = "اسم خاطئ."
        إرجاع output_json_builder_with_reprompt_and_card (wrongname_MSG، card_TEXT، card_TITLE، reprompt_MSG، False)
        
def stop_the_skill (حدث):
    stop_MSG = "شكرًا لك ، إلى اللقاء!"
    reprompt_MSG = ""
    card_TEXT = "وداعًا".
    card_TITLE = "وداعًا".
    إرجاع output_json_builder_with_reprompt_and_card (stop_MSG ، card_TEXT ، card_TITLE ، reprompt_MSG ، True)
    
مساعدة def (حدث):
    assistance_MSG = "يمكنك الاختيار من بين هؤلاء اللاعبين:" + "،" .join (map (str ، Player_LIST)) + ". تأكد من استخدام الاسم الكامل عند سؤال اللاعب."
    reprompt_MSG = "هل تريد أن تسمع المزيد عن لاعب معين؟"
    card_TEXT = "لقد طلبت المساعدة."
    card_TITLE = "مساعدة"
    إرجاع الإخراج_json_builder_with_reprompt_and_card (help_MSG ، card_TEXT ، card_TITLE ، reprompt_MSG ، False)

def fallback_call (حدث):
    fallback_MSG = "لا يمكنني مساعدتك في ذلك ، حاول إعادة صياغة السؤال أو طلب المساعدة من خلال قول HELP."
    reprompt_MSG = "هل تريد أن تسمع المزيد عن لاعب معين؟"
    card_TEXT = "لقد طرحت سؤالًا خاطئًا."
    card_TITLE = "سؤال خاطئ."
    إرجاع output_json_builder_with_reprompt_and_card (fallback_MSG ، card_TEXT ، card_TITLE ، reprompt_MSG ، False)
# ------------------------------ Part4 ------------------ --------------
# يجب أن تكون استجابة وظيفة Lambda بتنسيق json.
# لهذا السبب في هذا الجزء من الكود نحدد الوظائف التي
# سيتم بناء الاستجابة بالتنسيق المطلوب. هذه الوظائف
# يتم استخدامها من قبل كل من معالجات النوايا ومعالجات الطلب إلى
# بناء الإخراج.
def plain_text_builder (text_body):
    text_dict = {}
    text_dict ['type'] = 'PlainText'
    text_dict ['text'] = text_body
    إرجاع text_dict

def reprompt_builder (repr_text):
    reprompt_dict = {}
    reprompt_dict ['outputSpeech'] = plain_text_builder (repr_text)
    إرجاع reprompt_dict
    
def card_builder (c_text، c_title):
    card_dict = {}
    card_dict ['type'] = "بسيط"
    card_dict ['title'] = c_title
    card_dict ['content'] = c_text
    العودة card_dict

def response_field_builder_with_reprompt_and_card (outputSpeach_text، card_text، card_title، reprompt_text، value):
    speech_dict = {}
    speech_dict ['outputSpeech'] = plain_text_builder (outputSpeach_text)
    speech_dict ['card'] = card_builder (card_text، card_title)
    speech_dict ['reprompt'] = reprompt_builder (reprompt_text)
    speech_dict ['shouldEndSession'] = القيمة
    return speech_dict

def output_json_builder_with_reprompt_and_card (outputSpeach_text، card_text، card_title، reprompt_text، value):
    response_dict = {}
    response_dict ['version'] = '1.0'
    response_dict ['response'] = response_field_builder_with_reprompt_and_card (outputSpeach_text، card_text، card_title، reprompt_text، value)
    رد الرد
  • انقر على زر "حفظ" لحفظ وظيفة Lambda ، وانسخ اسم مورد الأمازون (ARN) المعروض في الزاوية العلوية اليمنى.

يتم استخدام ARN لإكمال الاتصال بين واجهة المهارة ووظيفة Lambda ، ولهذا السبب ستكون خطوتنا التالية هي نقلها إلى مهارات "نقاط النهاية".

اسم مورد أمازون (ARN)
  • ارجع إلى بوابة مطوري Alexa وحدد "Endpoints". الصق ARN في حقل "المنطقة الافتراضية" وانقر فوق الزر "حفظ نقاط النهاية".
ربط AWS لامدا والمهارة

اكتمال مهارة Alexa Player My Chess Player المخصصة وجاهزة للاختبار!

اختبار المهارة

أخيرًا ، يمكننا اختبار مهارة Alexa المخصصة لدينا باستخدام:

  1. أي نوع من أجهزة Alexa مثل Echo أو Echo Dot ،
  2. إصدار مجتمع محاكاة الصدى في Echoism.io ،
  3. محاكي الخدمة تحت علامة التبويب اختبار.

لاختبار المهارة في محاكي الخدمة:

  • انقر فوق علامة التبويب "اختبار".
  • تبديل زر الاختبار على.
  • اكتب ما تريد قوله في الحقل الفارغ أو أمسك الميكروفون وتحدث.
اختبار محاكاة الخدمة لمهارات My Favorite Chess Players

إلى جانب الخطاب الذي ستسمعه والنص الذي سيتم عرضه على الشاشة ، يعرض محاكي الخدمة أيضًا مدخلات JSON (حدث json الذي أرسلته واجهة المهارة إلى وظيفة Lambda) ومخرج JSON (استجابة json المرسلة من Lambda وظيفة لواجهة المهارة).

إذا كنت راضيًا عن مهارتك وتأكد من أنها تعمل بشكل صحيح ، فيمكنك نشرها على AWS Alexa.

هذا هو! لديك الآن عمل مخصص Amazon Alexa Skill.

دعونا نفعل خلاصة سريعة.

أولاً ، لقد تعلمنا أن إحدى مهارات Alexa هي تطبيق يحركه الصوت لـ Alexa والذي يعد مهمة محددة للمستخدم بناءً على طلبه.

لقد تعلمنا بعد ذلك أن طلب المستخدم (إلى المهارة) تتم معالجته أولاً عن طريق واجهة المهارة ، باستخدام نموذج التفاعل ، ثم من خلال خدمة المهارة التي تشكل استجابة للمستخدم ، باستخدام وظيفة Lambda.

أخيرًا ، من خلال بناء مهارتنا المخصصة ، تعلمنا أساسيات بناء المهارات العملية وخدشنا سطح وحدة مطوري Amazon Alexa وخدمات AWS Lambda.

المتعة أثناء صنع المهارات المخصصة الخاصة بك!

-

شكر خاص لأولئك الذين استعرضوا وعلقوا على المسودات الأولى لهذا المنصب: أليكسا ميلادينوفيتش ، ويليام ويكي.

بناء الويب أو تطبيق الجوال؟

Crowdbotics هي أسرع طريقة لإنشاء تطبيق وتشغيله وتوسيع نطاقه.

مطور؟ جرب تطبيق Crowdbotics App Builder لسقالات ونشر التطبيقات بسرعة مع مجموعة متنوعة من الأطر الشائعة.

مشغول أو غير الفنية؟ انضم إلى المئات من الفرق السعيدة لبناء البرامج مع Crowdbotics PMs والمطورين الخبراء. نطاق الجدول الزمني والتكلفة مع Crowdbotics Managed App Development مجانًا.