AlexaのCustom Skill作成のHello World
■公式サンプル
に色々なサンプルが公開されていますが、今回はskill-sample-nodejs-hello-worldというサンプルを動かしてみます。
https://github.com/alexa/skill-sample-nodejs-hello-world
■Skillの解説サイト
https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/overviews/steps-to-build-a-custom-skill
■AWSコンソールでの設定
AWSコンソールにログインして、リージョンを東部(バージニア)かEU(Ireland)にする。
■Lambdaで関数を作成
https://console.aws.amazon.com/lambda/home?region=us-east-1#/
で「関数の作成」を押す。
「設計図」という画面になるので、フィルター欄にalexaと入れると、alexaのテンプレだけ表示されるので適宜選択してすぐに試せるようになっている。
が、今回はそこには出てこないhello-worldのサンプルをcloneしてzipをアップロードする方法でやってみる。
■Lambdaコンソールで行う作業の流れ
- 「一から作成」を押して次へ
- 関数名やロールを設定して「関数の作成」
- コードエントリタイプを「zipをアップロード」にする
- 「アップロード」ボタンが出るので、自作の関数のzipファイルをアップロードする。(関数の中身とzip方法は後述)
- 「トリガー」タブを押して「トリガーの追加」->”Alexa Skill Kit”を選択
- 画面右上のARNをメモっておく。(これを後述のスキルのエンドポイントに指定する。ARN – arn:aws:lambda:us-east-1:xxxxxxxxxx)
■スキル用のLambda関数の中身
今回はサンプルのskill-sample-nodejs-hello-worldを試してみますので、
https://github.com/alexa/skill-sample-nodejs-hello-world.git
をcloneして、/srcで
1 |
$ npm install |
node_modules/ に alexa-sdk/ ができます。
package.jsonのnameなどを適宜修正(しなくても大丈夫)。
index.jsのハンドラ登録の部分にApplication IDを設定する行を追加
1 2 3 4 5 6 |
exports.handler = function(event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = applicationId; <ー この行を追加 alexa.registerHandlers(handlers); alexa.execute(); }; |
※applicationId は作成したスキルの「Skill Information」-> 「Application Id」
※時々、alexa.APP_IDという例をネットで見かけますが、appIdです。
ついでに自分のサーバーのweb APIと連携したい場合は下記のサンプルそのままで行けます。
https://github.com/alexa/alexa-cookbook/tree/master/external-calls/httpsGet#title
■関数パッケージ作成
zipが必要になるのでzipコマンドを入れてない場合はインストールしてください。
1 |
$ sudo apt-get install zip unzip など適宜環境に応じてインストールする |
src/で
1 |
$ zip -r ../helloworld.zip * |
これをLambdaの「関数パッケージ」にアップロードします。
■スキルの作成(開発者コンソールで行う作業)
ログインして「Alexa」->「Alexa Skill Kit」”Get Started”
右上の「Add a New Skill」
・Skill Information
skill type : custom interaction model
name: 今回はhellowroldなど
invocation name: my worldなど(これがスキルの呼び出しの名前になる。”Alexa, ask my world 〜〜”のように使える)
Application ID をメモっておく。
・Interaction Model
Intent Schema
1 2 3 4 5 6 7 |
{ "intents": [ { "intent": "HelloWorldIntent" } ] } |
今回は、サンプルのspeechAssets/IntentSchema.jsonをそのままコピペ。このインテントをどの様に呼び出すかが次のutteranceで決まる。
・Sample Utterances
1 2 3 |
HelloWorldIntent hello HelloWorldIntent say hello HelloWorldIntent say hello world |
これもサンプルのspeechAssets/Utterances.txtからそのままコピペ。
・Configuration
Endpoint: AWS Lambda ARN (Amazon Resource Name) を選択して、上述のLambda関数のARNを入力。 その他はデフォルトのまま。
・Test
Service SimulatorのText欄に”hello”と入力して”ask 〜”ボタンを押してみて、service response欄にレスポンスのjsonが表示されたらOKです。
下のListenボタンを押せば音声で聞く事もできます。
■実機で確認
スキルのテストが出来たら
で自分のechoの管理画面を開いて「your skill」画面で今回作成したskillが有効になっている事を確認。
Alexaにmy worldと呼びかけて”Hello World”と答えてくれたら成功です。
この記事を書いている時点では日本でamazon echoは販売していないので、raspberry piで自作のalexa搭載デバイスを作成して確認しました。
自作の方法は下記を参照してください。