概要
SlackのAPIでチャンネル指定ではなく個人を指定してダイレクトメッセージを送る。
バージョン情報
- slackclient==2.5.0
導入
pip install slackclient
下準備
下記URLから「Create New APP」で新しいアプリを作成。
作成されたScopesの「Add features and functionality」 → 「Permissions」
「Bot Token Scopes」から下記の権限を追加する。
- im:write(ダイレクトメッセージの投稿用)
- chat:write(チャンネルへの投稿用)
「Install App to Workspace」から「Allow」して表示されたOAuth Tokenをメモする。
slackclientでchannelにメッセージを飛ばす
取得したTokenを利用してチャンネルにメッセージを送信してみます。
import slack OAUTH_TOKEN = 'さっきコピーしたトークン' CHANNEL_NAME = '#メッセージ飛ばし先のチャンネル名' client = slack.WebClient(token=OAUTH_TOKEN) response = client.chat_postMessage( channel=CHANNEL_NAME, text="chat bot test message")
これを実行すると下記のようなエラーになります。
The server responded with: {'ok': False, 'error': 'not_in_channel'}
チャンネルに登録されてないからメッセージが送れないようです。
Slackの当該チャンネルを開いて「アプリを追加する」から当該アプリを追加すると、メッセージが送れるようになります。
ダイレクトメッセージを送る
DMを送る場合は、im_openでメッセージチャンネルを開いてから、chat_postMessageします。
コード内で指定している「USER_ID」は表示名ではなくSlackから振られている一意のIDです。
Slackを開いて「プロフィール&アカウント」から「メンバーIDをコピー」で取得できます。
USER_ID = '送りたいユーザーのID' res = client.im_open(user=USER_ID) dm_channel_id = res['channel']['id'] res = client.chat_postMessage( channel=dm_channel_id, text="chat bot test message") res['ok'] #=> true
おまけ : ユーザーの一覧を取得する
実行する前に下記を権限に追加する
- users:read
下記のようなコードでユーザーの一覧を取得できる。
res = client.users_list() for member in res['members']: print(member)
改定履歴
Author: Masato Watanabe, Date: 2020-03-07, 記事投稿