Slack×GASで作った勤怠Botの話#3
UG Advent Calendar 2020 の3日目の記事です。
どうもbarusuです。知らない方は初めまして。
昨日の続きです。
フィクションと思って読んでいただければ幸いです。
Slack×GASで作った勤怠Botの話 #3
2020年5月。
良くも悪くもコロナ禍による新しい生活様式が定着しはじめた頃のお話。
―――――――ちょっとさ、勤怠システム作れない?
すべては法務部長の一言から始まった…
全10話分の3話目となります。
2020/12/01:導入,初期の要望
2020/12/02:設計
2020/12/03:構築その1 :SlackBotを作る ← 今日はココ
2020/12/04:構築その2 :GASを書く(基本メソッド編)
2020/12/05:構築その3 :GASを書く(ユーティリティ編)
2020/12/06:構築その4 :GASを書く(機能実装編:打刻処理)
2020/12/07:構築その5 :GASを書く(機能実装編:ユーザー管理機能,リマインド機能)
2020/12/08:構築その6 :色々書く(機能実装編:,勤怠修正機能)
2020/12/09:単体,ユーザーテスト
2020/12/10:そして伝説へ...
Barusu
「さてさてやっていきますか」
Barusu
「今日はSlackBotの作成とGASをAPI公開して、BotへのDMをきっかけにGAS発火するとこまでやろっかな。Botがコメントを返すやつは後でやろっと」
SlackBotを作る
Barusu
「まずはSlackで作業。
[設定と管理] → [アプリを管理する]の順にクリックして」
Barusu
「[ビルド]をクリックする」
Barusu
「[Create New App]を選択」
Barusu
「AppNameとDevelopmentを決めてCreate Appするー。
名前は…どうせ後で変えるから適当でいいや」
Barusu
「これでBotができた。
だけど、このままだとBotになんの権限もないから権限を追加していく」
Permissionの設定をする
Barusu
「今回必要なのは以下の3つの権限。
・ユーザーとのDMの内容を読み取る:im:history
・ユーザーにDMを送る:im:write
・ユーザー情報を取得する:users:read
設定するには[OAuth & Permissions]を選択して」
Barusu
「[Add an OAuth Scope]を選択して」
Barusu
「[users:read],[im:write],[im:history]を追加する」
Barusu
「権限はこれでかんりょ。だけどまだSlackにBot Userとして追加されてないんで、設定する必要があるのよね」
Bot Userを追加する
Barusu
「[App Home]をクリックして[App Display Name]の[Edit]をクリックする」
Barusu
「もう名前は勤怠くんで良いやーめんどくせぇ」
Barusu
「[Install App]から[Install to Workspace]をクリックして追加する」
Barusu
「与えた権限について確認する画面が出るんよねー。
[許可する]をクリックする」
Barusu
「無事に追加されればOK。このTokenは後で使うからどっかに控えとく。
まぁいつでも確認できるけど」
Barusu
「おkおk。これでとりあえずはBotUserが追加できた。
お次はSlack→GASを発火するために、GASをAPI公開してSlackから呼び出せるように設定していくかー」
GASを作成してAPI公開する (その前に)
Barusu
「普通のgmail.comアカウントで作成するGASだと、特に意識しなくてもできるんだけど。
企業のGoogleWorkspaceだと、ドメイン外に共有できない設定にしてるのが普通なので注意が必要なのよね。
ドメイン外共有できない、またはホワイトリストで共有する設定になっていると、GASをAPIとして公開することができない。これよくハマる。
」
Barusu
「なので、回避方法も合わせて記載しとく。
この会社の場合はGoogleWorkspace導入したときに初期設定しといたから、実際は不要なんだけどね。一応記載しとこうかなと思ってね。
馬なんでね」
GASをAPI公開するための組織設定
Barusu
「GoogleWorkspace管理コンソールにて作業するぞー」
Barusu
「一枚で表現するとこんな感じ。
まず、トップ組織にネストされた子組織を2つ作成しておく。
次に管理コンソール→アプリ→GoogleWorkspace→ドライブとドキュメント→共有設定と進み、トップ組織には外部共有OKの設定を付与する。
作成しておいた子組織の片方は外部共有NGの設定でオーバーライドし、一般ユーザーを追加しておく。これで誰も彼もが外部共有できる状態は回避できる。
もう一つの子組織にはGAS実行用とかの管理者アカウントを追加しておく」
Barusu
「外部共有OKの子組織に所属している管理者アカウントで共有ドライブを作成し、GASとスプレッドシートはそちらに配置する」
Barusu
「とまあこんな感じで、GASをAPI公開できる共有ドライブが出来上がった。
では次に、GASを実際に書いて、API公開して、SlackBotから呼べるように設定していく」
GASを作ってEventAPIを登録する
Barusu
「一旦、SlackBotの設定画面に戻って、[Event Subscriptions]から[Enable Events]をOnにする」
Barusu
「すると、Request URLの欄とか色々出てくる。
このRequest URLにAPIとして公開したGASのURLを追加すれば良いのだが、
初回設定するときに「きちんとレスポンスを返してくれるよね?」
とSlackから確認されるので、それを満たすように記載しなきゃいけない」
Barusu
「ので、それを満たすように記載したGASがこちら」
function doPost(e) {
// Event API Verification 時のコード
try {
var json = JSON.parse(e.postData.getDataAsString());
if (json.type == "url_verification") {
return ContentService.createTextOutput(json.challenge);
}
} catch (ex) {
}
}
Barusu
「ではこれをGASに書いてみよう。
GAS公開できる共有ドライブ上で、適当にスプレッドシートを作成」
Barusu
「[ツール]→[スクリプトエディタ]の順にクリック」
Barusu
「親の顔より見た画面。ここに、↑にも書いたコードを転記」
※拡張機能により、ダークモードになっております
Barusu
「[公開]→[Webアプリケーションとして導入]をクリック」
Barusu
「[Who Has access to the app]は[Anyone,~]を選択する」
Barusu
「Deployすると、API実行URLが表示されるのでコピーしとく」
Barusu
「で、先程のSlackBotの設定画面に戻って、[Event Subscriptions]の[Request URL]にAPIURLを入力する」
Barusu
「Verified になればOK。ならない場合はGASの記載がおかしいか、WebAPIとして公開できてないか、保存したあとに再度WebAPIを公開していないかとかそこらへんに原因がある。
このままではこのAPIを実行する「きっかけ」が設定されてないので、追加する。
次に[Subscribe to bot events]をクリックする」
Barusu
「[Add Bot User Event]をクリック→[message:im]を選択」
Barusu
「Save Changesをクリックして保存する」
Barusu「っと、まぁここまでで下準備はだいたいできた。これからGAS書いていくか…データモデルも決めてないけどまぁどうにかなるっしょ」
次回予告
画像付きで3000文字も書いちゃったけどなんとか下準備まではできたBarusu!
次回は今回以上にちゃんと技術的な内容になっていきます!
むしろ次回だけで収まるのか不安になってきたぞ!
次回、「Re:ゼロから始めるSlackBot構築 その2」。デュエルスタンバイ!
この記事が気に入ったらサポートをしてみませんか?