技術情報

PythonからSlackにメッセージを送ってみる!

こんにちは、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のインストールなどがまだでしたら、次の記事などを参考にしてください。
(インストールするバージョンは変わっていますが、進め方は同じです。)

Pythonをインストールして使ってみよう! こんにちは、MSKです。今回はPythonのインストールからIDLEで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に通知を送ってみる!」でした。
最後までご覧頂き、ありがとうございます。

ABOUT ME
MSK
九州在住の組み込み系エンジニアです。 2児の父親でもあります。 数学やプログラミングが趣味です。 最近Webプログラミングと曲面結び目理論にはまっています。