Ruby on RailsでAlexa スキルを開発するハンズオンを実施しました
いつもロリポップ!マネージドクラウドをご利用いただき、誠にありがとうございます!
こんにちは、エンジニアの@sunecosuri です。
先日、Fukuoka Growth Nextにてマネージドクラウドを使ってAlexaスキルを開発しようというハンズオンを実施しましたのでこちらにて公開いたします。
また以下の手順に沿ったスライドも公開しておりますのでもしよろしければあわせて御覧ください。
前提条件
・ ruby 2.5.1以上がインストール済み
・ gem install railsが完了している
・ Slackチームに参加している
・ マネージドクラウドにクレジットカードが登録済みである
・ プロジェクトに公開鍵が登録済みである
・ Amazon developerに登録済みである
Railsアプリの作成
以下のコマンドを実行します
$ rails new alexa-lolipop-weather --api
Gemを登録する
- Gemfile
alexa-lolipop-weather のディレクトリに移動してGemfileに以下の2行を追記します
...
gem 'alexa_rubykit'
gem 'weather-report'
...
ルーティングの登録
- config/routes.rb
Rails.application.routes.draw do
resources :weather, only: %i(create)
end
コントローラーの作成
以下のコマンドを実行してコントローラーの雛形を作成します
$ rails generate controller Weather
メソッドを書き換える(簡単な応答)
- app/controllers/weather_controller.rb
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
response.add_speech("こんにちは")
render json: response.build_response
end
マネージドクラウドにプッシュする
- コンパネからリモートリポジトリの情報を取得して設定する
この時点で、Alexa にある開発コンソールのテストシミュレータで確認することができます。
インテントを利用して、引数を受け取る
- app/controllers/weather_controller.rb
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
# インテントからcityの文字列を受け取る
city = request.slots[:city][:value]
response.add_speech("#{city}を受け取りました")
render json: response.build_response
end
create メソッドを上書き保存し、マネージドクラウドにプッシュします。
もう一度テストシミュレータで確認してみましょう。
以下のように○○を受け取りましたと返ってくれば成功です。
WetherReportのAPIを利用して天気を答える
- app/controllers/weather_controller.rb
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
# インテントからcityの文字列を受け取る
city = request.slots[:city][:value]
# cityの文字列からWeatherReportのID形式の値を取得する
id = WeatherReport::Weather.request_cityid(city)
# IDが取得できたら、明日の天気を調べて応答する
if id
weather = WeatherReport::Weather.new(id)
weather.tomorrow.date
response.add_speech("#{city}の明日の天気は#{weather.tomorrow.telop}です。")
else
response.add_speech("#{city}の天気が調べられませんでした")
end
render json: response.build_response
end
再度create メソッドを上書き保存してマネージドクラウドにプッシュしましょう。
最終的には「Alexa、ロリポップで福岡の天気を教えて」というと明日の天気を教えてくれるようになります。
インテントの仕組みがわかると、スキルを開発することができると思います。応用が効くので夢が広がりますね!ぜひ興味の有る方は試してみてください!