Slack APIのキホンのキ
Slack APIの概要
Slack APIについて最初に知っておくと調べやすくなる基礎知識についてまとめる。
対象の読者
- Slack APIを使って実装することになったけど、使ったことがない方
- 主にチーム向けの機能を使っている方
Slack APIの把握しておくべきポイントを一言で言うと・・
実現したいものは、
誰が(Apporユーザー)が、どこまで(OAuth Scope)、何を(Slack APIメソッド)、どんな方法で(Slack APIorIncoming Webhook等)、どの場所(プライベートチャンネルorパブリックチャンネル)なのかを捉えられると調べやすい!
誰が(Apporユーザー)
主な登場人物は、2つである。
例えば、メッセージの自動投稿を実装する際、作成したApp(Bot)として投稿したいのか、ユーザーからの発信としてお知らせしたいのか考えよう。
App(Bot)ユーザー
どこまで(OAuth Scope)
誰が(Apporユーザー)によって権限(OAuth Scope)の付与先が異なってくる。
-
App(Bot)- 💁♂️
Bot User OAuth Access Tokenに必要なスコープを付与
- 💁♂️
-
ユーザー- 💁♂️
User OAuth Access Tokenに必要なスコープを付与
- 💁♂️
【Q】メッセージ投稿機能のAppを作成したのち、User OAuth Access Token(=ユーザーとしての振る舞い)に必要なスコープを付与してAPIリクエストをするとどうなる?
【A】App(Bot)としてメッセージが投稿されるのではなく、トークンを発行した特定のユーザーの名前とアイコンで行われる。(どのユーザーとしてメッセージ投稿されるかは、そのUser OAuth Access Tokenを発行したユーザーに依存する。)
何を(Slack APIメソッド)
様々ある!
chat.postMessageメソッドを使って、特定のチャンネルやユーザーにメッセージを送信したり、users.lookupByEmailメソッドを使って、メールから個人メンションするためのユーザIDを取得したりなど。
どんな方法で(Slack APIorIncoming 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