ゼロからSlack POST API


別に記事にするほどのことでもないんですが。
SlackにPOStするやつを準備するとき無駄に手間取ったので、まとめておきます。

前準備

複数人がいるワークスペースだと間違えて#generalとかに流してしまう可能性があるので、
専用のワークスペースを作るのもアリだと思います
Slack ワークスペースを作成するが参考になりそうです)

アプリ作成

https://api.slack.com/ にアクセス

「Start Building」ボタンをクリック


アプリ名とアプリを使うワークスペースを選択し、「Create App」を押す

Webhook登録


「Incoming Webhook」を押す


「off」を「on」に変えて、


ページ下部の「Add new Webhook to Workspace」を押す


とりあえずアプリをワークスペースにインストールします
メッセージの投稿先は#generalにしました
専用のワークスペースではない場合は自分へのDMにしても良いと思います


これで登録は完了です!
ページ下部にあるcurlコマンドを実行すると、

こんな感じのメッセージが来ます。

<補足>
僕はWindows環境なのですが、上のcurlコマンドをそのまま実行すると、

C:\Users\user>curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/AAAAAAAAA/AAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAA
curl: (6) Could not resolve host: application
invalid_payload

といった感じで、エラーになります。
これは、Windowsのコマンドプロンプトがシングルクォーテーション(')をうまく処理できないために起こるエラーです。(僕は原因に気づくのに10分かかりました)
僕はWSLで実行しましたが、Windowsで実行したい場合は、上のcurlコマンドを

curl -X POST -H "Content-type: application/json" --data "{'text':'TEXT'}" https://hooks.slack.com/services/AAAAAAAAA/AAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAA

と変えてください。

Linuxコマンド化

いちいちcurlするのがめんどいので、/usr/local/bin/slacknotifyに以下のようにしました。

#!/bin/bash

curl -X POST -H "Content-type: application/json" --data '{"text":"Message from VPS : '"$@"'"}' "https://hooks.slack.com/services/AAAAAAAAA/AAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAA" -kLso /dev/null

これで、slacknotify Message to Slackといった感じでSlackにメッセージが送れます。
僕は処理完了時の通知やアプリのフィードバック・エラーログなどに使っています。

Pythonで使うなら以下のようになります。

import requests

def feedback(message):
    headers = {
        'Content-type': 'application/json'
    }
    data = '{"text":"{}"}'.format(message)
    response = requests.post('https://hooks.slack.com/services/AAAAAAAAA/AAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAA', headers=headers, data=data)