UiPath Communications Mining 準備編 データ連携 方法② UiPath Activitiesを利用してメールデータの連携


# はじめに

今回の記事では、メールデータ連携の一つの方法として、UiPath Actvitiesを利用して、メールデータを連携する方法を紹介します。

ロボットが接続するOrchestratorのテナントとUiPath Communications Mining（以下、CM）のテナントが同じかどうかに応じて、利用するアクティビティが異なります。

1. **テナントが同じである場合は**、[UiPath Official CM Activities](https://docs.uipath.com/communications-mining/automation-cloud/latest/developer-guide/uipath-official-activities)を利用して、メールデータをUiPath CMにアップロードすることができます。
1. **テナントが異なる場合は**、[UiPath Marketplace Activities](https://marketplace.uipath.com/listings/communications-mining-activity)を利用します。

:::note info
UiPath Marketplace Activitiesは将来的に置き換えられる予定ですので、ワークフローの改修が必要になります。これをご了解の上で利用していただくようお願いします。
:::

# UiPath Official CM Activitiesを利用する際の実装
以下のリンクのページで、該当アクティビティの利用方法を記載していますので、詳細な手順はそちらでご確認いただけますので、ここでは省略します。

https://docs.uipath.com/communications-mining/automation-cloud/latest/developer-guide/uipath-official-activities

参考のために、ワークフローを以下に示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/a1557b75-de05-0082-2cb3-6a22642334e2.png)

メールの添付ファイル名を連携する場合、ワークフローでメールの添付ファイル名を取得し、レコード作成アクティビテにそれをユーザー定義フィールドとして追加する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/67d11965-681a-a5bf-f50d-702689a47271.png)

CMでは、以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/e7bc6130-4482-56c9-a137-5bc200db814f.png)


# UiPath Marketplace Activitiesを利用する際の実装

## UiPath CMから必要な値の取得
[UiPath Marketplace Activities](https://marketplace.uipath.com/listings/communications-mining-activity)を利用して、メールをアップロードする際には、UiPath CMでのURLやAPIキー、及びアップロード先のソース名などを入力する必要があるので、最初にこれら値を取得します。

- UiPath CMでのURLの取得

UiPath CMを開いて、URLから「reinfer_/」までの部分を取得し、メモしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/9ee201fc-f84e-62d8-14c8-cf508a7639c2.png)

- UiPath CMでのAPI Tokenの取得

右上側の歯車アイコンをクリックして、MyAccountよりAPI tokenを取得し、メモしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f5a9911e-627a-723a-9853-130b3827be11.png)

- アップロード先のプロジェクト名とソース名の取得

Sourcesタブよりメールのアップロード先のプロジェクト名とソース名を取得し、メモしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f112d50e-c80a-8505-1b8b-ba67412229db.png)

## UiPath Studioを利用してメールデータの取得とアップロード

以下に示すステップを通じて、UiPath Studioを利用して、メールボックスからメールデータを取得して解析します。解析したデータを組み合わせて、CMで利用できるフォーマットに変換し、アップロードします。

### StudioプロジェクトにCMのアクティビティのインストール

UiPath Studioを起動し、新規プロジェクトを作成します。次に、「パッケージの管理」をクリックし、「CommunicationsMining」と入力して検索します。その後、「InternalLabs.CommunicationsMining.Activities」パッケージをインストールします。

詳細は以下の図をご参照ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/b55aa6a0-37a4-9346-0058-e8ded49fa35a.png)

### メールの取得

連携したいメールボックスからメールを取得するために、「Get Outlook Mail Messages」アクティビティ(outlook利用の場合)をドラッグアンドドロップし、メインシーケンスに配置します。
業務の要件に応じて、「Get Outlook Mail Messages」アクティビティのプロパティを設定します。以下は参考例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/e37c68c2-15d4-1f3b-add7-88872f3acee4.png)

### メールデータの解析と組み合わせ

次に、取得した複数のメールデータを解析し、解析したデータを組み合わせて、CMで利用できるフォーマットに変換します。

