ここでは、Slackから送信されるイベントを処理し、Boxのユーザーやグループとの接続に必要なすべての情報を取得します。その機能をBoxの関数に関連付ける必要があります。
この手順では、直前の手順で説明した関数をいくつか拡張し、新しいBox機能を組み込みます。
- Boxクライアントをインスタンス化する
- BoxグループにBoxユーザーを追加する
- BoxグループからBoxユーザーを削除する
- グループ名からBoxグループIDを取得する
- グループと共有するコンテンツを追加する
Boxクライアントのインスタンス化
Box APIを呼び出すには、最初にBoxクライアントを設定する必要があります。
グループへのBoxユーザーの追加
グループにBoxユーザーを追加する関数を追加します。ボットがチャンネルに追加され、チャンネルのすべてのユーザーを含むBoxグループの作成が必要になった場合、またはその操作の後に1人のユーザーがチャンネルに参加した場合に、この関数によってそのタスクが実行されます。
メールアドレスを使用してSlackユーザーをBoxユーザーと照合しているため、最初に、Slackのプロフィールのメールアドレスを使用して一致するBoxユーザーを検索します。見つかると、そのユーザーをチャンネルのグループに追加するための呼び出しが行われます。このグループは、ボットが最初に追加されたときに作成されています。
Boxのユーザーを取得エンドポイントでは、ユーザーIDによるユーザー検索のみ許可されています。メールアドレスでユーザーを検索するには、会社ユーザーのリストを取得エンドポイントを使用し、filter_termオプションを検索対象のメールアドレスに設定します。
グループからのBoxユーザーの削除
Slackチャンネルから退出したユーザーや削除されたユーザーは、共有グループコンテンツにアクセスできなくなるようにBoxグループから削除することもできます。
このコードでは、SlackのチャンネルIDとなるグループIDを取得し、グループの全メンバーを取得します。メールアドレスに基づいて、Slackチャンネルを退出したユーザーに一致するメンバーが見つかると、そのユーザーはそのメンバーシップIDを使用してグループから削除されます。
データストアによるパフォーマンスの向上グループメンバーシップを検索してメンバーシップIDを取得すると、ローカルのデータストア (データベースなど) にメンバーシップIDを保存する必要はなくなりますが、ユーザーレコードとともにBoxメンバーシップIDを保存するデータストアがあれば、このコードがより効率的なものになります。ローカルのデータストアを使用すると、メンバーシップIDは、そのデータストアから取得できます。Box APIを繰り返し呼び出してメンバーシップIDを検索する必要はありません。
グループ名に対応したBoxグループIDの取得
次に必要なBox関数には、主に2つの目的があります。
- 既存グループのBoxグループIDを返します。
- グループが存在しない場合、Boxグループを作成してそのIDを返します。
このコードでは、社内のすべてのグループを取得し、SlackチャンネルIDとグループ名の照合を試みます。いずれかのグループが一致すると、そのグループIDが返されます。
一致するものがない場合は、新しいBoxグループが作成され、そのグループのIDが返されます。グループの名前はSlackチャンネルIDに基づいて付けられます。これはスラッシュコマンドとUser Eventの両方で返される定数であり、追加の関数がなくても簡単に検索できるようにするためです。
グループへの共有コンテンツの追加
最終的に、このアプリケーション全体の主な目的は、ユーザーが自分のBoxアカウントにあるファイルやフォルダをグループ内の他のユーザー全員と共有できるようにすることです。
ここまでのすべての機能を基に、次の関数でそのタスクを実行します。
このコードでは、最初に、コンテンツの共有先となるSlackチャンネル用にBoxグループIDを取得します。
スラッシュコマンドを送信したユーザーのBoxアカウントからファイルやフォルダを共有するため、次に、そのユーザーのBoxユーザープロフィールをメールアドレスに基づいて取得します。
最後に、グループIDを使用して、コンテンツでグループとコラボレーションするための呼び出しを行います。
まとめ
- Boxクライアントをインスタンス化しました。
- Boxグループユーザーを追加および削除するための関数を作成しました。
- コンテンツをグループと共有するための関数を作成しました。