Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

UiPathでSalesforceとAmazon Connectをつなげてみた

 こんにちは、ロジカル・アーツの小畑です。

 この記事では、Salesforceシステム管理者向けに、UiPathを介したSalesforceAmazon Connectのインテグレーションのポイントを挙げていきます。

はじめに

 Salesforce(Service CloudもしくはSales Cloud)とAWS(Amazon Connect)とのインテグレーションのパターンは、現在ではいろいろあります。
クラウド間API連携です。

 しかし、APIがサポートされていなかった過去では、UIにプログラムを組み合わせて入出力を自動化する等、苦労していました。
この発想の延長がRPAとも言えます。

 ここでは、RPAでPoCに適しているUiPathを介して、SalesforceAmazon Connectを連携させてみます。

0.デモシナリオの説明と準備

 「Salesforceで取引先責任者の氏名を(グローバル)検索すると、その電話番号にAmazon Connectから発呼がなされる」

 SalesforceAmazon Connect CTIアダプタは導入せず、Platformの機能のみ利用します。
また、Amazon Connectに関しては、AWSマネジメントコンソールから、Amazon ConnectインスタンスとIAMのみ宣言的に利用します(Lambdaプログラミング等はいたしません)。

 Salesforceは、Trailhead Playground(TP)を利用します。
ただし、Trailhead プロジェクトで、Amazon Connectを扱ったことがある場合は、できるだけ当該プロジェクトで使用したものとは別のTPを用意してください。

 AWSアカウントも必要です。ただし、Trailhead プロジェクトで、Amazon Connectを扱ったことがある場合は、当該プロジェクトで使用したものとは別のAmazon Connectインスタンスを用意してください(場合によっては、インスタンス数に関するサービスクォータの緩和が必要です)。

 UiPathは、UiPath Studio で開発および実行します。
“UiPath Automation Cloud for community” にサインアップ*1して、Studioをダウンロードしてください。

1.Webレコーディング(Salesforce Classic)

 まず、Salesforce側のUIを、UiPathのWebレコーディング機能を利用して自動化します。

1.1 Salesforceでの準備

 RPAの安定動作のためには、ユーザフレンドリーなインタフェースよりもマシンフレンドリーなインタフェースを利用することがよいとされています。
そこで、一般に使われているLightning Experienceではなく、Salesforce Classicを採用します。

1.1.1 環境の確認

 Salesforceにアクセスするブラウザに応じたExtension*2 を、UiPath Studio にインストールしておいてください。
また、UiPath Studio を動作させるPCから、当該ブラウザで当該のSalesforceにログインできることを確認しておいてください。

1.1.2 取引先/取引先責任者の作成

 TPにはサンプルの取引先/取引先責任者データがありますが、それらの電話番号に発呼することはできないので、電話番号がわかっていて電話を受けることのできる自分もしくはその周辺を、取引先責任者(もしくは)取引先として登録します。
電話番号を含む最低限の情報でレコードを作成すればOKです。

1.1.3 Salesforce Classicへの切り替え

 Webレコーディング*3を始める前に、Salesforce Classicに切り替えます。
Lightning ExperienceはSPA(シングルページアプリケーション)であり*4、Webレコーディングとの相性はあまりよくありません*5
無理せずSalesforce Classicを使いましょう。

1.2 UiPath Studio での操作

 UiPath Studio を起動します*6
この時点では、カスタムのアクティビティパッケージをインストールする必要はありません。
標準の“UiPath.system.Activities”*7と“UiPath.UIAutomation.Activities”*8で事足りるはずです。

1.2.1 レコーディング起点となるURLへの移動

 Webレコーディングをどの画面で開始するかは、非常に重要です。
ログイン操作とか、他のブラウザタブからタブを起動する操作は、当面の自動化対象からは外します。
URLが固定されている画面を選ぶとよいです。
 ここでは、“Apps”のURL:
https://<YOURDOMAIN>-dev-ed.my.salesforce.com/02u?setupid=TabSet” を選びます。

1.2.2 グローバル検索のレコーディング

 それでは、Webレコーディングを始めます。

1.2.2.1 自動レコーディング

 まず、自動レコーディングで、検索語入力と結果の表示まで進めます。
たとえばサンプルデータとしてあるはずの取引先責任者“Gonzalez Rose” で検索します。
(電話番号を含む)結果が表示されたら、ひとまずレコーディングを中断します。
「文字を入力」*9と「クリック」*10の二つのアクティビティが、UiPathのデザイナーパネルに展開されるはずです。

