LoginSignup
6

More than 1 year has passed since last update.

posted at

updated at

Organization

UiPathのチャットサービスを使ってSlackからワークフローを呼び出してみた(Slack手前まで)

この投稿は [RPA] UiPath Friends 公式 Advent Calendar 2020 の13日目の投稿です。
この前の記事は【RPA(UiPath)】RPA導入のリスク(開発・実行編) です。

こんにちは!UiPath Japan MVP 2019,2020 の @masatomix です。

今回は UiPath が提供する、チャットボットサービスを使ってみました。
このサービスを使うことで「チャットボットと会話するかのように、UiPathのワークフローを呼び出す」ことができるようになります。
おもしろいですね。

ChatBot

さて今回は「Slack上のChatbot に話しかけることで、UiPathのワークフローを呼び出す」ことをやってみます。

概要

対象読者

  • ある程度は、UiPath / UiPath Orchestrator Community Cloud を触ったことがある
  • ワークフローをUnattended Robotから呼び出すくらいはできる

くらいの知識をお持ちの方をイメージして記事を書きました。

登場人物

具体的には以下の処理フローとなります。

  • ユーザがSlack上のChatbot (Slack App)に話しかける。
  • SlackのChatbot がUiPath Chatbot serviceを介して文章解析サービスである Dialogflow を呼び出し、ユーザのやりたいことを分析する
  • UiPath Chatbot serviceが、分析結果をもとに UiPath Orchestratorに登録されたワークフローを呼び出す
  • ワークフロー実行結果がDialogflow経由でChatbotへ返却され、ユーザがワークフローの実行結果を得る

という感じです。

Dialogflow は Google Cloud Platform 上のサービスですので、Googleのアカウントがあれば利用可能です。また今回使用するOrchestrator Community Cloud もGoogleアカウントでのログインに対応しているので(別アカウントのOrchestratorにも接続可能です)、Googleアカウントを一つ準備しておきましょう。

さて

ここまで説明しておいてアレなんですが、どうもいまのUiPath が推してるのは Dialogflow ではなくDruid chatbots ってヤツみたいなんですね。。
じつは UiPathが主催するHackathon UiPath HyperHack にチャットボットカテゴリで応募しようとこれらを調べ始めたんですが、途中で「Druidをつかうってシバリ」があることに気がついて、、。。

まあ Hackathonに応募できなかったイイワケです、ハイ。。。

つくるもの

今回はチャットサービスということでSlackのチャットボットに「ライセンス一覧ください」というと、結果を返してくれるサービス を作ってみます。

chatbot

うごかしてみる

動かしてみるとこんな感じ。画像をクリックすると動画が再生されます。

ChatbotサービスをつかってSlackからワークフローを呼び出してみたよ

事前準備(ワークフローや、各種サインアップ など)

ワークフロー

イチからぜんぶ説明するのはシンドイので、あらかじめ UiPath Studio で

  • 「target」というInパラメタ(string)をうけとり
  • ライセンス一覧をAPIで取得して
  • 結果を「resultStr」というOutパラメタ(string)で返す

というワークフローが作成済みで、UiPath Orchestratorに登録済みであるとします。
(説明記事とか、いつか書こうと思います。。たぶん。) これをSlack上のChatbotから呼び出すのがゴールとなります。

いちおうワークフローの引数を図示すると以下の通りです。

i000

コードはこちらから。
https://github.com/masatomix/UiPathChatbotServiceSample
GitHubにありますので、Studioのプロジェクトを作成します(Gitから取得します) などを参考に取得してみてください。

最初に示したとおり、登場人物はこんな感じです。

ChatBot

利用するサービスたちですが、Google Cloud Platform / Dialogflow / UiPath Orchestrator Community Cloud などです。

Google Cloud Platform

Firebase や Google Cloud Platformの初回のサインアップその他の備忘メモ にある 「Google Cloud Platform (GCP)のサインアップ」を実施してください。

こんな感じで「My First Project」というプロジェクトができていればOKです。プロジェクトを一意に定める値はプロジェクトIDであり、今回は「natural-bus-297506 」となってるようです。後で使います。

i001

Dialogflow

つづいて Dialogflow です。https://dialogflow.cloud.google.com/ にアクセスして、先ほどのGoogle アカウントでログインします。

i002

利用規約のチェックを入れて、Acceptします。

i003

準備ができたようです。
i004

