LoginSignup
7
2

More than 5 years have passed since last update.

GoogleHomeに話しかけて検索結果をブラウザに表示させる ❼レスポンスで音声データを返す

Last updated at Posted at 2018-05-30

GoogleHome(mini)を購入したので、聞き取ったキーワードから
PCのブラウザにGoogleの検索結果1位のサイトを表示して、そのサイトのタイトルを読み上げるアプリを作成しました。検索したキーワードがDBに無かった場合はキーワードとURLとタイトルを登録します。

最終的に出来たアプリ

1_noサンマルクnoライフ.png

ワタシがやったこと

極力Googleさんのサービスだけで完結したいなーということで、DialogflowとFirebaseを使用
Firebaseがホスティングサーバーとデータベースと関数の管理と色々サービスを担ってくれているので
全部お任せしました。
2_ワタシがやったことjpg.png

:one: Dialogflowを使用して簡単なチャットボットを作成
:two: FirebaseのFunctions(cloud functions)を使用して、:one:で作ったボットが適切な返事するように設定
:three: :two: を実行する際にFirebaseのDatabaseにデータを追加するように設定
:four: :three: のデータ追加をトリガーにFirebaseのHostingで作成したページ(htmlファイル)にパラメータを渡し、
   windowopenで対象のページを開くように設定

:five:  Google検索で一番上に表示されてるページを一発で表示させてみる(I'm feeling luckey!)
:six:  データ登録時にページタイトルとサイトURLはオリジナルのものを保存する
   (webスクレイピングにはcheerio-httpcliを使用しました)

:seven:  フリーのMP3データをFirebaseのStorageに入れてレスポンスに音声データを返す(SSML)


:seven: レスポンスで音声データを返す

strage.png

今回は完全にオマケ的な機能です。音声データをDialogflowのレスポンスに返したいなーって
やってみたのでついでに書いておきます。

アプリを呼び出した時にワープ音を鳴らしてから出てきてもらうことにしました。

:woman_tone1::OK google ホヤぼーやにつないで 
:robot::はい、ホヤぼーやのテストバージョンにお繋ぎします。
    (ワープ音が鳴る♪)..お待たせしました。ホヤぼーやです。(ボット起動)

FirebaseのStorageに音声データをアップロードして、その音声データのURLを
DialogflowのINTENTのレスポンスに追加するという仕組みです。


まずはネットからフリーの音声データ(MP3)を入手します。
ワタシの場合は2秒程度の短い効果音を使用しました。
気に入ったデータあるけどMP3じゃないよーという方は、WAVとか他の形式からMP3に変換してくれる便利なサイトもあるので、そーいうので変換してみてください。

ではFirebaseのStorageを選択
Storage.png

ファイルをアップロードします。
アップロード.png

アップロードされたデータをクリック
データをクリック.png

ファイルの場所の をクリック 
ファイルの場所をクリック.png

ダウンロードURLをクリックするとURLがコピーされます。
DLurlを取得.png

DialogflowのDefault Welcome IntentのResponsesに追記していきます。
intentsで作業するよ.png

こんな感じで書きます。audioタグの中に先ほどのURLを入れればOK

<speak>
 <audio src="この中に先ほどコピーしたURLを入れます"></audio>お待たせしました。ホヤぼーやです。    
</speak>

こんな感じで貼り付けます.png

ではテストしてみます。あれー!:sweat:エラー出てます。ここが個人的にハマりどころだったのですが…
expected_inputs[0].input_prompt.rich_initial_prompt.items[0].simple_response: 'ssml' could not be parsed.
SSMLを解析できませんでしたと言われています。
こうなる.png

Responsesのレスポンスに書いたURLの中に [media&token]という記述があるのですが
この & がよろしくないのです。 & を &amp; に書き直すと問題が解消されます。では再度テスト
今度は大丈夫。ちゃんと再生されてエラーも解消しています。:v_tone2:
今度はできましたー!.png

もちろん他のINTENTにも設定できます。
ワタシは「おやすみ」と話しかけた時に年配の女性とアニメ声の「おやすみなさい」の音声データ2通り登録して、今夜はアニメ声だったとか、年配女性の声だったとか言って遊んでいます。

音声レスポンスに関してはコード書いてないので、何か面白いことが書けたら追記したいと思います。
これで今回の記事は以上です。 最後までご覧いただき有難うございました。   ~完


   以前の記事:❶Dialogflowで簡単なチャットボットを作成
         ❷FirebaseのFunctionsでボットに返事をさせる(Dialogflow V2 API)
         ❸FirebaseのFunctions実行時 Databaseにデータを追加する
         ❹Databaseへのデータ追加をトリガーに特定のページへ遷移させる
         ❺Google検索で一番上のページを表示させる
         ❻スクレイピングして検索結果のタイトルとURLを登録する

7
2
1

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
7
2