1.2.2.2 手動レコーディング

 次に、検索結果(電話番号だと“(512) 757-6000”)をUiPathに渡すため、手動レコーディングで再開します。
成功すると、「テキストを取得」*11アクティビティが、UiPathのデザイナーパネルに追加されます。

1.2.3 デザイナーパネルでの編集

 「入力ダイアログ」と「メッセージボックス」を用いて、UiPath Studio に対するユーザの入出力を定義(プログラミング)します。

1.2.3.1 入力ダイアログの配置

 Webレコーディングの際は、特定の取引先責任者で検索しましたが、ユーザからの入力で検索するようにUiPath Studio でプログラミングします。
取引先責任者名を変数化*12し、「入力ダイアログ」*13でユーザに入力させたものを流すようにします。

1.2.3.2 メッセージボックスの配置

 検索の結果得られる情報で最も大切なのは電話番号なので、変数化するとともに、デバッグ目的も含めてその内容を表示するようにUiPath Studio でプログラミングします。
「メッセージボックス」*14でユーザ向けに出力させます。

 ここまでのUiPath Studio デザイナーパネルです。

“Demonstration_alt_Ver1_201217_TP6_xxxxxxxx-uipath-demo_Classic”のデザイナーパネルのイメージ

2.“UiPath.AmazonConnect.Activities” パッケージ

 次に、Amazon Connectからの発呼を、UiPathの“UiPath.AmazonConnect.Activities” アクティビティパッケージを用いて自動化します。
これまでとは別の、新しいUiPathプロジェクトを作成します。
リソースは以下です。
「Connecting UiPath Automation to Amazon Connect」*15
Amazon Connect」*16

2.1 AWSマネジメントコンソールでの準備

 AWSマネジメントコンソールから、Amazon Connect仮想サポートセンターインスタンスを起動します。
「ステップ1: 起動 Amazon Connect」*17
を参考にします。

2.1.1 Amazon Connectインスタンスの作成

 Amazon Connect仮想サポートセンターインスタンスから、Amazon Connectインスタンスを作成し、電話番号を取得します。
「ステップ2: インスタンスを作成する」 *18
「ステップ3: 電話番号を取得する」 *19
を参考にします。

Amazon Connectインスタンス“xxxxxxxx-uipath-demo”が作成されました。

“Amazon Connect仮想サポートセンターインスタンス”のスクリーンショット

2.1.2 IAM の調整

 UiPath公式ドキュメント「セットアップ」*20の「1. Create IAM User」に沿って、AWSマネジメントコンソールのIAMでUiPath用のグループとユーザを作成します。
7.まででグループ“RPA” (例)を、12. まででユーザー“UiPath”(例)を作成します。
13. で“Access key ID”と“Secret access key”が判明するので、忘れないように手元に控えておきましょう(2.2.1で使います)。

ちなみに、
グループARN …“arn:aws:iam::xxxxxxxxxxxx:group/RPA”
ユーザーARN …“arn:aws:iam::xxxxxxxxxxxx:user/UiPath”
のような形式になるはずです。

2.1.3 発呼用問い合わせフローの作成

 ごく簡単なアウトバウンドの問い合わせフローを作成します。
「ステップ4: コンタクトフローの作成」 *21
を参考にします。

問い合わせフローデザイナーの画面です。
フロー名は“Demo_Outbound_Flow_xxxxxxxx-uipath-demo” です。
問い合わせブロックは2個しかありません。

“Demo_Outbound_Flow_xxxxxxxx-uipath-demo” のスクリーンショット

 この問い合わせフローのARN/UUIDを手元に控えておきましょう(2.2.2で使います)。ARN は、
“arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/contact-flow/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”
のような形式になるはずです(UUIDは“contact-flow”よりも後ろのものになります)。

2.2 UiPath Studio での操作

 UiPath Studio で新しいプロジェクトを作成します。
その際に、“UiPath.AmazonConnect.Activities” アクティビティパッケージをインストールします。
以降は、
「クイックスタート - 呼び出しを送信」 *22
を参考にします。

2.2.1 Amazon Connect Scopeの配置

 「Amazon Connect Scope」*23
を参考に、Amazon Connectインスタンスへの接続の設定をします。
2.1.2で控えた“Access key ID”と“Secret access key”を、“AccessKeyId” と“Secret”とします。

2.2.2 「Make Voice Call」 アクティビティの配置

 「Make voice call」 *24
