Slack Appを作成し、Bot Userとして、任意のチャネルに投稿する(Slackの設定 & curlコマンド)


概要

この記事では、以下の2点を扱います:

  1. プログラムからSlackに投稿するために必要なSlackの設定
  2. 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

前作業:投稿したいワークスペースにブラウザでログインしておくことで、スムーズに運びました

  1. https://api.slack.com/apps?new_app=1 にアクセス
    • 名前とワークスペースを指定してAppを作成
  2. 1で作ったアプリの設定画面が表示されます。左側の FeaturesBot User という項目から Bot Userとして追加
    • Bot User名を指定する
  3. 左側の SettingsInstall App という項目から ワークスペースにAppをインストール
    • インストール後に表示される Bot User OAuth Access Token をこの後使います12

curlで投稿する

Slackのドキュメント https://api.slack.com/web のサンプルにならって、curl3で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チャネルだけとアクセス権限が狭められるという利点があるかもしれません(詳しく調べてはいませんが)。


  1. トークンの確認や、Slack App の管理は、https://api.slack.com/apps にアクセスすることで行えるようです 

  2. この記事では使っていない「OAuth Access Token」ですが、Slack Web APIを呼び出す際に使いました(Testerに設定したり、URLのクエリに渡したりします) 

  3. curlはOSに合わせてインストールしてください。ここでは詳細には立ち入りませんが、macOS環境にはbrew(Homebrew)でインストールしました。例えば、Ubuntuにはaptでインストールすることになると思います