Edited at

Google HomeとIFTTT(Gmail & Dropbox)で双方向コミュニケーシ

More than 1 year has passed since last update.


やりたいこと

Google HomeとGmailで双方向のコミュニケーションをやりたいと思います。


  1. Google Homeに声でしゃべる→メールが飛ぶ

  2. メールで返信する→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)はSubjectBodyPlainで、メールの件名と本文を出力します。

- Dropbox folder pathは、任意のパスです。

こんな感じになります。

メールが届くと、こんな感じにファイルが作られます。

image.png


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でデータの更新を検知されてます。