GCPを使い、GoogleHomeを受付としてSlackに通知する

GCPを使い、GoogleHomeを受付としてSlackに通知する

受付がチャイムである

Anti-Pattern Inc.の受付は11月に引っ越したばかりということもあり、ベルの音で来客の有無を把握していた。

→GoogleHomeを受付にしてSlackに飛ばし、また、SlackからGoogleHomeを喋らし、双方向の会話を可能にしよう!

今回はGoogleHomeからSlack通知までをCloud Functionsなどを使い実装する。

※Slack→GoogleHomeは別の機会に執筆する

使うもの

  • Dialogflow
  • Actions on Google (The developer platform for the Google Assistant.)
  • Cloud Shell (開発用)
  • Cloud Function
  • Cloud Build
  • Cloud Source Repositories

こんな流れで処理をする。

まず、Actions on GoogleでDevelopから Add Action buttonを押して、Customを選択し、それぞれ入力していく。

そうすると、DialogFlowに飛ばされるので、色々作っていく。

DialogFlow

最初にIntentに移動し、defaultで入っているWelcomeを編集していく。

受付という単語に反応して、固定のレスポンスを返すようにし、

Fulfillmentの Enable webhook call for this intent を有効化しておく

次にアプリ終了の言葉を決める。これは新たにIntentを追加し、設定していく。それとともに、この指定の言葉を言ったら、終了する設定もする。

最後にどんな言葉を話したとしても、それがすべてSlackに届くように変数化しておく。

Cloud Functions

まずはCloud Functionsを新規で作成し、一般公開し、メモリも最低の128MBで作っておく。

DialogFlowからCloud Functionにリクエストを投げ、そこからSlackへ通知する。

とりあえず、Cloud Functionsを作るとURLが発行されるのでそれをDialogFlowのFulfillmentのURL欄に登録する。

この時点で、Google Homeで動かせばCloud Functionが動きログを吐いてくれる。

さて、実際にSlackに飛ばすためのコードをCloud Shellで書いていく。

基本ブラウザで開発していく。

本来はベーシック認証などを入れるべきだが一旦それは後で実装。

※エラー処理等も後で実装

※URLはSlack APPを作って、そこのoutgoingで発行されるURLを使用する。

index.js

JavaScript
var request = require('request');
exports.sendToSlack = (req, res) => {
  const msg = req.body.queryResult.queryTextrequest.post({
  url:'XXXXXXXXX',
  headers: { 'Content-Type': 'application/json' },
  json: {
    username:
    'GoogleHome',
    icon_emoji:
    ':ghost:',
    text: msg
  }
}, 
function(error, response, body) {
  if (!error && response.statusCode === 200) {
  console.log(body);
} else {
  console.log('error');
}})

res.status(200).send(message);};

package.json

JavaScript
{
  "name": "notify-to-slack",
  "version": "0.0.18",
  "dependencies": {
    "request": "^2.81.0"
   }
}

Cloud Build 用にこれも書いておく。

cloudbuild.yaml

YAML
steps:
  - name: 'gcr.io/cloud-builders/gcloud'
args:
  - functions
  - deploy
  - XXCLOUD FUNCTION NAMEXX

Cloud Source Repositories

今回はGitHubではなくCloud Source Repositoriesでソースを管理していく。

これにより、master branchの変更を検知してCloud Buildを実行するようにする。

Cloud Build

こんな感じに設定すると、master branchの変更を検知してcloudbuild.yamlの情報をもとに動いてくれる。

そしていざ、master branchへpush!!

そうするとCloud Build が動き、Cloud FunctionsにDeployされる。

その後、Google Homeに喋ると、その内容がSlackに通知される。

成功!