Pythonから画像とメッセージをSlackチャネルに投稿する方法

Slack通知にはIncomming Webhooksという方法もありますが、こちらの方法だと画像を送信することができません。

本投稿ではSlack APIという機能を利用して、画像とメッセージをSlack通知する方法を紹介します。

Slack側の準備

Slack Appの作成

まずはAppを作成するために、以下のページにアクセスします。

https://api.slack.com/apps

以下の画面が表示されますので、Create New Appを押します。

From scratchを選択します。

App Nameにアプリ名を入力し、
Pick a workspace…にワークスペースを選択して、
Create Appを押します。

App Name

App Nameに日本語を使用しないようにしましょう。

以下の画面になります。

Slack Appのスコープを追加

アプリに必要な機能をSlack Appに追加していきます。

今回はテキストを送信する機能と、画像をアップロードする機能を追加します。

左メニューからOAuth & Permissionsを選択します。

下にスクロールしていくとScopesを見つけることができます。

Bot Token Scopes下部のAdd an OAuth Scopeで以下2つを追加します。

  • chat:write:メッセージ送信機能
  • files:write:ファイルアップロード・編集・削除機能(今回は画像アップロードに利用)

Slack Appのインストール・トークンの取得

左メニューからInstall Appを選択し、Install to Workspaceを押します。

上記画面が出るので、許可するを押します。

「インストールするボットユーザーがありません」と出た場合

もし上記画面で「インストールするボットユーザーがありません」と出た場合は、以下の記事を参考にして対応してください。

Slack Appで「インストールするボットユーザーがありません」と表示された場合の解決方法

上記画面になるので、Copyを押してトークンをコピーします。

トークンは後ほど利用するので、控えておきます。

SlackチャンネルIDの取得

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', '画像ファイルパス')
見落としやすい変更点

チャット送信時はchannelでしたが、ファイルアップロード時はchannelsとなっています。

出力結果

プログラムを実行すると以下のようにSlackのAppに投稿がされています。

無事投稿を確認できました!

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チャネルに画像付きメッセージを投稿する方法を紹介しました。

メッセージを投稿するトリガーを変更することで、様々なことに利用できそうですね。

ご意見やご質問がありましたらお気軽によろしくお願いします。コメントお待ちしております!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA