Perpustakaan untuk pengembangan Alexa Skill yang mudah dengan AWS Lambda.
Instalasi | ? Bagaimana cara kerjanya | ? Penggunaan | Referensi API | ? Bagaimana cara berkontribusi | ⚖️ Lisensi |
---|
Alexa Skill Kit tersedia sebagai modul Node.js di NPM. Untuk menginstalnya, jalankan perintah berikut di proyek Node.js yang sudah ada:
npm install alexa-skill-kit --save
Alexa Skill Kit adalah perpustakaan yang menyederhanakan pengembangan Alexa Skills dengan Node.js dan AWS Lambda. Ini tidak memerlukan gaya penerapan tertentu, ini dapat bekerja dengan fungsi Lambda yang dibuat secara manual, penerapan melalui Claudia.js, dll.
Karena saya merekomendasikan Claudia.js karena kesederhanaannya, semua contoh berikut akan menggunakannya. Anda bisa mendapatkannya dari NPM di sini: npmjs.com/package/claudia.
Setelah menginstal Alexa Skill Kit dari NPM, memerlukannya dalam kode Anda:
const alexaSkillKit = require ( 'alexa-skill-kit' )
atau dengan sintaks import
*:
import alexaSkillKit from 'alexa-skill-kit'
* Sintaks import
tidak didukung di Node.js, Anda perlu menggunakan perpustakaan tambahan seperti Babel agar berfungsi.
Setelah memerlukannya, Anda hanya perlu meneruskan event dan konteks dari fungsi Lambda, selain event
dan function
, Anda perlu meneruskan fungsi handler sebagai param terakhir.
Misalnya:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
Alexa Skill Kit menyederhanakan balasan permintaan Alexa. Ada beberapa hal yang dapat Anda lakukan:
| Membalas dengan teks sederhana | ? Membalas dengan objek | ? Balasan yang lebih kompleks | ⏳ Balasan asinkron | | ----- | ----- | ----- | ----- | ----- |
Teruslah membaca dan semuanya akan dijelaskan di bawah ini.
Jika Anda ingin Alexa membalas dengan teks sederhana, Anda hanya perlu mengembalikan teks tersebut dalam fungsi pengendali. Alexa Skill Kit akan membungkus teks dalam objek yang valid.
Misalnya:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
Contoh di atas akan membalas Alexa dengan objek berikut:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
Seperti yang Anda lihat, sesi akan ditutup secara default. Agar sesi tetap terbuka atau menjawab permintaan yang lebih kompleks, Anda dapat mengirimkan objek alih-alih teks.
Jika Anda ingin sesi tetap terbuka atau ingin mengembalikan sesuatu yang lebih dari sekedar output pidato sederhana, Anda dapat mengirim objek dan Alexa Skill Kit tidak akan memodifikasinya.
Misalnya:
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'
}
}
}
} )
}
Membangun objek secara manual itu sulit dan membosankan. Saya merekomendasikan penggunaan modul Alexa Message Builder untuk menyederhanakan pembuatan balasan yang lebih kompleks.
Alexa Message Builder tersedia di NPM, dan Anda dapat menambahkannya ke proyek Anda dengan perintah berikut:
npm install alexa-message-builder --save
Setelah itu cukup membutuhkannya dengan Alexa Skill Kit seperti ini:
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 ( )
} )
}
Contoh di atas sama dengan contoh dari bagian "Membalas dengan objek".
Mengapa Alexa Message Builder bukan bagian dari Alexa Skill Kit?
Ya, tanpa alasan yang jelas, Alexa Message Builder dikembangkan sebelum Alexa Skill Kit, dan merupakan modul terpisah jika ada yang hanya membutuhkan salah satu modul tersebut tanpa yang lain.
Alexa Skill Kit menggunakan janji untuk menangani balasan asinkron. Untuk dapat membalas secara asinkron, cukup kembalikan janji dan selesaikan dengan teks atau objek dan Alexa Skill Kit akan menerapkan aturan yang sama seperti di atas.
Misalnya:
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 akan menjawab dengan teks:
`Here's an info from the server: ${ processedResult } `
Alexa Skill Kit ( function
) menerima atribut berikut:
object
, wajib diisi) — objek yang tidak dimodifikasi yang diterima dari Amazon Alexa. Jika fungsi Lambda Anda menerima objek yang bukan permintaan Amazon Alexa yang valid, fungsi tersebut tidak akan menguraikannya dan fungsi pengendali Anda tidak akan pernah dipanggil.object
, diperlukan) — objek konteks yang diterima di AWS Lambda, disarankan untuk tidak memodifikasinya, tetapi Alexa Skill Kit hanya akan menggunakan fungsi context.succeed
dan context.fail
, sehingga Anda dapat meneruskan objek khusus yang berisi keduanya fungsi dari dan objek konteks asli.function
, wajib diisi) — fungsi yang menerima peristiwa yang diurai dan mengembalikan balasan yang akan diteruskan ke Amazon Alexa.Fungsi handler adalah fungsi yang menerima peristiwa yang diurai dan dapat mengembalikan string, objek, atau janji yang akan mengembalikan string atau objek ketika diselesaikan.
Jika Anda tidak ingin Alexa membalas, cukup kembalikan null
atau jangan kembalikan sama sekali.
Objek yang diurai adalah objek yang berisi properti berikut:
null
null
{}
)Bagian utama kode ada di direktori lib.
Pengujian berada di direktori spesifikasi, dan harus mengikuti struktur file sumber yang sesuai. Semua nama file pengujian yang dapat dieksekusi harus diakhiri dengan -spec
, sehingga nama tersebut akan diambil secara otomatis oleh npm test
. File proyek tambahan apa pun, kelas pembantu, dll yang tidak boleh langsung dieksekusi oleh test runner tidak boleh diakhiri dengan -spec
. Anda dapat menggunakan direktori spec/helpers untuk menyimpan helper Jasmine, yang akan dimuat sebelum pengujian apa pun dijalankan.
Kami menggunakan Jasmine untuk pengujian unit dan integrasi. Kecuali ada alasan kuat untuk menggunakan sesuatu yang berbeda, silakan lanjutkan menggunakan Jasmine untuk pengujian. Tes yang ada ada di folder spesifikasi. Berikut beberapa pintasan perintah yang berguna:
Jalankan semua tes:
npm test
Jalankan hanya beberapa tes:
npm test -- filter=prefix
Dapatkan pelaporan nama tes hierarki terperinci:
npm test -- full
Kami menggunakan ESLint untuk konsistensi sintaksis, dan aturan linting disertakan dalam repositori ini. Menjalankan npm test
juga akan memeriksa aturan linting. Harap pastikan kode Anda tidak memiliki kesalahan linting sebelum mengirimkan permintaan penarikan.
MIT - Lihat LISENSI