やりたいこと
Google HomeとGmailで双方向のコミュニケーションをやりたいと思います。
- Google Homeに声でしゃべる→メールが飛ぶ
- メールで返信する→Google Homeがメールを読み上げてくれる
「Google Homeに声でしゃべる→メールが飛ぶ」はIFTTTだけで簡単にできて、
家にいる家族がしゃべると、メールでその内容を教えてもらえるというのはやっていました。
それだけだと、メールアドレスを持っていない子供には返信できません。
そこで、特定のルールのメールに反応して家に置いてあるGoogle Homeがメールを読みあげてくれるようにしたいと思います。
方法1. Google Homeに声でしゃべるとメールを送る
IFTTTだけでできます。
this
Google AssistantのSay a phrase with a text ingredient
を使用します
ここでは、「OK.Google パパにメール」の後にメールで送りたい内容を話せるようにします。
that
GmailのSend an email
を使用します
「OK.Google パパにメール 何時頃着くの?」としゃべると、こんなメールが届きます。
でも、これだけだと、何時に着くか答えられませんね。
方法2. メールで返信する→Google Homeがメールを読み上げてくれる
IFTTTでは、特定のタグ付されたメールが届くと、Dropboxにそれを置くようにしました。
ここは工夫しどころで、Google Homeにしゃべらせるために、Google Homeとネットワーク的に通信できるところからNotifierでリクエストを出す必要があります。
今回はDropboxを使って、クラウドと自宅ネットワークの壁を超えたメッセージ連携をやります。
この辺のいろんな方法が取れるのがIFTTTの良いところかなと思います。
Gmail --> IFTTT --> Dropbox --> Notifierスクリプト(自宅マシン) --> Google Home
this
GmailのNew email in inbox labeled
を使います
google home
というラベルの付いたメールが来たらアクションを起こします。
ラベルはGmail側で行います。ここでは特定のメールアドレスにメールが来たらラベルを付けるようにしています。
that
DropboxのCreate a text file
を使います
- ファイル名(File name)は
ReceivedAt
を使って、受信日時でファイル名が作られます。 - ファイルの本文(Content)は
Subject
とBodyPlain
で、メールの件名と本文を出力します。 - Dropbox folder pathは、任意のパスです。
Dropboxで同期されたファイルを切っ掛けにNotifierを送るスクリプト
const googlehome = require('google-home-notifier')
const language = 'ja';
// ファイルを読み込んでgoogle homeに通知する関数を呼び出します
function readFile(path) {
fs.readFile(path, 'utf8', function (err, data) {
ghome_notify(data);
});
}
googlehome.device('Google-Home', language);
// 引数でもらったテキストをGoogleにしゃべらせます
function ghome_notify(text) {
googlehome.notify(text, function(res) {
console.log(res);
});
}
// Dropboxでファイルが同期される場所を監視します
var chokidar = require("chokidar");
var watcher = chokidar.watch("./inbox/",{
ignored:/[\/\\]\./,
persistent:true
});
var fs = require('fs');
// ファイルが追加されるとファイルを読み込んでGoogle Homeへ通知する関数を呼び出します
watcher.on('ready',function(){
console.log("ready watching...");
watcher.on('add',function(path){
console.log(path + " added.");
readFile(path);
});
});
まとめ
やっぱりGoogle Homeにしゃべらせることができたら楽しいですね。
notifierのサンプルを触ってるだけで、いろいろ遊べました。
願わくばnotifierのプロセスがGoogle Homeの上で動いてくれたら、別途ラズパイを用意するみたいことをしなくていいのでうれしいですね。
しゃべらせる系はいろんな方がやっていて参考にさせていただきました。
GoogleHome x IFTTT で、寝る前にかかとにクリームを塗る!
ngrokを使って、ローカルのラズパイ上でサービスを動かして公開。Dropboxでやるよりシンプルですね。
新着メールを知らせてくれるGoogle Home
Firebaseをメッセージハブ的に使っていて、ローカルのラズパイからFirebase Listenerでデータの更新を検知されてます。