前回までの復習
前回より、Slack に「ライセンス一覧ください」というと結果を返してくれるサンプル を作りながら、UiPathのチャットサービスの機構をご紹介しています。UiPathのチャットサービスとは、下記のように「Slack上の Chatbot に話しかけることで、UiPathのワークフローを呼び出す」ことが出来るサービスです。
動かしてみるとこんな感じ。画像をクリックすると動画が再生されます。
前回までで Slack以外の部分をつくったので、今回はSlackの部分をやっていきます。
処理シーケンス
上記の図で処理の流れのイメージを書きましたが、もうすこし厳密に処理シーケンスを書いてみました。
チャットボットに「ライセンス表示して!」とDMを送信したときの処理シーケンスは以下の通りです。
- ユーザはSlack App ( Chatbot )に「ライセンス表示して!」とDM送信する
- Slack Appは DMが送信されたというイベントに反応して、UiPath Chatbot service にリクエストを送信する(Slack のEvent Subscription 機構による処理)
- UiPath Chatbot service はサービスアカウントをつかって Dialogflow のAPI を呼び出し、Dialogflowの実行結果を得る
- UiPath Chatbot service は Intentにマッピングされたワークフローの実行をOrchestrator に依頼する
- UiPath Chatbot service は Dialogflowの戻り値 の一部をワークフローの実行結果で置換して、Slack にメッセージをPOSTする
では、Slack部分を実装していきます。といってもノーコードですのでご安心を。
対象読者
- ある程度は、UiPath / UiPath Orchestrator Community Cloud を触ったことがある
- ワークフローをUnattended Robotから呼び出すくらいはできる
- 前回の記事を参照済み
くらいの知識をお持ちの方をイメージして記事を書きました。
やってみる
新規作成 & Basic Information
こちらの記事 にSlack Appを新規作成する手順がありますので、リンク先の「Slack App (Hello World App)の作成」をやってみてください。そうすると下記のように ClientID,Client Secret,Signing Secret が得られるはずです。
ClientID,Client Secret,Signing Secret はこのつぎで使うのでメモっておきましょう。
またアプリの設定は後ほど引き続きおこなうので、SlackのWEB画面はこのまま閉じないで置いておきましょう。
以下はUiPath Chatbot service側で作業します
https://chatbot.uipath.com/ にアクセスし、左の「Launch」をクリック。SlackアイコンのConnectをクリックします。
先のClientID,Client Secret,Signing Secret をセットして「Next」をクリック。
下記のような画面が表示されます。このURL二つ「OAuth URL」「Request URL」はつぎで使いますのでメモっておきましょう。
また下記画面の右部には「あとこれだけやろうね」って説明が動画とともに説明されているので、とりあえずこの画面は閉じないで置いておきましょう。
UiPath Chatbot service 側での設定は以上です。
引き続きSlack Appの設定をしていきます。
Setup Authentication and Bot Permissions
以下は先ほど置いておいた「Slack側の画面」で作業します
Redirect URL
Redirect URLを設定します。
以下 蛇足
これは Slackのワークスペースに Slack Appを追加(Install) する際に、「ユーザが認可する」ってオペをするのですが、その認可したという結果をリダイレクトする先です。リダイレクト先ではその結果(認可コードっていいます) を元にアクセストークンを取得するのが一般的です。
今回のRedirect先は、UiPath Chatbot service の指定したURLとなっていて、結果、UiPath Chatbot service がアクセストークンを取得することができ、UiPath Chatbot service はユーザが許可したSlackのワークスペースにメッセージを送信することができるようになるわけですね。
左メニューの OAuth & Permissions を選択し Redirect URLs の欄の「Add New Redirect URL」をクリック、テキストボックスに、先の UiPath Chatbot service のURL2つのうちの「OAuth URL」を入れて「Add」、最後に 「Save URLs」 をクリックします。
Permissions
つづいてBot がおこなうオペレーションを設定します。先のUiPath Chatbot service の画面の動画も参考にしつつ作業しましょう。
以下蛇足
Slack Appは OAuthの Clientなので、たとえば「チャンネルにボットとしてメッセージを送信する」などの**操作をユーザに許可(認可)をもらう必要があり、**認可してもらいたい操作(Scope) を設定している、ってことですね。
ココで設定した操作は、ユーザが認可する画面にて「このボットは "ボットとしてメッセージを送信する" などを行うけど、許可しますか?」って説明などに使われます。(下記はサンプルイメージ)
さてやっていきます。OAuth & Permissionsをすこし下にスクロールして、**Scopes の Bot Token Scopes にて「Add an OAuth Scope」**をクリック。
その上の「Add permission by Scope or API method...」とあるプルダウンで「chat:write」を選択、再び下のボタンを押して「 im:history」... と続けて結果的に chat:write, im:history, im:read, im:write を追加してください。
OAuth & Permissions の設定は以上です。
Setup Messaging
ひきつづきSlack側の画面で作業します
Slack サーバから UiPath Chatbot service へのリクエストのトリガーは「チャットボット宛のDMが送信されたら」でしたが、そのイベントを検知してリクエストを送るのは「Event Subscription」という機構です。ということでその設定画面で「DM というイベントが発生したら」というイベント発生時の Request先のURLなどを指定していきます。
Event Subscriptions をクリック、下記の画面で Enable Events をONにします。
表示される Request URL のテキストボックスに、先の UiPath Chatbot service のURL2つのうちの「Request URL」を入れてEnter、上にVerified とでればOKです。
つづいてちょっと下の Subscribe to bot events をクリックして、「Add Bot User Event」をクリック。テキストボックスで補完を活用しつつ**「message.im」を選択**します。
Descriptionが**「DMのチャンネルにメッセージがポストされたら」というイベントになってますね。最後に「Save Changes」をクリックして設定を保存**します。
以上で Slack Appの作成は完了です。おつかれさまでした。
Install your Slack Bot
さいごに、このSlack App を利用したいSlackのワークスペースに、作成したアプリを追加( Install ) します。
ちなみにこのアプリは作成者が属する Slackにしかインストールできませんのでご安心ください。
ひきつづき、Slack側の画面で作業します
Manage Distributionへ遷移して、「Add to Slack」ボタンをクリックします。
認可画面が表示されます。先ほど Permissionsで指定した4つのScopeについて、許可してイイ?って聞いてきていますね。
「Allow」をクリックしましょう。
インストールが成功しました的なメッセージが出ていればOKです。
Slackで疎通
ようやく、Slackからの疎通ですね。
インストールしたSlackのワークスペースを表示してみると、アプリが追加されています。
「ライセンスを表示して」とDMを送信すると、結果が表示されました。
「表示して」とだけ表示するとDialogflowが聞き返してくる、なども正しく動いていそうですね。
以上です。お疲れさまでした。
まとめ
- Slackに何かを問いかけることで、UiPath のワークフローが動いてその結果を受け取れることが分かりました。
- よってDialogflowにいろいろなインテントを設定してワークフローをマッピングしておけば、Slackから Unattended Robotの実行を制御できるということですね。
- 自分は実際に、家の日常品の在庫管理に使ってます。
- Slackに「シャンプー2つ買ったから在庫に追加して」とか「洗顔ないからAmazonのURL送って」とか。なかなか便利に使えてます。
- データはUiPath DataServiceに入れて管理しているので、データの永続化まで含めてサーバレスです1
関連リンク
- Dialogflow
- UiPath Orchestrator Community Cloud
- UiPath Chatbot service
- FirebaseアプリからSlackへ通知を行う。アクセストークンは手動で設定する編。 Slack App の作り方の記事です。
-
サーバレスのかわりに、クライアントPCが必要ですけどね。。そして、これらをUiPathのワークフローでやる必要ある?については議論しない :-) ↩