Najwa's wardrobe: Alexa skill exmaple

August 23, 2019

 

السلام عليكم 

 

 

 

 

 

 

 

كان من جملة احلامي الخيالية ان تكون لي خزانة ملابس ناطقة، تريحيني من عناء اختيار الملابس اليومي. اسألها: خزانتي يا خزانتي.. ماذا البس اليوم. ترد علي وهي الخبيرة بما في جوفها من ملابس بان ارتدي ذلك الفستان الصيفي الذي نسيت انني اشتريته (احدى عاداتي السيئة). من حسن الحظ، لم يعد الان ذلك حلما بل غدا واقعا مع تطور وظائف المساعد الافتراضي  امثال Alexa and Google Assistant  وتيسر برمجته من قبل المطورين. في هذا المقال، ساستعرض كيف يمكن ان اجعل خزانتي تنطق ولكن بصوت المساعد الافتراضي، وتحديدا اليكسا. 

 

لنتحدث في البداية عن اليكسا. اليكسا هي المساعد الافتراضي الخاص بامازون والتي تسمعونها على السمارت سبكيرز الخاصة بامازون مثل Amazon Echo. وحتى تستطيع التحكم باليكسا فانك تحتاج الى تطوير تطبيقاتها الخاصة والتي تسمى ب  Alexa skills ( معلومة: تسمى تطبيقات Google Assistant ب Actions).  من امثلتها  Uber skill لطلب السيارات, Dominos skill لطلب البيتزا وهكذا.  وحتى تعمل هذه ال skill فانك تطلب من اليكسا التالي 

 

"Alexa, ask Uber to order a car "

"Alex, open Uber" 

"Alexa, Ask Dominos for a pepperoni Pizza"

 

 

الخطوات التالية توضح طريقة بناء Alexa skills

 

 

اولا: انشاء حساب في Amazon Developer ، وبعد الدخول التوجه الى  Alexa في القائمة اعلاه (صورة ١). 

 

 

 

 

​​

 

 

(صورة ١)

 

 

بعد ذلك ستظهر لك هذه الصفحة. قم بالنقر على  create skill (صورة ٢)

 

 

(صورة ٢)

 

 

ستظهر بعد ذلك هذه الصفحة. قم بتعبئة الخانات والتي تشمل Skill name  وكذلك اللغة. تتوفر مجموعة محدودة من اللغات والتي لا تشمل العربية للاسف. بعد ذلك اختر النموذج Custome حيث ستقوم ببناء ال skill  من الصفر (صورة ٣). 

 

 

 ​(صورة ٣)

 

 

قم بعد ذلك باختيار القالب. في هذا التمرين سوف اختار from scratch اي نبدآ من الصفر (صورة ٤).

 

​(صورة ٤)

 

 

تظهر بعد ذلك صفحة بناء نموذج  التفاعل او  Interaction model والذي يمثل طريقة تفاعل اليكسا مع المستخدم عند تفعيل هذه ال skill (صورة ٥)

 

 

 

​​

 

(صورة ٥)

 

 

 نتوقف هنا قليلا لمعرفة عناصر نموذج التفاعل الاساسية : 

 

١. Invocation name (صورة ٦)  او اسم الاستدعاء (النداء) الخاص بهذه ال skill.  اسم الاستدعاء الذي اطلقته هنا هو Najwa's Wardrobe  اي خزانة نجوى. سيستخدم المستخدم هذا الاسم من اجل امر اليكسا لاستدعاء هذه الskill بهذه الطريقة: 

 

"Alexa, open Najwa's wardrobe"

 

 

 

​​

(صورة ٦)

 

 

يجب التنويه ان هناك متطلبات لاختيار اسم الاستدعاء، موضحة في المربع الاخضر اعلاه، كضرورة تركيب اسم الاستدعاء من كلمتين. 

 

٢. Intent وهي مجموعة الافعال التي ستقوم بها اليكسا استجابة لطلب المستخدم.  بشكل عام هناك نوعان من ال Intent:  ال custome intent  والتي يقوم المطور ببناءها من الصفر و  existing intent from Alexa's built-in library  اي معدة مسبقا. عند بناء ال Intent  يتم تحديد مجموعة الحوارات المتوقعة من المستخدم  او Sample Utterances  والتي ستسخدم لاحقا لتفعيل هذه ال Intent. يمكن تحديد مجموعة من المتغيرات في هذه الحوارات او ما يسمى ب Intent Slots والتي ستستخدم لاحقا من اجل حفظ قيم المتغيرات الاساسية. مثلا 

 

احد الحوارات يمكن كتاباتها كالتالي 

order me a {size} sandwich

 

ما بين الاقواس يمثل ال an intent slot والتي لا يعرف قيمتها الى ان يقولها المستخدم . فالمستخدم قد يقول  order me a 6 inch sandwich  او order me a 12 inch sandwich

 

في هذا المثال (صورة ٧)  لدينا خمسة  custome intent 

​​

 (صورة ٧)

 

نبدا باهم واحده وهي q من question والتي تمثل افتتاحية التطبيق. وهذه هي مجموعة الحوارات المتوقعة من المستخدم (صورة ٨):

 

 

 ​(صورة ٨)

 

هذه ال custome intent مهمتها استقبال الحوارات المتوقعة من المستخدم بخصوص خيارات الملابس الكاجوال. هنا مجموعة ال Sample Utterances المتوقعة من المستخدم. مثلا حتى تتفعل هذه intent  قد يقول المستخدم 

 

what should i wear today 

what should I wear 

او حتى 

I wear 

 

بمعنى انه لا ينبغى ان تنطبق الكلمات بشكل مباشر حتى تتفعل هذه intent  لذلك ينصح بتضمين جميع الجمل المتوقعة  من المستخدم حتى تعمل هذه intent بشكل صحيح. 

 

 

مثال اخر ل intent وهي Meeting (صورة ٩) والتي مهمتها استقبال الحوارات المتوقعة من المستخدم بخصوص خيارات الملابس الرسمية. هنا مجموعة ال Sample Utterances المتوقعة من المستخدم. مثلا حتى تتفعل هذه intent  قد يقول المستخدم: 

 

 

 

 (صورة ٩)

 

لاحظ/ي انني هنا استخدمت صيغتين لمحادثات ال meeting . الاولى في حال سؤال المستخدم لاول مره بقوله 

 

Yes I have a meeting today 

 

والاخرى في حال رغبة المستخدم بعرض خيارات اخرى بقوله

 

Another meeting look 

 

 

هناك كذلك الintent الختامي والذي من خلاله تنتهي جلسة المحادثات : googbye (صورة ١٠): 

 

 

 

(صورة ١٠)

 

 

مجموعة الحوارات تاتي استجابة لسؤال اليكسا للمستخدم عن رغبته في انهاء المحادثة. بعد الانتهاء من بناء ال intents، قم بالضغط على Build Model. 

 

٣. من اهم عناصر نموذج التفاعل هي AWS Lambda Function  وهو باختصار الكود الذي سوف يربط كل intent  بالفعل الذي يجب على اليكسا فعله. يتم ربط الكود مع النموذج وذلك من خلال Endpoint  كما هو موضح في صورة ١١. 

​​

(صورة ١١)

 

قم بنسخ your skill ID واحتفظ به لاستخدامه في خطوة لاحقة. حتى نتمم هذه الخطوة لابد اولا ان  تنشئ Lambda Function وتربطها بنموذج التفاعل. لانشاء Lambda Function يجب ان يكون لديك حساب في خدمات امازون السحابية Amazon AWS. وعند الدخول ابحث عن Lambda كالتالي (صورة ١٢): ​

 (صورة ١٢)

 

 

