Box Developerドキュメント

Slackの構成

Slackの構成

このガイドの最初の手順では、Slackアプリケーションを作成して構成します。このSlackアプリケーションは、SlackチャンネルでUser Eventをリッスンするボットとして機能し、そのチャンネルでユーザーが入力したスラッシュコマンドに応答します。これにより、ユーザーはBox上のファイルやフォルダをグループと共有できます。

このセクションでは、以下の手順を説明します。

  • Slack APIダッシュボード内で最小限のSlackアプリケーションを作成します。
  • ユーザーがチャンネルに参加したりチャンネルから退出したりするたびにBoxのアプリケーションに通知が送信されるようSlackアプリケーションを構成し、BoxのコードでBoxグループを更新できるようにします。
  • Boxのファイルやフォルダをチャンネル内のすべてのユーザーと共有できるようにする/boxaddスラッシュコマンドを構成します。

最小限のSlackアプリの作成

Go to the Slack apps page and click Create Platform App. Add an App Name, select your Development Slack Workspace from the dropdown list where the bot will be deployed to, then click Create App.

Slackアプリの作成

作成後、アプリケーションの基本情報セクションにリダイレクトされます。下部の [Display Information (情報の表示)] セクションで、作成したアプリのアイコンと説明を調整して、ワークスペースでアプリケーションをカスタマイズできます。

Slackアプリのイベントリスナーの構成

Slackアプリ用のイベントリスナーを設定すると、チャンネル内のイベントを監視できます。このボットでは、Box内で操作を実行するために、3つのSlackイベントを監視します。

  • bot_added: ボットは、最初にチャンネルに追加されたときに、チャンネル内の全ユーザーのリストを取得し、取得したユーザーのBoxグループを作成します。このグループは、スラッシュコマンドで共有される任意のコンテンツにそのグループを追加するために後で使用できます。
  • member_joined_channel: 新しいユーザーは、Slackチャンネルに参加したときにBoxグループに追加されます。
  • member_left_channel: ユーザーはSlackチャンネルから退出したときや削除されたときに、Boxグループから削除されます。

このようなSlackのイベントペイロードの送信先となる通知URLを設定するために、Slackでは確認手順が必要になります。ボットアプリケーションコードのイベントリスナーURLを設定すると、Slackは即座にそのURLにチャレンジを送信し、そのURLが有効かどうかを確認します。これは、次のようなペイロードを含むHTTP POSTです。

{
  "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
  "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
  "type": "url_verification"
}

イベントリスナーのURLを設定するには、この手順の間に、設定するURLが、チャレンジ値を含む確認用ペイロードを使用してSlackに応答する必要があります。ペイロードは次のようになります。

HTTP 200 OK Content-type: application/json {"challenge":"3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P"}

このためには、チャレンジイベントに応答する少量のコードを展開します。最初に、以下の中からお好みの言語/フレームワークを選択してください。

Node (Expressフレームワーク)

Java (Spring Bootフレームワーク)

プロジェクトディレクトリ内でnpm install express --saveを実行してExpressの依存関係をインストールし、次のコードを適切なNodeモジュールとともに公開エンドポイントに展開します。

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.post('/event', (req, res) => {
    if (
        req.body &&
        req.body.challenge &&
        req.body.type === 'url_verification'
    ) {
        res.send({
            challenge: req.body.challenge
        });
    } else {
        res.status(400).send({
            error: "Unrecognized request"
        });
    }
});

app.listen(port, function(err) {
    console.log("Server listening on PORT", port);
});

Spring Initializrは、すべての依存関係が定義された状態の新しいSpring Bootアプリケーションを自動生成するのに便利なサービスです。これは、空のJavaアプリケーションを作成する代わりに使用できます。

  • Eclipseで新しいプロジェクトを作成します。求められたら、Gradleプロジェクトを選択します。
  • プロジェクトの一意の名前を入力します。このガイドではslack.boxという名前を使用しています。
  • build.gradleファイルを開いて以下を追加します。アプリケーションに使用したグループとこのグループが一致することを確認します。保存したら、Gradleプロジェクトを更新します。
plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.box'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    compile 'com.box:box-java-sdk:2.44.1'
}

test {
    useJUnitPlatform()
}

  • src/main/javaパスに、Application.javaという名前の新しいJavaクラスファイルを作成します。
  • このファイルを開き、次のコードを追加して保存します。
package com.box.slack.box;

