Google Home でツイッターをする

新しい職場で開かれたとあるコンテストで入賞し、GoogleHomeを頂いたので遊んでみました。

今回作った機能は下記の3つです

  1. 「OK,Google ツイート {ツイート内容}」と言うと{ツイート内容}がツイートされる。
  2. 「OK,Google リプライ {ツイート内容}」と言うと{ツイート内容}が一番最後に自分に対してリプライをしたユーザのツイートに対してリプライされる。
  3. 自分へのリプライが行われると、GoogleHomeがリプライ内容を喋る。

1.ツイートする

qiita.com

上の記事を参考に、基本的にはIFTTTで実装しています。

「おっけーぐーぐる ツイート 外に出る気力がない」

と言うと以下のようにツイートされるようになりました。

f:id:anoChick:20171015221530p:plain

ただ、これだとツイート内容の単語間にスペースがはいってしまっています。

そのため、Firebase Functionsを経由し、そこで整形を行った後にツイートするというようにしました。

exports.tweet = functions.https.onRequest((request, response) => {
  var postParams = {
    status: request.body.text.replace(/ /g, '') + " - Google Home から"
  }
  client.post('statuses/update', postParams);
  response.status(200).end();
});

f:id:anoChick:20171015221901p:plain

出来ました。

2.リプライする

リプライについても同様に、IFTTTからFIrebase FunctionsのエンドポイントURLを叩き、内部でツイッターAPIを使って最後のリプライを指定、ツイート。と言うような感じです。

f:id:anoChick:20171015224416p:plain

つまづきポイントとしては、IFTTTの音声認識の設定を「リプライ $」とすると認識されづらく、「reply $」でも認識されるようにしたぐらいです。

3.自分へのリプライを喋る

qiita.com

↑を参考にしました。 GoogleHomeを喋らせるようのサーバを建て、発話APIを作ります、 IFTTTをつかってリプライが来たらwebhookによって発話APIを叩くようにします。

こんな感じで、リプライが来ると喋りだすようになりました。 上のデモでは、「@anoChick おk」というツイート内容を発話しており、「@anoChick」の部分を抜きたかったので、この場合に関しても、Ficebase Functionsを経由して整形しています。

結果、下記のような構成に落ち着きました。 f:id:anoChick:20171015223844p:plain

やっぱりIFTTTだけだと痒いところに手が届かないので、Cloud Functionsや AWS Lambda等、を使うといい感じになりそうです。

f:id:anoChick:20171016085637p:plain

こういう独特な言い回しは間違えやすい