Amazon EchoのSkillで何かを作ってみたい!(そして作ってみました!って言ってみたい)
先日届いたAmazon Echo Dot。
IFTTTを使用しての連携は試してみたので、今度はSkillを作ってみることにしました。
ついでに申請までやってみました。
〇Amazon EchoのSkillの概念とか作り方とか
以下がすごく参考になりました。
・Amazon Echo (Alexa) のSkillの開発に必要な基本概念を押さえる
https://qiita.com/chroju/items/3f30fe424df36e4b4d80
ぶっちゃけこのページをしっかりと読み込んでTry&Errorで試してみれば作成できます。
ただ、それだと終わってしまうので、いろいろ試してみた結果を以下に書き残しておくことにする。
〇目的
とりあえずAlexaのSkillを作成して申請してみる。
〇作る人の前提
普段いろいろと開発をしてはいるが、Lambdaとかは全然使ったことない。
JavaScriptはかけるけど、Node.jsは触ったことない。
〇準備
・[developer.amazon.com]へのデベロッパー登録。
日本でEchoを購入している時点でco.jpへのアカウントはあると思われるが、
Skillを開発しようと思ったら[developer.amazon.com]のアカウントが必要とのこと。
https://developer.amazon.com/ja/
・AWSアカウント
Skillを作成するだけなら不要だが、Skillで実際に動作する処理を実装する際には
AWS Lambdaを使用するのが連携的に一番楽そうなので。
AWS Lambda とは
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html
アカウントが無ければ作っちゃいましょう。
Lambdaでちょっとしたスキルを使うぐらいであれば、無料枠の中におさまります(多分)
ほとんどの開発者にとって、Alexaスキルをサポートする関数にはLambda無料利用枠で十分です。毎月のリクエストが100万件まで無料になります。Lambda無料利用枠は自動的に期限が切れることはなく、永久に使用できることに注意してください。
・アイデア
どんなことをさせようかをざっくりとでもいいので考えておきましょう。
Echoに呼びかけたら「〇〇」と返答するとかのレベルでもとりあえず大丈夫です。
※ちなみに自分は完全にノープランで始めたのでここのアイデア出しで時間がかかりましたし、最終的には家人のアイデアを流用しました。。。
〇今回作成する処理の大きな流れ
Echo→[Skill]→Dev→[Lambda関数]→AWS Lambda
〇Skill側の作成
developer.amazon.comにサインイン

左にそれっぽいものがあるので押したくなりますが、それではなく右上の[Developer Console]を押下します。
※ここでもう一回サインインを要求されるかも。。
サインインしたらALEXAを選択。

ALEXA Skills Kitを選択

新しいスキルを追加する

スキル初期設定

スキルの種類:今回は[カスタム対話モデル]
言語:[Japanese]
スキル名:スキル一覧に表示される名称。
呼び出し名(Invocation name):アレクサに対する起動フレーズ。
※グローバルフィールドの部分はとりあえず全部「いいえ」でOK
設定したら「保存」を押下して「次へ」。
対話モデル

一から作成するのは割とめんどくさいのでスキルビルダーを使用したほうが楽だと思います。

Intentの作成

Sample utteranceの作成

モデルの構築

残りの設定

設定

そのため、ここで一回Skillの作成は中断して、ここからの呼び出しを処理する部分を作成する。
〇Lambda側の作成
今回はある程度のひな型が存在するものを流用するので
AWS Lambdaから「関数の作成」→「設計図」→「alexa-skill-kit-sdk-factskill」
の順で選択。
Lambda関数の情報を記載。

処理記述
テンプレート上にて[GetNewFactIntent]となっている部分をSkill側にて自作したIntent名に変更します。
その下の処理も一緒に修正しておきます。
this.emit(':tell', "今日は大吉です。");

これで[SampleTestIntent]として呼び出されたら、『「今日は大吉です。」としゃべってください』と返す処理ができました。
ただ、このままだとまだSkill側から呼び出せる状態になっていないので、設定を追加します。


これでSkill側からの呼び出しをこのLambda関数が受け付けられるようになりました。
逆に、Skill側にこのLambda関数を呼び出せるためのIDとして、ARNをコピペします。
〇Skill側の残りの設定
残りの設定の記載

テスト

デベロッパーとEchoのアカウントが異なっている場合はベータテストのところから
対象アカウントのメールアドレスに対してベータテストの招待メールを送信してテストができるようになる。
が、ここのベータテストができるようになるためには「公開情報」なども埋めないといけないみたいなので、まだ実施できない。
※.comと.co.jpで同じアカウントにしていてもダメな場合があるので、
その時はこの手順でメールを送信して有効化するとテストできるようになる。
ここでテストを実施して、どういう風なInvocation nameやSample utteranceがよいか修正。
また、単語として認識されづらいフレーズもあったりするので、
アプリの方の履歴画面などでどういう風な認識をされているかを確認しながらということになると思われる。
公開情報
スキルの説明やアイコンなどを設定する。
アイコンについてはサイズを厳密に合わせていないと即エラーになるので、
ペイントなどでサイズを決めてから作成するのが一番簡単だと思われる。
※自分は適当な有りものの画像を使おうと思ったら余計に時間がかかりました。
プライバシーとコンプライアンス
上記をすべて設定し、保存し終えたら、申請できるようになっていると思います。
また、それと同時にベータテストもできるようになっていると思います。
テストしたいEcho端末に紐づいているアカウントに対してメールを送信すると、招待メールが送信され、それに従ってスキルを有効化すると端末で遊ぶことができるようになります。
正直、公開せずに遊ぶだけなのであればこれで十分な気もします。
〇申請
ただし、今回の目的は申請なので、申請ボタンも押下。
申請すると対象Skillはその間編集できなくなる模様。
自動メールでチェックリスト的なものが送られてくるのでそれを改めて読んでみるのもいいかと。
どれくらいで申請結果が返ってくるのかわからないですが、返ってきたら別途報告予定。
※このまま申請が承認される気もしませんし。。
〇Skillを作ってみた感想として
なんとなく流れは分かった気がします。
「Skill」そのものを作るということはさほど難しくはないのかなという印象。
ポイントはトリガーとなるInvocation nameやSample utteranceのフレーズ。
これをAlexaが認識してくれないとそもそも起動できない。
※いくつか試してみたが、一般的な名称じゃないと認識力は落ちるなという感じ。
逆にSkillに対するバックエンド処理。こっちはまあまあめんどくさいなという印象。
といっても、お決まりのものを作るだけならテンプレートがあるのですぐにできる。
ただ、何かをやらせたかったらNode.jsもしくはPythonで作成しないといけなく、
この辺はAWSのlambdaの使い方を把握していれば楽なんだろうなと思うが、自分にはまだまだか。
Skillに限らずLambdaでいろいろできるようになるといろんなことができそうだなという気も。
〇今後
・もう少しいろいろと他サービスを呼び出せるようにしたい。
→SlackやMail送信に接続させたいところ。
→Lambdaではなく、GAS(Google App Script)を直接呼び出せばGmailぐらいは簡単にイケる?
・Slotも使用してみる。
・セッションを作成してのCall&Responseもそのうちやってみたい。