ゼロからSlack POST API

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

# 前準備
複数人がいるワークスペースだと間違えて#generalとかに流してしまう可能性があるので、
専用のワークスペースを作るのもアリだと思います
（[Slack ワークスペースを作成する](https://slack.com/intl/ja-jp/help/articles/206845317-Slack-%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)が参考になりそうです）

# アプリ作成
https://api.slack.com/ にアクセス
![Screenshot_2019-12-01 Slack API(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/c0f2167a-20cb-5b5b-dbc5-81f38a591f88.png)
「Start Building」ボタンをクリック

![Screenshot_2019-12-01 Slack API Applications Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/9b3f1169-d2e0-4707-0ee8-83bcb498f61a.png)
アプリ名とアプリを使うワークスペースを選択し、「Create App」を押す

# Webhook登録
![Screenshot_2019-12-01 Slack API Applications Application Log Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/006f1c56-d122-39be-7622-ae1f7fe4e4f7.png)
「Incoming Webhook」を押す

![Screenshot_2019-12-01 Slack API Applications Application Log Slack(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/805200ea-bb72-ae69-b5ea-11534db56957.png)
「off」を「on」に変えて、

![Screenshot_2019-12-01 Slack API Applications Application Log Slack(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/93e1d4aa-16c1-2c00-0ea5-ba3fca680ff4.png)
ページ下部の「Add new Webhook to Workspace」を押す

![Screenshot_2019-12-01 Test Apps が Application Log Slack ワークスペースにアクセスする権限をリクエストしています Application Log Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/afed8bf1-1299-2a67-c68d-4148bb077e01.png)
とりあえずアプリをワークスペースにインストールします
メッセージの投稿先は#generalにしました
専用のワークスペースではない場合は自分へのDMにしても良いと思います

![Screenshot_2019-12-01 Slack API Applications Application Log Slack(3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/a6443eb7-f990-db25-90d3-25a4848bafe8.png)
これで登録は完了です！
ページ下部にあるcurlコマンドを実行すると、
![Screenshot_2019-12-01 Slack general Application Log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/9a50176a-46cb-47a2-43ba-f927701e0679.png)
こんな感じのメッセージが来ます。

＜補足＞
僕は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`に以下のようにしました。

```bash
#!/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で使うなら以下のようになります。

```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)
```