مكتبة لتطوير مهارات Alexa بسهولة باستخدام AWS Lambda.
تثبيت | ؟ كيف يعمل | ؟ الاستخدام | مرجع واجهة برمجة التطبيقات | ؟ كيفية المساهمة | ⚖️ الترخيص |
---|
تتوفر Alexa Skill Kit كوحدة Node.js على NPM. لتثبيته، قم بتشغيل الأمر التالي في مشروع Node.js موجود:
npm install alexa-skill-kit --save
Alexa Skill Kit هي مكتبة تعمل على تبسيط عملية تطوير مهارات Alexa باستخدام Node.js وAWS Lambda. ولا يتطلب أي نمط نشر محدد، ويمكنه العمل مع وظائف Lambda التي تم إنشاؤها يدويًا، والنشر عبر Claudia.js، وما إلى ذلك.
وبما أنني أوصي بـ Claudia.js بسبب بساطته، فإن جميع الأمثلة التالية ستستخدمه. يمكنك الحصول عليه من NPM هنا: npmjs.com/package/claudia.
بعد تثبيت Alexa Skill Kit من NPM، اطلبها في الكود الخاص بك:
const alexaSkillKit = require ( 'alexa-skill-kit' )
أو باستخدام صيغة import
*:
import alexaSkillKit from 'alexa-skill-kit'
* بناء جملة import
غير مدعوم في Node.js، تحتاج إلى استخدام مكتبة إضافية مثل Babel لجعله يعمل.
بعد طلب ذلك، تحتاج ببساطة إلى تمرير الحدث والسياق من وظيفة Lambda، بجانب event
function
، تحتاج إلى تمرير وظيفة المعالج باعتبارها المعلمة الأخيرة.
على سبيل المثال:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
تعمل Alexa Skill Kit على تبسيط الرد على طلبات Alexa. هناك بعض الأشياء التي يمكنك القيام بها:
| الرد بنص بسيط | ؟ الرد بكائن | ؟ ردود أكثر تعقيدا | ⏳ ردود غير متزامنة | | ----- | ----- | ----- | ----- | ----- |
استمر في القراءة وسيتم شرح كل منهم أدناه.
إذا كنت تريد أن ترد Alexa بنص بسيط، فأنت تحتاج ببساطة إلى إرجاع النص في وظيفة المعالج. ستقوم Alexa Skill Kit بتغليف النص في كائن صالح.
على سبيل المثال:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
المثال أعلاه سوف يرد على Alexa بالكائن التالي:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
كما ترون، سيتم إغلاق الجلسة افتراضيًا. لإبقاء الجلسة مفتوحة أو للإجابة على طلب أكثر تعقيدًا، يمكنك إرسال كائن بدلاً من النص.
إذا كنت تريد إبقاء الجلسة مفتوحة أو تريد إرجاع شيء أكثر من مجرد خطاب إخراج بسيط، فيمكنك إرسال كائن ولن تقوم Alexa Skill Kit بتعديله.
على سبيل المثال:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return {
version : '1.0' ,
response : {
shouldEndSession : false ,
outputSpeech : {
type : 'PlainText' ,
text : 'Hello'
} ,
card : {
type : 'Simple' ,
title : 'Simple Card' ,
content : 'An example for a simple card reply'
}
}
}
} )
}
بناء الأشياء يدويًا أمر صعب وممل. أوصي باستخدام وحدة Alexa message Builder لتبسيط عملية إنشاء ردود أكثر تعقيدًا.
يتوفر Alexa message Builder على NPM، ويمكنك إضافته إلى مشروعك باستخدام الأمر التالي:
npm install alexa-message-builder --save
بعد ذلك، اطلب ذلك ببساطة باستخدام Alexa Skill Kit مثل هذا:
const alexaSkillKit = require ( 'alexa-skill-kit' )
const AlexaMessageBuilder = require ( 'alexa-message-builder' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return new AlexaMessageBuilder ( )
. addText ( 'Hello' )
. addSimpleCard ( 'Simple Card' , 'An example for a simple card reply' )
. keepSession ( )
. get ( )
} )
}
المثال أعلاه هو نفس المثال من قسم "الرد بكائن".
لماذا لا يعد Alexa message Builder جزءًا من Alexa Skill Kit؟
حسنًا، بدون سبب حقيقي، تم تطوير Alexa message Builder قبل Alexa Skill Kit، وهي عبارة عن وحدات منفصلة في حالة احتياج أي شخص إلى واحدة فقط منها دون الأخرى.
تستخدم Alexa Skill Kit الوعود للتعامل مع الردود غير المتزامنة. لتتمكن من الرد بشكل غير متزامن، ما عليك سوى إعادة الوعد وحله بنص أو كائن وستطبق Alexa Skill Kit نفس القواعد المذكورة أعلاه.
على سبيل المثال:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return fetchSomethingFromTheServer ( )
. then ( result => doSomethingWithTheResult ( result ) )
. then ( processedResult => {
return `Here's an info from the server: ${ processedResult } `
} )
} )
}
سوف تجيب Alexa Skill Kit بالنص:
`Here's an info from the server: ${ processedResult } `
تتلقى Alexa Skill Kit ( function
) السمات التالية:
object
، مطلوب) — كائن غير معدل تم استلامه من Amazon Alexa. إذا تلقت دالة Lambda كائنًا غير صالح لطلب Amazon Alexa، فلن تقوم بتحليله ولن يتم استدعاء وظيفة المعالج الخاصة بك أبدًا.object
، مطلوب) - كائن سياق تم استلامه على AWS Lambda، يوصى بعدم تعديله، ولكن Alexa Skill Kit ستستخدم وظائف context.succeed
و context.fail
فقط، حتى تتمكن من تمرير كائن مخصص يحتوي على هذين العنصرين وظائف من وكائن السياق الأصلي.function
، مطلوب) - وظيفة تستقبل حدثًا تم تحليله وترجع الرد الذي سيتم تمريره إلى Amazon Alexa.وظيفة المعالج هي وظيفة تستقبل حدثًا تم تحليله ويمكنها إرجاع سلسلة أو كائن أو وعد سيعيد سلسلة أو كائنًا عند حلها.
في حال كنت لا تريد أن ترد Alexa، فما عليك سوى إرجاع null
أو عدم العودة على الإطلاق.
الكائن الذي تم تحليله هو كائن يحتوي على الخصائص التالية:
null
null
{}
)النص الرئيسي للكود موجود في دليل lib.
توجد الاختبارات في دليل المواصفات، ويجب أن تتبع بنية الملفات المصدر المقابلة. يجب أن تنتهي جميع أسماء ملفات الاختبار القابلة للتنفيذ بـ -spec
، لذلك سيتم التقاطها تلقائيًا بواسطة npm test
. أي ملفات مشروع إضافية، أو فئات مساعدة، وما إلى ذلك، والتي لا يجب أن يتم تنفيذها مباشرة بواسطة مشغل الاختبار، يجب ألا تنتهي بـ -spec
. يمكنك استخدام دليل المواصفات/المساعدات لتخزين مساعدات Jasmine، التي سيتم تحميلها قبل تنفيذ أي اختبار.
نستخدم الياسمين في اختبارات الوحدة والتكامل. ما لم يكن هناك سبب مقنع للغاية لاستخدام شيء مختلف، يرجى الاستمرار في استخدام الياسمين للاختبارات. الاختبارات الموجودة موجودة في مجلد المواصفات. فيما يلي بعض اختصارات الأوامر المفيدة:
تشغيل كافة الاختبارات:
npm test
قم بإجراء بعض الاختبارات فقط:
npm test -- filter=prefix
احصل على تقارير مفصلة عن اسم الاختبار الهرمي:
npm test -- full
نحن نستخدم ESLint لتحقيق تناسق بناء الجملة، ويتم تضمين قواعد الفحص في هذا المستودع. سيؤدي تشغيل npm test
إلى التحقق من قواعد الفحص أيضًا. يرجى التأكد من أن الكود الخاص بك لا يحتوي على أخطاء في الفحص قبل إرسال طلب السحب.
معهد ماساتشوستس للتكنولوجيا - انظر الترخيص