OAuth認証を介してメールトリガー機能を使ってみます！～思ったよりずっと簡単

## はじめに
BizRobo!はv11.1から「電子メールトリガー」という機能を使えるようになりました。v11.4では、管理コンソール（MC）内の設定で、電子メールの認証に OAuth をサポートし始めました。
上記の文面を読んでも「なんか凄いなあ」としか思えません。具体的にとういうこと？と思いながら色々調べて実際に使ってみました。

## 電子メールトリガーとは？
自分の理解を一言で整理すると、「電子メールをトリガーとしてロボットを走らせる機能」です。
特定のメールが指定したメールボックスに入ると、事前に設定したロボットが自動的に動き出します。
デモ動画もありますね。
[電子メールトリガー【BizRobo! Basic v11.1新機能】](https://youtu.be/EySjcK6vaJI?si=62pk_Ky8MMH8o3zY)
綺麗にまとめられたオフィシャルの手順書もあります。（要ログイン）
[電子メールトリガー手順書（PORTAL）](https://portal.bizrobo.com/ja/%E8%A3%BD%E5%93%81/%E6%A4%9C%E7%B4%A2?title=%E9%9B%BB%E5%AD%90%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC&category=50)
すぐに実行することでもスケジュールで動くことでもなく、メールが来てはじめてロボットが作業します。便利な感じです。

## OAuthとは？

OAuthと聞くと難しそうなイメージがあるかもしれませんが、そうでもありません。OAuthの仕組み自体はもちろんとても複雑ですが、コンセプトは簡単：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/cfaf227b-791b-5342-6ec6-a3ee3ab99abe.png)
By chatGPTです。
BizRobo!のみでなく、現在普遍に使われている認証方法です。ここではOAuth仕組みの詳細を一旦割愛しますが、OAuthは従来のID、パスワード認証方法と違い、パスワード使わない認証方法です。

## なぜOAuthを利用する？
パスワードを使わないメリットはやはりセキュリティ性ですね。OAuth認証を使いセキュリティ性を向上させます。
もちろん、何回もID、パスワードを入力する必要なくアプリケーションを利用できることも便利でユーザーエクスペリエンス（UX）がよくなります。

## 手順  
目標は「OAuth認証で電子メールトリガーを利用し、ロボットを走らせること」です。利用したメールシステムはMicrosoft Office 365 電子メールです。
ブレイクダウンすると下記のスデップになります。
1.事前準備
1.1使われるロボットを作成する
1.2メールフォルダーを用意する

2.Microsoft Azureを設定する
2.1 Microsoft Azure に Web アプリを登録する
2.2証明書とシークレットを発行する
2.3API 権限を有効にする

3.MCを設定する
3.1OAuth設定
3.2OAuth ユーザーを追加
3.3電子メールアカウントを設定
3.4電子メールトリガーの設定

4.検証

全体像はこのような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/7dab145f-8ac0-8560-4d98-861eed1b5d77.png)


詳細に入りましょう！

## 1.事前準備
:::note info
この記事はBizRobo! v11.4.0.2を使っています。
:::

**1.1使われるロボットを作成する**
テスト用なのでとても簡単なロボットを作りました：
中身がないエクセルファイルのA1セルに「1」を記入してから保存するロボットです。
どのようなロボットでも使えますが忘れずにMCにアップロードしてください。
MCのリポジトリ＞ロボットから「+」をクリックして追加します。
（対象のロボットが“タイプ”や“スニペット”を含む場合、同様に”タイプ”、“スニペット”もＭＣにアップロードする必要があります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/a6b4fe00-a528-0f14-c3f5-13670c0f8242.png)
 

**1.2メールフォルダーを用意する**
メールトリガー機能は、メールを指定したメールボックスに入るとトリガーになります。受信トレイだ色々なメールが入りまして複雑になりそうです。よって専用のフォルダーを新規追加する方がおすすめです。
利用するメールアドレスはこれからMicrosoft Azureで設定するアカウントと同じものを利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/147123b4-8ef8-4966-91be-808fa19c62f6.png)

フォルダーから右クリックをし、「フォルダーの新規作成」をクリックして作成します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/1d9af9af-673f-321b-78cf-56b1018c9928.png)
 
私は「o365」という名前のフォルダーを追加しました。
フォルダーの名前は任意ですが、2点ご注意：
**(1)最上位階層に追加する**  
デフォルトの受信トレイと同じ階層でフォルダーを追加します。理由は現時点、フォルダー内に追加された子フォルダーはサポートしていないようです。
詳細は[こちら](https://knowledge.bizrobo.com/hc/ja/articles/4403535522829-%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%A7%E6%8C%87%E5%AE%9A%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AE%E9%9A%8E%E5%B1%A4)をご確認ください。

**(2) 共有メールボックスを利用しない**
共有メールボックスは個人のメールフォルダーと違い、管理者が設定し他のユーザーと共有しているトレイです。詳細は[Microsoftサポートサイト](https://support.microsoft.com/ja-jp/office/outlook-%E3%81%A7%E5%85%B1%E6%9C%89%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E9%96%8B%E3%81%84%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-d94a8e9e-21f1-4240-808b-de9c9c088afd)へ。Gmailは「共有トレイ」と言います。両方とも現時点サポートいないようです。

フォルダー を設定したら自動的に仕分けるようにルールを設定しましょう。やり方は[Microsoftのページ](https://support.microsoft.com/ja-jp/office/%E4%BB%95%E5%88%86%E3%81%91%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%A1%E3%83%BC%E3%83%AB-%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B-c24f5dea-9465-4df4-ad17-a50704d66c59)をご参考ください。
詳細は電子メールトリガー手順書をご参考ください。

## 2.Microsoft Azureを設定する
ナレッジの記事[「メールトリガー用にAzure AD 2.0を利用したOAuth認証設定の注意点」](https://knowledge.bizrobo.com/hc/ja/articles/12326685901337)を参考にしました。
Azure ADの設定をするためには普通のo365のアカウントではなく[デベロッパーのアカウント](https://developer.microsoft.com/en-us/microsoft-365/dev-program)が必要です。検証するため申請しました。[^footnote]
[^footnote]:デベロッパーページにログインするため電話番号経由で認証コードを受け取り⇒認証することになり、検証時少し時間をあけると再検証しないといけません。しかも電話番号認証は回数制限がありそうですので、やはり二要素認証として[Microsoft Authenticator](https://www.microsoft.com/ja-jp/security/mobile-authenticator-app)をインストールする方がおすすめです。
以前から”Too safe to use.”（安全すぎて使えなくなる）とう言葉を聞きましたが最近よく感じましたが、セキュリティ性の方がずっと大事ですね。

**2.1.Microsoft Azure に Web アプリを登録する**
**2.1.1** [Azure Portal](https://portal.azure.com/)にアクセスし、[Entra ID](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Overview)にアクセスします。[^footnote2]
[^footnote2]:※以前はAzure Active Directoryという名称でしたがいつの間に名前がMicrosoft Entra IDになりました。[理由](https://learn.microsoft.com/ja-jp/azure/active-directory/fundamentals/new-name)は「Windows Server Active Directoryとの混同を回避し」です。

アクセス方法は、上の検索バーに「Entra ID」を入れて検索するか、下にあるアイコンからもアクセスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/090dbae1-2802-5bce-678b-968bc9a47f1a.png)

**2.1.2**「アプリの登録」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/7e0e3d06-13a9-d940-8653-c5adf7840855.png)
Entra IDを利用して認証するアプリケーションとしてMCを登録するために、左側のメニューから「[アプリの登録](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/RegisteredApps)」をクリックしてアクセスします。

**2.1.3**アプリを新規登録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/dbb04d11-62cf-ea8b-71b8-c6403290415d.png)
 
新規登録をクリックし、パラメータを入力すします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/d6c24c45-3c15-fe93-b26f-688fee6606b5.png) 
(a)アプリの名前は後でも変更可能ですので任意で大丈夫です。
(b)「この組織ディレクトリのみに含まれるアカウント（MSFTのみ-シングルテナント）」にします。
(c)ドラップダウンリストから「web」を選択します。
(d)のURLはurl に「"mc の url"+"/OAuthCallback"」を入力します。
上記のリンクはManagement Consoleの 新規 OAuthアプリケーションを作成する際に確認することができます。
ルートはManagement Consoleにログイン＞リポジトリ＞OAuth　です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/2bdfb243-ba8a-0f44-d7b4-b554fac4ac5b.png)
直接コピーする方が確実かもしれません。

**2.2証明書とシークレットを発行する**
**2.2.1**アプリを登録すると、自動的にアプリ登録の画面に入ります。
左側のメニューから「証明書とシークレット」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/37b0e263-3eda-8a8e-67ef-ff8aad274369.png)
  
**2.2.2**クライアントシークレットを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/3a911902-d9b0-d3b2-b183-092200fbb34b.png)
「新しいクライアントシークレット」をクリックし、説明と有効時間を設定して追加をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/32748fdd-5362-3ccb-a2ba-fb0e9ab863d1.png)
すると、シークレットの値が表示されます。値は一度しか表示しないため、必ずきちんとコピーして保存してください。この後MCにOAuthコンシューマシークレットとして設定します。
（Entra IDの「シークレットID」＝MCの「コンシューマシックレット」です。呼び方が同じではないので読み替えが必要な点が OAuthのわかりづらい部分ですね。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/124275b8-46f5-b349-752e-9f173122ef95.png)
 

