Help us understand the problem. What is going on with this article?

RailsでAPI作ってGoogle Home Miniに喋らせてみた

More than 1 year has passed since last update.

会社で技術発表の順番が回ってきた・・・
正直技術関係は苦手w

でもやるからには面白いことをやりたい!
ってことで、最近ちょっと気になっていたスマートスピーカー開発をしてみることにした

と雑談はこの程度で

今回使った最低限のもの

・PC(自分はmac)
・Ruby on Rails(gem grape)
・Googleアカウント
・Actions on Google
・Dialogflow(V2)
・Google Home Mini
・スマホ
・ネット環境

準備

・スマホのGoogleホームアプリからGoogle Home Miniをデバイス登録(これでアカウントが同期される)
dialogflowに登録

イメージ

dialogflow_add.png
何か間違ってるかもだけどたぶんこんな感じw
(Actions on Googleは後から気づいたので後付け・・・)

簡単手順(詳しく知りたい人は他のサイトを参考にしてください)

  1. Actions on Googleでプロジェクト作成 Actions on Google.png
  2. 右下にあるconversationalを選択 ca277d790b0c6d90011dbc77a1077b9d.dat  PNG Image  1792 × 1139 pixels    Scaled  81  .png
  3. 呼ぶ名前を決める Actions on Google(1).png Actions on Google(2).png
  4. Actionの作成 Actions on Google(3).png Actions on Google(4).png
  5. 自動でDialogflowが立ち上がるので、Agent(プロジェクトみたいなもの?)を作成する Dialogflow.png
  6. Intents(実際処理するところ)の作成を行う Dialogflow(1).png
  7. しゃべる内容(フレーズ)を設定する(複数設定可能) Dialogflow(3).png
  8. パラメーターの設定 Dialogflow(4).png フレーズの中で変数のように扱いたいものをなぞるとパラメーターが設定可能 Dialogflow(5).png 必須にしたいならチェックを入れる Dialogflow(6).png (一応もう一つのフレーズのパラメーターもなぞっておいた) Dialogflow(7).png
  9. レスポンスの設定 Dialogflow(8).png パラメーターを利用していろんなパターンを返せる(返される会話はランダム) Dialogflow(9).png
  10. 試してみる

名前を設定してSAVE
Dialogflow(10).png
右上でしゃべってみる
Dialogflow(19).png
結果が返ってくることを確認
Dialogflow(11).png

APIと連動

APIの用意

ざっくり書くとこんな感じ

  desc 'POST /api/qiita_sample/test'
  params do
  end
  post '/test' do
    # UTF-8を指定しないと文字化けで返って読み上げてくれない
    content_type 'application/json; charset=UTF-8;'

    ret = %w(サンプル テスト 本気 本物)
    prms = JSON.parse(request.body.read, symbolize_names: true)[:queryResult][:parameters]
    present fulfillmentText: "これが#{ prms[:any] }?これは#{ ret[Random.new.rand(0..3)] }です"
  end

重要なのはPOSTで作成して、

{ fulfillmentText: 'hoge' }

の形式で返すこと(Dialogflowのversionで変わるので注意。これはV2)

Dialogflowに戻る

  1. Fulfillmentを設定 Dialogflow(12).png Enabledにして、APIのURL(適当なやつだとダメみたい)を入力して右下のSAVE
  2. 先ほど作ったIntentsを選択 Dialogflow(14).png
  3. 一番下にあるFulfillmentを有効にする(レスポンスは無視されるようになる) Dialogflow(16).png SAVEを忘れずに
  4. IntegrationsからSimulatorを起動 Dialogflow(17).png スイッチONしてTEST起動 Dialogflow(18).png
  5. 自動でSimulatorが立ち上がるのでテスト Actions on Google(5).png

終わり

これだけで自分のGoogle Home Miniに話しかけると、Simulatorと同じように動かすことが可能!
設定したパラメーターをうまく処理してくれなかったりするので、本来はEntitiesなどを利用したほうがいいと思う

Dialogflowのバージョンが変わったばかりなのかネットにあまり情報がなくてすごい苦労しました。。。
V1が結構わかりづらいように感じたけど、V2はだいぶシンプルなので、今後バージョンがあがってもそれほど変更はないとは思うけど、動かなかった場合にはバージョンを注意するといいと思う

aiyu427
luxiar
Ruby on Rails専門のWebアプリケーション開発に特化した町田の受託開発企業です
http://www.luxiar.com/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away