本記事について
備忘のため、slackにGASで作成したBotを追加する際の手順の記録に重きを置いています。
GASに限らず、slackのbotを作る際に設定場所の参考として役立てて頂けると幸いです。
botのコードの処理内容に関してはコード解説編をご覧下さい。
botの動き
毎日定刻にslackの「特定のチャンネルに属するメンバーから1名」をランダムに選択し、ゴミ出しを促すメッセージを投稿するbotをGAS(GoogleAppsScript)を用いて作成します。
メッセージにはinteractiveな再抽選実行のボタンがついており(参考:slack interactive messagesリファレンス)、
再抽選の理由を入力するダイアログが出現し、入力された理由が投稿&再度抽選が実行されます。
抽選実施日が祝日か否かを判定し、祝日には抽選投稿が実施されないようにする。
再抽選で「同じ人が再び当選する」ことを防ぐために、最新の当選者は抽選から除外されます。
実装手順
1. slack appの初期設定
1-1.app新規作成
https://api.slack.com/apps にアクセスし、Create New Appを押す。
1-2.app名称設定
Create a Slack Appというダイアログが表示されるので、
・App Nameに任意の名前を入力
・Development Slack Workspaceはプルダウンからworkspaceを選択
・右下のCreate Appを押す。
1-3.権限付与
Basic Information→Add features and functionality
→Permissions→OAuth&Permissionsの画面に遷移
→Scopesの項目内のSelect Permission Scopesで
・Access information about user's public channels
・Send messages as (App name)
の2つの権限を追加し、Save Changesを押す。
1-4.workspaceに追加・OAuth token取得
画面上部にスクロールし、Install App to Workspaceを押す。
確認画面が出るのでInstallを押す。
OAuth Access Tokenが表示されるので、この値をメモしておく。
2. GASの設定
Googleドキュメントを新規に作成し、ツール→スクリプトエディタを押してスクリプトエディタを開く。
2-1.GASライブラリ追加
リソース→ライブラリから
「Moment.js (MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48)」
「SlackApp (M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO)」
の2つのライブラリを追加する。
(追加手順は外部サイト:いつも隣にITのお仕事 及び Slack BotをGASでいい感じで書くためのライブラリを作った を参照)
2-2.GASアプリケーション公開
ここまででGASはライブラリを追加したのみで処理を1文字も書いていませんが、slackに設定するアドレスを取得するため公開します。
スクリプトエディタ上部の公開→「ウェブアプリケーションとして導入」を押す。
アプリケーションにアクセスできるユーザーを「全員(匿名ユーザーを含む)」に変更して、導入を押す。
許可を確認するダイアログが出ますが、許可して進めて行きます。
公開が完了すると「現在のウェブアプリケーションのURL」が表示されるのでこのURLをメモします。
3. 再度Slackの設定
https://api.slack.com/apps にアクセスし、手順1で作成したappを開きます。
3-1.slackからPOSTする先のURL設定
BasicInformation→Add features and functionality
→Interactive Componentsと進み、Interactivityをonにします。
するとRequestURLを入力するフォームが出現するので、2-2.で取得したURLを入力します。
フォームにURLを入力してエンターキーを押すと(←重要)画面右下のSaveChangesボタンがアクティブになるので、押す。
3-2. VerificationTokenの取得
appのBasicInformation→AppCredential内の、
VerificationTokenの値をメモします。
4. 再度GASの設定
Googleスプレッドシートからスクリプトエディタを開きます。
4-1. tokenの登録
画面左上のファイル→プロジェクトのプロパティを押す。
「スクリプトのプロパティ」タブに、
プロパティ→ OAuth_token 値→ 1-4.で取得したOAuth tokenの値
プロパティ→ verified_token 値→ 3-2.で取得したVerification tokenの値
という2行を追加して保存します。(プロパティ名はあくまで一例です)
4-2. コード追加
スクリプトエディタのコード.gsに下記githubリンクのコードを貼り付けます。
githubリンク
必ず、1行目の channelId
の値を実際に抽選を実行するslackのチャンネルIDに書き換えて下さい。
※channelIDはブラウザで対象のチャンネルを開いた際のアドレスが、
https://{{workspace名}}.slack.com/messages/{{channelID}}/
なので{{channelID}}の部分の値を使う。
4-3. スクリプト更新
左上のファイル→版を管理→
・テキストエリアにコメントを記入
・新しいバージョンを保存を押す
→ダイアログ下部のOKを押す。
4-4. 公開版更新
公開→ウェブアプリケーションとして導入→プロジェクトバージョンを最新のものにして、ダイアログ下部の「更新」を押す。
4-5. トリガー追加
編集→現在のプロジェクトのトリガー→画面右下の「トリガーを追加」
→下記画像のように午前8時〜9時に関数が実行されるように登録。
以上となります。