雑誌会の準備が嫌すぎてSlackで遊んでたよ!!!!!
進捗確認アプリを作った
前々回にSlackAPIで遊んでみたののつづき.
アプリケーションを作る
Slack APIの右上のYour Appsから,自分のアプリケーションを作成することができる. これはどのteamに対して作成するか選ぶ必要があり,通常の状態では自分以外には公開されないっぽい.
今回は研究室のteamに対してアプリケーションを作成してみた.
アプリケーションの設定
ボタンの反応を送る先のURLを入力.
このURLはHTTPSじゃないとだめっぽいので,お手軽にheroku.
あとはこんな感じに注意が出ているので,OAuth時のリダイレクト先を設定する.
今回はちゃんとしたアプリケーションでもないのでなんでもよさそう.
なのでさっきと同じにしておく.
トークンの取得
こちらを参考にさせてもらった.
あとは公式のドキュメント.Using OAuth 2.0 | Slack
ブラウザで適当に認証してしまった.
認可コードの取得
指定のURLhttps://slack.com/oauth/authorize
に必要なパラメータを付けてブラウザで開く.
- client_id: アプリケーションのページから取得
- scope:
chat:write:bot
- redirect_uri: OAuthリダイレクト用に登録したURL
https://slack.com/oauth/authorize?client_id=XXXXXXXXXX.XXXXXXXXXXX&scope=chat:write:bot&redirect_uri=https://XXXXXX
適当に進み,チャンネルを選んでAuthorize.
すると登録しておいたリダイレクト先に飛ばされる.
URLにcode
とstate
が載っていたのでこれでいいんかいな...ってことで取得.
トークンの取得
指定のURLhttps://slack.com/api/oauth.access
に必要なパラメータを付けてブラウザで開く.
- client_id: アプリケーションのページから取得
- client_secret: 同上
- code: 先ほど取得したもの
- redirect_uri: OAuthリダイレクト用に登録したURL
https://slack.com/api/oauth.access?client_id=XXXXXXXXXX.XXXXXXXXXXX&client_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&code=XXXXXXXXXX.XXXXXXXXXXX.XXXXXXXXXX&redirect_uri=https://XXXXXX
レスポンスにトークンがあるので無事取得.
プログラム
さすがに記事が長くなってきたのでGistにする.
Slack Progress Checker with Interactive Button
ボタン付きの投稿をする post_slack_prog_btn.py
基本的には前々回の記事と同じ.
トークンはさっき取得したアプリケーション用のトークンにする必要がある.
ボタンが押されたときに反応する prog_btn_server.py
こちらを参考にさせてもらった.
heroku上のbottleの実行プログラムがprog_btn_server.pyである.
公式ドキュメントに,ボタンを押した時にどんなPOSTリクエストが来るのか書いてある.
最初POSTって書いてあるのを見逃して@route('/')
だけにしていて困った.
やっぱり英語のドキュメントは読み飛ばしてしまいがちだなぁ.
やっている処理はこんな感じ.
- POSTパラメータから色々情報を読みだす
- 掃除完了について投稿する
- POSTリクエストに,最初の投稿(ボタン付き)をどのように書き換えるかのレスポンスを返す
最初はchat.update
を使って元の投稿を書き換えようと思っていた(参照)が,レスポンスによってさらに上書きされて消されるようになってしまった.
レスポンスによって書き換えないようにすることもたぶんできるんだけど,調べるのに力尽きたので上記のような形になった.
botはprivateチャンネルにも投稿できる. しかし,POSTリクエスト上のチャンネル名には表示されない. その辺りが注意点かな.
所感
勢いで色々できたので楽しかった. 来週頭にはボタン付き投稿の方をcronか何かで稼働させようと思う.