UiPath Orchestrator Community Cloud

Studio/Unattended Robotが接続された「UiPath Orchestrator Community Cloud」 をつかいます。
https://cloud.uipath.com/ へアクセスすると、アカウントを作成してサインアップができると思います。Googleのアカウントでサインアップ可能です。
先のワークフローはココにPublishして、Unattended Robotから利用可能なようにしておきましょう。
(サインアップやワークフローのPublishは省略しますー)

i005

やってみる

さて実際にやってみましょう。Dialogflowは、Slackなどフロントエンドのサービスを経由してユーザの入力情報を受け取り、そこからユーザがやりたいことを抽出してくれるサービスです。

Dialogflowで処理フローを定義していく

まずはエージェントを作成します。左上のRegion が US であることを確認1しつつ「CREATE AGENT」をクリック。

createAgent000

名前は「UiPathChatServiceAgent」、Default Language を「Japanese-ja」、GoogleのProjectは先にでてきたプロジェクトIDである「natural-bus-297506 」を選びましょう。今回は一つしかないので多分迷うことはないかとおもいます。
さて「CREATE」をクリックします。

createAgent001

エージェントがひとつ、できたようですね。

createAgent002

Intent/Entityについて。

つづいてこのエージェントに「Entity」や「Intent」を追加していきます。
Intent は公式の説明によると「インテントは、どのユーザー リクエストを理解し、どのようなアクションを取るかを決定するもの」だそうです。今回だと「ライセンス一覧ください」という入力に対して「UiPath のUiPathChatbotServiceSample というワークフローを呼び出す」という処理を紐付けるモノと考えればよさそうです。

Entityは、Intent で文字列が解析された結果、抽出される情報の定義です。今回は「target」というEntityを定義し、その中にOrchestrator画面上の要素「ライセンス、マシン、ロボット」などを定義することにします。

Entity を定義する

ではEntityから定義していきます。
Entities メニューより、「CREATE ENTITY」をクリック。

createEntities000

名前を「target」とします。
下に具体的な値を定義していけるので「license」と入れてみました。右側にはシノニム(別名)をつけられるので、日本語の「ライセンス」を入れてみました。ユーザからの対話で「ライセンス」や「license」が入力されると「これはtargetというEntityの"license"だな」って、Intent側で抽出される、ってかんじです。

createEntities001

今回は使わないのですが、machines や robots も入れてみました。最後に「SAVE」をクリックすると、

createEntities002

保存されたようですね。

createEntities003

Intent を定義する

つづいて、Intentを作成していきます。左部の「Intents」をクリックして「CREATE INTENT」をクリック。
「show-info」と名前を入れてみました。つづいて「ADD TRADING PHRASES」をクリックしてください。

createIntent000

ADD TRADING PHRASESでは、このインテントで反応してもらいたい文章を入れていきます。
たとえば「ライセンス表示」といれてリターンしてください。
Entityに登録された文字は下記の通り自動認識されて「この部分はEntityだよね?」みたいなかんじになっているのがわかります。

createIntent001

ほかにもいくつか入れてみて、また文章を下記の通り何通りか入れてみて、うまくEntityが認識されることを確認してみてください。

続いて「MANAGE PARAMETERS AND ACTION」をクリックします。

createIntent002

先の文章たちから抽出されたEntityが、このIntentのパラメタとして自動で定義されていることが分かります。

createIntent003

パラメタの定義には、項目がいくつかありますが、詳細はココに記載されています。
このtargetパラメタは必須のパラメタにしたいので「REQUIRED」にチェックを入れておきました。

また「PARAMETER NAME」は、あとからひもづけるワークフロー側の変数名と自動でマッピングされるので「target」にしておきます(Entity名をそのようにしたので、あらかじめtargetになってるはずです。)

最後に「SAVE」をクリックして保存しておきましょう。

Intent/Entity の疎通確認

さて、できたIntent/Entityをすこしテストしてみます。

右側に、なにやらテストで入力できる領域があるので「ライセンスを一覧して」と入れてみましょう。すると、下の結果部分にINTENTが「show-info」、PARAMETERが 「target = license」となって、文中のEntityがただしく抽出できていることや、ただしいIntentが選択されていることが分かりました。

createIntent004

もう一つ例を。「表示して。License」と入れてみます。正しい結果が得られました。

createIntent005

