色々な通知をするのにも超便利なSlack。
会社のSlackでもIFTTTから自動投稿させたりしていますが、Pythonでいろいろ業務を自動化していくにあたって「自動業務が完了したよ!」をSlackに通知してほしいと思い調べたところ思いの外簡単だったのでサクッとメモしておきます。
前準備Slackに着信Webフックをインテグレーション
SlackのAppディレクトリで「hooks」と検索すると「着信 Web フック」というのが出てくるはず。
チャンネルを選択して追加します。
そうすると以下のような画面になり「webhook URL」が生成される。
説明や名前は投稿ごとに変えることも可能ですが、デフォルトで使うものを設定しておきましょう。
Pythonから投稿してみる
最小構成4行
import requests import json webhook_url = "ここにWebhook URL" # webhook URLをここに記述 requests.post(webhook_url, data=json.dumps({'text': 'ここに投稿メッセージ'}))
たったこれだけでした。超簡単!
もしImportError: No module named requests
などのエラーが出た場合はrequestsがインストールされていません。
pipでインストールして再度試してみましょう。
$ pip install requests
または
$ python -m pip install requests
でインストールできるはず。
その他いろいろなオプションを設定可能
投稿するチャンネルもBotの名前もアイコンも投稿時に指定可能。これで何個も何個もSlack側の設定を追加する必要はなさそうです。
import requests import json webhook_url = "ここにWebhook URL" requests.post(webhook_url, data=json.dumps({ 'text': 'ここにメッセージ改行は\nででできます', # 投稿内容 'channel': "#other-channel", #投稿チャンネルの変更可能。ダイレクトメッセージの場合'channel': '@username'のように記述(省略可) 'username': u'Python-Bot', # ユーザー名(省略可) 'icon_emoji': u':snake:', # アイコン(省略可) 'icon_url': "https://slack.com/img/icons/app-57.png", # アイコン画像(省略可) 'link_names': 1, # 名前をリンク化(省略可) }))