pythonのslackclientでmessage buttonを作る

はじめに

チームで共有出来るTodoリスト的なものを目指してMessage Buttonの出し方を調べてみた
結構Jsonで直にAPIを叩く記事は見つかるけどslackclientを使ったものは見かけないのでメモ

slackclient

PythonからslackのAPIが叩けるライブラリ
予めアクセストークンを用意しておく必要がある

投稿

 1from slackclient import SlackClient
 2
 3slack_token = os.environ["SLACK_API_TOKEN"]
 4sc = SlackClient(slack_token)
 5
 6sc.api_call(
 7  "chat.postMessage",
 8  channel="#python",
 9  text="Hello from Python! :tada:"
10)

シンプル

ボタン付き投稿

ボタンの作り方自体は

に書いてある これを参考に作る

 1import json
 2from slackclient import SlackClient
 3
 4slack_token = os.environ["SLACK_API_TOKEN"]
 5sc = SlackClient(slack_token)
 6
 7attachments = [{
 8    "fallback": "",
 9    "text": u"ボタンの説明",
10    "callback_id": "",
11    "color": "#008000",
12    "attachment_type": "default",
13    "actions": [
14        {
15            "name": "done",
16            "text": "ボタン1",
17            "type": "button"
18        }
19    ]
20}]
21
22sd.api_call(
23    "chat.postMessage",
24    channel="チャンネル名",
25    text="ボタン付き投稿です",
26    attachments=json.dumps(attachments)
27)

とりあえずこれでボタン付き投稿できる

詰まったポイントはjson.dumpsしておかないと行けない点
あとそもそもapi_callの引数がどういう扱いなのか知らなかった
結局可変長引数でpostデータに入れてくれるみたいなのでこんな感じになった

ボタンの動作

ボタン付き投稿はHTTPS認証が出来るWebサーバーがないとボタンの動作が作れないらしいのでその辺調査中
アプリを作成してOauth2認証で得られるTokenだとRTMが利用出来ないんだけど…?
とりあえず今回はチームにBotを追加してそのTokenを利用してRTMでメッセージが来たら返事をするようにしてみた
そのためボタンを押しても無反応