shanaiho.smarthr.co.jp 会社の同僚からこんなのをやりたいとURL付きのチャットが来たので、GASで実装できるか検証してみます。
最終目標
- 所定のスラッシュコマンドを実行する
- プライベートチャンネルを生成
- プライベートチャンネルに実行ユーザと固定ユーザを追加
- チャンネルの案内メッセージを返す
というのを作るんですが…そもそもSlackのSlash Commandを作ったことがないので前編ではどんな風にGASに対してリクエストを送信できるのかを実験。 まずはSlash Commandを実行すると送信したリクエスト内容をそのまま返すだけの機能を作ってみます。
Google Apps Script を作成
ここでは「SlackSlashCommand」という名前でスプレッドシートを用意。(なんでもいいです)
「ツール」>「スクリプトエディタ」とたどって、GASの開発環境を開く。
プロジェクト名もスプレッドシートに合わせておきました。
まずは動作テスト用に以下のように書きます。※書いたあと保存を忘れずに
function doPost(e) { const result = JSON.stringify(e); return ContentService.createTextOutput(result); }
右上の「デプロイ」ボタンから「新しいデプロイ」を選択。
歯車アイコンから「ウェブアプリ」を選択。
アクセスできるユーザーは「全員」にして「デプロイ」します。「自分のみ」にするとGoogleアカウントでの認証が必要になってしまうのでSlackからのリクエストが受信できないためです。 ※今回はテストのみなので省略しますが、実運用時にはトークンの一致で認証させます。
表示されたURLがSlackからGASへのリクエスト送信先になるのでコピーしておきましょう。
Slack Apps を作成
https://api.slack.com/apps にアクセスして「Create New App」をクリック。
App Nameと対象ワークスペースを指定。ここではGASというAppNameでプライベートWorkspaceに対して作成する。「Create App」で保存。
Slash Commands を作成
アプリの設定画面左側にある「Slash Commands」を開いて「Create New Command」をクリック
コマンドの作成画面で以下のとおり設定。
Command ... /任意の文字列
Request URL ... 先程コピーしたGASのURL
Short Description ... コマンドの説明文
右下の「Save」ボタンで保存します。
アプリをWorkspaceにインストール
Slack App は作成や設定変更したあとに Install App することで実際のSlack環境に反映されます。
左メニューの「Install App」>「Install to Workspace」をクリック。
確認画面が表示されるので「許可する」
実験
これでAppに「GAS」が追加されて /test
コマンドが利用可能になります。
テスト結果はこんなかんじ。実行したコマンドやユーザーなど様々な情報が送信されていることがわかります。GASではこれらの情報をもとにチャンネルに追加するユーザを決めたりするわけですね。
まとめ
- Slash Commandを作るのはわりと簡単
- LambdaとかなくてもGASで実装可能
ただ、今後出てくると思いますがSlackは3秒以内にレスポンスが無いとリクエストを再試行するという仕様があるのでチャンネル作成→ユーザ追加→チャンネル案内をやろうとするとその制限に引っかかる気がします。
対策としてはcacheサービスにジョブキューを持たせて擬似的な非同期処理を行うというものがあるので、チャンネルが複数作られちゃうみたいなことが発生するようなら試してみようと思います。
次回の後編では実際にチャンネルの作成、メンバーの追加処理を実装します。