もふもふ技術部

IT技術系mofmofメディア

【Amazon Echo入門#1】Alexaちゃんに今日履いているパンツの色を答えさせる

いよいよAmazon Echo日本語対応版の発売が今日2017/11/09に発表されました!!実際の発売は来週以降になるようで、今日買う気満々だったのですが、もうちょい待たねばならぬ。

Google Homeを見送ってEcho一択勝負だったので待ち遠しい。

ところで、EchoのAlexaは既に開発者向けに日本語対応のコンソールが公開されており、Alexa用のSkillが開発出来るようになってます。ただ発売を待っているだけもアレなので、先にスキル作ってみます。

Alexaちゃんに今はいているパンツの色を聞いたら、何色か答えてくれるスキルを作る。

このあたりの公式情報を参考に進めていきます。またしてもクラスメソッドさんか。

https://developer.amazon.com/ja/alexa-skills-kit/training/building-a-skill

Amazon Developer登録

AWS Lambdaを使うのでAWSアカウント取得が必要なのですが、長くなるのでそのあたりの手順は割愛します。

スキル開発を進めるには、Alexa Skills Kit画面から行きます。

開発者ログイン画面に行くと思うので、登録を進めていきます。普通に買い物用のAmazonのアカウントをそのまま使える。

プロフィール情報などの入力が求められるので、普通に必要な項目を埋めていく。

profile

App Distribution Agreementは、利用規約のようなもので、合意を求められます。内容問題なければ、「承認して続行」ボタンをクリック。

app-distribution-agreement 次は「支払い」画面。よく分からんけど、なんとなく口座情報入力とか出てきたらめんどそうだし、現時点で収益化は狙っていないので、デフォルトの「いいえ」のままで進める。

pay

ダッシュボードがでたら開発者アカウントの登録は完了。「ALEXA」を選択します。

dashboard

Alexa Skillの設定

Alexa Skill Kitの方を選択。

start-dev-alexa-1 start-dev-alexa-2 スキルの設定を入力していく。

  • スキルの種類: カスタム対話モデル
  • 言語: Japanese
  • スキル名: WhatColor
  • 呼び出し名: パンツ何色
  • グローバルフィールド: 全てデフォルトの「いいえ」

regist-skill

対話モデル画面。インテントスキーマは以下をコピペ。現時点ではなんだかよく分かってない。公式情報のまんまです。スキルビルダーを起動すんなと公式ブログに書いてあるので気をつけよう。

{ "intents": [
  { "intent": "GetNewFactIntent" },
  { "intent": "AMAZON.HelpIntent" },
  { "intent": "AMAZON.StopIntent" },
  { "intent": "AMAZON.CancelIntent" }
]}

conversation-model

カスタムスロットタイプは空でOK。

サンプル発話は、実際に起動したい時の対話で使われそうな文章を複数パターン入れておく。

オレは一体何をやっているのだろうか、という気分になってくる。

GetNewFactIntent パンツは何色ですか
GetNewFactIntent 今日は何色のパンツを履いていますか
GetNewFactIntent パンツ何色
GetNewFactIntent パンティ何色
GetNewFactIntent 何色のパンティ履いてるの
GetNewFactIntent 何色のパンツはいてるんですか
GetNewFactIntent 今どんな色のパンツはいてるの

ここまでいったら一旦スキルの設定を保留。

Lambdaの設定

続いてAWS Lambdaの設定。

ダッシュボード画面からCreate Functionボタンをクリック。

dashboard

テンプレート的なのは使わず Author from scratchボタンをクリック。

blueprints

Lambdaの基本設定画面。

  • Name: WhatColor
  • Role: Create custom role

basic-information

Create custom roleを選択すると別画面が開くので、特に値を変更せずAllowする。

create-custom-role

Lambdaにコードを実装していきます。公式ブログからとってきた実装済みのコードのzipファイルをダウンロード。

https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/jp/tutorials/fact/lambda.zip

ファイルを展開して、index.js内の変数dataに配列を格納している箇所を以下のように変更する。

var data = [
    "今日のパンツの色はピンクです",
    "今履いているパンツの色は白です",
    "私のパンツの色は水色です",
    "今日のパンツの色は黒です",
    "実は今パンツ履いてないんです",
    "今日のパンツはグレーです",
];

再び圧縮してzipファイルにするのですが、macの右クリック圧縮ではなぜかうまくいかなくて少しハマった。下記ブログに記載されているのと同じようにコマンドで圧縮したらうまくいった。

ソースコードが置いてあるカレントディレクトリにcdしてからzipしないとダメっぽい。

https://www.business-on-it.com/2003/techblog/aws-lambda-create-function/

$ cd lambda
$ zip -r hoge.zip index.js node_modules/

ちなみに本当はpythonで実装したかったのですが、どうやらAlexaでLambdaを使う場合、規定のインターフェースというかルールみたいのにそってfunctionを定義しないと、シミュレータテスト時にThe response is invalidというエラーが出てしまいうまくいかないため、既存のコードを利用した。

zipしたファイルをLambdaにアップロードします。

lambda-code

Triggersタブで、Alexa Skills KitをAddする。

add-triger

テストイベントを作成して実行。succeededが表示されればOK。

  • Event template: Alexa Start Session
  • Event name: AlexaStartSession

test-event

テストが成功したら画面右上のARNってところに表示されているIDをコピーしておく。

arn:aws:lambda:ap-northeast-1:00000000000:function:WhatColor

LambdaとAlexaを接続する

開発者コンソールに戻って、lambdaと接続させる。

メニューの「設定」の「エンドポイント」の「デフォルト」に先程コピーしらARNのIDをペーストします。

endpoint

「パンツ何色ですか」と発話欄に入力して呼び出してみます。

exec-test

できたあああああああああああああ!!

Alexaちゃんは今日はグレーのパンツを履いているようですね!!

まとめ

とりあえず今回はスキルを作る流れだけだったので、難しいことはやりませんでしたが、大体つかめましたね。

独自のコードはほとんど書いていないのですが、Lambdaにコードを実装していくあたり今後ハマりそうな気がする。次はその辺やれたらいいな。