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

Google Homeからサーバーにアクセスして結果を喋らせる

More than 1 year has passed since last update.

やりたいこと

Google Homeに特定のワードで話しかけると、自分で用意しておいたサーバーにリクエストを送り、そのレスポンスを喋らせる。そのための最小限のステップ。

今回つくった最終的な会話

「お疲れ様です。」
と言うと、
音声では「どうもどうも!」
文字では「平素より大変お世話になっております。」
と返してくれる。

この"どうもどうも!"と"平素より大変お世話になっております。"は、サーバーからJSONで取得した文字列。

手順

(2018年2月時点版)

概要

Google Home (中身はGoogleアシスタント) と、自分独自の会話をしたいときには、「Actions on Google」というプラットフォーム上で「Googleアシスタントのアプリ」という形で開発する。

このときに、「あー言えば、こう言う」という具体的な内容は「Dialogflow」という言語解析エンジンを使って設定していく。設定はブラウザから簡単にできるようになっているが、固有名詞が多くて最初とっつきにくい。慣れれば簡単ぽい。

自分で用意したサーバーからデータを取得したい場合は、このDialogflow内の「Webhook」という機能を使う。Dialogflowからは、アクセスしたいURLと同時に投げたいパラメータなどを設定するだけ。次に、アクセスされたサーバーからDialogflowにどう値を渡すかというと、決まった形式のJSONを返すだけでよし。

また、ここで作るのは、あくまでGoogleアシスタントのアプリなので、Google Home本体を持っていなくても、スマホのGoogleアシスタントでも同時に使えるようになる。

下準備:サーバーを用意する

Google Home(正確には後述するDialogflowのWebhook)からアクセスしたいサーバーを用意しておく。

最低限、以下ふたつを記述したJSONを返すのであればなんでもよい様子。
※ 今回は、V1 APIを使用。

{
    “speech”: “喋らせたい文章”,
    “displayText”: “画面上で表示させたい文章”
}

displayTextは、Googleアシスタントなどで表示される文章。

他にもDialogflow上で処理するデータなども色々盛り込めるみたい。
詳しくは、Webhook requirementsを参考。

以下、上記JSONを返すPHPのサンプル。

<?php
$arr = array(
    'speech' => "どうもどうも!", 
    'displayText' => "平素より大変お世話になっております。"
);
header("Content-Type: application/json; charset=utf-8");
echo json_encode($arr);

サーバー上でこのJSONの文字列を作る処理次第で、色んな応用が効く。

これをGAEや適当なサーバーにアップして、ウェブからアクセスできるようにしておく。


Actions on Googleの操作

https://console.actions.google.com/ にアクセス

① 「Add/import project」から、
プロジェクトの名前をつけて、リージョンを選び「Create Project」。

スクリーンショット-2018-02-24-19.00.29.png

② プロジェクトのページができたら、
「Overview」の「1Add actions to your app」から「ADD ACTIONS」。

スクリーンショット 2018-02-25 1.59.21.png

③ 「Dialogflow」を「BUILD」。
スクリーンショット 2018-02-24 19.05.46.png


Dialogflowの操作

ここから先は、Dialogflow上の作業になる。
Dialogflowでつくる「Agent」を、Actions on Googleの「プロジェクト」内で「Action」として使用する仕組み。

「Agent」の新規作成

「DEFAULT LANGUAGE」は日本語で喋らすなら、「Japanese-ja」を選択しとく。
「GOOGLE PROJECT」には、すでにさっきActions on Googleで作成したプロジェクトが紐付けられているはず。
このまま「CREATE」ボタンを押すとAgentを作成できる。
スクリーンショット 2018-02-25 2.13.13.png

そのまま「Intents」新規作成画面になるので、「CREATE INTENT」。
スクリーンショット 2018-02-25 2.21.49.png

Intentsを編集

この「Intents」で、「こう言われたら、こうする」を設定していく。

まずは、内容に応じて適当に名前をつける(ここでは、"あいさつ")。

