Slack : 複数ワークスペース についてステータスを一斉変更する
motivation:
コロナの影響で毎日テレワーク。 自社のやプロジェクト専用に複数のワークスペースがあって、毎朝手動でステータスを変更するのが面倒なので一括でできるようにしたい。
特定のワークスペースのステータス更新
Qiita にあったコードを参考にさせてもらった。
Slackのstatus emojiを変更する(python3) - Qiita
今回利用するのは users.profile.set - Slask Web API メソッドの1つ。 https://api.slack.com/methods/users.profile.set
私の場合は、稼働状態(リモート稼働中、昼休み、本日閉店)を関係者にざっくり伝えるのがゴール。自分の好きなタイミングでステータス変更できれば十分で、位置情報と紐付けた自動更新などの機能は必要ない。
スクリプトも Jupyter Lab上で実行する簡易な形でOKとした。
用意する定数は、
targets = { #wkspace: (USER_TOKEN, USER_ID) "acokikoy": ("xoxp-********-*******-**********-******", "U******"), "Workspace1": ("xoxp-********-*******-**********-******", "U******"), "Workspace2": ("xoxp-********-*******-**********-******", "U******") } # Constants STATUS = { #status: (status_msg, status_emoji) "tele": ("テレワーク中", ":globe_with_meridians:"), "lunch": ("お昼休み", ":zzz:"), "bye": ("閉店", ":palm_tree:"), }
# Slack - change my status import json import requests def change_status(text, emoji, target: tuple): user_token, user_id = target data = { "token" : user_token, "user": user_id, "profile":json.dumps({ "status_text":text, "status_emoji":emoji }) } res = requests.post('https://slack.com/api/users.profile.set', params=data) return json.loads(res.text)['ok'] #True or False if __name__ == '__main__': st = input("Input 'tele' or 'lunch' or 'bye': ") msg, emoji = STATUS[st] for wkspace, target in targets.items(): if change_status(msg, emoji, target): print(f"{wkspace}: OK") else: print(f"{wkspace}: NG") print("==== done ====")
実行すると指定したステータスで、対象ワークスペースを一斉変更しにいく。それだけ。
Input 'tele' or 'lunch' or bye': [ tele ]
acokikoy: OK
Workspace1: OK
Workspace2: OK
==== done ====
tokenを取得・確認する方法
既に発行済みならここで確認できる。
users.list method | Slack
未発行のワークスペースは、ここで create token をクリックすると発行される。
管理者が許可してないワークスペースでは取得不可。
Legacy tokens | Slack
あ。。。でも2020年5月5日以降は新たなトークンは発行できなくなるって書いてあるな。こりゃいかん(><)
いったん まとめ
- 一斉ステータス変更できた。便利(╹◡╹)♡
- ただし、クライアントから提供されるワークスペースは、token発行不許可なところが多くて全部一括というわけにいかなかった。
- 5/5以降はテストトークンの新規発行ができなくなる。Slack app化してインストールする方法にしてね、って書いてあった。これの対応が宿題事項。
参考文献
絵文字の一覧
- の指定に、日本語ショートコード
:経線付地球:
ではうけつけなかった。 - emoji の一覧を探したらGitHubにチートシートがあったのでここから目的のショートコードを取得した。
🎁 Emoji cheat sheet for GitHub, Basecamp, Slack & more - 例えば前述の
:経線付地球:
ならこう書く→ :globe_with_meridians: