By Shay DeWael
この記事には古い情報が含まれています、最新の情報は日本語版ページの記事一覧からお探しください。
(注)この記事は 2019 年 3 月に掲載されたものです。記事中に出てくる rtm.start API は非推奨となり rtm.connect API に移行が必要となりました。また channels.*
API は conversations.*
API で置き換えられています。この記事を読まれる場合は、これらの点にご注意ください。
Slack で最もよく使われる 3 つの API は、あらゆる種類のアプリを開発するのに役立ちます。それぞれの API には、アプリの用途に応じてメリットがあります。例えば、イベントの通知が必要なアプリ、Slack チャンネルから情報を引き出すアプリ、送られてくるすべてのイベントをチーム内にストリーミングするアプリ、といった様々な用途です。
この記事では、Slack の Web API、Events API、RTM API について説明し、それぞれの一般的な使用例や、使い始めるためのヒントを紹介します。また、次の簡単なフローチャートを使って、あなたのアプリに最適な API を知ることもできます。
どの Slack API でも、channel、file、group、im、mpim、user、usergroup という 7 つのコアオブジェクトを使用します。
これらのオブジェクトには、チームのリソースに対応する情報が含まれます。リソースの履歴の読み取り、書き込み、アクセスを行うには、Slack アプリがオブジェクトの OAuth スコープ をサブスクライブしている必要があります。
インストール時に これらのスコープに対する許可がアプリに与えられると、必要なリソースにアクセスするための API を使用できるようになります。これらのオブジェクトや対応するリソースについての詳細は、オブジェクトタイプについてのドキュメンテーション をご覧ください。
Web API は、Slack 上でリッチなインタラクティブ・メッセージを送信する主な手段です。この API は、同様の呼び出し規則に基づく HTTP メソッドで構成されています。それらのメソッドを呼び出して、Slack とデータをやり取りすることができます。メソッドは、Slack チャンネルやファイル、絵文字リアクションまで、Bearer token (ベアラートークン)を検証方式として使用するものすべてを操作できるよう設計されています。
参考となるリンク:Web API documentation, Web API supported methods, Node Slack SDK, Python Slack SDK, Ruby Slack Client, Sample Message Menus in Node (or Ruby!), Sample App Unfurls in Node
Events API は、イベント情報のサブスクリプションを使用して JSON ペイロードをサーバーに送信します。サーバーではペイロードの受信を行い、どのように応答するか (独自の API、Slack の API、その他の API のどれを呼び出すか) を決めます。Slack アプリの設定ページから、チームとボットユーザーのイベントをサブスクライブできます。
参考となるリンク:Events API documentation, Events API supported events, Events API Node module, Events API Python adapter, Sample Onboarding Bot in Node(or Python!)
RTM (リアルタイムメッセージング) API は WebSocket を使用し、イベントを受信して Slack に簡単なメッセージを送信できます。rtm.connect
または rtm.start
を使って Web API にリクエストを送信すると、RTM API は接続されているすべてのクライアントにイベントのストリームを送信します。これは、(特に、アプリが複数の Slack チームや大規模な Slack チームにインストールされている場合) リソースを大量に使用することがあります。
参考となるリンク:RTM API documentation, Node Slack SDK, Python Slack SDK, Ruby Slack Client
ほとんどの Slack アプリは、Web API を使ってメッセージなどの情報を Slack に送信します。しかし、Slack API を使い始めたての開発者は、イベントペイロードの取得に RTM API と Events API のどちらを使用するか迷うかもしれません。
一般的に、一部の例外的な状況 (ファイアーウォール内側のインターナルインテグレーションなど) を除き、Events API を使用することをお勧めします。RTM API を使用すると、接続済み WebSocket を介して大量の不要な情報をサーバーに送信してしまうことがあります。この点は、複数のクライアントが接続している場合や、大規模なチームがアプリを使用する場合に特に重要です。
Events API は比較的新しい API であり、サブスクリプションモデル を使用します。サーバーはアプリにとって重要な情報だけを受信し、アプリが機能するのに必要な権限スコープだけをサブスクライブします。アプリで RTM API を使用するか迷っているなら、上記のフローチャートを確認するか、Slack API FAQ をご覧ください。
何かお困りのことがあれば、Twitter をご利用いただくか、メールで開発者サポートチーム (feedback@slack.com) にお問い合わせください。開発を楽しみましょう!🎉
原文 Which API is right for your Slack app? by Shane DeWael