Slack Botで自動化生活: その1

これは慶應義塾大学ロボット技術研究会 その1 Advent Calendar 2019 18日目の記事です

17日目 | 19日目

こんにちは、銀座線に乗ると頭を負傷しがちな1年のFastriver(@fastriver_org)です。

Slack Bot is 何

私ちょっと前にこんな記事を書きまして。ただ、文章を書くのが面倒だなー/長い文なんて書きたくないよ、という自分(他人)も居るんです。そこで短文を集めればそれなりに知識があつまるのでは?と考えそれを自動化しよう→Slack Botという流れで作ろうと思いました。

Slack、便利ですよね。それの拡張として予定決めたり、外部のサービスの情報をとってきたり、人の失言を晒したりするのを自動化できるのが、このSlack Botです。APIとして様々な機能が提供されているので、できることは結構多いと思います。それでは作っていきましょう(時間がない)。

登録する

https://api.slack.com/appsにアクセスして、アプリを作成します(要ログイン)。ワークスペースごとにアプリを作るイメージです。

とりあえずこれだけでBotの外見は完成です。

Cloud Functions

次に外部サーバーを使ってBotの内部処理を書いていきましょう。今回使うのはGCPのCloud Functionsです。選んだ理由は私がGoogle大好きだからです。Slack BotはAWS使うと簡単に作れるらしいのでそっちのほうがいいかもしれませんね。

登録

https://console.cloud.google.com/ にアクセスしてGCPに入ります(持ってない人はアカウントを作ろう!なんかクレジットがもらえるぞ)。

そうしたら適当にプロジェクトを作成します(既存のでもおk)。プロジェクトIDは必要になるので控えておきましょう。

開発環境の準備

Cloud Functionsさん神なのでブラウザでも開発できるんですが、私はJSを書きたくないのでローカル+TypeScriptで書けるよう環境構築をします。

gcloudコマンドの導入

こちらを参考にgcloudコマンドを導入すると、ローカルでGCPプロジェクトの開発ができるようになります。

https://gist.github.com/organic-nailer/a315be9e18e9ea0b4bc9e98d97718f0d.js

Ubuntuならこんな感じです。

導入が完了したら

gcloud init

でアカウントにログイン、プロジェクト(さっき見たIDを指定)に入ります。

typescriptの導入

npm init

npm install typescript tslint --save-dev

tsconfig.jsonを上のように書きましょう。

その後projectに./src/index.tsを追加、そこにコードを書いていきます。

Challengeする

Slack BotにCloud Functionsで発行されるURLを登録するのですが、動作確認のためにChallengeというものを行います。

payload.typeが”url_verification”のときはchallengeをオウム返しするようにします。

ここまできたらDeployしていきましょう。

tsc

でindex.jsが生成されます。

gcloud functions deploy tipsBot_KRA --runtime nodejs8 --trigger-http

でデプロイです。tipsBot_KRAは定義した関数の名前にしましょう。

ここまでやるとGCPのサイトのCloud Functionsに、先程Deployした関数が載っていることだと思います。

Slack Botとの接続

いよいよ大詰めです(何もできてないが)。GCPのCloud Functions > [関数名] > トリガー のところにURLがあると思うので、コピーします。

次にslack appのページ(最初に作ったやつ)に戻り、Event Subscriptionsをオンにして先のURLを貼り付けます。(移動する時は右下のSave Changesを押そうね!)

Bot Usersに移動し、適当に設定して[Add Bot User]をします。

再びEvent Subscriptionsに戻り、Subscribe to bot eventsのapp_mentionを選択します。

OAuth & Permissionsでワークスペースにアプリをインストールします。しかしこのままだとCloud Functionsに何も処理を書いていないのでなにもできません。

オウム返し

いつかの./src/index.tsを以下のように書き換えます。

https://gist.github.com/organic-nailer/69ce19e5d1c9e0c35dae67d22a78fe43.js

tsc

gcloud functions deploy tipsBot_KRA --runtime nodejs8 --trigger-http --set-env-vars SLACK_TOKEN=[YOUR_SLACK_BOT_TOKEN]

のコマンドでDeployします。TOKENはSlack botのページのOAuth & PermissionsのBot User OAuth Access Tokenというやつです。

適当にメッセージをメンションしてみましょう。

できました。

続く…

明らかに締切に間に合わない(上のスクショの時点で日付を超えている)ため、続きは後日。お楽しみに。

17日目 | 19日目

One thought on “Slack Botで自動化生活: その1

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中