このように (今回は一つしか作成しませんでしたが) 各Intentにある「Traning phrases 」にそれぞれ文章を与えていくことで、狙ったIntentにイイ感じに振り分けていくよう学習させる仕組みになっています。

もう一つ。さきほどtargetパラメタは必須にしたのでその確認。「一覧表示」という文章を入れてみると、、

createIntent006

必須パラメタがないので「What is the target?」と聞かれました。

createIntent007_0

上部の Try it now に「ライセンス」と入れてみると、PARAMETERが「target = license」となりました。

createIntent007

このように Dialogflowは文章の解析・パラメタの抽出だけでなく、パラメタがない場合は聞き返す、などを自動でやってくれたりします。また今回はセットしませんでしたが「もう一回表示して」などと言ったとき前の入力値のパラメタを再利用してくれるfollow up Intent機能とか、会話におけるロジックをいろいろお任せできちゃうわけですね。便利です。

Intent の戻り値を定義する

そういえばIntent に対してパラメタまでは作成しましたが、ユーザに返す戻り値を作ってなかったので、これから作っていきます。
パラメタの下に、Responses 欄があるので、そこに

実行結果です
<resultStr>

と入力します(改行は Shift + Enter)。SAVEをクリックすれば完了です。

コード中の <resultStr> は、UiPathのワークフローのOutパラメタにあわせてあります。お察しの通り、呼び出されたワークフローの resultStr 変数の値でココが置き換えられる仕組みです。

createIntent008

ユーザ入力値を受け取って解析する箇所と、そのあとワークフローが実行されたのちに実行結果を受け取る箇所は以上です。
みんな大好きノーコードです。

Dialogflowの世界はまずは以上です。

UiPath Chatbot service でOrchestratorとDialogflowを接続する

さて UiPath Orchestrator とワークフロー につづきDialogflow がセットアップできたので、UiPath Chatbot service を用いてそれらをつないでいきます。
https://chatbot.uipath.com/ へアクセスしConnectをクリック。

conOC000

名前はなんでもよいのですが「UiPathChatbotServiceDemo」としました。Saveをクリックして完了です。

conOC001

UiPath Orchestrator とつなぐ

接続するOrchestratorとDialogflowを設定する画面になります。まずはOrchestratorから。

conOC002

Orchstratorに接続するための情報を設定していきます。
下記の画面にもリンク先などが書いてあるので基本はその通りやればよいのですが、UiPath Orchestrator APIに必要なアクセストークンを取得する などの記事に説明されているやり方で、

  • User Key
  • Account Logical Name
  • Tenant Logical Name
  • Client ID

を取得して設定すればOKです(Orchestrator Community Cloud のAPI 設定をしたことがある方はおなじみですね)。
最後にConnect して終了です。

conOC003

Dialogflowとつなぐ前準備 (Google Cloud Platformでサービスアカウントを作成)

つづいてDialogflowですが、UiPath Chatbot service がDialogflowにアクセスするためのアカウントである「サービスアカウント」を作成します。
Google Cloud Platform にアクセスします。操作したいプロジェクトを選択して「APIとサービス >> 認証情報」 と遷移し、「認証情報を作成 >> サービスアカウント」を選択。

serviceAccount000

サービスアカウント名を、今回はdialogflowを操作できるアカウントということで「dialogflow integrations」にしました。サービスアカウントIDは自動で決定されるので「作成」をクリック。

serviceAccount001

サービスアカウントにどんな操作を許可するかを設定する、ロールを指定します。テキストボックスでフィルタリングしつつ、ここでは「Dialogflow API 管理者」を選択しました。図は隠れてますが「続行」をクリックして、その下の「完了」をクリックします。

serviceAccount002
作成できたようですね。

つづいて、このサービスアカウントを利用するための鍵ファイル(JSONファイル)を作成します。
サービスアカウント欄のメールにあるリンクをクリックします。

serviceAccount004

クリックしたサービスアカウントの詳細画面に遷移するので 「鍵を追加 >> 新しい鍵を作成」 を選択。
serviceAccount005

ファイル形式は「JSON」ファイルを選択し「作成」をクリック。
serviceAccount006

JSONファイルがダウンロードできたと思います。ちなみに中身はこんな感じです。赤枠で囲ってるところは、このつぎで使う項目です。
serviceAccount007

Dialogflowとつなぐ

さてUiPath Chatbot service に戻って、Dialogflowと接続するために Connectをクリックします。
serviceAccount008_0

サービスアカウントの情報を記述していきますので、さきほどダウンロードしたJSONファイルを見ながら、

  • Project ID : JSONファイルのproject_id の値
  • Service Account : JSONファイルのclient_email の値
  • Private Key: JSONファイルの private_key の値

を設定していってください。
最後にConnectをクリックすればOKです。
serviceAccount008

どちらにも接続が完了しました!
serviceAccount010

Orchestrator上のワークフロー と、DialogflowのIntentをマッピングする

もうすこしです。UiPath Chatbot service 上に、OrchestratorとDialogflowが登録できたので、Orchestrator上のワークフローとDialogflow上のIntentを紐付けていきます。

UiPath Chatbot service の左メニューの Mapを選択。Dialogflow上のIntentが表示されるはずですので、先ほど作成したIntent「show-info」をクリックします。

mapping000

Orchestrator上のワークフロー (Orchestrator Processes) が表示されますので、作成済みの「UiPathChatbotServiceSample 」を選択します。
下記のキャプチャの通り、ワークフローのIn引数 target と Dialogflowのshow-info Intent のParameter が一致していますので、自動でマッピングされます。
(逆に手動でマッピングする方法が分からない)

またワークフローのOut引数が resultStr となっていますが、これもIntent側のResponses で <resultStr> と参照していましたね。
最後に「Map」をクリックします。

mapping001

以上で、マッピングは完了です。

mapping002

WEB のテストチャットでテスト

いまだSlackが出てきませんが、まだです。というか記事が長くなりすぎたので、あらためて別記事にしようと思います。ゴメンナサイ。

さてさて、Slackにつなぐ前にWEBのテストアプリで接続できているかを確認しましょう!
左メニューより、Launchを選択、Webの「Connect」をクリックします。

testChat000

名前とか何でもよいのですがたとえば「chat bot」とかにして「Save&Close」をクリックします。

testChat001

「Test」ボタンが表示されるのでクリックすると、

testChat002

なにやら画面が表示されました。最初よく分からなくて待っちゃいましたが、右下のチャットのアイコンをクリックします。

testChat003

チャットウィンドウが表示されましたね。
「ライセンスを表示して」などと入力して Sendしてみると、、、

testChat004

おお、Orchestrator 経由でワークフローがジョブ実行されて動き出して、その実行結果が 表示されましたね!

testChat005

ここまででいったんまとめ。

長かったですね。登場人物多すぎでしょうか。
まだSlackまでできていませんが、あらためて記事にしようと思います。

-- 2020/12/22追記 --
別記事かきました
UiPathのチャットサービスを使ってワークフローを呼び出してみた(Slack編)

  • Dialogflow を使うと、ユーザが入力した文章を解析して、やりたいことを抽出することができました
  • UiPath Chatbot service をつかうと、DialogflowからUiPath Orchestrator にパラメタを渡したり、結果を受け取ることができました。つまり日本語の文章をインプットにOrchestrator上のワークフローを制御できるってコトですね。
  • Slack連携は今回はやりませんでしたが、以下の流れになります。
    • Slack上 ( https://api.slack.com/apps )で Slack App を作成し、UiPath Chatbot service に登録します。
    • その Slack App には、"direct messageを受けたら"というイベントトリガー (Event Subscriptions)を設定します (DMを受けると、UiPath Chatbot service へリクエストが飛んで、Orchestrator 上のワークフローが呼び出されるという仕組み )。
    • そのアプリを 自分のワークスペースにインストールします。
    • あとは、そのアプリにDMを送れば、応答としてUiPathのワークフローの結果が得られます。

先ほど少し書きましたが、 これを調べ始めたきっかけは UiPathが主催するHackathon UiPath HyperHack にチャットボットカテゴリってのがあってエントリするつもりだったからですね。当初このチャットボット機構と UiPath Data Service2 をつかってモノを作るつもりでした(というか作っていえで使ってます)。

時間の都合で応募は断念しちゃいましたが、Dialogflowに出会えたので Hackathon があってよかった!って思ってます。

以上です。お疲れさまでした!

関連リンク


  1. Tokyo Japan とかがあるので選んだりすると、あとでOrchestratorとつながりませんのでご注意。 

  2. Orchestrator上にホスティングするDB、というかOR-Mappingサービス。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6