Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Conversational AIからiRPAを呼ぶシンプルなシナリオ

はじめに

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を呼んでみることにします。

Conversational AIからiRPAを呼ぶ流れ

私が気になったのが、iRPAで処理を実行する間、Conversational AIは待ち状態になるのか、それとも処理が終わったらiRPAから通知が来るのかということでした。後者の場合、通知はiRPAのフローの中で実装する必要があるのか?という点も気になりました。

結論として、答えは後者で、通知はiRPAのフローの中で実装する必要はありませんでした。連携の流れは以下のようになります。
①Conversational AIからiRPAのAPI Triggerを呼び出す → iRPAが処理を実行
②処理が終わったらiRPAからNotifierという設定を通じてConversational AIに結果を返す

image.png
参考:CAI 通知の追加

Notifierには2種類あり、結果をメッセージとしてBotとのの会話に表示するものと、表には出さずにBotのメモリを更新するものがあります。

参考にした記事など

やってみよう

ゴール

"Call RPA"などと入力するとiRPAを呼ぶBotを作成します。Botは名前を受け取ってiRPAに渡し、iRPAで編集したメッセージを返します。
image.png

事前準備

手順

  1. Cloud Studioでプロジェクト作成
  2. パッケージ作成
  3. API Triggerを追加
  4. Conversational AIのBotを作成
  5. Notifierを追加
  6. BotをWebchatにつなぐ
  7. テスト

image.png

1. Cloud Studioでプロジェクト作成

1.1. プロジェクトの作成

Projectsタブで"New Project"をクリックしてプロジェクトを作成します。
image.png
image.png
Automationを作成します。
image.png
Agentのバージョンを選択します。インストールしたDesktop Agentのバージョンと合わせるようにします。
image.png
名前を設定して完了です。
image.png
image.png

1.2. Automationの設定

I/Oタブでインプット(name)とアウトプット(message)を追加します。
image.png
Custom Scriptを追加します。
image.png
スクリプトを編集します。
image.png
スクリプトのインプットとアウトプットを定義します。また、スクリプトに以下を設定します。returnで返した内容がアウトプット(message1)に設定されます。

return 'Hello, ' + name1;

image.png
スクリプトの詳細画面を閉じ、General Dataタブでスクリプトのインプット(name1)にAutomationのインプット(name)を設定します。
image.png
続いて、テスト用にLog Messageを追加します。
image.png
ログにCustom Scriptで設定したmessage1を表示させます。
image.png
image.png
最後に、EndのノードでOutput Parameterのmessageにmessage1を設定します。
image.png

1.3. テスト

Automationを保存してテストします。
image.png
Environmentに事前準備で登録した環境を選択します。Input Parmeterのnameに名前を入れます。
image.png
しばらく待つとテストが終了し、コンソールにログで設定したメッセージが表示されます。
image.png

2. パッケージ作成

テストが完了したAutomationからパッケージを作成します。
image.png
image.png
Packagesに追加されます。
image.png

3. API Triggerを追加

3.1. API Trigger追加

パッケージからAPI Triggerを追加します。
image.png
Automationを実行する環境を選択します。
image.png
Triggerの種類にAPIを選択します。
image.png
Triggerにわかりやすい名前をつけます。
image.png
Createを押すと以下の画面となります。ここにAPIを呼び出すために必要な情報が書いてあります。
image.png

3.2. API Keyの作成

APIを呼び出す際、ヘッダにAPI Keyを指定する必要があります。API Keyは環境の中で設定します。
image.png
image.png
API Keyが生成されます。キーが必要な場合はコピーボタンでクリップボードにコピーすることができます。
image.png

3.3. iRPAのサービスキーを生成

APIを呼び出す際にもう一つ、認証用のトークンが必要になります。トークンを取得するため、iRPAのサービスインスタンスを作ってキーを生成します。

まず、サービスインスタンスを作成します。すでに作成済の場合はこのステップは不要です。
Service Marketplaceでrpaと検索し、"Create"をクリックします。
image.png
サービスプランには"standard"を選択します。standardはサービスインスタンス用、trialはサブスクリプションでCloud Studioを使うためのものです。
image.png
image.png
"Create"を押してインスタンスを生成します。
image.png

Instances and Subscriptionsのメニューでたった今作成したインスタンスを選択し、サービスキーを登録します。
image.png
サービスキーの名前を入力してCreateを押すとサービスキーが登録されます。
image.png
Viewでサービスキーを見ることができます。
image.png

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

image.png

Bodyには以下を設定します。invocationContextはテストでは特に使用しないので、適当な値を設定しています。

