MuleSoftからAutomation Anywhereのロボットを実行

#MuleSoftからAutomation Anywhereのロボットを呼び出してみよう

MuleSoftは、IPaaS、Integration Platform as a Serviceということで、
Webサービス間の連携であったり、データベース等のWebサービスを持たないシステムに対して、
外部からアクセスするためのWebサービスを提供することが可能なプラットフォームになっています。

業務用件によっては、社内環境にあるAPIを持たない独自システム等を含めた連携が必要となることがあるかと思います。そうした時、Automation AnywhereといったRPA（Robotic Process Automation）の仕組みと連携させることにより、オンプレミスの資産へのアクセスを実現することが出来ます。

こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/ca1d43ce-d643-2cbe-e90d-cbb08dc058d9.png)
尚、ロボットの実行は、Automation Anywhereのロボット実行環境からサーバーに向けて張りにいったセッションを用いており、セキュリティ面でも安心が出来ます。


##Mulesoft Automation Anywhere Connectorを利用したロボットの実行

では、MulesSoftからAutomation Anywhereのロボットを呼び出す処理を作ってみます。
下記、シンプルに、稼働させるロボットのIDだけ渡して実行する仕組みとなっていますが、数ステップで実現できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/07f074bb-3f63-d0ab-c3a9-ab0c685b3f0b.png)

まずは、リスナーから始めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/dec6718e-0f38-3d2f-8531-ee8ad12193b1.png)
ロボット実行用に特別な設定は必要ありませんので、HTTP Listener Configを追加します。
下記では、ホストをローカルホストにし、ポートを変更しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/9167df44-d210-8582-aef6-6cfe2ba6077b.png)

あとは、エンドポイントURIの指定となります。ここでは/Runbotというパスを指定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/1cf31369-1341-e83a-f7a8-07c55195e3fa.png)

次に、リクエストから実行するロボットのIDを取得したいので、Set Variableを置きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/04497f64-de9d-fe4f-e2f2-d3d5d4701fad.png)

Expressionモードにして、message.attributes.queryParamsのあと、.botidとします。
これにより、http://localhost:8082/Runbot?botid=xxx としたときのxxxの部分が変数に設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4f7fbe6a-e6ba-aa86-5f37-9e991c2a2271.png)

そして、Run Bot Async。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/d50fc6d4-4df9-3033-fcd1-d269e510718d.png)

このステップは、Exchangeの中でAutomatitonと検索すると出てきますので環境に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4d2374a1-4b75-062a-b48e-eda9c589bb39.png)

最初に、HTTPリスナーで行ったのと同じように接続設定を行います。
ユーザー名・パスワードを用いた認証と、ユーザー名・APIキーを用いた認証があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/bae77eb6-b5e8-1dc5-a863-4e54a13b8741.png)

接続設定が完了した後、実際のステップの設定を行います。
実行するロボットのID、実行ユーザーのID（Unattended Bot Runnerユーザー）、デバイスプールIDを指定します。
接続に成功していれば、ドロップダウンボックスで選択することが出来るようになっています。
ここでは、パラメータとして取得したIDのロボットを稼働させますので、vars.botidと指定しています。
その他にも、ロボットで利用する変数の値を渡すことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/6e4e185d-093a-7e40-80cd-2393dc973e54.png)

Run Bot Asyncを実行すると、ロボットの実行を特定するためのdeploymentidが戻されますので、
その値をこのWebサービスとして戻すようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/d70870bc-25fd-83c8-5638-5bc12b818073.png)

今回は、payload.deploymentIdを取得し、json形式で戻す設定にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4d70929a-dae8-eb99-e85b-9ade4ff766c2.png)

最後に、変換したメッセージをペイロードに入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/4e21ba87-edfa-936b-df40-e0d16a98f939.png)

デフォルトの設定のまま。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/ffe49a74-c029-f400-4ec6-887b33b88698.png)

##実行！
MuleSoft側で作ったアプリケーションを実行し、待ち受け状態にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/abe69893-c160-3ca4-b69b-b2e94cbff988.png)

Postman（REST APIが投げられれば、他のツールでもOK）から、HTTPリスナーで設定したエンドポイントを呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/14d49f11-f074-9556-f071-323f2dde1855.png)

上手く動けば、ロボット実行環境上でロボットが稼働します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/832203cb-f3d2-66e4-6993-5f7f96506e9d.png)

そして、Postmanの方では、実行IDが戻ってきていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/06dc6120-dd41-2925-52b0-e2f04fe776a3.png)

##最後に・・・
MuleSoftは、Web API間の連携が中心で、画面上のユーザーインターフェースほどの変更が入ることは少ないので、そういった環境では安定した動作が期待できるかと思います。
一方、Automation Anywhereは、PCの画面上の操作であれば、ほぼほぼ自動化できる柔軟性があります。
上手く組み合わせることができれば、相当幅広いことが自動化出来そうですね。