ไลบรารีเพื่อการพัฒนาทักษะของ Alexa อย่างง่ายดายด้วย AWS Lambda
การติดตั้ง | - มันทำงานอย่างไร | - การใช้งาน | การอ้างอิง API | - วิธีการมีส่วนร่วม | ⚖️ใบอนุญาต |
---|
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 ง่ายขึ้น มีบางสิ่งที่คุณสามารถทำได้:
- ตอบกลับด้วยข้อความธรรมดา | - ตอบกลับด้วยวัตถุ | - คำตอบที่ซับซ้อนมากขึ้น | ⏳ ตอบกลับแบบ Async | - - - - - -
อ่านต่อไปและจะมีการอธิบายทั้งหมดด้านล่าง
หากคุณต้องการให้ 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
คุณสามารถใช้ไดเร็กทอรี spec/helpers เพื่อจัดเก็บ Jasmine helpers ซึ่งจะถูกโหลดก่อนที่จะดำเนินการทดสอบใดๆ
เราใช้ Jasmine สำหรับการทดสอบหน่วยและบูรณาการ เว้นแต่จะมีเหตุผลที่น่าสนใจมากในการใช้สิ่งที่แตกต่างออกไป โปรดใช้ Jasmine เพื่อทำการทดสอบต่อไป การทดสอบที่มีอยู่อยู่ในโฟลเดอร์ข้อมูลจำเพาะ ต่อไปนี้เป็นทางลัดคำสั่งที่มีประโยชน์:
ทำการทดสอบทั้งหมด:
npm test
ทำการทดสอบเพียงบางส่วนเท่านั้น:
npm test -- filter=prefix
รับการรายงานชื่อการทดสอบตามลำดับชั้นโดยละเอียด:
npm test -- full
เราใช้ ESLint เพื่อความสอดคล้องของไวยากรณ์ และกฎ Linting จะรวมอยู่ในที่เก็บนี้ การรัน npm test
จะตรวจสอบกฎการขุยด้วยเช่นกัน โปรดตรวจสอบให้แน่ใจว่าโค้ดของคุณไม่มีข้อผิดพลาดในการเป็นขุยก่อนที่จะส่งคำขอดึง
MIT - ดูใบอนุญาต