はじめに
slackはUIがよく変更されるので,最新の情報があまりなかった.
そのため,自分用にメモを残す.
2021/2/5 の情報です.
追記
slackerはもうアップデートがなされないということで,Python Slack SDKを用いた方法も記載する.
pip install slack_sdk
手順1 ワークスペースにAppを追加する.
https://api.slack.com/apps/
にアクセスし,ログインする.
Create New APP から
- Appの名前
- インストールしたいワークスペースを選択.
手順2 Permissionsの追加.
BOTとして投稿するなら,BOT Token Scopes
ユーザーとして投稿するなら,User Token Scopesを選択する.
今回はBOTとして進めます.
これらのPermissionを追加してください.(不要なものが混じっているかも..)
手順3 users_list,user_idを取得する.
はじめに使用するのは,users.listのapiです.
アクセスして,先ほどのトークンを貼り付けてください.
"ok"trueになっていたら成功です.
ずらずらとメンバーのリストが返ってきました.このままでは見づらいのでPythonを用いて加工しましょう.
環境です.
❯❯❯ python --version
Python 3.7.4
❯❯❯ which python
/Users/kyohei/.pyenv/shims/python
slacker
❯❯❯ pip install slacker
❯❯❯ pip show slacker
Name: slacker
Version: 0.14.0
以下略
from slacker import Slacker
token = "your access token"
slacker = Slacker(token)
res = slacker.users.list()
for member in res.body['members']:
print(member['name'])
print(member['id'])
print()
注意点として,slackerのレスポンスにアクセスするためには,bodyを経由するということです.
詳しくはslackerのgithubを参照してください.
Python Slack SDK
from slack_sdk import WebClient
token = "your access token"
client = WebClient(token)
res = client.users_list()
for member in res['members']:
print(member['name'])
print(member['id'])
print()
Python Slack SDKでは,resに対してbodyを経由しない.
これで,ワークスペース内のメンバーのuser_idが取得できました.
手順4 DMを送る.
DMを送るためには,相手とのDMをオープンしてあげます.
昔の記事では,im.openを使用する記事が多いようですが,deprecated(非推奨)のようです.
conversations.openのAPIを用います.アクセスしてテストしましょう.
usersの欄に先ほどpythonで取得した,user_idを入力します.
レスポンスに出てきたidがDMをするためのidとなります.
(user_idとdmのためのchannel_idを区別しておくこと)
これもpythonから取得していきます.
slacker
from slacker import Slacker
token = "your access token"
slacker = Slacker(token)
user_id = "手順3で取得した user_id"
message = "DMです."
# DMを開く
res = slacker.conversations.open(users=user_id)
dm_id = res.body['channel']['id']
# DMを送信する
slacker.chat.post_message(channel=dm_id, text=message)
Python Slack SDK
from slack_sdk import WebClient
token = "your access token"
client = WebClient(token)
user_id = '手順3で取得した user_id'
# DMを開き,channelidを取得する.
res = client.conversations_open(users=user_id)
dm_id = res['channel']['id']
# DMを送信する
client.chat_postMessage(channel=dm_id, text='DMです')
これでDMが送信できます.
あとはコードを改良して,一斉送信にするなどして利用してください.