LoginSignup
12
7

More than 5 years have passed since last update.

AWS Lambdaのrubyランタイムでalexaスキル実装

Last updated at Posted at 2018-12-07

はじめに

こんにちは。
日々の業務ではインフラをやっています@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にカスタムランタイムが提供されたので、おそらく全ての言語でアレクサスキルが開発できると思います。
皆さんも是非試してみてください。

参考

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7