Alexaのカスタムスキル開発のためにNode.js用として「Alexa SDK for Node.js Ver2」が公開されました。このAlexa SDK for Node.js Ver2をAWS Lambdaで使用するために、Raspberry piでローカルに開発環境を作成して、AWS Lambdaに開発環境をデプロイします。
前提条件を次に示します。
- Amazon開発者コンソールのアカウントの作成します。Alexaスキルの設定や対話モデルの作成を行います。今回のサンプルスキルでは特別なものは必要ありませんが、AWS Lambdaで作成した関数のARNを、mazon開発者コンソール設定する必要があります。
- アマゾンウェブサービス(AWS)のアカウントの作成します。
に
カスタムスキルを開発するローカルな開発環境として、Raspberry piを使用し、「Raspberry Pi 3にNode.jsのインストール」に従ってNode.js v8.10.0(現状のAWS Lambdaでのバージョンと合わせました)をインストールします。
$ nvm install v8.10.0 Downloading and installing node v8.10.0... Downloading https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-armv7l.tar.xz... ######################################################################## 100.0% Computing checksum with sha256sum Checksums matched! Now using node v8.10.0 (npm v5.6.0) Creating default alias: default -> v8.10.0 $ node -v v8.10.0
「Alexa SDK for Node.js Ver2」は次の二つのパッケージのみ(alexa-skills-kit-sdk-for-nodejsはインストールしない)インストールし、最後にインストールされたファイルを表示させます。
$ npm install --save ask-sdk-model npm WARN saveError ENOENT: no such file or directory, open '/home/pi/alexa/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/home/pi/alexa/package.json' npm WARN alexa No description npm WARN alexa No repository field. npm WARN alexa No README data npm WARN alexa No license field. + ask-sdk-model@1.3.1 added 1 package in 2.491s $ npm install --save ask-sdk-core npm WARN saveError ENOENT: no such file or directory, open '/home/pi/alexa/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/pi/alexa/package.json' npm WARN alexa No description npm WARN alexa No repository field. npm WARN alexa No README data npm WARN alexa No license field. + ask-sdk-core@2.0.7 added 1 package in 2.787s $ du -k ./node_modules/ 160 ./node_modules/ask-sdk-model 60 ./node_modules/ask-sdk-core/dist/skill/factory 104 ./node_modules/ask-sdk-core/dist/skill 16 ./node_modules/ask-sdk-core/dist/util 20 ./node_modules/ask-sdk-core/dist/service 44 ./node_modules/ask-sdk-core/dist/dispatcher/error 92 ./node_modules/ask-sdk-core/dist/dispatcher/request/handler 32 ./node_modules/ask-sdk-core/dist/dispatcher/request/mapper 28 ./node_modules/ask-sdk-core/dist/dispatcher/request/interceptor 156 ./node_modules/ask-sdk-core/dist/dispatcher/request 236 ./node_modules/ask-sdk-core/dist/dispatcher 16 ./node_modules/ask-sdk-core/dist/attributes/persistence 48 ./node_modules/ask-sdk-core/dist/attributes 92 ./node_modules/ask-sdk-core/dist/response 532 ./node_modules/ask-sdk-core/dist 560 ./node_modules/ask-sdk-core 724 ./node_modules/
インストールしたフォルダ「node_modules」と「package-lock.json」をWindowsにSFTPによりファイル転送します。次に、何を話しかけても “こんにちは” と返ってくる(だけの)スキルファイル「index.js」を作成します。
- 3行目は、「ask-sdk-core」を指定します。
index.js
'use strict'; const Alexa = require('ask-sdk-core'); let skill; exports.handler = async function (event, context) { if (!skill) { skill = Alexa.SkillBuilders.custom() .addRequestHandlers(MyHandler) .create(); } return skill.invoke(event); } const MyHandler = { canHandle(handlerInput) { return true; }, handle(handlerInput) { return handlerInput.responseBuilder .speak('こんにちは') .getResponse(); } };
これらのファイル/フォルダをzipファイルとして圧縮します。
AWS Lambda関数を作成します。AWSサービスの「lambda」を選択し、表示されたAWS Lambdaの初期画面から、「関数の作成」ボタンをクリックします。 関数の作成では「一から作成」をクリックし、名前等を設定して「関数の作成」ボタンをクリックします。
次の手順で、AWS Lambdaにデプロイします。
「関数コード」のコードエントリタイプで「zipファイルをアップロード」を選択すると次の内容が表示されます。
関数パッケージのアップロードをクリックすると、ファイル選択画面が表示されるので作成したzipファイルを選択し、上部の「保存」ボタンを押します。作成したファイルがアップロードされ、次の内容が表示されます。
AWS Lambda関数を作成し、トリガーとして「Alexa Skills Kit」を設定し、セキュリティの観点で、本来はスキルIDを入力すべきですが、ここでは簡略化のため「無効」を選択し、「追加」ボタンをクリックします。 ハンドラーはデフォルトのindex.handlerのままにします。
作成した関数を試験するには、画面右上の「テスト」ボタンをクリックします。 「テストイベント設定」ダイアログが表示されるので、「イベントテンプレート」「Alexa Start Session」を選択し、イベント名を「AlexaTest]と入力し、画面下の「作成」ボタンをクリックします。 テストの選択が「AlexaTest」になっていることを選択し「テスト」ボタンをクリックしてテストを実行すると、実効結果画面が表示され、「詳細」をクリックすると実行状態が表示されます。
最後に、AWS Lambda関数のARNをコピーします。このARNはAmazon開発者コンソールでスキルを設定する際に必要となります。
Amazon開発者コンソールに紐づいたAmazon Echoからどのような音声を入力しても、「こんにちは」とAmazon Echoが答えます。