acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

Slack : 複数ワークスペース についてステータスを一斉変更する

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日以降は新たなトークンは発行できなくなるって書いてあるな。こりゃいかん(><)
image

いったん まとめ

  • 一斉ステータス変更できた。便利(╹◡╹)♡
  • ただし、クライアントから提供されるワークスペースは、token発行不許可なところが多くて全部一括というわけにいかなかった。
  • 5/5以降はテストトークンの新規発行ができなくなる。Slack app化してインストールする方法にしてね、って書いてあった。これの対応が宿題事項。

参考文献

絵文字の一覧