そして、今回は特定のフレーズ(”お疲れさまです”)に反応して、サーバーにリクエスト送りたいので以下ふたつを設定。

  1. 「Training phrases」セクション > 「ADD TRAINING PHRASES」
    反応させたいフレーズ(”お疲れ様です”)を追加。

  2. 「Fulfillment」セクション > 「ENABLE FULFILLMENT」
    「Enable webhook call for this intent」をオンにする。

設定したら、画面上部の「SAVE」。

スクリーンショット 2018-02-25 3.13.31.png

Fulfillmentを編集

画面左のメニューより、「Fulfillment」を選択。

「Webhook」を「ENABLED」にして、最初に下準備しておいたサーバーのURLを設定する。
必要に応じて、その他のパラメータ入力。

入力したら、画面一番下の「SAVE」を忘れずに。
スクリーンショット 2018-02-25 2.35.37.png

Dialogflowで一旦テスト

Fulfullmentの設定までしたら、Dialogflow画面右で試してみる。
設定したレスポンスが返ってきたら成功。
※ここでは、マイク入力でも、タイプ入力しても、同じく”speech”で設定したテキストが返ってくる模様。
スクリーンショット 2018-02-25 2.55.21.png


Actions on Googleの操作2

Simulatorでテスト

Actions on Googleに戻り、メニューから「Simulator」を選択。
「テスト用アプリにつないで」
と音声入力かタイプ入力すると、Dialogflowで作った会話をはじめることができる。
(Googleアカウントがリンクされていれば、この時点ですでにGoogle Home実機に話しかけても動作するはず)
スクリーンショット 2018-02-25 3.55.33.png

「お疲れ様です」と言うと、音声では「どうもどうも」と言ってきて、文字では「平素より大変お世話になっております」と挨拶してきたら成功。


もうちょっとカスタムしてみる

テスト用アプリに繋いだあとの「こんにちは!」の部分を変更したい

このままだと挨拶終わっちゃってるし。
Dialogflowのメニューの「Intents」から、「Default Welcome Intent」を編集する。
スクリーンショット 2018-02-25 3.50.23.png

「Responses」セクションの「Text response」の部分を変更してSAVE。
スクリーンショット 2018-02-25 3.51.25.png

スクリーンショット 2018-02-25 3.53.27.png

一度挨拶したらもう会話を終わらせたい

一度お互い挨拶済んでからも、Google Homeがずっと待機状態(音声待ちの状態)でいる。
何も言ってないのに「すみません、よく聞き取れませんでした。」などと言ってくる。
そんなときは、DialogflowのIntentの設定で、「Reponses」セクション > 「ADD RESPONSE」 > 「Set this intent as end of conversation」をオンにすると、お互い挨拶した時点で会話を終了できる。

スクリーンショット 2018-02-25 4.00.39.png

「テスト用アプリ」という名前を変更したい

「ねえグーグル、◯◯◯につないで」
「はい。 ◯◯◯のテストバージョンです。」
の、◯◯◯の部分を変更したい。

Actions on Googleの「Overview」 > 「App information」の項目を埋めていく。
スクリーンショット 2018-02-25 4.48.29.png
スクリーンショット 2018-02-25 4.48.48.png

全項目埋めないとSAVEできない様なので、(公開をしない限り)ダミーでもいいので全部うめる。
(「Assistant app name」 が日本語で入力できるときと英数字しか受け付けないときがある?)

無事、SAVEできたら、再び「Overview」画面にいき、一番下の「TEST DRAFT」すると反映される。
スクリーンショット 2018-02-25 4.51.54.png

今回の最終形
スクリーンショット 2018-02-25 4.53.58.png

設定項目を見る限り、「につないで」の部分もカスタムできるっぽいが、少なくてもテストバージョンでは反映されない。公開バージョンは未確認。


参考にした記事

https://qiita.com/miso_develop/items/28cbfcdfb61d455ce346
https://qiita.com/kotatu_km/items/c06f45c6692dceb9258d

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
ユーザーは見つかりませんでした