はじめに
2021/2/17に開催されたのSAP Inside Track Tokyo 2021で、SAP intelligent Robotic Process Automation(iRPA) とSAP Conversational AIについての発表がありました。
Conversational AIの活用案として、「チャットボットとシステムチェックを行うプログラムを連携させることで、システム状態をチェックする」(sitTokyo 2021 SAPのチャットボット SAP Conversational AI を使ってみよう!- P16)というアイデアが紹介されており、Conversational AIとiRPAをつなげたら色々できそうだ、やってみたい、と思いました。
Conversational AIとiRPAの連携は夢がありますね。ぜひやってみたい #CAI #sitTokyo
— tami (@tami62496318) February 17, 2021
そこで本記事では、「つなげること」だけを念頭にシンプルなシナリオでConversational AIからiRPAを呼んでみることにします。
Conversational AIからiRPAを呼ぶ流れ
私が気になったのが、iRPAで処理を実行する間、Conversational AIは待ち状態になるのか、それとも処理が終わったらiRPAから通知が来るのかということでした。後者の場合、通知はiRPAのフローの中で実装する必要があるのか?という点も気になりました。
結論として、答えは後者で、通知はiRPAのフローの中で実装する必要はありませんでした。連携の流れは以下のようになります。
①Conversational AIからiRPAのAPI Triggerを呼び出す → iRPAが処理を実行
②処理が終わったらiRPAからNotifierという設定を通じてConversational AIに結果を返す
参考:CAI 通知の追加
Notifierには2種類あり、結果をメッセージとしてBotとのの会話に表示するものと、表には出さずにBotのメモリを更新するものがあります。
参考にした記事など
- Step by step SAP Intelligent RPA and SAP Conversational AI Integration (with input/output)
- SAP Community Call: Integrating SAP Intelligent RPA and SAP Conversational AI
やってみよう
ゴール
"Call RPA"などと入力するとiRPAを呼ぶBotを作成します。Botは名前を受け取ってiRPAに渡し、iRPAで編集したメッセージを返します。
事前準備
- Conversational AIのアカウントを取得 (リンク先チュートリアルのステップ1)
- iRPA(Trial)のサブスクライブ、ツールのインストール
- iRPAのエージェントグループを作成
- iRPAの環境を作成し、エージェントを追加
手順
- Cloud Studioでプロジェクト作成
- パッケージ作成
- API Triggerを追加
- Conversational AIのBotを作成
- Notifierを追加
- BotをWebchatにつなぐ
- テスト
1. Cloud Studioでプロジェクト作成
1.1. プロジェクトの作成
Projectsタブで"New Project"をクリックしてプロジェクトを作成します。
Automationを作成します。
Agentのバージョンを選択します。インストールしたDesktop Agentのバージョンと合わせるようにします。
名前を設定して完了です。
1.2. Automationの設定
I/Oタブでインプット(name)とアウトプット(message)を追加します。
Custom Scriptを追加します。
スクリプトを編集します。
スクリプトのインプットとアウトプットを定義します。また、スクリプトに以下を設定します。returnで返した内容がアウトプット(message1)に設定されます。
return 'Hello, ' + name1;
スクリプトの詳細画面を閉じ、General Dataタブでスクリプトのインプット(name1)にAutomationのインプット(name)を設定します。
続いて、テスト用にLog Messageを追加します。
ログにCustom Scriptで設定したmessage1を表示させます。
最後に、EndのノードでOutput Parameterのmessageにmessage1を設定します。
1.3. テスト
Automationを保存してテストします。
Environmentに事前準備で登録した環境を選択します。Input Parmeterのnameに名前を入れます。
しばらく待つとテストが終了し、コンソールにログで設定したメッセージが表示されます。
2. パッケージ作成
テストが完了したAutomationからパッケージを作成します。
Packagesに追加されます。
3. API Triggerを追加
3.1. API Trigger追加
パッケージからAPI Triggerを追加します。
Automationを実行する環境を選択します。
Triggerの種類にAPIを選択します。
Triggerにわかりやすい名前をつけます。
Createを押すと以下の画面となります。ここにAPIを呼び出すために必要な情報が書いてあります。
3.2. API Keyの作成
APIを呼び出す際、ヘッダにAPI Keyを指定する必要があります。API Keyは環境の中で設定します。
API Keyが生成されます。キーが必要な場合はコピーボタンでクリップボードにコピーすることができます。
3.3. iRPAのサービスキーを生成
APIを呼び出す際にもう一つ、認証用のトークンが必要になります。トークンを取得するため、iRPAのサービスインスタンスを作ってキーを生成します。
まず、サービスインスタンスを作成します。すでに作成済の場合はこのステップは不要です。
Service Marketplaceでrpaと検索し、"Create"をクリックします。
サービスプランには"standard"を選択します。standardはサービスインスタンス用、trialはサブスクリプションでCloud Studioを使うためのものです。
"Create"を押してインスタンスを生成します。
Instances and Subscriptionsのメニューでたった今作成したインスタンスを選択し、サービスキーを登録します。
サービスキーの名前を入力してCreateを押すとサービスキーが登録されます。
Viewでサービスキーを見ることができます。
3.4. Postmanでテスト
API呼び出しに必要な情報がそろったので、PostmanからAPIの呼び出しをテストしてみましょう。
参考:Execute a Trigger of Type API
以下の項目を設定します。
項目 | 設定値 |
---|---|
HTTPメソッド | POST |
URL | 3.1.で表示されたAPI TriggerのURL |
Headersタブ
項目 | 設定値 |
---|---|
Content-Type | application/json |
irpa-api-key | 3.2.で生成したAPI Key |
![]() |
Bodyには以下を設定します。invocationContextはテストでは特に使用しないので、適当な値を設定しています。
{
"invocationContext": "test_from_postman",
"input": {
"name": "Postman"
}
}
Authoriationタブで以下を設定して"Get New Access Token"をクリックします。
項目 | 設定値 |
---|---|
TYPE | OAuth 2.0 |
Access Token URL | 3.3.で生成したサービスキーのurl + /oauth/token |
Client ID | 3.3.で生成したサービスキーのclientid |
Client Secret | 3.3.で生成したサービスキーのclientsecret |
トークンが生成されたら"Use Token"をクリックします。
"Send"をクリックして以下のように結果が返ってくれば成功です。
Monitoringタブで状況を確認します。Cloud StudioでのテストのためにDesktop Agentを起動したままだと、以下のようにReadyステータスで止まった状態になっているので、その場合はDesktop Agentを再起動します。
しばらく待つと実行が完了します。(※何度かパッケージのバージョンを変えているためTrigger名も変わっていますが同じものです)
詳細を表示させると、Outputが確認できます。なお、Log Messageのステップで表示させたメッセージはここには表示されません。
4. Conversational AIのBotを作成
ここから頭を切り替えてConversational AIのBotを作成していきます。
4.1. Botの作成
新規のBotを作成します。
Botの種類にはPerform Actionを選択します。事前定義スキルは特に選択しません。
残りの項目は、目的に応じて適当に設定します。
4.2. インテントの登録
@call-rpa
というインテントを一つだけ登録します。
Expressionを追加します。
トレーニングが完了したら、インテントが認識できているかテストしておきましょう。
4.3. スキルの登録
iRPAを呼び出すスキルを登録します。
Triggerは@call-rpa
のインテントが存在することとします。
Requirements(Actionを実行するために必要な項目)として、#personを指定します。#personは事前定義されたエンティティで人の名前が入ってきます。#personで受け取った名前をnameというメモリ項目に設定します。
名前が未入力の場合、メッセージを出して入力してもらうようにします。
続いて、Actionの定義です。まず、CALL WEBHOOKでiRPAのAPI Triggerを呼び出します。
Postmanでのテストのときと同じように、以下のパラメータを設定します。
項目 | 設定値 |
---|---|
HTTPメソッド | POST |
URL | 3.1.で表示されたAPI TriggerのURL |
Authenticationタブ
項目 | 設定値 |
---|---|
Select authentication type | OAuth2 Authentication |
Client ID | 3.3.で生成したサービスキーのclientid |
Client Secret | 3.3.で生成したサービスキーのclientsecret |
Authorization URL | 3.3.で生成したサービスキーのurl + /oauth/token |
![]() |
Headersタブ
項目 | 設定値 |
---|---|
Content-Type | application/json |
irpa-api-key | 3.2.で生成したAPI Key |
Bodyタブ
{
"invocationContext": {
"conversationid" : "{{conversation_id}}"
},
"input": {
"name": "{{memory.name.raw}}"
}
}
APIを呼んだあとは、iRPAが実行中であるメッセージを出します。
最後にメモリをリセットしておきます。
全体は以下の3ステップになります。
4.4. Botのテスト
Botのテストをしてみます。
Monitoringで見てみると、iRPAが呼ばれたことがわかります。
ここまでで、図の①のところまで実装できたことになります。
5. Notifierを追加
続いて、iRPAの実行結果をConversational AIに返すためのNotifierを追加します。
対象のAPI Triggerを選択して"Add Notifier"をクリックします。
Notifierの種類はCAIを選択します。
以下のパラメータを設定します。
※Notifierに設定するTokenは、BotのSettings>Tokens>Developer tokenから取得します。
ここまでで、Conversational AIとiRPAの連携に必要な①②の設定が完了しました。
6. BotをWebchatにつなぐ
**Notifierのテストは、Conversational AIのテストウインドウからだとできません。**簡単に確認するためにWebchatを作成します。
"Create"を押すとwebchat用のスクリプトが表示されます。
スクリプトをコピーして以下のようなhtmlファイルを作成し、ローカルに保存します。
<!DOCTYPE html>
<html xmls="https://www.w3.org/1999.xhtml">
<body>
<script
src="https://cdn.cai.tools.sap/webchat/webchat.js"
channelId="your channel id"
token="your token"
id="cai-webchat">
</script>
</body>
</html>
7. テスト
作成したhtmlファイルをブラウザで開きます。Click on me!ボタンをクリックして会話を開きます。
iRPAからのメッセージが表示できました。
おわりに
Conversational AIからiRPAを呼ぶ手順が確認できました。これを応用すれば、色々なシナリオが実現できそうです。
今回はじめてCloud Studioを使ってみましたが、Desktop Studioと比べるとだいぶわかりやすく、使いやすくなっていると感じました。今ちょうどOpen SAPでRPA 2.0のコースが開講中なので、Cloud Studioの機能を知ったうえで応用シナリオも考えてみたいと思います。