**2.3API 権限を有効にする**
これはAzure内のステップのラスト一歩です！

**2.3.1**API のアクセス許可へアクセスし、「アクセス許可の追加」に入る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/c336b482-929a-6402-6985-8d8cb5c4803d.png)
左側のメニューの「API のアクセス許可」を選択し、アクセス許可の追加ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/108c1397-330d-0f13-9098-cd74d02b4372.png)

**2.3.2**「アクセス許可の追加」を設定する
「Microsoft Graph」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/4ccdcef2-2990-b4ff-af8e-2e50183478e0.png)
委任されたアクセス許可を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/72c1047b-52d1-8c61-b25e-cde1d2aa8fa0.png)

API アクセスの許可の要求に「offline_access」とIMAP の「IMAP.AccessAsUser.All」をチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/10392780-ef94-3b8f-0fca-dcffd05168c9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/9a8dc377-8e4b-29e9-b889-a68e343a86e2.png)
IMAPは少し下にあります。
最後は「アクセス許可の追加」をクリックして、追加完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/a273bff5-5952-18d8-fcf3-d7a7695746ff.png)

これでAzureの設定は完了しました。
MCに戻りましょう！ですが後ほどAzureページ内の値が必要ですのでページは閉じない方が便利です。

## 3.MCを設定する
**3.1.OAuth設定**
**3.1.1**OAuthアプリケーションの設定
MC＞リボジトリ＞OAuth を選択し、アプリケーション追加ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/23a807ed-f027-53b6-3ee3-77f188f5285a.png)
設定はポップアップウインドウで設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/cfdbd6ce-39f2-7c27-8654-105df3366c0e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/ef73ec67-c26d-e3de-8085-4afc3acae088.png)
(a)プロジェクト選択
(b)名前設定（任意）
(c)当記事はo365をる要した為サービスプロバイダを「Microsoft Azure AD 2.0」を選択
(d)コンシューマキーは、登録したアプリの「概要」の「アプリケーション(クライアント)」で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/9214f0d2-8e17-0b56-e90a-e47587c72329.png)
(e)コンシューマシークレットは、ステップ2.2.2で保存したシークレットの値で設定
(f)スコープは「https://outlook.office.com/IMAP.AccessAsUser.All offline_access」に設定
(g)コミットメッセージは任意で

設定完了後OKをクリックします。
画面に直ぐ出ていない場合MCをリフレッシュしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/ae3e85cb-33d7-206c-812f-db7fc013b691.png)