- 複数のメールを取り扱うため、「繰り返し(コレクションの各要素)」アクティビティを使用します。「項目のリスト」には、取得したメールを保存した変数`messages`を指定します。
- メールに関連するデータも追加するため、ユーザー定義のメタデータを作成できます。メタデータに関しては、[**こちらページ**](https://developers.reinfer.io/api/comment-structure)での「user_properties」を参照ください。変数を定義し、代入アクティビティを利用して、必要なメタデータを変数に設定します。
    - メタデータを保存するために、変数`jsonDic`を作成し、型を`Dictionary<String,String>`に設定し、既定値を`New Dictionary(of String, String)`にします。
    - 代入アクティビティを使用して、保存先を`jsonDic("string:User Name")`に設定し、保存する値も指定します。
    - 同様に、他の設定したメタデータ(メールの添付ファイル名など)も代入アクティビティで設定します。以下は参考例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8aaef8fc-4f36-aac9-7ad2-6519ed6662a7.png)

- ユーザー定義のメタデータを辞書型のjsonDicに保存しましたが、データをアップロードするために、それをJSONオブジェクトに変換します。「JSONを逆シリアル化」アクティビティを使用し、プロパティを以下のように設定します。
    - TypeArgument: `Newtonsoft.Json.Linq.JObject`
    - 入力(JSON文字列)：`Newtonsoft.Json.JsonConvert.SerializeObject(jsonDic)`
    - 出力(Json オブジェクト)：`user_properties`(＊この変数を新規作成する必要あり＊)

- 取得したメールデータのヘッダー、本文、およびユーザー定義のメタデータを組み合わせて、CMへのアップロード用データを作成します。
    - 「Construct a Raw Email Document 」アクティビティを入れて、入力と出力を設定します。
    - 入力(Email Headers):`new ParsedEmailHeaders(message.DateAsDateTime,message.Subject,message.Sender.ToString(),message.Headers("Message-id"),message.Headers("References"),message.To.ToString())`
    - 入力(Raw Email Body):`new RawEmailHtmlBody(message.BodyAsHtml)`
    - 入力(User properties):`user_properties`
    - 出力(Raw Email Object):`rawEmail`(＊この変数を新規作成する必要あり＊)

- 次は上記の作成した`rawEmail`をコレクションに追加します。
    - コレクションの変数`rawEmails`を新規作成します。該当変数の型を`List<RawEmailDocument>`にします。
    - 「Append items to collection」アクティビティを追加して、以下のように設定します。
        - コレクション：`rawEmails`
        - 項目：`rawEmail`

上記のステップで複数件のメールを解析し、CMへアップロード用のフォーマットに変換しました。

### 変換したメールデータをCMにアップロード

こちらで、変換したメールデータをCMにアップロードします。
- UiPath CMから取得したURL及びAPI Tokenを指定の型に変換し、変数に保存します。
    - 以下の変数を新規作成します。
        - baseURL：変数の型がSystem.Uri
        - secureAPIToken：変数の型がSystem.Security.SecureString
        - stringAPIToken：変数の型がStringで、既定値に取得したAPI Tokenを設定します。
    - URLとAPI Tokenを指定の型に変換し、変数に保存します。
        - 保存先(baseURL)：`new Uri("https://staging.uipath.com/uipatveuzxie/JunLiTest/reinfer_/")`
        - 保存する値(secureAPIToken)：`new System.Net.NetworkCredential("",stringAPIToken).SecurePassword`

- 「Sync Raw Emails」アクティビティを使用して、変換したメールデータやメタデータをアップロードします。
    - Base Url、Communications Mining API Token、Emails、Project Name、Source Nameは全て上記作成した変数、及びUiPath CMから取得した値を使用します。
    - Batch Size: データをアップロードするためのバッチサイズで、入力リストはこのサイズのバッチに分割されます。
    - Transform Tag: 署名を識別する際に利用する方法です。"generic.0.CONVKER5"がマシンラーニングモデル識別です。
以下の設定の参考例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f0a9d73e-1769-27d2-a804-efcd2afb8450.png)

# ワークフローを実行して確認

作成されたワークフローを実行し、UiPath CMにて該当メールが連携されているかを確認します。
以下に示す図のように、メールボックスでのメールおよびワークフローで設定したユーザー定義メタデータがUiPath CMで確認できれば、メールデータの連携が問題なく完了したことが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/db029d88-a60f-3f46-c4f7-60119b82aa4c.png)