Alexa Skills Kit SDK for Node.js が大幅バージョンアップされ、v2 になりました。 SDKという割にはフレームワークに近づいた感じのバージョンアップで、1つ1つの機能と全体的な流れを紹介してみたいと思います。
1つ1つ実装していくことで、最終的にはテンプレートとして使えるソースができあがるはずです。
今回はAWS Lambda + ask-sdk v2の組み合わせを例に紹介します。
はじめる前に
ASK SDK v1とv2の違いをメインに紹介していきますので、分からない言葉も人によってはでてくるかと思います。 簡単にAlexa Skillsの用語を私なりに説明しておきます。
アトランス(utterance)
発話のことで、「アレクサ、○○して」とAmazon Echoに言う時の「○○して」の部分を指します。
インテント(intent)
プログラムで言う所の関数みたいなもので「命令」や「指示」に当たる物です。 "「アレクサ、○○して」って言われたらXX処理を実行するスキル"を作るにあたり、XX処理の部分のことを指します。
スロット(slot)
インテントに渡す引数みたいな物です。
SDKのインストール
SDK version 1 までは AWS Lambdaのテンプレートを使用すればSDKをインストールしなくても使えたのですが、 version 2 はまだテンプレートにないようで、自分でインストールする必要があります。
インストールはnpmが使えるようにしたあと、ソースを置くフォルダを作り、 コマンドプロンプトやterminalで次のコマンドを叩くだけです。
cd ソースを置くフォルダ npm install --save ask-sdk
ハンドラーについて
ではさっそくLambdaを作成してみましょう。 後で上書きするので空のLambdaを作成してください。
まずはLambdaを起動して最初に処理する"exports.handler"についてですが、 Lambdaを作るとデフォルトで次のようなコードが生成されます。
exports.handler = async (event) => { // TODO implement return 'Hello from Lambda!' };
これはNode.js version8で作った場合なので、version4や6だともうちょっと違うとは思います。
ask-sdk v2を使う場合、この部分は丸々次のように置き換えるようになります。
const Alexa = require('ask-sdk'); exports.handler = Alexa.SkillBuilders.standard() .addRequestHandlers(ハンドラーを列挙) .lambda();
SDKのドキュメントには別の書き方も載っていますが、Lambda用のメソッドがあるので基本的にはこっちを使っていけば問題ありません。
const Alexa = require('ask-sdk');
この部分でSDKファイルを読み込みます。 v2には色々なSDKがありますが、'ask-sdk'には全部の機能が入っていますので、とりあえずこれで大丈夫です。
exports.handler = Alexa.SkillBuilders.standard() .addRequestHandlers(ハンドラーを列挙) .lambda();
addRequestHandlersの引数にインテントのメソッドを書いていきます。
他にもインスペクターと読んでいる前処理、後処理なんかも追加していきます。 最終的には次のようなイメージになります。
こう書くと複雑そうですが、1つづつメソッドを追加して最低限必要な機能だけ作って見ましょう。 きっと色々なスキルを作成する際のテンプレートになると思います。