Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

このレシピの生い立ち

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

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

コツ・ポイント

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

材料

  • Google Home ...1台
  • Raspberry Pi ...1台
    • SSH接続できるもの。
  • Mac ...1台

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

レシピ

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
:paperclip: google-home-notifier

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を使ってスクリプトの起動を永続化する

Google Apps Scriptを作成する

:one: ChromeでGoogleドライブを開き、Google Apps Scriptプロジェクトを新規作成します。

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

コード.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: プロジェクトを公開します。

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

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

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

SlackにOutgoing WebHooksを追加する

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

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

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

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

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

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

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

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

参考

この記事の作成にあたっては、次の記事も参考にさせていただきました。
:paperclip: GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます
:paperclip: Google Homeで受付システム作ってみた

m2u
しなやかに伸び縮みするタイプ。
https://www.kronos.jp/
kronos-jp
AI開発・WEB開発・システム開発・Android開発・iOS開発・IT研修・トレーニング・新入社員研修などを行う企業です。
https://www.kronos.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした