tl;dr
Slack APIのGoogle Apps Script用ラッパーライブラリを作って公開した。
Pythonの人気ライブラリSlackerとおおよそ同様のことができ、これを使うことでSlackのbotなどを無料で作りやすくなった。
レポジトリ:https://github.com/yhay81/GASlacker
経緯
Slackでボットを作ろうと思いドキュメントを読んだらBotkitというのをオススメされていたがややこしいと思った。
サーバー管理不要かつ無料で作りたいと思い Google Apps Script に目をつけた。
ライブラリは公式にたくさん紹介されていた。が、Google Apps Script用のものはなかった。
Qiita記事「Slack BotをGASでいい感じで書くためのライブラリを作った」を見つけた。
CoffeeScriptで書かれたこのライブラリは簡単な用途で使う分には問題なさそうだったが、最終更新が3年前で最新のSlack APIに追随できていなかったので、もしかすると需要あるかもと思い、自分なりにライブラリから作ることにした。
ちょうどGASをローカルで開発しやすくする「google/clasp (GitHub)」というものが最近登場していて、それにも興味があった。
さらにQiita記事「Google Apps Script をローカル環境で快適に開発するためのテンプレートを作りました」を見つけて、TypeScriptでかける準備が整っていたので、TypeScriptで書くことにした。
slackのAPIはhttps://slack.com/api/chat.postMessage
というようなアクセスポイントにGETやPOSTを投げるのだが、chat.postMessage
の部分がメソッドによって変わる。GASのPythonインターフェース「os/slacker (GitHub)」はそこでslacker.chat.postMessage(引数)
という記法でAPIにアクセスできるようになっていて、いけてると思ったので真似た。
詳しくはこちら。Slack API Document
使い方
https://drive.google.com などから Google Apps Script を新規作成(ライブラリ用にする)。
dist/bundle.jsの内容を丸々コピペして保存し、公開>実行可能APIとして導入
をして、API IDを発行し、コピーしておく。
Google Apps Script をさらにもう一つ新規作成(自分のアプリ用にする)。
Resourcesタブに、Libraries...というのがあるので、それに先ほどのAPI IDを書くと、GASlacker
という変数が使えるようになる。
あとは、こんな感じ。
var token = 'xoxb-34...みたいなトークン';
var slack = GASlacker.methods(token);
function doPost(e){
var event = JSON.parse(e.postData.contents).event;
if(event.text.match(/hello/)){
var text = "Hello," + event.message.username;
slack.chat.postMessage(event.channel, text);
}
}
GASlackerは唯一のメソッドmethods
を持っている。これにトークンを渡すと、オブジェクトが作られ返される。このオブジェクトを起点にAPI methods名を指定することでAPIにアクセスすることができる。
doPostはGASの特別な関数で、GASにPostが送られてきたときに動作する。GASをWebアプリとして公開して、Slackに権限を適切に設定して登録しておくと送られてくるようになる。
このサンプルはメッセージがSlackで書かれたときに、Postされるようにした場合のもの。eにいろんな情報が入っているので、うまいこと処理して、slack.chat.postMessageに引数として渡すと、自動でメッセージが送信される。
Slack API Document を見るとわかるが、引数には必須のものと、オプションのものがある。
Tokenはほぼ全てに必須だが、これはGASlackerでは書く必要がない。
必須のものは、GASlackerでも必須で、オプションのものは飛ばすことができる。さらにドキュメントにない変数を渡すときはextraArgs
という変数にPOJOで渡す。
まとめ
APIの量が多くて全てを実装するのは結構大変だった。
今回のものは、Slack APIをそのまま扱うだけのものだが、もっといい感じにラップして、botを作るためだけのライブラリにもできたらいいなと思った。
需要があれば、というところなのでこのライブラリが使えそうだと思った方いれば、スターお願いします。https://github.com/yhay81/GASlacker
補足
このMediumでGASでのSlackBotの作り方を0から説明してみた。
英語だがほぼ画像で、このQiitaで説明していない、SlackのToken取得部分も説明してます。
非エンジニアにとっては、GASを使うこの方法がもっとも簡単なSlackbotの作り方なのかなと思う。GASlackerも使っておらずできるだけシンプルにしました。