Slack APIとは
Slack APIは、Slackプラットフォーム内でカスタムアプリ、インテグレーション、自動化を作成するためのツールとサービスのセットです。Slack APIを使用することで、Slackの機能を拡張するためのカスタムソリューションを構築し、チームのコミュニケーションをより効果的に行い、ワークフローをスムーズにし、生産性を向上させることができます。
Slack APIには、次のような異なるコンポーネントを備えており、Slackプラットフォームの様々な側面とやり取りすることができます。
- メッセージの送受信
- チャネル、グループ、ダイレクトメッセージの作成と管理
- ユーザーとのやり取り、ユーザー情報やプレゼンスステータスの取得
- ブロックキットを使用したインタラクティブなメッセージやインターフェースの作成
- イベントAPIを使用したリアルタイムイベント駆動型アプリケーションの作成
- Incoming Webhookを使用した外部サービスやデータの統合
APIの種類
Slack APIは、Slackエコシステム内の特定の目的や機能に合わせて複数のコンポーネントに分かれています。Slackアプリを最大限に活用するためには、これらの異なるAPIタイプを理解することが重要です。
-
Web API
Slackプラットフォームのチャネル、ユーザー、メッセージなどのさまざまな側面とやり取りするためのHTTPベースのメソッドのコレクションです。Web APIは主にSlackデータのクエリと管理に使用されます。 -
Events API
Slackワークスペース内で発生するイベントを受信して応答するリアルタイムのイベント駆動型APIです。このAPIは、ユーザーのアクションやメッセージに反応するダイナミックでインタラクティブなアプリケーションを作成するために役立ちます。 -
Conversations API
チャネル、ダイレクトメッセージ、グループメッセージの管理ややり取りに焦点を当てたAPIメソッドのセットです。Conversations APIは、Slackの異なるタイプの会話を統一的に扱うために設計されています。 -
Block Kit
Slackでリッチでインタラクティブなメッセージやアプリインタフェースを構築するためのUIフレームワークです。Block Kitを使用することで、ユーザー入力やイベントに基づいて動的に更新される視覚的に魅力的でインタラクティブなメッセージを作成できます。
トークンと権限
トークンは、SlackアプリがSlack APIとやり取りするために認証および認可するために必要なものです。主に2種類のトークンがあります。
-
ボットトークン
ユーザーの代わりにアクションを実行したりデータにアクセスしたりするためのボットの一意の識別子です。ボットトークンは、OAuthスコープの特定のセットに関連付けられており、ボットがワークスペース内でどのような権限を持つかを定義します。 -
ユーザートークン
ワークスペース内の特定のユーザーのための一意の識別子であり、アプリがそのユーザーの代わりにアクションを実行したりデータにアクセスしたりするために使用されます。ユーザートークンは、ユーザーのOAuthスコープに関連付けられており、アプリがそのユーザーに特定のアクションやデータにアクセスすることができるようにします。
Slackアプリを構築する際には、正しく機能するために必要なOAuthスコープを指定する必要があります。これらのスコープによって、アプリが持つ権限と実行できるアクションが決まります。可能なセキュリティリスクを最小限に抑えるために、必要なスコープのみを要求することが重要です。
トークンを取得し、権限を管理するには、アプリのOAuth 2.0をセットアップする必要があります。このプロセスには、次の手順が含まれます。
- Slack APIウェブサイトでアプリを作成
- リダイレクトURL、スコープ、インストールオプションなど、アプリのOAuth設定を構成
- アプリでOAuth 2.0フローを実装し、ユーザーがアプリを認証および認可できるようにする
- トークンのストレージとリフレッシュを処理し、アプリがユーザーのために有効なアクセストークンを保持するようにする
Incoming Webhooks
Incoming Webhooksは、外部ソースからSlackワークスペースにメッセージを送信するためのシンプルで効率的な方法です。これにより、アプリまたはサービスからデータ、通知、および更新を直接特定のSlackチャンネルまたはユーザーにプッシュできます。これらのWebhookは、サードパーティのサービスと統合したり、ワークフローを自動化したり、リアルタイムの更新でチームを常に最新の情報に保つために特に有用です。
Incoming Webhookのセットアップ
Incoming Webhookをセットアップするには、次の手順に従います。
- Slack APIウェブサイトのYour Appsセクションにアクセスし、新しいアプリを作成
- アプリに名前を付け、展開するワークスペースを選択
Add features and functionality
セクションで、Incoming Webhooks
をクリックします。- スイッチをトグルして、Incoming Webhooksをアクティブにし、
Add New Webhook to Workspace
をクリックします。 - メッセージを投稿するチャンネルを選択し、
Authorize
をクリックします。 - 生成されたWebhook URLをコピーして、将来の使用のために保存します。
Webhookを使用したメッセージの送信
Webhook URLを手に入れたら、選択したSlackチャンネルにシンプルなHTTP POSTリクエストを使用してメッセージを送信できます。Python、JavaScript、cURLなどのHTTPリクエストを行うことができるプログラミング言語またはツールを使用できます。メッセージペイロードには、メッセージコンテンツを表すtextフィールドを含むJSONオブジェクトを使用する必要があります。
以下はPythonを使用した例です。
import requests
import json
webhook_url = "YOUR_WEBHOOK_URL"
message = "Hello, World!"
payload = {"text": message}
response = requests.post(webhook_url, data=json.dumps(payload), headers={"Content-Type": "application/json"})
if response.status_code != 200:
raise ValueError(f"Request to Slack returned an error {response.status_code}, the response is:\n{response.text}")
Webhookメッセージのカスタマイズ
Webhookメッセージを、JSONペイロード内の追加フィールドを使用してカスタマイズできます。
username
メッセージに表示される送信者の名前を変更icon_emoji
またはicon_url
送信者のアイコンを変更attachments
画像、ボタン、またはインタラクティブな要素などのリッチコンテンツを追加blocks
SlackのBlock Kitを使用して、高度でインタラクティブなメッセージレイアウトを作成
例えば、カスタムユーザー名とアイコンを使用してメッセージを送信するには、次のようにします。
{
"username": "My Custom Bot",
"icon_emoji": ":robot_face:",
"text": "Hello, World!"
}
Slackボット
Slackボットは、ユーザーと対話し、Slackプラットフォーム内でタスクを実行する自動化アプリケーションです。生産性を向上させ、ワークフローを自動化し、さまざまなサービスや統合を提供するために使用できます。Slack APIを使用すると、チームの特定のニーズに合わせたカスタムボットを作成でき、リアルタイムでイベント、メッセージ、およびコマンドに応答できます。
最初のボットの作成
Slackボットを作成するには、次の手順に従います。
- Slack APIウェブサイトの
Your Apps
セクションにアクセスし、新しいアプリを作成 - アプリに名前を付け、デプロイするワークスペースを選択
Add features and functionality
セクションで、Bots
をクリックAdd a Bot User
をクリックして、ボットの表示名とデフォルトのユーザー名を定義- ボットに必要なスコープを追加するために、
OAuth & Permissions
セクションに移動 Install App
をクリックして、アプリを承認し、ボットトークンを取得
ボットの権限とスコープ
ボットを構成する際に必要なOAuthスコープを指定する必要があります。これにより、ボットが持つ権限と実行できるアクションが決まります。一般的なボットスコープには次のものがあります。
-
chat:write
ボットとしてメッセージを送信 -
channels:read
ワークスペースのパブリックチャンネルに関する情報にアクセス -
groups:read
ワークスペースのプライベートチャンネルに関する情報にアクセス -
users:read
ワークスペースのユーザーに関する情報にアクセス
潜在的なセキュリティリスクを最小限に抑えるため、必要なスコープのみを要求することが重要です。
イベントとコマンドの処理
ユーザーと対話し、リアルタイムでイベントに応答するために、ボットは特定のイベントとコマンドをリッスンして処理する必要があります。これは、Slack Events APIと次の手順を使用して実現できます。
- アプリの
Event Subscriptions
セクションで、イベントを有効にし、サーバーのリクエストURLを指定 - ボットが処理する必要のあるイベントにサブスクライブ(
message.channels
、app_mention
、reaction_added
など) - サーバー上にイベントリスナーを実装し、Slackからの受信イベントを受信して処理
例えば、Flask Webフレームワークを使用したシンプルなPythonイベントリスナーは、次のようになります。
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
@app.route("/slack/events", methods=["POST"])
def handle_event():
payload = json.loads(request.data)
event = payload.get("event", {})
if event.get("type") == "app_mention":
# Handle mention event
pass
elif event.get("type") == "message" and event.get("subtype") != "bot_message":
# Handle message event
pass
return jsonify({"status": "ok"})
if __name__ == "__main__":
app.run()
参考