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

Dialogflow API V2使ってGoogle Homeのアプリを作成

More than 1 year has passed since last update.

はじめに

Google Homeのアプリ?を作りたくなって、下記サイトを参考にためしてみた。
非公式なNode.jsのライブラリ?でなんとかしようってプログラムもやってみたけど、本家で試したくなった。

進めてくとDialogflowの開発環境に、API V2が公式にローンチされたから移行しろってInfoがでてくるので、V2使うことにした(下記サイトはV1)。V2にすると、いろいろ躓いたので、投稿することにした。

Google HomeとFlask(Python)サーバでスマートスピーカーアプリを作成してみた - カタカタブログ

ちなみに、こんなInfoがでる。

Dialogflow API V2 has officially launched. It is now the default API for all new Dialogflow agents and all new features will only be released on V2. Learn how to migrate your V1 agents here.

すること

Google Homeに話したら、そのまま真似してくるオウムみたいなアプリ?を作る。
処理は、PythonとFlaskで作ったWebサーバーで行う。
Herokuで作る。
Dialogflow(開発環境的なもの)はAPI V2使えって出て来るので、そっちに変更。

Heroku

はじめ、GCEで良いかと思ってたけど、Dialogflowからアクセスできるのは、httpsサーバーだけっぽかった。httpsの証明書?を発行したり、めんどくさいし、せっかくなのでHeroku使うことにした。

Herokuを使うにあたって、軽く下記サイトに目を通した。初めの方だけ、実行してみた。
Python3.6必要って書かれてて、ラズパイに入ってたのは3.5で、GCEはAnacondaで入れてて3.6だったので、GCEで試した。

  • インストール
  • ログイン
  • チュートリアルのファイルをgit clone
  • Herokuに`git push って流れやった。

Getting Started on Heroku with Python | Heroku Dev Center

Webサーバー

コードは全部で4つ。

  • app.py
  • Procfile
  • requirements.txt
  • runtime.txt

これらをgit pushすると公開してくれる。

git add .
git commit -m ''
git push heroku master

以下、コード。

app.py
from flask import Flask, request
import json

app = Flask(__name__)

@app.route('/echo', methods=['POST'])
def echo():
    message = request.json.get("queryResult").get("parameters").get("message")
    response = {
        "payload": {
            "google": {
                "expectUserResponse": True,
                "richResponse": {
                    "items": [
                        {
                            "simpleResponse": {
                                "textToSpeech": message
                            }
                        }
                    ]
                }
            }
        }
    }

    return json.dumps(response)

変更したポイントは、以下の3つ。

  • messageのところを公式ドキュメントを参考にqueryResultにしてる
  • responseのところを公式ドキュメントを参考に長々書いてtextToSpeechにしてる
  • PythonのTruejson.dumps()でJavaScriptのtrueに変換してる

参考にしたとこ。
Dialogflow Webhook Format V1 |  Actions on Google  |  Google Developers
Dialogflow Webhook Format V2 |  Actions on Google  |  Google Developers
Converting "true" (JSON) to Python equivalent "True" - Stack Overflow

他のファイルはこんな感じ。

Procfile
web: gunicorn app:app --log-file -
runtime.txt
python-3.6.6
requirements.txt
Flask==0.12.2
# Flask-Cors==3.0.3
# Flask-SQLAlchemy==2.3.2
gunicorn==19.9.0

curlで確認

pi@raspberrypi:~ $ curl -XPOST -H 'Content-Type:application/json' -d '{"queryResult":{"parameters":{"message":"hello"}}}' https://xxx.herokuapp.com/echo

{"payload": {"google": {"expectUserResponse": true, "richResponse": {"items": [{"simpleResponse": {"textToSpeech": "hello"}}]}}}}

いい感じ。

DialogFlow

基本、ポチポチやってくだけ。
迷ったところだけ、投稿する。

Intents

いまいちよくわからなかったけど、
Contexts, Eventsを空欄にしてTraining phrasesに入れた。
これに気づくのに時間がかかった。
入力された文字列をmessageに入れて送信するっぽい。

Dialogflow (1).png

Entities

空欄。

Fulfillment

Webhookに、アドレスを入れた。
DOMAINS、よくわからんけど、Disableでいけた。
image.png

その他

適当にポチポチしてたら行けた。
下記サイトみながらやって、なんとかなった。
Google HomeとFlask(Python)サーバでスマートスピーカーアプリを作成してみた - カタカタブログ

Simulatorでの動作確認

Integrationsを設定して、ここで、動作確認した。
Actions on Google

結果、こんな感じ。
image.png

自分のGoogle Homeでも確認した。いい感じ。

おわりに

やりたいことはだいたいできた。
いまいち、動きがわかってないので、要勉強。
もうちょい、高度なことも試してみたい。
公開する方法もわかってないので、要調査。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした