チャットアプリとRPAとの連携
はじめに
RPAで業務の自動化を進めていく上で、ユーザとの対話を自動化したいときに登場するのがチャットアプリです。ユーザからの問い合わせについても多くの業務で定型的なものが存在し、またそれへの対応に多くの人手が取られている現実があります。これを自動化できれば、ユーザからの問い合わせ対応にかかる人手を削減できます。
そこで今回は、チャットアプリとRPAの連携でどのようなことができるか、実際にサンプルを作成しながら理解を深めていきたいと思います。
効果的なユースケースの一例として以下を考えてみます。ユーザは営業担当者です。客先で商談を終えた直後、携帯のチャットアプリを起動します。商談の内容を踏まえて顧客情報、製品情報、その数量などをチャットボットへ伝えます。するとRPA化された自動化プロセスによって、社内にあるロボットが送られた情報をもとに見積書を作成してくれるといったものです。
チャットアプリを通して、ロボットをパーソナルアシスタントとして活用できるイメージです。
そのほか、下記のユースケースでもチャットアプリとRPAの連携が有用です。
- バッチ処理として自動化した一連のRPAのプロセス完了後、RPA運用者にチャットアプリにてその完了通知を送る
- 社内システムのアカウントのロック解除をチャットボットに依頼すると、RPA化された自動化プロセスがロックを解除する
これらはテクノロジーの観点からすると、すべて実現可能なものです。チャットアプリとUiPathといったRPA製品においては、現在のシステム連携の潮流に従いREST APIが提供されています。お互いに疎結合での相互連携が、簡易に実現可能なものとなるのです。
今回はチャットアプリとRPAの連携に焦点を当てます。
2つのサンプルケース
今回は下記の2つのサンプルケースについて、チャットアプリとRPAの連携を実現します。そしてそのアーキテクチャーや実装方法の理解を深めます。
- ロボットで実行・処理した結果を、チャットアプリへ連携し通知するもの
- UiPathのロボットからチャットアプリへメッセージを送るだけのもので、RPAの開発知識のみを必要とします。
- チャットボットとの対話で入力されたデータをもとにRPAで自動化処理し、その結果をチャットボットで通知するもの(前述の見積り作成)
- チャットボットからUiPathのロボットを起動するため、Orchestratorを必要とします。またチャットボットの実装にあたり、プログラミングの知識も必要となります。
チャットアプリは、業務での利用が多いSlackを使用します。その他のチャットアプリについても、Slackと同様の連携機能が用意されています。その他のチャットアプリを利用されている方は、適宜読み替えて参考にしてください。
SlackへBOTを登録
まず、Slackと外部のアプリケーションであるRPAが連携できるようにするために、Slack上でSlack App(BOT)を登録します。
- BOT登録ページ(https://api.slack.com/apps?new_app=1)
「Create an App」ボタンをクリックして登録作業を進めます。
「App Name」に使用するSlack Appの名称を入力します。こちらは、Slackの画面においても表示されるものです。「Development Slack Workspace」は適宜、自身の環境が指定されていることを確認します。
登録が完了すると、API Tokenが発行されます。これ以降、ロボットや外部のアプリケーションがSlackと連携する際は、このTokenを使用します。
以上で、Slack上でのBOTの登録は完了しました。ダイレクトメッセージのやり取りやチャンネルへの招待が可能となります。
サンプルケース1
ロボットからSlackへの通知
これより、「ロボットで実行・処理した結果をチャットアプリへ連携し通知するもの」を実装していきます。今回のサンプルで作成するロボットは、ユーザとインタラクティブに動作します。WebブラウザやPDFなどで気に入った文章や後で読みたい文章をSlackにリアルタイムで投稿するものです。
ロボットではイベントモニタリングの機能を使用して、「Ctrl+Up」が押されると選択中の文字列をコピーし、その文字列をSlack APIを利用してSlackへ投稿する実装とします。用途としては、Webサイト、PDF資料、メールなどにおいて、気になった文章をクリッピングするためのものです。クリッピングした文章は、Slackに全て投稿されます。
「イベントを監視」は、指定したイベントが発生すると「イベントハンドラー」内の処理を実行する機能です。ユーザの特定のキー操作やマウス操作のイベント、ファイルの新規作成・変更といったシステム上のイベントを監視できます。
イベントモニタリングの応用的な使用方法として、例えばコールセンターでのオペレーションにおいて特定のWebサイトへの入力を監視し、バックグラウンドで顧客情報を別システムへロボットに自動入力させることも可能となります。普段、複数システムへの重複入力が発生しているビジネスシーンで時間短縮となる効果的な自動化となります。
ワークフロー
それでは早速、UiPath Studioで「slack_notification」という名称の新規プロジェクトを作成します。開発するワークフローは次の通りです。
「イベントを監視」のイベントモニター機能により、「ホットキートリガー」のアクティビティにて、ユーザからの「Ctrl+Up」の操作発生を監視します。
イベント監視より、自動化が実行されると「選択されたテキストをコピー」の処理で、選択中のテキストを「message」という文字列型の変数へ保存します。「トライキャッチ」で囲んでいるのは、何も選択されていない場合など例外がスローされるためです。例外「Exception」をキャッチした場合の「message」は、.Net Framework VB.NETのNull値である「Nothing」としておきます。
その後、「条件分岐」にて、messageが「Nothing」でないという条件で場合分け処理を行います。こちらが「True」の場合、すなわちmessageにテキストが保持されている場合は、Slackへ投稿する流れとなります。
Slackへの投稿にあたって、新たに「decoratedMessage」という文字列型変数へ、下記のフォーマットでクリップしたテキストを修飾します。
"クリップされたテキスト" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + Environment.NewLine + "```" + message + "```"
「クリップされたテキスト」という固定の文字列と投稿時刻に続けて改行し、コピーしたテキストをボーダー付き引用段落表現にて表示するようにします。「```」はSlackのMarkdown表記です。文字の前後の行にこれを入れると、ボーダー付きの引用段落として表現されます。
その後、「HTTPリクエスト」アクティビティにて、Slack API呼び出しを行う実装とします。ここではSlackへのメッセージ投稿用に「chat.postMessage」というAPIを使用します。
「HTTPリクエスト」アクティビティが見つからない場合、次項「HTTP/HTTPS通信」を参照してください。
- Slack API chat.postMessage(https://api.slack.com/methods/chat.postMessage)
「入力」
「エンドポイント」には、下記のSlack APIのエンドポイントを指定します。
https://slack.com/api/chat.postMessage
「メソッド」(HTTP Method)には、「POST」メソッドを指定します。なお、このAPIでは「POST」メソッドが推奨されていますが、「GET」メソッドもサポートされています。
「オプション」
「パラメータ」(GETメソッドの引数)へは、以下の項目を指定します。
名前 | 方向 | 型 | サンプル値 / 変数 | 説明 |
---|---|---|---|---|
token | 入力 | String | “xoxb-5634373235-565512315213-6dksjqvZKKvXXtGuv4muXX99” | Slack API登録時に生成されたToken。左はダミーのもの |
channel | 入力 | String | “thinkit” | Slackのチャンネル。事前にチャンネルは作成しておきます |
text | 入力 | String | decoratedMessage | 投稿するメッセージ |
as_user | 入力 | String | “true” | 「as_user=true」とするとTokenを発行したBot名となる |
「出力」
「状態コード」(Http Status)に、「httpStatus」という変数、「結果」(Http Response Body)に、「result」という変数を指定します。
最後に、Slack APIの応答結果を「httpStatus」と「result」で確認できますので、これらの値をログ出力しておきます。Http Statusは、数値でHTTP通信の通信結果を表現するもので、200が正常、40x、50x(xには数字が入ります)については、何かしらの問題があり、正常にHTTP通信が行われなかったことを意味します。
検証
それでは実際にロボットを動かして動作検証を実施します。なお、BOTはSlack上で事前に#thinkit
というチャンネルに登録してあります。
Webブラウザで適当なWebサイトを表示し、マウスでテキストを選択した状態とします。その状態でキーボードの「Ctrl」キーと「Up」キーを同時に押します。
下図のように、選択したテキストが指定したSlackチャンネルへロボットから投稿されていれば成功です。
サンプルのダウンロード
ここで使用したサンプルは、以下からダウンロードできます。
HTTP/HTTPS通信について
HTTP/HTTPS通信を行う「HTTPリクエスト」アクティビティは、UiPath Studioにはデフォルトでは含まれておらず、自身で追加する必要があります。追加にあたっては、UiPath Studioの「デザイン」パネルより、「パッケージを管理」のボタンをクリックします。
するとパッケージ管理のウィンドウが開きます。左側のペインにて、外部やローカルフォルダのパッケージフィードが選択できます。ここでは「オフィシャル」を選択し、検索窓に「web」と入力すると「UiPath.Web.Actiivties」のパッケージが現れます。こちらを選択し、「インストール」ボタン、「保存」ボタンをクリックする流れでパッケージを追加します。
以上で「HTTPリクエスト」アクティビティが使用可能となります。