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を喋らせてみた

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

googlehomenotifier修正

下記を参考に修正
google-home-notifierで"Error: get key failed from google"とエラーが出る問題の対処法
Raspberry PiからGoogle Homeを喋らせる

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のLINE APIを設定する。GUIが少し変更されている。
Google Home でLINEのメッセージを”おしゃべり”双方向通信(コミュニケーション)をしてみよう.

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を設定する。
新着メールを知らせてくれるGoogle Home

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

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

config情報は後述のjsで使用する。

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

コード

Google HomeにLINEのメッセージを読み上げさせる(LINE BOT+Webhook+Firebase+Node.js)
新着メールを知らせてくれるGoogle Home
以上のサイトをほぼ参考にさせていただいております。ありがとうございます。

この他には、
JavaScript でのインストールと設定
firebase. database. Reference
が参考になります。

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が話すか確認する。