10分でSlackからGoogleHomeを喋らせるめちゃ速レシピ

#このレシピの生い立ち

スマートスピーカー、使ってますか？

[弊社](https://qiita.com/organizations/kronos-jp)のオフィスでは、開発用、兼、業務アシスタントとしてGoogle Homeを利用しています。
話しかけなくても情報をお知らせしてくれるように社内コミュニケーションツールであるところのSlackと連携させているのですが、開発用だけあって環境をつくりなおす機会が多いため、必要なときすぐ設定できるように手順をまとめました。

#コツ・ポイント

**:no_entry: 注意点**
この記事は最小限の手順で環境を構築することを目的としており、セキュリティ面の考慮を含みません。
**外部の第三者もURLへアクセスできることに注意してください。**
本格運用の際はgoogle-home-notifier、Google Apps Scriptへ認証処理を追加することを強くおすすめします。

#材料

- Google Home ...1台
- Raspberry Pi ...1台
    - SSH接続できるもの。
- Mac ...1台
    - Google Chromeと[Google Apps Script（拡張機能）](https://chrome.google.com/webstore/detail/google-apps-script/eoieeedlomnegifmaghhjnghhmcldobl?hl=ja)を入れておきましょう。
    - Windowsの場合はお好みのSSHクライアントを用意してください。

下ごしらえとしてこれらを同じネットワークに接続しておきます。
また、Google HomeアプリでGoogle HomeのIPアドレスを控えておいてください。

![](https://qiita-image-store.s3.amazonaws.com/0/230503/6b7dbdc4-b8a0-8397-65f2-ea646a4a2c69.png)

#レシピ

##Raspberry Piでgoogle-home-notifierを立ち上げる

:one: ターミナルからRaspberry Piへ接続します。

```
ssh <ユーザ名>@<Raspberry PiのIPアドレス>
```

:two: 最新のNode.jsと、google-home-notifierの導入に必要となるパッケージをインストールします。
[:paperclip: NodeSource Node.js and io.js Binary Distributions](https://github.com/nodesource/distributions)
[:paperclip: google-home-notifier](https://github.com/noelportugal/google-home-notifier#raspberry-pi)

```
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y git-core libnss-mdns libavahi-compat-libdnssd-dev
```

:three: google-home-notifierのリポジトリを取得します。

```
git clone https://github.com/noelportugal/google-home-notifier
```

:four: google-home-notifierの動作に必要となるNode.jsパッケージをインストールします。

```
cd google-home-notifier
npm install
```

:five: example.jsを書き換えます。

```
sed -i -e "s/192.168.1.20/<Google HomeのIPアドレス>/g" example.js
sed -i -e "s/'pl'/'ja'/g" example.js
sed -i -e "s/googlehome.ip(ip, language);/googlehome.ip(ip, language);\n  googlehome.device(deviceName, language);/g" example.js
```
:six: google-home-notifierを立ち上げます。

```
node example.js
```

起動後、エンドポイントURLとリクエストの例がコンソールに出力されます。

**:point_right: httpsからはじまるURLを控えておきましょう。**

```
Endpoints:
    http://<Raspberry PiのIPアドレス>:<受信ポート>/google-home-notifier
    https://<ngrokドメイン>/google-home-notifier
GET example:
curl -X GET https://<ngrokドメイン>/google-home-notifier?text=Hello+Google+Home
POST example:
curl -X POST -d "text=Hello Google Home" https://<ngrokドメイン>/google-home-notifier
```

ちなみに、プロセスをデーモン化するときはforeverを使うと便利です。
[:paperclip: Node.jsでforeverを使ってスクリプトの起動を永続化する](https://qiita.com/setouchi/items/0dcc5869e7eb0ab524ea)

##Google Apps Scriptを作成する

:one: Chromeで[Googleドライブ](https://drive.google.com/)を開き、Google Apps Scriptプロジェクトを新規作成します。

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/230503/efb91322-8ed2-1502-2a8c-9c82453d080f.png">

:two: コード.gsに次のコードを貼り付けてプロジェクトを保存します。プロジェクト名はなんでもOKです。

```javascript:コード.gs
function doPost(e) {
  var text = e.parameter.text;
  if (e.parameter.user_name) {
    text = e.parameter.user_name + 'さんからのメッセージです。' + text;
  }
  UrlFetchApp.fetch(
    'https://<ngrokドメイン>/google-home-notifier', // google-home-notifierのエンドポイント
    {
    'method': 'POST',
    'contentType': 'application/x-www-form-urlencoded',
    'payload': {'text' : text}
    }
  );
}
```

:three: プロジェクトを公開します。

[公開]-[ウェブ アプリケーションとして導入]を選択

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/230503/ca465dd8-5d5c-3c28-db36-e60b006ee45e.png">

「次のユーザーとしてアプリケーションを実行」を「自分」、
「アプリケーションにアクセス出来るユーザー」を「全員（匿名ユーザーを含む）」として
「導入」をクリック

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/230503/32dde796-ceb9-a69a-0370-e388ea7a1702.png">

**:point_right: 「現在のウェブ アプリケーションのURL」を控えておきましょう。**

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/230503/223fefcf-9d01-757f-cddf-2fa2bfc699c7.png">

##SlackにOutgoing WebHooksを追加する

:one: ChromeでSlackのAppディレクトリを開きます。

AppディレクトリのURLは *https://<ワークスペース名>.slack.com/apps* です。

:two: 検索ボックスで「Outgoing Webhooks」を検索し、選択します。

日本語表示の場合は「発信 Webフック」という名前です。（以下は日本語表示でのイメージとします）

:three: Outgoing WebHooksを追加します。

「設定を追加」をクリック

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/230503/79c02ad9-59d3-cbc6-4c0e-1cf808316c7b.png">

インテグレーションの設定で
「チャンネル」をメッセージを監視する対象のチャンネル、
「引き金となる言葉」を任意のキーワード、
「URL」を先程控えたGoogle Apps Scriptの「現在のウェブ アプリケーションのURL」として
「設定を保存する」をクリック

![](https://qiita-image-store.s3.amazonaws.com/0/230503/03cf8fb9-2840-d8d7-94f2-0a166bbeddd1.png)

**以上で完成です！指定したキーワードではじまるメッセージをSlackから送ってみましょう！:tada:**

#参考

この記事の作成にあたっては、次の記事も参考にさせていただきました。
[:paperclip: GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます](https://qiita.com/azipinsyan/items/db4606aaa51426ac8dac)
[:paperclip: Google Homeで受付システム作ってみた](https://qiita.com/h-takauma/items/4ecc3421f2995b207284)