Slack APIのキホンのキ
Slack APIの概要
Slack APIについて最初に知っておくと調べやすくなる基礎知識についてまとめる。
対象の読者
- Slack APIを使って実装することになったけど、使ったことがない方
- 主にチーム向けの機能を使っている方
Slack APIの把握しておくべきポイントを一言で言うと・・
実現したいものは、
誰が(App
orユーザー
)が、どこまで(OAuth Scope
)、何を(Slack APIメソッド
)、どんな方法で(Slack API
orIncoming Webhook
等)、どの場所(プライベートチャンネル
orパブリックチャンネル
)なのかを捉えられると調べやすい!
App
orユーザー
)
誰が(主な登場人物は、2つである。
例えば、メッセージの自動投稿を実装する際、作成したApp(Bot)
として投稿したいのか、ユーザー
からの発信としてお知らせしたいのか考えよう。
App(Bot)
ユーザー
OAuth Scope
)
どこまで(誰が(App
orユーザー
)によって権限(OAuth Scope
)の付与先が異なってくる。
-
App(Bot)
- 💁♂️
Bot User OAuth Access Token
に必要なスコープを付与
- 💁♂️
-
ユーザー
- 💁♂️
User OAuth Access Token
に必要なスコープを付与
- 💁♂️
App
を作成したのち、User OAuth Access Token
(=ユーザーとしての振る舞い)に必要なスコープを付与してAPIリクエストをするとどうなる?
【Q】メッセージ投稿機能の【A】App(Bot)
としてメッセージが投稿されるのではなく、トークンを発行した特定のユーザーの名前とアイコンで行われる。(どのユーザーとしてメッセージ投稿されるかは、そのUser OAuth Access Token
を発行したユーザーに依存する。)
Slack APIメソッド
)
何を(様々ある!
chat.postMessage
メソッドを使って、特定のチャンネルやユーザーにメッセージを送信したり、users.lookupByEmail
メソッドを使って、メールから個人メンションするためのユーザIDを取得したりなど。
Slack API
orIncoming Webhook
等)
どんな方法で(Slack APIメソッドを使うには、主に以下の方法がある。
体感としては1と2をよく使っている。
-
Slack API:Slack APIを直接利用して、HTTPリクエストを送信し、さまざまな操作を行う方法。
- 💁♂️なんでもできるイメージ
-
Incoming Webhook:特定のチャンネルにメッセージを送信するためのURLを利用する方法。シンプルなメッセージ送信に特化。
- 💁♂️Slack APIの一部(シンプルなメッセージ投稿)を簡単にできるイメージ
-
Events API:ユーザーがメッセージを投稿したときに特定のアクションを実行する場合などリアルタイムでイベントを受け取るための方法。(ユーザーの参加や退出を監視するなど)
- 💁♂️メッセージに反応してアクションを実行したいときに使うイメージ
-
Socket Mode:WebSocketを利用したスラックのイベントをリアルタイムで受け取る方法。(チャットボットがリアルタイムでユーザーのメッセージに反応するなど)※セットアップが容易なのでEvents APIの代替として使用されることが多い。
- 💁♂️Events APIよりもセットアップ容易に、メッセージに反応してアクションを実行したいときに使うイメージ。
-
Slash Commands:ユーザーがチャットに特定のコマンドを入力してアクションをトリガー。外部のサービスやアプリケーションと連携する方法。
- 💁♂️その名の通りメッセージにスラッシュをつけた自作コマンドを入力してアクションをトリガーするイメージ。
-
Interactive Components:スラックのメッセージにボタンやメニューなどのインタラクティブな要素を追加し、ユーザーがそれらを操作することで特定のアクションをトリガーするための方法。
- 💁♂️ボタンなどのインタラクティブな要素を用意して、それを押したらアクションを発動させたいイメージ。
プライベートチャンネル
orパブリックチャンネル
)
どの場所で(意外とハマったのがこれ。
どの場所で行いたいのかによって権限付与の種類が変わってくるので注意!
例えば、スレッド返信の機能を実装したい時に、プライベートチャンネル
orパブリックチャンネル
によって、Bot User OAuth Access Token
あるいはUser OAuth Access Token
に付与する権限が変わった。
パブリックチャンネルの場合
chat:write
-
channels:read
← -
channels:history
←
プライベートチャンネルの場合
chat:write
-
groups:read
← -
groups:history
←
誰かの役に立てば幸いです。
間違いがあれば指摘ください!
Discussion