【BluePrism】Slackからロボットを起動させる

BluePrismのユーザー会で軽く話題になった**ロボットの随時実行**の件、
チャットからロボット起動の指示が出せると楽だなーと思い、試作してみました。

#イメージ
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">（再アップ）【BluePrism】Slackからロボットを起動させる <a href="https://t.co/hBdvXe3Nrj">pic.twitter.com/hBdvXe3Nrj</a></p>&mdash; いろはまる (@irohamaruRabbit) <a href="https://twitter.com/irohamaruRabbit/status/1144520503366836224?ref_src=twsrc%5Etfw">2019年6月28日</a></blockquote>

#作り方
###ロボット準備
BluePrismのコントロールルームを開きます。
**利用可能なプロセス**に今回動作させるロボットのプロセスが表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/77723102-fe7f-06f2-6c64-1df76206f8dd.png)


###Slackbot準備
[PythonのslackbotライブラリでSlackボットを作る](https://qiita.com/sukesuke/items/1ac92251def87357fdf6)
のソースをベースにSlackbotを作ることにします。
`slackbot_settings.py`のAPI_TOKENは後ほど設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/976f8de7-2480-4664-7ec7-e0e2834e79d3.png)

###SlackApp登録・設定
[SlackAPI](https://api.slack.com/)の画面右上「Your App」をクリックし、アプリ管理画面に飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/646b1261-6ab2-5446-42f8-e56cd02a6895.png)

**Create New App**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/50996026-069b-c706-f09c-1a8bd6c34961.png)

**アプリ名**と**ワークスペース**を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/7f8c086a-10fa-5274-7b61-cd3f9b0be329.png)

するとこんな画面が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/f3300900-905b-0cff-8a03-8a3a861438cb.png)

**Add features and functionality**を開き、**Bots**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/484823bf-85a5-93ce-def4-e00c9ac0a802.png)

**Add a Bot User**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/6e8fe543-f3a6-b05c-c4ed-c4221d12504f.png)

Display nameとDefault usernameを設定し、**Add Bot User**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/30194f9b-9031-7820-6536-7b23eb9cd172.png)

左メニューの**OAuth & Permissions**をクリックすると、以下画面になります。
**Install App to Workspace**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/e39a3756-044a-b016-b476-8fab9acc25ea.png)

**インストール**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/3172d91c-b9d7-f7fa-6623-5ccb18f9e4e8.png)

**Bot User OAuth Access Token**をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/ca830f98-54e4-4d14-35cb-6266c42e6fa4.png)

###Slackbot設定・実装
Slackbotの設定に戻ります。
`slackbot_settings.py`のAPI_TOKENの箇所に、先ほどコピーした**Bot User OAuth Access Token**を記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/ebb789ad-9801-c4ec-75c1-b18050624a54.png)

続いて、pluginsフォルダの中にある`my_mention.py`を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/18dc3630-f9dc-8228-ed8e-0b524a6e0b88.png)

pythonからAutomateC.exe経由でロボットを実行するためには、**subprocess**モジュールのインポートが必要なので注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/963207bf-7d0e-2117-b57b-a071a6befc55.png)

なお、AutomateC.exeからのロボット実行については、以下記事参照。
[Blue Prismのプロセスをコマンドラインから起動する](https://www.ebocean.work/entry/2018/12/18/211050)

```python:my_mention.py
# coding: utf-8

from slackbot.bot import respond_to     # @botname: で反応するデコーダ
from slackbot.bot import listen_to      # チャネル内発言で反応するデコーダ
from slackbot.bot import default_reply  # 該当する応答がない場合に反応するデコーダ
import subprocess　#追加部分

#追加部分
@respond_to('交通費精算')
def mention_func(message):
    message.reply('BluePrism 交通費精算ロボットを起動します') # 交通費精算
    subprocess.call(["C:\XXXXXXX\Blue Prism Limited\Blue Prism Automate\AutomateC",
    "/run","プロセス名", "/resource", "動作させるランタイム・リソース", "/user", "ユーザー名", "パスワード"])
```

以上で事前準備は完了です。

###実行方法
Windowsの場合、コマンドプロンプトを開きます。
その後、Slackbotフォルダ直下まで移動し、

```
python run.py
```
を実行します。
すると、以下のように**start slackbot**と表示されます。これでslackbot起動中となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/aea0d8bc-569d-279c-0b94-6d4344a8d52c.png)

この状態で、Slackアプリを開きます。
そして、＠アプリ名（今回は**testApp**）を入力し、続けて**交通費精算**を入力した後、送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/9b410d3c-ed28-856b-601e-256702e525f9.png)

すると、Slackbotが応答し、交通費精算ロボットが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/174ccd3d-fb95-29b0-37dc-a90eb4c77b49.png)

#考察
今回はBluePrismで試しましたが、UiPathもシナリオをコマンド実行することは可能なので応用できると思います。

また、今回はランタイムリソース決め打ちで実行しましたが、複数のユーザーが同時にロボットを呼び出した場合に備えて、**リソースプール**を指定するのが良さそうです。（リソースプールを指定して実行することもできる…はず）
ロードバランシングはBP側でやってくれます。

他にも、エラー発生時やロボット実行完了時など、ロボットからSlackに通知を返す作りにすれば、
より運用がラクになると思います。
もっと作り込んでみたいと思います。