AWS Lambda を使用した簡単な Alexa スキル開発のためのライブラリ。
インストール | ?仕組み | ?使用法 | 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
とコンテキストを渡すだけで済みます。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 を使用して非同期応答を処理します。非同期で返信できるようにするには、単純に 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
、必須) — AWS Lambda で受信したコンテキスト オブジェクト。変更しないことをお勧めしますが、Alexa Skill Kit はcontext.succeed
とcontext.fail
関数のみを使用するため、これら 2 つを含むカスタム オブジェクトを渡すことができます。元のコンテキスト オブジェクトからの関数。function
、必須) — 解析されたイベントを受け取り、Amazon Alexa に渡される応答を返す関数。ハンドラー関数は、解析されたイベントを受け取り、文字列、オブジェクト、または解決時に文字列またはオブジェクトを返す Promise を返すことができる関数です。
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 を使用しており、lint ルールはこのリポジトリに含まれています。 npm test
実行すると、lint ルールもチェックされます。プル リクエストを送信する前に、コードに lint エラーがないことを確認してください。
MIT - ライセンスを参照