Summary
ユーザーの投稿やコマンドに反応するSlack botを作成した。
Socket Modeを使うと、外部のpublic HTTP endpointを契約することなく、slack_boltモジュールを用いて記述したPythonのAppでの通信を実現できる。
webには古い情報が多く、古いやり方では最新のslack APIでは動作しなくなっている。日本語の情報も結構あって使いやすそうに見えたslackbotモジュールは2019年12月のSlack APIの仕様変更でちゃんと動作しない。Slack APIのTutorialsのリンクにslackclientというのが紹介されていたが、実際にはそちらも開発を終了していて、現在はslack_sdkというのが後継のようだが、低レベルAPIっぽい。slack_boltというのがslackbotに近い感じ。
実際にはslack_boltはslack_sdkを呼び出すラッパーとして実装されているようだ。
ということで、bolt for pythonを用いた実装にチャレンジ!
2019年12月にSlackの通信仕様が変更され、現在ではSlackからHTTPSPOSTメッセージを受け取れるPublic URLを持ったサーバがBot appとの間を取り持つ必要があるようだ。このモードではサーバを契約する必要があるのと、HTTPサーバが公開されていないといけないのがやりにくい。 そのような懸念がある場合に、boltでも使えるSocket Modeというのがあるらしい。
まとめると、botの実体のクライアントAppがslackから通知を受け取るためには、Slack Events APIを使う接続方法と、Socket Modeを使う接続方法の2つが用意されている。本検討では、後者のSocket Modeでの実装を試みた。
slack apiのYour Appsページでslack appの新規作成を行い、必要な設定をしてtokenなどの情報を入手する必要がある。
手順は以下のとおり
https://api.slack.com/appsで「Create New App」をクリック。