بعد ذلك قم بعمل new function . قم بتعبئة الخانات وفي حالة هذا المثال قم باختيار Node.js 10.x . تظهر بعد ذلك هذه الصفحة (صورة ١٣) . قم بالضغط على Add trigger وقم باختيار Alexa skills kit. في حانة ال skill ID  الصق الكود الذي نسخته سابقا من صفحة ال endpoint في ال interaction model  وذلك لربط ال function ب ال skill. 

 (صورة ١٣)

 

بعد هذه الخطوة يمكنك الان البدء في كتابة الكود.  لنلقي نظرة على محتويات الكود الاساسية: 

 

 

 

exports.handler = (event, context, callback) => {

switch (event.request.type) {

case "LaunchRequest"

// اضف هنا الكود الخاص لمعالجة تشغيل التطبيق

               context.succeed(generateResponse(buildSpeechletResponse(Message0, boolean_var0)))

 

    break;

case "IntentRequest":

// اضف هنا الكود الخاص لمعالجة مجموعة ال  intent 

 

         switch (event.request.intent.name)   

         case "intent 1":

                


                context.succeed(generateResponse(buildSpeechletResponse(Message1, boolean_var1)))

                                break;

          case "intent 2":

                context.succeed(generateResponse(buildSpeechletResponse(Message2, boolean_var2)))

                                break;

                               .

                               .

                               .

          case "intent n":

               context.succeed(generateResponse(buildSpeechletResponse(Message_n, boolean_var_n)))

                                break;}

     

    break;

}

}

 

 

تقوم generateResponse بارسال الامر لاليكسا بالحديث ، وتقوم buildSpeechletResponse  بتشكيل هذا الامر عبر خلق record يحتوي على محتوى الكلام الذي ستقوله اليكسا من نوع string وكذلك ما اذا على اليكسا الاستمرار في  جلسة الskill الحالية او انهائها (boolean varabile). قمت بتحميل الكود الذي قمت باستخدامه فيه هذه ال skill على github ( يمكنك تعديل واضافة قائمة الملابس الخاصة بك عبر الكود).

 

بعد الانتهاء من كتابة الفنكشن قم بنسخ الكود الموجود اعلاه (ARN) (صورة ١٤):

 (صورة ١٤)

 

وبعد ذلك الصاقه في صفحة endpoint  (صورة ١١) في خانة Default Region. وبهكذا اكتملت قائمة بناء نموذج التفاعل وتظهر القائمة بهذا الشكل في صفحة التفاعل (صورة ١٥). 

 

 (صورة ١٥)

 

حان الان وقت الاختبار او Test. توجه لصفحة ال Test. سيطلب منك المتصفح على الاغلب تشغيل المايكروفون حتى تتفاعل مع اليكسا. ان لم تكن ترغب ذلك يمكنك الكتابة عوضا عن الحديث. يظهر الحوارات مع اليكسا في الجانب الايسر من الصورة (صورة ١٦).

(صورة ١٦)

 

 لرفع اليكسا على Amazon store  توجه الى distribution الموجود في القائمة العليا وقم بتعبئة الخانات اللازمة ثم ارسل طلبك لفريق امازون. سيصل الرد منهم خلال ٢٤ ساعة وقد يطلبون منك القيام ببعض التعديلات لان لديهم معايير محدد ومتطلبات حتى يصبح تطبيقك جاهز للجميع. 

 

 

Ta Daaa

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 That's it! 

 

كان هذا مثال بسيط يستعرض كيفية بناء تطبيقات اليكسا. يمكن بالطبع بناء تطبيقات اكثر جدية وتعقيدا من ذلك، وربما ان شاء الله نفرد لمثل هذه التطبيقات مقالات اخرى. 

 

*ارحب بجميع الملاحظات والاقتراحات فيما يخص المحتوي العلمي والترجمة.

* اعتذر مسبقا عن الاخطاء الاملائية نظرا لاستخدامي لوحة مفاتيح غير معربة.

*حقوق الملكية الفكرية لهذه المدونة محفوظ ل د.نجوى الغامدي.

 

 

 

Please reload