Slack で slash command を使って interactive なやり取りをする

February 27, 2020
Slack bot Golang

ちょっと最近 bot さん使って業務を便利に出来ないかなーと思っていて、興味はあるものの一度も触ったことなかったのでいろいろ試してみたときの記録です。 先日の3連休で予定も特に無かったので(というか、コロナと花粉のせいで外に出たくなかったので)引きこもってずっと作業してました。 さくっと動作確認するつもりだったんですが、情報が古かったり(Slack APIの更新が早い?)して丸2日かかってしまい、せっかく頑張ったんだから久々に記事書くことにしました。

LT;DR

GitHub の方に設定方法とか書いたのでそちら見てください。言語はGoです。
そして、ここより先の話はただの日記です 😄
https://github.com/3nan3/go-slack-interactive

はじめに

いろんな記事漁ったんですけど、一番やりたいことに近かったのがメルカリさんの記事でした。 https://tech.mercari.com/entry/2017/05/23/095500

bot に話しかけると、選択肢を提示して、その結果に応じてまた返答をする、というような bot です🍺。 GitHub にレポジトリが上がっていたのでそのまま動いてくれればよかったのですが、なんかよくわからないが動かない。 そもそも Slack bot に用意されている機能がたくさんあって、初めて触る私にはどれが何できるのかよく分からなくて時間かかってしまいました。 RTM API と Event API がある、ふむなるほど。 RTM API だとメンションに反応したり、slash commandが使えたり、Event APIはえーと何? みたいな状態で、ほとんどが情報収集と整理に時間が費やされました。

RTM API は衰退する?

Slack は今、色々変更しているタイミングのようで、レガシーと呼ばれるものが点在していました。 2017年から2019年あたりの外部の記事を漁っていましたが、UI違ったり出来ることができなくなっていたり使わないように推奨されたり、 公式ドキュメントも、何が古くて何が新しいのかよく分からず、ずっと迷子だったような気がします。

正確な情報か自信ないんですけど、今現在新しく発行したbot用のトークンは RTM API に使えないのだとか。 slack-go レポジトリの issue にコメントがあって、 そこで紹介していた公式ドキュメントによると、

Making API calls


New bot user API access tokens may not access RTM. For most apps, the Events API lets your app listen to Slack goings-on in a more structured, safe way. If you require access to RTM (say, because you're building your app behind a corporate firewall), continue to use a classic Slack app bot token to call rtm.connect.

とのことでした。
しれっと RTM API も非推奨な感じで言ってるし(botトークンに限った話かも)、じゃあまあそのように作ってみるかということで、だいたい同じような動きをしつつ自分なりに書き直してみたのがこちらです。
https://github.com/3nan3/go-slack-interactive

使い方みたいなのは全部 README.md に書いたのでそちら見てください。

感想

個人的には、RTM API 使わなくなったので websocket 使わないで実現できるからむしろ楽になったかなーと言う気がします。楽と言うか馴染みがある、が近いかな。 できればサーバレスにしたい、lambdaとか。

あと、Attachment は古い?のかな、それとも今後も残るのかはちょっとわからないですけど、 あたらしく Block というものが用意されているようなので、レスポンスをもうちょっとリッチにしてみたいなと思いました。

今回触った部分に関しては知識が溜まったので、何かしらに活かしていきたいと思います。

comments powered by Disqus