概要
この記事では、以下の2点を扱います:
- プログラムからSlackに投稿するために必要なSlackの設定
-
curl
コマンドでSlackの任意のチャネルに投稿する
動作環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.4
BuildVersion: 18E226
$ curl --version
curl 7.54.0 (x86_64-apple-darwin18.0) libcurl/7.54.0 LibreSSL/2.6.5 zlib/1.2.11 nghttp2/1.24.1
(以下略)
Slackの設定
slackapi/python-slackclientのドキュメントがわかりやすかったです。
https://github.com/slackapi/python-slackclient/blob/master/tutorial/01-creating-the-slack-app.md
前作業:投稿したいワークスペースにブラウザでログインしておくことで、スムーズに運びました
-
https://api.slack.com/apps?new_app=1 にアクセス
- 名前とワークスペースを指定してAppを作成




curl
で投稿する
Slackのドキュメント https://api.slack.com/web のサンプルにならって、curl
1でSlackに投稿してみます。
- 投稿先チャネル:#experiments(
--data
に指定したJSONのchannel) - 投稿内容:Slack post by curl(
--data
に指定したJSONのtext)
$ curl -X POST -H 'Authorization: Bearer xoxb-1234-56789abcdefghijklmnop' \
-H 'Content-type: application/json' \
--data '{"channel":"experiments","text":"Slack post by curl"}' \
https://slack.com/api/chat.postMessage
※1つ目のヘッダ(-H
)はxoxb-...nop
の部分を、上でインストールしたAppのBot User OAuth Access Tokenに置き換えます
日本語でも投稿できました。

Incoming Webhookと何が違うのか
プログラムからSlackに投稿する仕組みとしては Incoming Webhook も知られています。
設定方法は例えば、以下のドキュメントが参考になります:https://api.slack.com/messaging/webhooks
Incoming Webhookのイメージは、「特定のチャネル に投稿できるURL」です。
そこに投稿内容のJSONをPOSTすることで投稿されます。
この記事で扱ってきたBot Userとの違いは、Bot Userであれば投稿するチャネルを任意に変えられることと考えています。
上記のcurlコマンドで投稿先チャネルの指定を変えることで、簡単に他のチャネルに投稿できます(#generalに変える例を示します)。
$ curl -X POST -H 'Authorization: Bearer xoxb-1234-56789abcdefghijklmnop' \
-H 'Content-type: application/json' \
--data '{"channel":"general","text":"Slack post by curl"}' \
https://slack.com/api/chat.postMessage
ただ、私自身そこまでSlackのAPIを使い込んでいるわけではありませんので、Incoming Webhookでしかできないことがあればコメントなどで教えていただけると嬉しいです。
追伸
Bot Userはどのチャネルにも投稿できる分、広い範囲へのアクセス権限が与えられます。
それに対しIncoming Webhookは、1チャネルだけとアクセス権限が狭められるという利点があるかもしれません(詳しく調べてはいませんが)。
-
curlはOSに合わせてインストールしてください。ここでは詳細には立ち入りませんが、macOS環境には
brew
(Homebrew)でインストールしました。例えば、Ubuntuにはapt
でインストールすることになると思います ↩