LoginSignup
16
10

More than 3 years have passed since last update.

slack api でdmを送る

Last updated at Posted at 2021-02-04

はじめに

slackはUIがよく変更されるので,最新の情報があまりなかった.
そのため,自分用にメモを残す.
2021/2/5 の情報です.

追記

slackerはもうアップデートがなされないということで,Python Slack SDKを用いた方法も記載する.

pip install slack_sdk

手順1 ワークスペースにAppを追加する.

https://api.slack.com/apps/
にアクセスし,ログインする.

スクリーンショット 2021-02-05 2.18.24.png

スクリーンショット 2021-02-05 2.20.14.png

Create New APP から

  • Appの名前
  • インストールしたいワークスペースを選択.

手順2 Permissionsの追加.

Permissionsを選択
image.png

BOTとして投稿するなら,BOT Token Scopes
ユーザーとして投稿するなら,User Token Scopesを選択する.

image.png

今回はBOTとして進めます.

スクリーンショット 2021-02-05 2.40.30.png

これらのPermissionを追加してください.(不要なものが混じっているかも..)

完了後,インストールします.
スクリーンショット 2021-02-05 2.45.06.png

アクセストークンをコピーします.
スクリーンショット 2021-02-05 2.46.35.png

手順3 users_list,user_idを取得する.

はじめに使用するのは,users.listのapiです.
アクセスして,先ほどのトークンを貼り付けてください.

スクリーンショット 2021-02-05 2.51.31.png

"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
以下略
getid.py
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

getid.py
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を入力します.
スクリーンショット 2021-02-05 3.03.18.png

レスポンスに出てきたidがDMをするためのidとなります.
(user_idとdmのためのchannel_idを区別しておくこと)

これもpythonから取得していきます.

slacker

dm.py
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

dm.py
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が送信できます.
あとはコードを改良して,一斉送信にするなどして利用してください.

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10