こんにちは、MSKです。
今回はPythonからSlackにメッセージを投げてみます。
準備
まずSlackに登録し、ワークスペースを作成します。
作成が終わったら、ブラウザでSlack APIのページを開きます。
Create an appと書いてあるボタンを押します。

Your Appsという画面が出てきますので、Create an Appボタンをクリックします。

Create an appという画面が出てくるので、From scratchを選択します。

App Nameと通知を送るslackを指定し、Create Appボタンをクリックします。

登録したアプリの画面が開くので、左のFeaturesからOAuth&Permissionsを選択します。

下の方に進み、Scopesに必要な権限を与えます。(ここで僕は設定をミスしたので、この後に少し戸惑いました・・・)
今はメッセージの送信をしたいので、chat:writeとchat:write_customizeの権限を与えています。

その後に画面左側のSetingsのInstall Appをクリックします。

Install to Workspaceをクリックして連携します。

許可するをクリックすると、トークンが生成されます。
通知を送るなどslackに対してアクションをするときにはこのトークンを使います。

※もし、Permissionの追加などを行った場合は、Reinstall to WorkSpaceを行う必要があります。
自分のslackのワークスペースにもどり、適当にテスト用のチャンネルを作成します。
そのチャンネルの上で右クリックし、チャンネルの詳細を開くをクリックします。

インテグレーションタブに移動して、アプリを追加するを押します。

先ほど作成したAppがありますので、追加を押します。

ここからテストができますので、いったんテストを行ってみます。
トークンとチャンネル名が必須なので、入力してtextに適当に文字列を入れます。
Test methodをクリックすると、通知が飛ぶと思います。

これでslack側の準備は終了です。
次からPythonのソースを組んでいきます。
Pythonのコードを書く
pythonのインストールなどがまだでしたら、次の記事などを参考にしてください。
(インストールするバージョンは変わっていますが、進め方は同じです。)

使いやすいエディタやIDEはVisual Studio CodeまたはPyCharmです。(Windows版のPyCharmもありますよ)
このどちらかを使えば良いと思っています。
※僕はpythonに限って言えば、PyCharm推しです。
本業のC/C++、趣味で使っているRustやJavaScriptは断然Visual Studio Code推しですが、Pythonだけは違います・・・
以降PyCharmの画面での操作になります。
メニューのFileからSettings…を開きます。

少し画面が違うかもしれませんが、Project: (project名)をクリックして、Python Interpreterをクリックします。
クリックすると、インストールされているパッケージが表示されます。
上側の+ボタンをクリックします。

slackと検索するとslack-clientというものがあるのでインストールします。

最初に簡単なメッセージを投げてみます。
先ほどインストールしたslack-clientのWebClientを使います。
準備で作成されたトークンをセットしてWebClientのインスタンスを作成します。
そのインスタンスのchat_postMessageでメッセージを投げます。
channelにチャンネル名を、textに送信するメッセージを入れればOKです。
from slack import WebClient SLACK_API_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' client = WebClient(token=SLACK_API_TOKEN) response = client.chat_postMessage(channel='#test', text="python test") print(response)
testというChannelにpython testというメッセージが投げられたと思います。
レスポンスを見てみると、
{'ok': True, 'channel': 'xxxxxxxx', 'ts': 'aaaaaa.bbbbb', 'message': {...(長いので省略)...} }
という形で来ています。
tsというのがスレッドのidになるので、このIDを指定してあげるとスレッドにメッセージを投げることができます。
次のサンプルは1秒ごとに20回スレッドにメッセージを投げます。
先ほどとの違いはレスポンスのtsという要素を取得して、次からのcchat_postMessageのthread_tsにセットしています。
これで最初のメッセージにスレッドの形でメッセージを送信できます。
from slack import WebClient import time SLACK_API_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' client = WebClient(token=SLACK_API_TOKEN) response = client.chat_postMessage(channel='#test', text="スレッドテスト") if response['ok'] == True : ts_id = response['ts'] for i in range(0, 20): time.sleep(1) response = client.chat_postMessage(channel='#test', thread_ts=ts_id, text="テスト : "+str(i))
メンションをつけることもできます。
textの項目に<@(メンバーID)>という形を入力するとメンションすることができます。
メンバーID の取得方法はまず、Slack画面右上のユーザーをクリックします。
すると次の画面が開くと思います。

その他をクリックします。
開かれた画面の一番下にメンバーIDをコピーとありますので、このIDが使うメンバーIDになります。

実際にメンションをつけるサンプルを組んでみます。
from slack import WebClient SLACK_API_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' client = WebClient(token=SLACK_API_TOKEN) response = client.chat_postMessage(channel='#test', text="<@UZZZZZZZ> メンション") print(response)
メンションがついた状態でメッセージが飛んでくると思います。
最後に
PythonからSlackにメッセージを投げてみました。
Pythonのpackageを使うと簡単にメッセージを投げることができました。
他のプログラムと組み合わせることで、情報をSlackにまとめるという使い方もできそうです。
以上、「PythonからSlackに通知を送ってみる!」でした。
最後までご覧頂き、ありがとうございます。