Traffine I/O

日本語

2022-06-10

Slack API

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をセットアップする必要があります。このプロセスには、次の手順が含まれます。

  1. Slack APIウェブサイトでアプリを作成
  2. リダイレクトURL、スコープ、インストールオプションなど、アプリのOAuth設定を構成
  3. アプリでOAuth 2.0フローを実装し、ユーザーがアプリを認証および認可できるようにする
  4. トークンのストレージとリフレッシュを処理し、アプリがユーザーのために有効なアクセストークンを保持するようにする

Incoming Webhooks

Incoming Webhooksは、外部ソースからSlackワークスペースにメッセージを送信するためのシンプルで効率的な方法です。これにより、アプリまたはサービスからデータ、通知、および更新を直接特定のSlackチャンネルまたはユーザーにプッシュできます。これらのWebhookは、サードパーティのサービスと統合したり、ワークフローを自動化したり、リアルタイムの更新でチームを常に最新の情報に保つために特に有用です。

Incoming Webhookのセットアップ

Incoming Webhookをセットアップするには、次の手順に従います。

  1. Slack APIウェブサイトのYour Appsセクションにアクセスし、新しいアプリを作成
  2. アプリに名前を付け、展開するワークスペースを選択
  3. Add features and functionalityセクションで、Incoming Webhooksをクリックします。
  4. スイッチをトグルして、Incoming Webhooksをアクティブにし、Add New Webhook to Workspaceをクリックします。
  5. メッセージを投稿するチャンネルを選択し、Authorizeをクリックします。
  6. 生成されたWebhook URLをコピーして、将来の使用のために保存します。

Webhookを使用したメッセージの送信

Webhook URLを手に入れたら、選択したSlackチャンネルにシンプルなHTTP POSTリクエストを使用してメッセージを送信できます。Python、JavaScript、cURLなどのHTTPリクエストを行うことができるプログラミング言語またはツールを使用できます。メッセージペイロードには、メッセージコンテンツを表すtextフィールドを含むJSONオブジェクトを使用する必要があります。

以下はPythonを使用した例です。

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ボットを作成するには、次の手順に従います。

  1. Slack APIウェブサイトのYour Appsセクションにアクセスし、新しいアプリを作成
  2. アプリに名前を付け、デプロイするワークスペースを選択
  3. Add features and functionalityセクションで、Botsをクリック
  4. Add a Bot Userをクリックして、ボットの表示名とデフォルトのユーザー名を定義
  5. ボットに必要なスコープを追加するために、OAuth & Permissionsセクションに移動
  6. Install Appをクリックして、アプリを承認し、ボットトークンを取得

ボットの権限とスコープ

ボットを構成する際に必要なOAuthスコープを指定する必要があります。これにより、ボットが持つ権限と実行できるアクションが決まります。一般的なボットスコープには次のものがあります。

  • chat:write
    ボットとしてメッセージを送信

  • channels:read
    ワークスペースのパブリックチャンネルに関する情報にアクセス

  • groups:read
    ワークスペースのプライベートチャンネルに関する情報にアクセス

  • users:read
    ワークスペースのユーザーに関する情報にアクセス

潜在的なセキュリティリスクを最小限に抑えるため、必要なスコープのみを要求することが重要です。

イベントとコマンドの処理

ユーザーと対話し、リアルタイムでイベントに応答するために、ボットは特定のイベントとコマンドをリッスンして処理する必要があります。これは、Slack Events APIと次の手順を使用して実現できます。

  1. アプリのEvent Subscriptionsセクションで、イベントを有効にし、サーバーのリクエストURLを指定
  2. ボットが処理する必要のあるイベントにサブスクライブ(message.channelsapp_mentionreaction_addedなど)
  3. サーバー上にイベントリスナーを実装し、Slackからの受信イベントを受信して処理

例えば、Flask Webフレームワークを使用したシンプルなPythonイベントリスナーは、次のようになります。

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()

参考

https://api.slack.com/
https://api.slack.com/messaging/webhooks
https://api.slack.com/bot-users

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!