HTML・CSS・Javascriptなどのメモブログ│CODE-LIFE

WEB製作の仕事を始めたMaruのhtml・CSS・jsメモブログ。たまにExcelVBAの話もでます。

4行でPythonからSlackへ投稿する(着信 Web フック)

f:id:maru0014:20180516215325p:plain

色々な通知をするのにも超便利なSlack。

会社のSlackでもIFTTTから自動投稿させたりしていますが、Pythonでいろいろ業務を自動化していくにあたって「自動業務が完了したよ!」をSlackに通知してほしいと思い調べたところ思いの外簡単だったのでサクッとメモしておきます。

前準備Slackに着信Webフックをインテグレーション

SlackのAppディレクトリで「hooks」と検索すると「着信 Web フック」というのが出てくるはず。

f:id:maru0014:20180516214011p:plain


チャンネルを選択して追加します。

f:id:maru0014:20180516214059p:plain


そうすると以下のような画面になり「webhook URL」が生成される。 f:id:maru0014:20180516214232p:plain


説明や名前は投稿ごとに変えることも可能ですが、デフォルトで使うものを設定しておきましょう。 f:id:maru0014:20180516214422p:plain


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,  # 名前をリンク化(省略可)
}))