を参考に、発呼の設定をします。
2.1.3で控えた問い合わせフローのGUID(UUID)を“ContactFlowId” とします。
なお、“To”の発呼先電話番号は、現段階では固定です。

 ここまでのUiPath Studio デザイナーパネルです。

“Place_a_Voice_Call_xxxxxxxx-uipath-demo” のデザイナーパネルのイメージ

3.UiPathプロジェクトでの“パーツ”の統合(1回目)

 1.2.3.2までで作成したプロジェクトと、2.2.2までで作成したプロジェクトを、一つにまとめます。
その際、発呼先電話番号を変数化することがポイントです。

 統合されたプロジェクトのデザイナーパネルです。

“Demonstration_alt_Ver1_201218_TP6_xxxxxxxx-uipath-demo_Classic”のデザイナーパネルのイメージ

4.“UiPath.Salesforce.Activities”パッケージ

 1.では、(Salesforce Classicでの)UI入出力をWebレコーディングすることにより自動化しました。
今度は、UIではなくAPI*25によってSalesforceへのアクセスを自動化します。
“UiPath.Salesforce.Activities”アクティビティパッケージを用います。
リソースは以下です。
Salesforce Activity Pack」*26
Salesforce_Activity_Pack_-_Getting_Started_Guide.pdf”*27※以下、“SFAPスタートガイド”と略記
Salesforceアクティビティパッケージについて」*28

4.1 Salesforceでの準備

 “SFAPスタートガイド”の「Developer Account Setup」 に沿って、UiPathで使用するSalesforceユーザアカウントのセキュリティトークンを把握します。
ユーザアカウントの現在のパスワードに対応するセキュリティトークンが既知の場合は不要ですが、そうでない場合は、セキュリティトークンをリセットして取得します。

セキュリティトークンのリセット要求が受理されたところです。

“Reset Security Token”のスクリーンショット

4.1.1 接続アプリケーションの作成

 “SFAPスタートガイド”の「Setup a Salesforce Connected App」に沿って、接続アプリケーションを作成します。
特に“API (Enable OAuth Settings)” セクションの設定に注意します。

接続アプリケーション“UiPath_Demo_TP6” が作成されました(Lightning Experienceアプリケーションマネージャの画面です)。

“Lightning Experience App Manager”のスクリーンショット

Lightning Experienceアプリケーションマネージャから“UiPath_Demo_TP6” を“View”で開けてみます。

“UiPath_Demo_TP6” のスクリーンショット

 “SFAPスタートガイド”の続きにある通り、API (Enable OAuth Settings) セクションにおいて、
Consumer Key
Consumer Secret
が設定されたことがわかります。

参考までに、接続アプリケーションの一覧画面です。

“Manage Connected Apps” のスクリーンショット

Lightning Experienceアプリケーションマネージャから“UiPath_Demo_TP6” を“Manage”で開けてみます。

“UiPath_Demo_TP6” のスクリーンショット

他方、接続アプリケーションの一覧画面から、“UiPath_Demo_TP6” をクリックしてみます。

“UiPath_Demo_TP6” のスクリーンショット

Lightning Experienceアプリケーションマネージャから“Manage”で開けたものとほとんど同じです。

4.2 UiPath Studio での操作

 まず、UiPath Studio に“UiPath.Salesforce.Activities”アクティビティパッケージをインストールします。

4.2.1 Salesforceアプリケーションスコープの配置

Salesforceアプリケーションスコープ」*29は、2.2.1の「Amazon Connect Scope」と同様に、UiPathと(クラウド)システムとの間の接続を確立して一連のアクティビティを動作させるための特別なアクティビティです。

4.2.1.1 テスト接続ウィザード

 “SFAPスタートガイド”の「Configure Salesforce Application Scope activity」 に沿って、Salesforceアプリケーションスコープを配置し、調整していきます。

まず、テスト接続のための設定に取り組みます。
4.で、“Consumer Key”と“Comsumer Secret” は4.1.1に基づき、“Security Token”は4.1に基づきます。
また、“Server”は、本番環境の場合“Live”を、Sandbox 環境の場合“Test”を選択します。

テスト接続が成功しないと先に進めません。失敗の場合は、確認してやり直してください。
テスト接続が成功しても、その先に実は二つの壁があります。
4.2.1.2と4.2.2.1で触れます。

4.2.1.2 SecureStringへの変換

 まず、7.にあるように、以下の3つのプロパティの型はSecureStringでなければなりません(テスト接続の場合はStringでOK)。
