AWS Lambda를 사용한 간편한 Alexa Skill 개발을 위한 라이브러리입니다.
설치 | ? 작동 원리 | ? 용법 | API 참조 | ? 기여하는 방법 | ⚖️ 라이선스 |
---|
Alexa Skill Kit는 NPM에서 Node.js 모듈로 제공됩니다. 설치하려면 기존 Node.js 프로젝트에서 다음 명령을 실행하세요.
npm install alexa-skill-kit --save
Alexa Skill Kit는 Node.js 및 AWS Lambda를 사용하여 Alexa Skills 개발을 단순화하는 라이브러리입니다. 특정 배포 스타일이 필요하지 않으며 수동으로 생성된 Lambda 함수, Claudia.js를 통한 배포 등과 함께 작동할 수 있습니다.
나는 단순성 때문에 Claudia.js를 추천하므로 다음의 모든 예제에서는 Claudia.js를 사용할 것입니다. 여기 NPM에서 얻을 수 있습니다: npmjs.com/package/claudia.
NPM에서 Alexa Skill Kit를 설치한 후 코드에 이를 요구합니다.
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 디렉터리에 있으며 해당 소스 파일의 구조를 따라야 합니다. 모든 실행 가능한 테스트 파일 이름은 -spec
으로 끝나야 npm test
에 의해 자동으로 선택됩니다. 테스트 실행기가 직접 실행해서는 안 되는 추가 프로젝트 파일, 도우미 클래스 등은 -spec
으로 끝나서는 안 됩니다. spec/helpers 디렉토리를 사용하여 테스트가 실행되기 전에 로드될 Jasmine 도우미를 저장할 수 있습니다.
단위 및 통합 테스트에는 Jasmine을 사용합니다. 다른 것을 사용해야 할 매우 설득력 있는 이유가 없는 한 테스트에는 Jasmine을 계속 사용하십시오. 기존 테스트는 spec 폴더에 있습니다. 다음은 몇 가지 유용한 명령 단축키입니다.
모든 테스트를 실행합니다.
npm test
일부 테스트만 실행하십시오.
npm test -- filter=prefix
자세한 계층적 테스트 이름 보고를 받으세요.
npm test -- full
구문 일관성을 위해 ESLint를 사용하며 린팅 규칙은 이 저장소에 포함되어 있습니다. npm test
실행하면 린팅 규칙도 확인됩니다. 끌어오기 요청을 제출하기 전에 코드에 Linting 오류가 없는지 확인하세요.
MIT - 라이센스 보기