
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
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
{
"name": "notify-to-slack",
"version": "0.0.18",
"dependencies": {
"request": "^2.81.0"
}
}Cloud Build 用にこれも書いておく。
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
- functions
- deploy
- XXCLOUD FUNCTION NAMEXXCloud 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に通知される。

成功!
Kohei Kondo