77Lifeworkベータ版

77Lifeworkベータ版

IT関係の話(ツール開発・インフラ構築)をメインとして、その他私の趣味や雑記用のブログです。ここに書いた内容が少しでも参考になれば嬉しいです。

PythonのプログラムからSlackにメッセージを投稿する方法

こんにちは。


自分で書いたプログラムを実行して、処理が終わったタイミングで結果を通知してほしい・・・って思うことありますよね。
今回はPythonのプログラムからSlackへメッセージを送る方法を書いていきます。


まず、Slackとはなんぞ?という方は以下リンクを見てみてください。登録もここからできます。
slack.com


今回はPythonからSlackへメッセージを投稿する際に、Slackの外部連携機能の1つである Incoming Webhooks を使います。
これを使うと、Pythonのプログラム中から簡単にSlackへメッセージを送ることができます。

Slackの設定

ではまずSlack側の設定をしていきましょう。
WebブラウザからSlackを開き、自分のワークスペースにサインインし、以下の画面で、左下の「アプリを追加する」をクリックします。
f:id:J-back:20190916220227p:plain:w600



左上の「アプリを管理する...」をクリックして、
f:id:J-back:20190916220511p:plain:w600



右上の「検索」をクリック。
f:id:J-back:20190916221415p:plain:w600


「Incoming Webhook」と入力し、検索結果で出てきた項目をクリック。
f:id:J-back:20190916221503p:plain:w600


「設定を追加」をクリック。
f:id:J-back:20190916221636p:plain:w600



「Incoming Webhook インテグレーションの追加」をクリック。
f:id:J-back:20190917011626p:plain:w600


この「Webhooks URL」を記録しておいてください。
PythonからこのURLにアクセスすることでメッセージを投稿する流れとなります。
f:id:J-back:20190917012230p:plain:w600



「チャンネルへの投稿」でメッセージを送りたいSlackのチャンネルを選択します。
その他の項目は任意の値を設定してください。
f:id:J-back:20190917012248p:plain:w600



最後に「設定を保存する」をクリックし、Slack側の設定は完了です。
f:id:J-back:20190917012306p:plain:w600

メッセージ送信用Pythonコード

ここまで設定したら、Pythonからメッセージを投稿してみましょう。
Slackへメッセージを投稿するためのサンプルプログラムを以下に示します。

# coding: UTF-8
import slackweb

# Slack Webhook URL
SLACKURL = 'ここには皆さんそれぞれのSlack Webhook URLを入れてください'

# slack送信メソッド
def slackPost(message):
    slack = slackweb.Slack(url = SLACKURL)
    slack.notify(text = message)

if __name__ == '__main__':
    slackPost('test!!!')

これを実行すると、


f:id:J-back:20190918224144p:plain:w400


という感じで、PythonからSlackにメッセージを投稿することができました!



なお、slackwebのパッケージをインストールしていない場合は、

pip install slackweb

コマンドプロンプトまたはターミナルから実行した後に上記pythonプログラムを実行しましょう。



また、特定のユーザに対してメンションを含むメッセージを送信したい場合、
メッセージ本文に「@ユーザ名」を入れればいいと思いきや、これだと下のようになってしまってメンションとして扱われません・・・。
f:id:J-back:20190918221231p:plain:w400


メンションとして認識されるためには、「<@ユーザID>」をメッセージに含める必要があります。
各ユーザのユーザIDは、ワークスペースの画面で「myworkspace」をクリックし、
f:id:J-back:20190918222804p:plain:w600


「プロフィール&アカウント」をクリックします。
f:id:J-back:20190918222904p:plain:w400


以下赤枠で示した部分をクリックすると、
f:id:J-back:20190918222950p:plain:w400


メンバーID(ユーザID)が表示されます。
f:id:J-back:20190918223036p:plain:w400


このメンバーIDをコピーして、以下のようにPythonプログラム中に記述します。

# coding: UTF-8
import slackweb

# Slack Webhook URL
SLACKURL = 'ここにはSlack Webhook URLを入れてください'
SLACKUSERID = '<@ここにメンバーIDを入れてください> \n'

# slack送信メソッド
def slackPost(message):
    slack = slackweb.Slack(url = SLACKURL)
    slack.notify(text = SLACKUSERID + message)

if __name__ == '__main__':
    slackPost('test!!!')

上記を実行すると・・・ メンションが含まれたメッセージを投稿することができました!
f:id:J-back:20190918223644p:plain:w400

最後に

PythonのプログラムからSlackへメッセージを投稿するまでの流れは以上です。
上記をプログラムの中に組み込めば、Pythonで処理した結果をSlackに通知することも可能となりますね。

今回は終わりです。
最後まで読んでいただき、ありがとうございました!