ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

ろきさんの備忘録。プログラミング学習記録や開発記録、および学んだ知識等のアウトプットとシェアを目的に書いています。たまに普通のことも書きます。

【意外と簡単】PythonでプログラムからSlackに通知を飛ばしてみる

スポンサーリンク

PythonでSlack通知を試したくなったので、いろいろググって試してみたら意外とあっさりできた。
その時のメモを備忘録として残しておく。

[前提]

  • Python3がインストール済み
  • Slackのワークスペース作成済み(管理者)

こんなもんかな。

Python3のインストール方法については、以前書いてみた。よかったら参考にどうぞ。

Macの場合
【切り替え可能】pyenvでPython3系とAnacondaの両方をインストール for Mac - ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

Windowsの場合
【Pythonインストール for Windows10 64bit版】環境変数PATHや実行コマンドも解説してみる - ろきメモ【ROKI MEMO】- ろきsanの備忘録 -


目次は以下の通り


スポンサーリンク



1. Webhook URLを取得する

ここにアクセスする。
https://slack.com/services/new/incoming-webhook


ブラウザでサインインすれば、管理画面になるので、
ワークスペース、チャンネルを指定して、
「Incoming Webhook インテグレーションの追加」をクリック
f:id:ahrk-izo:20191117132111p:plain:w500


これでプログラムで使うWebhook URL が取得できた。
f:id:ahrk-izo:20191117132441p:plain:w500

ここには、Webhook URL以外にも、アイコンや名前などの設定あるが、今回は特に何もしない。

2. Pythonコードを書く

任意のディレクトリに、function.py というファイルを作成。

[function.py]

import urllib.request
import json

def handler(event, _):
    message = 'テストメッセージです'
    title = 'title'
    slack_message = {
        'attachments': [
            {
                'text': message,
            }
        ]
    }

    url = '取得したWebhook URL'
    method = 'POST'
    headers = {'Content-Type': "application/json"}
    json_data = json.dumps(slack_message).encode("utf-8")

    try:
        request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
        with urllib.request.urlopen(request) as response:
            response_body = response.read().decode('utf-8')
            return response_body
    except Exception as e:
        raise e


if __name__ == '__main__':
    response_body = handler('test', '')
    print(response_body)

おそらくコピペでいけるはず。(URLのところ以外は)

3. Pythonプログラムを実行する

ターミナルで

$ python function.py
ok

あっさりSlackに送信されました。
f:id:ahrk-izo:20191117134025p:plain:w300


スポンサーリンク



4. ちょっとカスタマイズしてみる。

上記のメッセージはほんとデフォルトの感じ。
通知が無事できたらちょっと設定やプログラムコードを修正して、カスタマイズしてみる。


まず名前とアイコン。
webhookを取得した設定画面(ブラウザ)の下の方に、名前とアイコンを設定するところがあるので、修正して設定を保存する。
f:id:ahrk-izo:20191117134911p:plain:w500

もう一度プログラムを実行してみる。
f:id:ahrk-izo:20191117135448p:plain:w300
ばっちし!


次は、通知の色を指定してみる。
先程のコードのこの部分に「color」を追加する。

    message = 'テストメッセージです'
    title = 'title'
    color = '#ff0000'  # <- 追加
    slack_message = {
        'attachments': [
            {
                'text': message,
                'color': color,  # <- 追加
            }
        ]
    }


再度実行してみると、
f:id:ahrk-izo:20191117140042p:plain:w300
色がついてばっちし!

色を変えるとこんな感じ。
f:id:ahrk-izo:20191117142932p:plain:w300

せっかくプログラムで書いているので、条件分岐なので、メッセージや色を変えると便利な通知プログラムになるかも。

という感じで、最低限の通知プログラムの備忘録でした。


参考にしたサイト

とりあえずこちらでweb hookの取得方法を。
qiita.com

Pythonでの通知はこちらを参考に。
qiita.com
他のサイトでは(slack通知に使う)HTTPの使用を、requestsというモジュールを使っているが、こちらはurllib.requestを使っている。
これだと、pipなどでのインストールもいらないし、AWSのLambdaで使用したくなったとしてもこのままでいけるのでよい。

slack通知のカスタマイズはこちらを参考にした。
qiita.com
いろいろあるので試してみるとおもしろいかと。

もちろん一番は公式ドキュメントを見るとよい。
slack.com



以上。