使用 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 錯誤。
麻省理工學院 - 請參閱許可證