はじめに
こんにちは。
日々の業務ではインフラをやっています@hayaosatoです。
最近趣味でアレクサスキルの開発を始めました。
まだまだ勉強中ですが、アレクサスキルはエンドポイントにAWS Labmdaを設定でき、非常にお手軽です。
ところで、この間のre:Invent2018にてAWS Lambdaのランタイムにrubyが追加されましたね!
とういう事で今回はアレクサスキルをAWS Lambdaのrubyランタイムにて実装していきたいと思います!
作るもの
最小構成のアレクサスキルとして、アレクサに「おはよう」と言ったら今日の18時の天気と運勢を教えてくれるスキル
毎朝出かける前に天気と運勢を知りたいのですが、それらが一つになったスキルを作ってしまおうと思います。
また、朝なのでそんなにアレクサと会話するつもりもないですw
こちらが呼びかけたら答えてくれて、そのまま会話終了となるようにしていきます。
もっと会話を楽しみたいという方はアレクサのサンプルも豊富にあるのでそちらをご覧いただければと思います。
それでは早速作っていきます。
データ構造
アレクサは指定のデータ形式(JSON)のオブジェクトを渡せば答えてくれるので、今回は以下の
データ構造をアレクサに送るようにします。
アレクサに返すデータ構造としては以下のhashを返すようにしました。
{
'version' => '1.0',
'response' => {
'outputSpeech' => {
'type' => 'PlainText',
'text' => "おはようございます"
},
'shouldEndSession' => true
}
}
これが返ればひとまずはOK
それぞれの項目を説明すると、
version
アレクサに返す応答のバージョン。
とりあえず 1.0
で
response
アレクサが何を返す(話す)のかをmapで定義します
outputSpeech
アレクサに何か喋らせたい場合、こちらによってアレクサに喋らせたい内容をmapで定義します。
type
出力される音声のタイプを定義します。ひとまず PlainText
で。
text
実際にアレクサに喋らせる文書を定義します。
shouldEndSession
アレクサが応答した後に会話を終わらせるか、そのまま会話を継続させるかを定義します。
今回はアレクサが一回喋って終わりでいいので true
にしておきます。
という感じで実装しました。
APIなどの実装の説明は割愛させていただきます。
ソースコードはこちら
alexa設定
今度はAmazon開発者コンソールにてアレクサ側の設定ですが、設定フローとしては
- アレクサの呼び出し方を決める(今回は
おはよう アレクサ
) - カスタムインテントの設定(今回は使用しないのですが、アレクサへの入力を扱う場合にはこちらが利用できるそうです)
- アレクサとAWS Lambdaの連携
- アレクサスキルのビルド(上記設定の反映)
となっています。
ざっとフローのスクショを貼っておきます。
また、基本的には困ることはないかと思うのですが、アレクサとAWS Lambdaの連携では先にAWS LambdaにアレクサのARNを登録しておかないとアレクサにAWS LambdaのARNを登録できませんでした。
アレクサスキル作成
スキルの呼び出し名の設定
カスタムインテントの設定
lambdaとの連携もして、全て通ればOK
完成
アレクサスキルの開発コンソールではアレクサスキルをテストすることもできます。
無事できました!
終わりに
アレクサスキルはAWS Lambdaによってお手軽にかけます。
また、AWS Lambdaにカスタムランタイムが提供されたので、おそらく全ての言語でアレクサスキルが開発できると思います。
皆さんも是非試してみてください。