“Comsumer Secret”
“Password”
“SecurityToken”

 UiPathフォーラムで、暫定的な解決策を見つけました。
「(基本)SecureString項目への値の直接指定について」*30
「Convert String to Secure String」 *31

 このアクティビティパッケージ(スニペット)をインストールし、アプリケーションスコープの前に配置して型変換します。

4.2.2 「レコードを取得」アクティビティの配置

 Salesforceアプリケーションスコープが確立したので、次に「レコードを取得」*32などのアクティビティをアプリケーションスコープの内側に配置します。

4.2.2.1 「Salesforceオブジェクトウィザード」

 “SFAPスタートガイド”の「Configure Insert Record activity」に沿って、「レコードを取得」アクティビティを配置します。
簡単そうですが、2.のUI(「Salesforceオブジェクトウィザード」*33)が出てこないことがあるのです。
どうも環境に依存するようなので、残念ながら回避策を試行錯誤していただくしかありません。
※私の場合は、「テスト接続」の際の「Connection Parameters」 の一部が、「テスト接続」成功後にゼロクリアされていたので、それらを再設定したところ、ウィザードが出るようになりました。

 取引先責任者の(Salesforce)Idを入力して、それに対応する取引先責任者レコードの電話番号(Phone) を取得するようにします。

4.2.2.2 再考

 4.2.2.1の中で、内部処理と、「入力ダイアログ」や「メッセージボックス」とのインタフェースをとるため、「代入アクティビティ」*34を用います。

 一応の形ができたデザイナーパネルです。

“201229_sfPrototype”のデザイナーパネルのイメージ

 電話番号を取得するのが主目的で、「レコードを取得」アクティビティを用いましたが、これは、目的のレコードが存在していて、かつ(Salesforce)Idが既知であることを、暗黙の前提としています。

そうではなくて、(グローバル)検索のUIをWebレコーディングしたときのように、検索によるためには、「SOQLを実行」*35を用いることになります。

4.2.3 「SOQLを実行」アクティビティの配置

 ここでは、SOQLの知識が必要になりますので、自信がない方は、以下のTrailhead で相互補完することが望ましいです。
「SOQL for Admins」 モジュール*36

 なお、入力の「SOQLCommand」 プロパティは、「注」にある通り、エスケープ文字を考慮しなければなりません。

 4.2.2.2とは別に、プロジェクトを作り直した結果、次のようなデザイナーパネルになりました。

“201229_sfPrototype2” のデザイナーパネルのイメージ

5.UiPathプロジェクトでの“パーツ”の統合(2回目)

 4.2.3までで作成したプロジェクトと、2.2.2までで作成したプロジェクトを、一つにまとめます。

 統合されたプロジェクトのデザイナーパネルです。

“Demonstration_Ver1_201229_TP6_xxxxxxxx-uipath-demo”のデザイナーパネルのイメージ

6.考察

Salesforceコールセンターが作成された場合と比較すると、どうでしょうか?

CTIパッケージは何もインストールされていません。

“Installed Packages”のスクリーンショット

Visualforce Pages には何もありません。

“Visualforce Pages” のスクリーンショット

コールセンターは作成されていません。

“All Call Centers”のスクリーンショット

もちろん、ソフトフォンレイアウトも作成されていません。

“Softphone Layouts” のスクリーンショット

 UiPath Studio でのレコーディング/プログラミングでポイントとなる、SalesforceのURLを表にまとめてみました。

管理項目 Lightning Experience Salesforce Classic
Installed Packages https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/ImportedPackage/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/0A3?setupid=ImportedPackage
Visualforce Pages https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/ApexPages/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/apexpages/setup/listApexPage.apexp?setupid=ApexPages
Call Centers https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/CallCenters/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/04v?setupid=CallCenters&skipSplash=1
Softphone Layouts https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/SoftphoneLayouts/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/04n?setupid=SoftphoneLayouts&skipSplash=1
Connected Apps https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/ConnectedApplication/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/app/mgmt/forceconnectedapps/forceInstalledConnectedAppList.apexp?setupid=ConnectedApplication
Identity Provider https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/IdpPage/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/setup/secur/idp/IdpPage.apexp?setupid=IdpPage
App Manager/Apps https://<YOURDOMAIN>-dev-ed.lightning.force.com/lightning/setup/NavigationMenus/home https://<YOURDOMAIN>-dev-ed.my.salesforce.com/02u?setupid=TabSet

おわりに

