8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スマートスピーカーIFTTT 大喜利Advent Calendar 2017

Day 10

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

Last updated at Posted at 2017-12-10

やりたいこと

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

8
12
0

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
8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?