import org.jose4j.json.internal.json_simple.JSONObject;
import org.jose4j.json.internal.json_simple.parser.JSONParser;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class Application {
    @PostMapping("/event")
    public JSONObject challenge(@RequestBody String data) throws Exception {
        JSONObject returnJSON = new JSONObject();

        Object dataObj = new JSONParser().parse(data);
        JSONObject inputJSON = (JSONObject) dataObj;
        String challenge = (String) inputJSON.get("challenge");
        String type = (String) inputJSON.get("type");

        if (type.equals("url_verification")) {
            returnJSON.put("challenge", challenge);
        } else {
            System.err.println("Invalid input");
        }

        return returnJSON;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

前の手順が完了していません

最初に、上記の中からお好みの言語/フレームワークを選択してください。

これで、イベントURLの追加時にSlackチャレンジに応答するコードを準備できたので、これをSlackアプリケーション内で構成できます。

Slackアプリケーションの [Basic Information (基本情報)] タブの [Add features and functionality (機能の追加)] で、[Event Subscriptions (イベントサブスクリプション)] というタイトルのボタンをクリックし、以下の操作を行います。

  • [Enable Events (イベントの有効化)] を [On (オン)] に切り替えます。
  • [Request URL (リクエストURL)] で、上記のコードを展開した公開URLを追加し、{YOUR_APP_DOMAIN}/event (https://myapp.com/eventなど) でリッスンしていることに注意します。URLを追加し、フィールドの外をクリックすると、Slackはすぐに、上記でコードをホストしていたURLにチャレンジを送信します。コードが正しく応答した場合は、[Request URL (リクエストURL)] ヘッダーの横に緑色で確認済みであることが表示されます。

Slackの [Event Subscriptions (イベントサブスクリプション)] の有効化

  • [Subscribe to bot events (Bot Eventの購読)] セクションを展開し、[Add Bot User Event (Bot User Eventの追加)] ボタンをクリックします。
  • ボットが登録されているイベントにmember_joined_channelmember_left_channelを追加します。これらは、新しいユーザーがチャンネルに追加されたときにイベントを送信します。
  • ページの下部にある [Save Changes (変更を保存)] ボタンをクリックします。

Slackアプリのスラッシュコマンドの構成

Slackチャンネルの各ユーザーにBox内のファイルやフォルダへのアクセス権限を付与するために、Slackの**「スラッシュコマンド」**を使用できます。スラッシュコマンドにより、チャンネル内のどのユーザーも、Box内に所有しているコンテンツをチャンネルの他のユーザーと共有できます。

このコマンドを使用すると、チャンネルのメンバーはチャネルに/boxadd [file / folder] [id] (boxadd file 1459732312など) を入力してファイル/フォルダをそのチャンネルのすべてのユーザーと共有できます。そのために、ファイルはそのチャンネル内に存在するBoxグループのユーザーと自動的にコラボレーションされます。

作成したアプリケーションの [Basic Information (基本情報)] タブの [Add features and functionality (機能の追加)] で [Slash Commands (スラッシュコマンド)] というタイトルのボタンをクリックします。

表示されるページで、[Create New Command (新しいコマンドの作成)] をクリックして、以下の項目を入力します。

  • Command (コマンド): チャンネルユーザーがBoxのファイル/フォルダIDをチャンネルと共有するために使用するコマンドです。このクイックスタートでは、/boxaddを使用します。
  • Request URL (リクエストURL): Slackボットでスラッシュコマンドをリッスンし、そのコマンドに応答するURL。このクイックスタートでは、前述のアプリのイベントリスナーのセクションで使用したのと同じイベントURLを使用します。
  • Short Description (簡単な説明): スラッシュコマンドで実行する処理の説明。
  • Usage Hint (使用方法のヒント): このコマンドに渡すことができる追加のパラメータ。この例では、Boxのファイル/フォルダIDとコンテンツのタイプを使用します。

Slackのスラッシュコマンドの作成

[Save (保存)] をクリックして、このコマンドをSlackアプリに追加します。

その他のスコープの追加

Slackからアプリケーションに送信されるスラッシュコマンドまたは通知には、操作を行ったユーザーまたは操作の影響を受けたユーザーに関連するSlackユーザーIDが含まれます。そのIDをBoxユーザーに変換するには、Slackユーザーのメールアドレスを取得する必要があります。取得したメールアドレスを使用して、そのSlackユーザーを対応するBoxユーザーに関連付けることができます。この操作を行うには、Slackアプリケーションの構成で2つのスコープを追加する必要があります。

Slackアプリケーションの構成で、左側のメニューにある [OAuth & Permissions (OAuthと権限)] をクリックし、以下の操作を行います。

  • [Scopes (スコープ)] セクションまで下にスクロールします。
  • [Bot Token Scopes (ボットトークンのスコープ)] で [Add an OAuth Scope (OAuthスコープの追加)] ボタンをクリックします。
  • users:readusers:read.emailを検索して追加します。

Slackワークスペースへのボットの展開

最後に、Slackワークスペースにこのアプリケーションをインストールします。アプリの [Basic Information (基本情報)] ページで、[Install your app to your workspace (ワークスペースに自分のアプリをインストール)] セクションを展開します。

Slackの [Event Subscriptions (イベントサブスクリプション)] の有効化

[Install App to Workspace (ワークスペースにアプリをインストール)] ボタンをクリックします。

Slackの [Event Subscriptions (イベントサブスクリプション)] の有効化

[Allow (許可)] ボタンをクリックすると、成功を示すメッセージが表示されます。これでワークスペース内にボットがインストールされました。

まとめ

  • Slackアプリケーションを作成しました。
  • User Event通知、スラッシュコマンド、追加のスコープを構成しました。
  • Slackボットをワークスペースに展開しました。