Automation Anywhere  Automation360 でメール配信用ボット

#Interactive Forms
Automation360 では、Interactive Formsというフォーム作成機能があります。
この機能を使うことで、通常だと、メッセージボックス程度しか持たないAttended型のボットに対して、
実行者とボット間で様々なデータの**双方向での**やり取りが可能となります。

活用例としては、
- ボット実行時に、そのボットで利用するデータを指定する
- ボット実行時に、そのボットの挙動を変えるパラメータを指定する
- 様々なタスクボットのランチャーとして
- 処理中データを確認し、次のアクションを指示する
といったケースで活用できます。

##フォームビルダ
テキストボックスやボタンだけでなく、ロカールPC上のファイルの選択や、画像／PDFを表示するコンポーネントがあり、
Automation360 のボット開発と同じく、ドラッグ＆ドロップで配置、パラメータを指定する形となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/ee2de1d7-dac3-27fe-6236-7cf0731a8cd1.png)

##ユーザーインターフェースに日本語を使う場合の注意
フォーム上利用されるフォントが、デフォルトでは英語用の物となっていますので、
下記の様に、「System default」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/5aa12b04-d666-d1a3-9366-53fe41d41788.png)

##トリガーループ
作成したフォームは、「Interactive Forms」パッケージのDisplayアクション等を利用して表示しますが、
ユーザー等のアクションを待つために、「トリガーループ」パッケージを利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4a6bee5c-3c18-6f3d-8870-72526c2fe30d.png)
フォーム上の操作だけでなく、メールの着信や新規ファイル作成、ショートカットキーなどもトリガーとすることも出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/79b354e8-20d7-774a-93ed-560a92ded4cb.png)


#メール配信用ボット
Interactive Formsを利用し、メール配信用のボットを作成してみました。
ここまで行くと、ボットなのか、アプリケーションなのか分からない位ですけど・・・

##メール配信用ボットで実装する機能
まず、どんな機能を持たせるのかを考えます。
とりあえずは、下記の様な感じにしてみることにします。
- エクセルに含まれる、会社名、氏名、メールアドレスを使ったメール配信
- エクセルファイルのGUIを使った選択
- フォーム上で、件名と本文が編集できる事
- 会社名と氏名については、本文の中でタグを埋め込み、送信時に変換されること。
- エクセルテンプレートファイルの表示

##メール配信用ボット　フォーム
日本語使えない人が使うことも想定し、日英併記にしてみました。
会社名と受取人名のボタンは、押すと本文にタグが追加される想定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/deed7ff5-89b8-5811-24d2-314fa9ad0a1c.png)

##メール配信用ボット　ボット側処理
全体像。
一番右側のトリガーループ - ハンドラーの中身が実際のメール送信処理です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/da026757-4508-4442-8359-be382da29aa4.png)

ハンドラー処理、左側三つ。
一番左は、閉じるボタンの処理なので、単にBreakが入っています。
その横二つは、会社名と受取人名のタグ追加ボタン。フォーム上の本文にタグを追加する処理を入れてます。それぞれ１アクションで完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/afe91e52-f086-e1d5-9cc9-8f5777d56365.png)

その右は、テンプレートのエクセルファイルを開く処理。
テンプレートファイルは依存関係ファイルとしてControl Roomに入れたものをエクセルで開いています。
これも１アクションで完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/65042ffe-ef56-d365-3d9f-6d1ba87d8708.png)

配信先ファイルの選択。
これも、フォーム上にあるコントロールの値を取ってくるだけです。
このファイルを選択したよというメッセージボックス入れても、２アクション。非常に簡単。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/c2cfa177-8cef-9440-5079-ca6c4c5043df.png)

そして、メインの処理部分です。
まず、フォームから件名と本文を持ってきています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/9142adc0-f603-2a4b-fec2-e1b0bff0e78d.png)
そして、IFを利用し、エクセルファイルが選択されてなければメッセージを出して完了。
エクセルが指定されていれば、ファイルを開いてループ処理しています。
ループの冒頭は、エクセルのデータを使って、本文に含まれるタグを置き換えています。

`テンプレートを開くときには「Excelの高度な操作」を使っていましたが、ここでは「Excelの基本操作。」
何故かというと、テンプレートはエクセルアプリでテンプレートを表示したいから。（そうしないと名前を付けて保存ができない。）
逆に、実際の送信時は、別にエクセルアプリを開く必要ないですし、高度な操作も不要なので基本で。`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4a390b49-b233-52c2-1c24-f1690bae9022.png)

そして、メール送信・遅延を繰り返す形です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/ef33d391-332f-37b2-46de-22990087f4d1.png)

メール送信アクションのプロパティーもこんな感じでいたってシンプル。
もちろん、このアクションを変更して、SMTPやEWS接続にすれば、メール送信者のアドレスを指定することも可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/c10ebce6-15bd-af5f-18d4-49beaae7b124.png)

#メール配信用ボット 実行イメージ
実行するとこのようなフォームが表示されますので、必要な情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/0617dc8a-cca7-493e-7da7-616d795845d0.png)

送信前の内容確認。
ここで、実際に送信するのか、戻るのかを表示する別のフォームを入れてもよいかもしれませんね・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/17f30616-b039-f4e8-9490-156cc8531cf8.png)

#着信したメール
こんな感じのメールが着信します！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/f2ab4111-b1c8-0cc2-8490-a7a663214ba9.png)

#まとめ
非常に簡単にBotにユーザーインターフェースを付けることが出来ます。
Attended型のBotでできる幅が広がりますので、是非試して頂ければと思います。