Slack通知にはIncomming Webhooksという方法もありますが、こちらの方法だと画像を送信することができません。
本投稿ではSlack APIという機能を利用して、画像とメッセージをSlack通知する方法を紹介します。
Slack側の準備
まずはAppを作成するために、以下のページにアクセスします。
以下の画面が表示されますので、Create New Appを押します。
From scratchを選択します。
App Nameにアプリ名を入力し、
Pick a workspace…にワークスペースを選択して、
Create Appを押します。
以下の画面になります。
アプリに必要な機能をSlack Appに追加していきます。
今回はテキストを送信する機能と、画像をアップロードする機能を追加します。
左メニューからOAuth & Permissionsを選択します。
下にスクロールしていくとScopesを見つけることができます。
Bot Token Scopes下部のAdd an OAuth Scopeで以下2つを追加します。
- chat:write:メッセージ送信機能
- files:write:ファイルアップロード・編集・削除機能(今回は画像アップロードに利用)
左メニューからInstall Appを選択し、Install to Workspaceを押します。
上記画面が出るので、許可するを押します。
上記画面になるので、Copyを押してトークンをコピーします。
トークンは後ほど利用するので、控えておきます。
Slack Appを一旦置いといて、Slackのワークスペースを表示します。
すると以下のように先ほど作ったAppが追加されていますので、リンクをコピーを選択します。
以下のようなリンクが取得されるはずです。
- https://ワークスペース名.slack.com/archives/XXXXXXXXXXX
リンクのXXXXXXXXXXX部分がチャネルIDとなります。
こちらも後ほど利用するので控えておきます。
Python側のSlackチャット送信プログラムの作成手順
まずはモジュールをインストールします。
pip install requests
import requests
def slack_notify(message, img):
# params
SLACK_TOKEN = '取得したトークン'
CHANNEL_ID = '取得したチャネルID'
data = {'token': SLACK_TOKEN, 'channel': CHANNEL_ID, 'text': message}
# send
requests.post('https://slack.com/api/chat.postMessage', data=data)
slack_notify('test')
プログラムを実行すると以下のようにSlackのAppに投稿がされています。
無事投稿を確認できました!
Python側のSlack画像通知プログラムの作成手順
ソースコードは以下のようになります。
import requests
def slack_notify(message, img):
# params
SLACK_TOKEN = '取得したトークン'
CHANNEL_ID = '取得したチャネルID'
data = {'token': SLACK_TOKEN, 'channels': CHANNEL_ID, 'initial_comment': message}
files = {'file': open(img, 'rb')}
# send
requests.post('https://slack.com/api/files.upload', data=data, files=files)
slack_notify('test', '画像ファイルパス')
プログラムを実行すると以下のようにSlackのAppに投稿がされています。
無事投稿を確認できました!
Slackチャネルに画像付きメッセージを投稿する
このままだとチャネルに通知が飛びません。
ここからは作成したAppとチャネルを紐づけていきます。
Slackワークスペースから投稿したいチャネルを選択します。
その後#チャネル名(チャンネル詳細を取得する)を選択してください。
インテグレーションからアプリを追加するを押します。
作成したAppが表示されているはずなので、追加を押します。
最後にAppを追加したチャネルのチャネルIDを取得します。
import requests
def slack_notify(message, img):
# params
SLACK_TOKEN = '取得したトークン'
CHANNEL_ID = 'ここを変更する'
data = {'token': SLACK_TOKEN, 'channels': CHANNEL_ID, 'initial_comment': message}
files = {'file': open(img, 'rb')}
# send
requests.post('https://slack.com/api/files.upload', data=data, files=files)
slack_notify('test', '画像ファイルパス')
先ほど作成したプログラムのCHANNEL_IDを、1つ前の項で取得したチャネルIDに変更します。
先ほどチャネルIDを変更したプログラムを実行すると、無事チャネルへ投稿されました!
まとめ
今回はPythonを活用したSlackチャネルに画像付きメッセージを投稿する方法を紹介しました。
メッセージを投稿するトリガーを変更することで、様々なことに利用できそうですね。
ご意見やご質問がありましたらお気軽によろしくお願いします。コメントお待ちしております!