exits

勉強記録

Slack APIで遊んでみた話(2) - Message buttonを使って進捗確認

雑誌会の準備が嫌すぎてSlackで遊んでたよ!!!!!

進捗確認アプリを作った

f:id:yue82:20160709010831g:plain

前々回にSlackAPIで遊んでみたののつづき.

アプリケーションを作る

Slack APIの右上のYour Appsから,自分のアプリケーションを作成することができる. これはどのteamに対して作成するか選ぶ必要があり,通常の状態では自分以外には公開されないっぽい.

今回は研究室のteamに対してアプリケーションを作成してみた.
f:id:yue82:20160628032131p:plain:w350

アプリケーションの設定

ボタンの反応を送る先のURLを入力. このURLはHTTPSじゃないとだめっぽいので,お手軽にheroku.
f:id:yue82:20160709002849p:plain:w400

あとはこんな感じに注意が出ているので,OAuth時のリダイレクト先を設定する.
f:id:yue82:20160709003818p:plain:w400

今回はちゃんとしたアプリケーションでもないのでなんでもよさそう. なのでさっきと同じにしておく.
f:id:yue82:20160709002857p:plain:w400

トークンの取得

こちらを参考にさせてもらった.

あとは公式のドキュメント.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.
すると登録しておいたリダイレクト先に飛ばされる.
f:id:yue82:20160709012601p:plain:w500
URLにcodestateが載っていたのでこれでいいんかいな...ってことで取得.

トークンの取得

指定の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

f:id:yue82:20160709013958p:plain:w400
レスポンスにトークンがあるので無事取得.

プログラム

さすがに記事が長くなってきたので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か何かで稼働させようと思う.