15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

alexaとRailsを連携してみちゃう

Posted at

こんにちは!
アマゾンエコーが日本で発売されて1ヶ月ほど経ちました。せっかく応募に当選して購入することができたので、スキル作りに挑戦したいと思います。

Rails側の対応

alexa_rubykit という便利gemがあるのでそれを利用します。Railsからエコーに返すJSONを簡単に作ってくれます。
これをGemfileに追加します。

gem 'alexa_rubykit'

続いてコントローラーを作ります。エコーから受け取った音声の文字列をそのままエコーに返します。
単純なオウム返しのスキルだと思って下さい。

class TalksController < ApplicationController
  protect_from_forgery with: :null_session

  def create
    request = AlexaRubykit::build_request(params)
    response = AlexaRubykit::Response.new
    response.add_speech("あなたの名前は#{request.slots[:MyName][:value]}ですね")
    render json: response.build_response
  end
end

request.slots[:MyName][:value] この部分がエコーから渡ってくるパラメーターになります。この設定はこのあと行います。

Alexa側の対応

スキルの登録

開発者ポータル にてスキルを登録していきます。

スクリーンショット 2017-12-12 8.12.23.png

Slill Builder

次へを押すとスキルビルダーに画面が切り替わると思います。そこでインテントを追加します。

スクリーンショット 2017-12-12 8.15.59.png

今回は、 YourNameIntent という名前のインテントを作成します。続いて Sample Utterances を設定していきます。

スクリーンショット 2017-12-12 8.19.45.png

MyName という箇所をAlexaが解析して文字列としてRailsへPOSTしてくれます。設定が終わったらビルドモデルしてください。

エンドポイントの設定

スクリーンショット 2017-12-12 8.22.31.png

RailsアプリへのURLを設定します。 https ということで heroku を使った方が特に何も用意しなくてよいのでオススメです。

グローバルフィールドの設定

スクリーンショット 2017-12-12 8.31.31.png

ここではサブドメインをチェックを入れて下さい。

テスト

スクリーンショット 2017-12-12 8.33.25.png

サービスシュミレーターでテストを行います。発音する言葉を入力して見てください。ここで、 Sample Utterances とのつながりが分かると思います。
テストでも無事に名前を認識してますね、さすがエコー。

感想

以上、簡単なRailsとの連携でした。データベースを利用したりすればもっと幅の広がるスキルができると思います。
みなさんもアマゾンエコーでスキルを作って遊んでみませんかー??

サンプルコードはコチラ

15
8
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
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?