1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-11-09

概要

この記事では、以下の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で作ったアプリの設定画面が表示されます。左側の **Features** の *Bot User* という項目から Bot Userとして追加 - Bot User名を指定する 3. 左側の **Settings** の *Install App* という項目から ワークスペースにAppをインストール Appのインストールを許可する画面 - インストール後に表示される **Bot User OAuth Access Token** をこの後使います[^1][^3] slack_bot_user_tokens.png

curlで投稿する

Slackのドキュメント https://api.slack.com/web のサンプルにならって、curl1で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に置き換えます

日本語でも投稿できました。

experimentsチャネルに英語でも日本語でも投稿

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?