Salesforceから2通りの方法(UIのWebレコーディング、APIをたたくアクティビティパッケージ)で取得した電話番号をAmazon Connectに渡して発呼する処理をUiPathで構築しました。
Salesforceの管理者UIはAPI化されているとは限らないので、UiPathでの自動化はWebレコーディングに頼ることが多くなるはずです。
また、Amazon Connectの周辺サービスでは、UiPath.Amazon.Comprehend.Activities アクティビティパッケージ*37*38もサポートされているようです。
Amazon Transcribe 用のアクティビティパッケージがサポートされることを期待します。

※本記事は、2020年11月~2021年1月時点でのTrailhead 環境で確認したものです。

※UiPathについては、以下の通りです。

  • Studio Pro…2020.10.2-beta.4
  • “UiPath.AmazonConnect.Activities” (アクティビティパッケージ)…1.0.0
  • “UiPath.Salesforce.Activities”(アクティビティパッケージ)…1.5.2
  • “stringConvertToSecureString.xaml”(スニペット)…1.0.2

参考サイト

*1:

https://cloud.uipath.com/portal_/register?subscriptionPlan=community&selected_language=ja

*2:

https://docs.uipath.com/studio/lang-ja/docs/about-extensions

*3:

https://docs.uipath.com/studio/lang-ja/docs/example-of-automatic-recording-with-web

*4:

https://trailhead.salesforce.com/ja/content/learn/modules/lex_dev_overview/lex_dev_overview_future#lex_dev_overview_future_app_experiences

*5:

https://www.uipath.com/ja/blog/developer/spa-automation

*6:

https://docs.uipath.com/studio/lang-ja/docs/the-user-interface

*7:

https://docs.uipath.com/activities/lang-ja/docs/about-the-system-activities-pack

*8:

https://docs.uipath.com/activities/lang-ja/docs/about-the-ui-automation-activities-pack

*9:

https://docs.uipath.com/activities/lang-ja/docs/type-into

*10:

https://docs.uipath.com/activities/lang-ja/docs/click

*11:

https://docs.uipath.com/activities/lang-ja/docs/get-value

*12:

https://docs.uipath.com/studio/lang-ja/docs/managing-variables

*13:

https://docs.uipath.com/activities/lang-ja/docs/input-dialog

*14:

https://docs.uipath.com/activities/lang-ja/docs/message-box

*15:

https://marketplace.uipath.com/ja/listings/connecting-uipath-automation-to-amazon-connect

*16:

https://docs.uipath.com/marketplace/lang-ja/docs/amazon-connect-about

*17:

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/tutorial1-login-aws.html

*18:

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/tutorial1-create-instance.html

*19:

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/tutorial1-claim-phone-number.html

*20:

https://docs.uipath.com/marketplace/lang-ja/docs/amazon-connect-setup

*21:

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/tutorial1-create-contact-flow.html

*22:

https://docs.uipath.com/marketplace/lang-ja/docs/amazon-connect-quickstart-make-an-outgoing-call

*23:

https://docs.uipath.com/marketplace/lang-ja/docs/amazon-connect-scope

*24:

https://docs.uipath.com/marketplace/lang-ja/docs/amazon-connect-make-voice-call

*25:

https://trailhead.salesforce.com/ja/content/learn/modules/api_basics/api_basics_overview

*26:

https://marketplace.uipath.com/ja/listings/salesforce-activity-pack

*27:

https://cpubproddsstorage.blob.core.windows.net/files/component_resources/ca1ee18f-1c12-4466-a2d8-1a4d358b7767.pdf

*28:

https://docs.uipath.com/activities/lang-ja/docs/about-the-salesforce-activities-pack

*29:

https://docs.uipath.com/activities/lang-ja/docs/salesforce-application-scope

*30:

https://forum.uipath.com/t/securestring/140242

*31:

https://marketplace.uipath.com/ja/listings/base64-encoder

*32:

https://docs.uipath.com/activities/lang-ja/docs/get-record

*33:

https://docs.uipath.com/activities/lang-ja/docs/about-the-salesforce-activities-pack#the-salesforce-object-wizard

*34:

https://docs.uipath.com/activities/lang-ja/docs/assign

*35:

https://docs.uipath.com/activities/lang-ja/docs/execute-soql

*36:

https://trailhead.salesforce.com/ja/content/learn/modules/soql-for-admins

*37:

https://marketplace.uipath.com/ja/listings/amazon-comprehend

*38:

https://docs.uipath.com/activities/lang-ja/docs/amazoncomprehend-about