SlackAppのOAuth & Permissionsとscope設定

SlackAppの設定で最初につまずいたのがOAuth & Permissions」の「scope(スコープ)だったので、scopeの設定について説明したいと思います。

 

scope(スコープ)とは?

SlackAppのscopeとは、コードを書くとき、その関数にのみ与えられる権限という理解で大丈夫だと思います。

 

まず、SlackAppは権限を与えないと何もできません。

投稿を読みこむことも、投稿することも、リアクションを読むことも、リアクションすることも、全て各権限の許可をしてあげないと動作しない仕様です。

 

そのため、投稿したり、リアクションしたりといったscopeという権限をSlackAppに与えてあげる必要があります

 

でも、「自分がしたいことをするために何の権限を与えたらいいのか」が分からないと権限も与えられないですよね。

ここで私はすごくつまずきました…。

 

Slackのメソッドを確認する

そこで、Slack側が用意してくれているメソッドの中に書いてくれているscopeを確認するといいです。

api.slack.com

 

初心者にとっては「いやメソッド(method)ってなに?」って感じだと思うんですが、簡単にいうと、これをしてくれってSlackAppにお願いするための決まりのようなものかなーと思ってます。

 

SlackAppは当然一人でに何かできるわけではないので、「これをしてくれ!」と頼む必要があり、そのときに呼び出す方法がメソッドになるわけです。

※ちゃんとした説明はほかの方のを見てください…!

 

とりあえずやってみたほうが早いと思うので、実際見てみましょう!

 

Slackのメッセージを取得したい場合のscope

例えば、Slackのメッセージを取得してスプレッドシートに自動で記載したい場合、SlackAppにメッセージを取得してもらわないといけないですよね。

 

今回は投稿を読み込みたいので、「Web API methods | Slack」で「history(履歴)」と検索してみましょう。

 

見たいのはメソッドなので、「Methods」をクリックします。

 

 

説明に「Fetches a conversation's history of messages and events.(会話のメッセージとイベントの履歴を取得します。)」とある通り、今回は投稿の履歴を見たいので「conversations.history」をクリックします。

 

 

見てみると、「Required scopes(必須スコープ)」が書いてありますね!

 

このscopeの権限をSlackAppに与えれば、botが「conversations.history」のメソッドを使えるようになり、メッセージを取得できるようになります!

 

ちなみに

昔は「conversations.history」ではなく、「channels.history」だったらしいんですけど、現在「channels.history」は廃止されているようです。

※「channels.history」はリプライの履歴も拾えたようなんですが、「conversations.history」ではできません…。

 

日本人からするとconversations(会話)ってなかなか馴染みがないというか、Slackだしposting(投稿)やmessage(メッセージ)じゃないのかって感じですけど、Slackのメソッドだとconversations(会話)みたいです…!

messageはEvent APIで使用しているので、メソッドは別のものを割りあたたのだと思いますが…。

 

Required scopes(必須スコープ)はどれを使えばいい?

「Required scopes」になにやらたくさんscopeが書いてありますが、どれを使用するかはメッセージをやりとりしているチャンネルによって異なります。

ここも参考にしたサイトに書いていなくて困ったので、覚えておくといいと思います。

  • 公開チャンネル:channels
  • プライベートチャンネル:groups
  • ダイレクトメッセージ:im
  • 複数人とのダイレクトメッセージ:mpim

 

bot token」と「user token」とは?

SlackAppはbotを動かすことも、ユーザーを動かすこともできます。

botbot自身がメッセージを投稿したり、リアクションしたりするのを想像するとわかりやすいと思います。

ユーザーを動かすというのはSlackAppが@takanashiでメッセージを投稿したり、リアクションしたりするということです。

ユーザーの指定はGAS側のコードで指定します。

 

 

今回はscopeの話でした。

メソッドもそうですが、使ってみないとなかなかピンとこないと思います…!

とりあえずbotを動かしてみたい方はこちらを参考にしてみてください!

 

gasbeginner.hatenablog.com