LINEトークをwindows10(NODE.js＋google-home-notifier＋Firebase)経由でgooglehomeに話させる(2019.12 )

# はじめに
windowsPCでLINE投稿内容をgooglehomeを話させてみました。先人達の記載の内容を参考にさせていただきました。ありがとうございます。
 node v12.13.1
 npm v6.12.1
 google-home-notifier v1.2.0
 windows 10pro

# windowsにNODE.js環境
下記を参考にNODE.js環境を構築して、googlehomenotifierを導入します。
[Windows PCを使ってGoogle Homeを喋らせてみた](https://qiita.com/t_watari/items/8f7ec603a0fe1a3a35da)

すべてを[C:\Program Files\nodejs]下でインストール。
作業フォルダ配下にするべきでしたが、やりなおす気にはなれず。。
warningがたくさん出ましたが気にせず、進みました。

# googlehomenotifier修正
下記を参考に修正
①[google-home-notifierで"Error: get key failed from google"とエラーが出る問題の対処法](https://qiita.com/ktetsuo/items/21f4f85a98145772be3d)
②[Raspberry PiからGoogle Homeを喋らせる](https://qiita.com/ktetsuo/items/8c9cd5714e231aa6ae09)

①`cd node_modules/google-home-notifier`
package.jsonを修正
`"google-tts-api";"0.0.3"`　⇒`"google-tts-api";"0.0.4"`
`npm update google-tts-api`

>【2020.12追記】
google-tts-apiが裏で何度も更新されるようです。うちの環境では、0.0.4への適用はできましたが、それ以降へは適用(アップデート)できなくなりました。
`"google-tts-api";"0.0.3"`　⇒`"google-tts-api";"0.0.X"`
`npm update google-tts-api`
そのため、直接ファイルを落として上書きさせるとしゃべるようになりました。
(下記は0.0.4の場合)
https://registry.npmjs.org/google-tts-api/-/google-tts-api-0.0.4.tgz

>リンク先は、うちの環境で下記フォルダのpackage-lock.jsonに記載されています。
C:\Program Files\nodejs\node_modules\google-home-notifier
うちの環境で、下記フォルダを上書きしました。
C:\Program Files\nodejs\node_modules\google-home-notifier\node_modules\google-tts-api



②`cd node_modules/mdns/lib`
browser.jsを修正
`rst.DNSServiceGetAddrInfo()`⇒`rst.getaddrinfo({families:[4]})`

# LINE API設定
下記を参考に[LINE developer](https://developers.line.biz/ja/)のLINE APIを設定する。GUIが少し変更されている。
[Google Home でLINEのメッセージを”おしゃべり”双方向通信（コミュニケーション）をしてみよう．](https://qiita.com/nigo1973/items/d46ad8bb7cf29a4223fb)

Messaging API settings
・use Webhook：enable
・Webhook URL：https://XXXXXXXXXXXXXXXXXX.firebaseio.com/line.json　※後述
・Allow bot to join group chats　：Enabled
・QRコードからline-botを自分のline友達に追加

# Firebase設定
下記を参考に、[Firebase](https://firebase.google.com/)を設定する。
[新着メールを知らせてくれるGoogle Home](https://qiita.com/tetotetote/items/4d6ac866b716695fa4c9#firebase%E3%81%AE%E8%A8%AD%E5%AE%9A)

開発タブ内のDatabaseのルール設定では選択式で下記を選択。

```
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
```
config情報は後述のjsで使用する。

下記をインストールする。
`npm install firebase`
`npm install superagent`


# コード

[Google HomeにLINEのメッセージを読み上げさせる(LINE BOT+Webhook+Firebase+Node.js)](http://megalodon.hateblo.jp/entry/2018/01/10/014604)
[新着メールを知らせてくれるGoogle Home](https://qiita.com/tetotetote/items/4d6ac866b716695fa4c9#firebase%E3%81%AE%E8%A8%AD%E5%AE%9A)
以上のサイトをほぼ参考にさせていただいております。ありがとうございます。

この他には、
[JavaScript でのインストールと設定](https://firebase.google.com/docs/database/web/start?authuser=0)
[firebase. database. Reference](https://firebase.google.com/docs/reference/node/firebase.database.Reference.html#on)
が参考になります。

```
var request = require('superagent');
var firebase = require("firebase");
var googlehome = require('./node_modules/google-home-notifier');
var language = 'ja';
googlehome.device('Google-Home', language); 

function googlehomespeak(text) {
googlehome.notify(text, function(res) {
  console.log(res);
});

}

  // Set the configuration for your app
  // TODO: Replace with your project's config object
  var config = {
    apiKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXX.firebaseapp.com",
    databaseURL: "https://XXXXXXXXXXXX.firebaseio.com",
    projectId: "XXXXXXXXXXXXX",
    storageBucket: "XXXXXXXXXXXXX.appspot.com",
    messagingSenderId: "XXXXXXXXXXXXX"
  };
  firebase.initializeApp(config);

  // Get a reference to the database service
  var database = firebase.database();


// Find the two shortest dinosaurs.
// var ref = firebase.database().ref("dinosaurs");
var ref = firebase.database().ref('/line');
ref.on("child_added", function(snapshot) {
  // This will be called exactly two times (unless there are less than two
  // dinosaurs in the Database).

  // It will also get fired again if one of the first two dinosaurs is
  // removed from the data set, as a new dinosaur will now be the second
  // shortest.

  var data = snapshot.val();
  snapshot.ref.remove();
　var text = data.events[0].message.text;

  console.log(snapshot.key);
  googlehomespeak(text);
});


```

# 送信テスト
Lineの友達にline-botを追加してグループを作成し、トークしてGoogleHomeが話すか確認する。