こんにちは。
自分で書いたプログラムを実行して、処理が終わったタイミングで結果を通知してほしい・・・って思うことありますよね。
今回はPythonのプログラムからSlackへメッセージを送る方法を書いていきます。
まず、Slackとはなんぞ?という方は以下リンクを見てみてください。登録もここからできます。
slack.com
今回はPythonからSlackへメッセージを投稿する際に、Slackの外部連携機能の1つである Incoming Webhooks を使います。
これを使うと、Pythonのプログラム中から簡単にSlackへメッセージを送ることができます。
Slackの設定
ではまずSlack側の設定をしていきましょう。
WebブラウザからSlackを開き、自分のワークスペースにサインインし、以下の画面で、左下の「アプリを追加する」をクリックします。
左上の「アプリを管理する...」をクリックして、
右上の「検索」をクリック。
「Incoming Webhook」と入力し、検索結果で出てきた項目をクリック。
「設定を追加」をクリック。
「Incoming Webhook インテグレーションの追加」をクリック。
この「Webhooks URL」を記録しておいてください。
PythonからこのURLにアクセスすることでメッセージを投稿する流れとなります。
「チャンネルへの投稿」でメッセージを送りたいSlackのチャンネルを選択します。
その他の項目は任意の値を設定してください。
最後に「設定を保存する」をクリックし、Slack側の設定は完了です。
メッセージ送信用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!!!')
これを実行すると、
という感じで、PythonからSlackにメッセージを投稿することができました!
なお、slackwebのパッケージをインストールしていない場合は、
pip install slackweb
をコマンドプロンプトまたはターミナルから実行した後に上記pythonプログラムを実行しましょう。
また、特定のユーザに対してメンションを含むメッセージを送信したい場合、
メッセージ本文に「@ユーザ名」を入れればいいと思いきや、これだと下のようになってしまってメンションとして扱われません・・・。
メンションとして認識されるためには、「<@ユーザID>」をメッセージに含める必要があります。
各ユーザのユーザIDは、ワークスペースの画面で「myworkspace」をクリックし、
「プロフィール&アカウント」をクリックします。
以下赤枠で示した部分をクリックすると、
メンバーID(ユーザID)が表示されます。
このメンバー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!!!')
上記を実行すると・・・ メンションが含まれたメッセージを投稿することができました!