使用 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 因为它很简单,所以以下所有示例都将使用它。您可以从此处的 NPM 获取它:npmjs.com/package/claudia。
从 NPM 安装 Alexa Skill Kit 后,在代码中需要它:
const alexaSkillKit = require ( 'alexa-skill-kit' )
或使用import
* 语法:
import alexaSkillKit from 'alexa-skill-kit'
* Node.js 不支持import
语法,你需要使用 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 使用 Promise 来处理异步回复。为了能够异步回复,只需返回承诺并使用文本或对象解析它,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
, required) — 在 AWS Lambda 上接收的上下文对象,建议不要修改它,但 Alexa Skill Kit 将仅使用context.succeed
和context.fail
函数,因此您可以传递包含这两个函数的自定义对象来自原始上下文对象的函数。function
, required) — 一个接收解析事件并返回将传递给 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 来实现语法一致性,并且 linting 规则包含在此存储库中。运行npm test
也会检查 linting 规则。在提交拉取请求之前,请确保您的代码没有 linting 错误。
麻省理工学院 - 请参阅许可证