MS Power Automate(MS Flow)とBoxの連携

## 概要
Microsoft Power Automate(旧称:MS Flow)を使い、BoxとTeamsを連携させる手順について記載しています。
(2020/02/05時点)  

## 前提条件

* Office365の有効なサブスクリプション(ライセンスレベルはE3以上)
* Boxのアカウント

## テンプレート「BoxにファイルがアップロードされたらTeamsにメンションする」

最初に作成するフローとしては、

* まず、そもそもの話として、Power Automateが動くのか?
* 自分のアカウント/サブスクリプションで使えるのか?

を確認したいので、フロー自体はテンプレートを使って楽をします。  

### Power Automateへのログイン


Microsoft Power AutomateにO365のIDでログインします。
[Microsoft Power Automate](https://japan.flow.microsoft.com/ja-jp/)


![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_01.png)  

### テンプレートの検索

検索欄に「Box Teams」と入力し、検索結果から
`Boxフォルダーにファイルが追加されたときにMicrosoft Teamsにメッセージを投稿する`
を選択します。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_02.png)  

### 連携先サービスへの認証

Power Automateから連携する先のサービスに対してログインします。  

このフローではBox / Teamsの双方に対してサインインする必要があるので、
フローの説明画面から「サインイン」を実行し、それぞれにログインしておきます。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_03.png)  

Boxへのログイン後、OAuthの画面で「Boxへのアクセスを許可」ボタンをクリックします。
BoxアカウントのログインIDとパスワードで認証します。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_04.png)  

同様に、Teamsに対してもログインしておきます。
Office365のログインIDとパスワードで認証します。  

Box/Teamsの双方にログイン完了し、緑のチェックマークがついたことを確認し、「続行」をクリックします。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_05.png)  

###  フローの基本設定

ここから、フローの中身を設定していきます。

* フローのトリガー
* 実行するアクション

を順に指定することになります。


#### トリガー設定: Boxのフォルダパスを指定

今回のテンプレートのトリガーは`Boxのフォルダにファイルがアップロードされたら`なので、
どのフォルダーを対象とするか指定します。  

フォルダアイコンをクリックすると、自分のBox領域でアクセス可能なフォルダが表示されますので、適宜フォルダを選択します。  

※1つのフローで、複数のフォルダを対象として選択することはできないように見受けられました。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_06.png)  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_07.png)  

今回は`Teams-Flow 連携テスト`というフォルダを指定しました。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_08.png)  

#### アクション設定

次はアクション設定です。  

* 対象のチーム
* 対象のチャネル
* 投稿時の文面

をそれぞれ指定します。

選択範囲ですが、フロー作成者(=このPower Automateにログインした人のO365アカウント)で見える範囲のチーム/チャンネルから選択可能です。


![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_09.png)  

チームとチャネルを選択後、本文の編集に入ります。
テンプレートのデフォルトでは以下の文言が設定されています。

```
A file `ファイル名` is added to Box folder.
ContentType: ファイルコンテンツの種類
```

文面を日本語に置き換えます。

```
コンテンツ `ファイル名`がBoxにアップロードされました。
種別: ファイルコンテンツの種類
```

`動的なコンテンツの追加`からコンテンツの付帯情報をさらに追加できそうなので、見えているものを全て追加してみます。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_10.png)  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_11.png)  

トリガーとアクションが設定完了しました。
ここで`新しいステップ`ボタンをクリックすると、さらに後続のアクションを自分で追加することができます。  

今回は基本的な動作確認なので、`保存`をクリックして作成を完了させます。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_12.png)  


作成したフローはPower Automateの「マイフロー」から確認できます。  

デフォルトでフローはアクティブ(実行可能状態)になっています。
動かしたくないときは、フローの「…」ボタンから停止できます。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_13.png)  
### 動作テスト

フローのトリガーで指定したBoxのフォルダに何かファイルをアップロードします。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_14.png)  

Power Automateの「マイフロー」画面をリフレッシュし、「実行履歴」を開きます。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_15.png)  
 
ファイルアップロードの直後は何もフローが起動していません。  

![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_16.png)  

フローの設定内容を見返しても何もまずいところが見当たらなかったので、しばらく待ったところ、
フローが動き始め、状況が「成功」となりました。
検知は即時ではなく、少し間があるようです。


![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_17.png)  

Teamsのチャンネルを確認すると、自動投稿が行われていました。  
※投稿者名はフロー作成者のO365アカウント


![box_msflow_basic_01.png](https://archive.kowloonet.org/blog/box_msflow_basic_18.png)  


Teamsへの投稿内容(原文)は以下の通り。

```
[12:15] admin
    コンテンツ '出張申請書.xlsx' がBoxにアップロードされました。
種別: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet "0"611359739532
```

* ExcelファイルはPower Automate上では`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`と見なされる
* エンティティタグは"0"と記載。
* ファイル識別子として、Box上でのファイルID(本例では611359739532)がそのまま記録される

## 残課題・要確認

### フローのアクション(Teamsの指定)
ダッシュボードにログインしたO365アカウントではなく、神様視点で**テナント内の全てのチーム・チャネルから宛先を選択可能**にできないか

### チャネルへの投稿内容
* アップロードが発生したBoxフォルダの共有リンクを投稿できないか
* フローをトリガーしたBox上のファイルへの共有リンクを生成して投稿できないか
* エンティティタグとは?
* ファイルの種類をもう少しHuman readableにできないか。
  * `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` ではなく、`Microsoft Excel File` など


以上