Slackにincoming webhook経由でpythonからメッセージをPOSTする

  • 84
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Slack + WebHook による投稿について

SlackではWebHook用URLを取得することで、簡単にPythonスクリプトからメッセージを投稿することができます。

Slackには、比較的単純なメッセージに使用するmessageと複雑なメッセージの形式を表現できるattachmentsが存在します。
Pythonを使用し上記両方のフォーマットでslackに投稿する仕組みについて説明します。

Incoming WebHookの設定

SlackのIncoming WebHookの設定ページで投稿用URLを発行します。

チャンネルを選択して、Add Incoming WebHooks Integrationボタンをクリックします。
スクリーンショット 2015-06-22 18.47.17.png

表示されるWebhook URLをコピーしておきます
スクリーンショット 2015-06-22 18.48.30.png

(オプショナル)必要な場合はデフォルトの投稿設定を変更できます。

項目 説明
Customize Name 投稿時のデフォルトユーザ名
Customize Icon 投稿時のデフォルトアイコン

修正した場合は、Save Settingsで修正を保存しておきます。

スクリーンショット 2015-06-22 18.52.30.png

PythonからSlackへ投稿

slackwebをインストール

WebHookで簡単に投稿を行うことが可能なslackwebをpip経由でインストールします。

sudo pip install slackweb

単純なメッセージの送信

slackwebを使用することで以下のようにメッセージを送信できます。
ここで省略されたフィールドはデフォルトのものが使用されます。

> import slackweb
> slack = slackweb.Slack(url="<コピーしたURL>")
> slack.notify(text="This is a test.")

スクリーンショット 2015-06-22 19.31.17.png

notifyメソッドの引数を修正することで、部屋やアイコン、ユーザ名を修正したり、簡易的なマークダウン記法を使用することができます。(詳細について知りたい方はMessage Formattingを参照してください。)

> slack.notify(text="This is a *test*.", channel="#coffee", username="coffee-bot", icon_emoji=":coffee", mrkdwn=True)

スクリーンショット 2015-06-22 19.33.46.png

複雑なメッセージの送信

attachmentsの形式を使用することで複雑なメッセージを送ることもできます。

> attachments = []
> attachment = {"title": "Sushi",
                "pretext": "Sushi _includes_ gunkanmaki",
                "text": "Eating *right now!*",
                "mrkdwn_in": ["text", "pretext"]}
> attachments.append(attachment)
> slack.notify(attachments=attachments)

スクリーンショット 2015-06-22 19.38.57.png

詳細については、Attachmentsを参照してください。

参考にしたサイト

slack - incoming-webhooks