**3.2.OAuth ユーザーを追加**
**3.2.1**の設定が終わると、「アプリケーション」となりのユーザータブをクリックしてユーザー画面に入り、「+」ボタンで追加を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/aec46775-3e6c-d296-e737-d50653aaff93.png)
設定はポップアップウインドウで設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/1b8a503b-1139-0e10-3d72-ee4b792fe3b1.png)
(a)３.1で追加したアプリケーションを選択
(b)Azure のユーザーアカウントを入力
(c)テナントは、登録したアプリの「概要」の「ディレクトリ(テナント)ID」で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/af8bc9c5-f975-5a58-d970-67ccff261146.png)
次へをクリックして認証を行います。

**3.2.2OAuthユーザーの認証**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/32f5ee9f-cdf0-d776-107d-b9650d86a7a9.png)
認証リンクをクリックするとAzure のログイン情報画面が別ウインドウで開きます。
ログイン情報を入力し、要求されているアクセス許可を「組織の代理として同意する」をチェックし「承諾」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/b9b11249-92ae-3e1c-384b-3d77cf9c48b4.png)
「OAuth認証に進む」画面が出てきます。「このウインドウを閉じる」をクリックして、元のポップアップウインドウに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/8086ad7f-040d-3941-83da-13f4989b976c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/e2948f74-8556-88af-d999-bdd3b7fe490c.png) 
「次へ」をクリックできるようになると認証は成功しました。クリックできない場合、アプリケーションの設定がとこが間違っている可能性が高いです。もう一度ご確認ください。

最後はアクセストークンが表示されます。こちらも一回しか表示しないため、コピーして保存でください。

**3.3電子メールアカウントを設定**
MC＞設定＞電子メールアカウントを選択し、追加ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/9c5794e6-5bcb-a4b7-5f26-9394c6919474.png)
Microsoft 365を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/30f1649d-1a53-6e9d-148c-c3440b817b19.png)
(a)	プロジェクトを選択する
(b)	「OAuthを利用」にチェックを入れる
(c)	ステップ3.2で作成したユーザーを選択
(d)	Azureで利用したアカウント
全部入力すると、「テスト」をクリックします。テストボタンのマークがチェックになるとテスト成功しました。保存しましょう！

**3.4電子メールトリガーの設定**
MC内の設定のラスト一歩です！
MC＞リボジトリ＞電子メールトリガーを選択し、追加ボタンをクリックします。
ポップアップウインドウが出てきます。電子メールトリガーマッピングを作成に項目設定し、「OK」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/3dba23e6-e9e2-4437-cb1c-8039ca165348.png)
(a)	トリガーの名前
(b)	プロジェクトを選択
(c)	今回利用するメールアドレスを選択する
(d)	利用するロボットを選択する
(e)	対象メールフォルダーを選択する

これでやっと
## 4.検証：ロボットを走ってみる！
検証する方法も簡単です。メールフォルダーの仕分けルールで設定したルールを従い、メールを出してみます。すると、まず指定されたフォルダーの下に、自動的に「Error」、「Finished」
、「Processing」と「Timedout」、4つの子フォルダーが生成されます。 
エラーが出ていない場合、送ったメールは「親フォルダー」＞「Processing」＞「Finished」の順で移動されます。
スクリーンショットのように、私が事前設定し指定したフォルダーは「o365」です。順調に行けばメールは「o365」から「Finished」まで移動されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/73c73319-3573-dd99-722f-fae9d81bc676.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/6a2e0d10-6df2-9b0b-d534-92a2e0274688.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336621/82a7b3ed-74de-8807-fb35-cfc0fc822203.png)
メールが「Finished」に入れられるとロボットも確認しましょう。私のロボットはエクセルファイルに記入することで綺麗に記入されています。
成功しました！

## 結論
更に詳しく設定することは可能ですが、メールのOAuth認証+電子メールトリガーの運用はそこまで複雑ではありません。一見で設定とおもうかもしれませんが難しいことはありません。
ぜひ試してみて色々なシナリオでご活用ください！