{
    "invocationContext": "test_from_postman",
    "input": {
        "name": "Postman"
    }
}

image.png

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

image.png
トークンが生成されたら"Use Token"をクリックします。
image.png
"Send"をクリックして以下のように結果が返ってくれば成功です。
image.png

Monitoringタブで状況を確認します。Cloud StudioでのテストのためにDesktop Agentを起動したままだと、以下のようにReadyステータスで止まった状態になっているので、その場合はDesktop Agentを再起動します。
image.png
しばらく待つと実行が完了します。(※何度かパッケージのバージョンを変えているためTrigger名も変わっていますが同じものです)
image.png
詳細を表示させると、Outputが確認できます。なお、Log Messageのステップで表示させたメッセージはここには表示されません。
image.png

4. Conversational AIのBotを作成

ここから頭を切り替えてConversational AIのBotを作成していきます。

4.1. Botの作成

新規のBotを作成します。
image.png
Botの種類にはPerform Actionを選択します。事前定義スキルは特に選択しません。
image.png
残りの項目は、目的に応じて適当に設定します。
image.png
image.png

4.2. インテントの登録

@call-rpaというインテントを一つだけ登録します。
image.png
image.png
Expressionを追加します。
image.png
トレーニングが完了したら、インテントが認識できているかテストしておきましょう。
image.png

4.3. スキルの登録

iRPAを呼び出すスキルを登録します。
image.png
image.png
Triggerは@call-rpaのインテントが存在することとします。
image.png
Requirements(Actionを実行するために必要な項目)として、#personを指定します。#personは事前定義されたエンティティで人の名前が入ってきます。#personで受け取った名前をnameというメモリ項目に設定します。
image.png
名前が未入力の場合、メッセージを出して入力してもらうようにします。
image.png
続いて、Actionの定義です。まず、CALL WEBHOOKでiRPAのAPI Triggerを呼び出します。
image.png
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

image.png

Headersタブ

項目 設定値
Content-Type application/json
irpa-api-key 3.2.で生成したAPI Key

image.png

Bodyタブ

{
    "invocationContext": {
        "conversationid" : "{{conversation_id}}"
    },
    "input": {
        "name": "{{memory.name.raw}}"
    }
}

image.png

APIを呼んだあとは、iRPAが実行中であるメッセージを出します。
image.png
image.png
最後にメモリをリセットしておきます。
image.png
image.png
全体は以下の3ステップになります。
image.png

4.4. Botのテスト

Botのテストをしてみます。
image.png
Monitoringで見てみると、iRPAが呼ばれたことがわかります。
image.png
ここまでで、図の①のところまで実装できたことになります。
image.png

5. Notifierを追加

続いて、iRPAの実行結果をConversational AIに返すためのNotifierを追加します。
対象のAPI Triggerを選択して"Add Notifier"をクリックします。
image.png
Notifierの種類はCAIを選択します。
image.png
以下のパラメータを設定します。

項目 設定値 備考
Notify on Success All Status Changes, Start, Success, Failure, Cancel, Expiredから選べる
Name 任意
Conversation ID ${invocation_context.conversationid} Conversational AIから渡されたconversationid
Token ※下記の手順でConversational AIから取得
What do you want to do? Send a message
Delay in seconds 2 2秒待ってからメッセージ送信
Message Content Message from iRPA: ${output.message} アウトプットのメッセージを編集して返す

image.png

※Notifierに設定するTokenは、BotのSettings>Tokens>Developer tokenから取得します。
image.png

ここまでで、Conversational AIとiRPAの連携に必要な①②の設定が完了しました。
image.png

6. BotをWebchatにつなぐ

Notifierのテストは、Conversational AIのテストウインドウからだとできません。簡単に確認するためにWebchatを作成します。

image.png
image.png
"Create"を押すとwebchat用のスクリプトが表示されます。
image.png
スクリプトをコピーして以下のような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!ボタンをクリックして会話を開きます。
image.png
iRPAからのメッセージが表示できました。
image.png

おわりに

Conversational AIからiRPAを呼ぶ手順が確認できました。これを応用すれば、色々なシナリオが実現できそうです。
今回はじめてCloud Studioを使ってみましたが、Desktop Studioと比べるとだいぶわかりやすく、使いやすくなっていると感じました。今ちょうどOpen SAPでRPA 2.0のコースが開講中なので、Cloud Studioの機能を知ったうえで応用シナリオも考えてみたいと思います。

tami
SAPUI5、 Fioriについて学びつつ、アウトプットしていきたいと思います。記事の内容について質問・コメント歓迎です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away