はじめに
みなさんこんにちは、三井情報株式会社です。
今回は、Virtual Agent(チャットボット)のレコードアクセス権限に関して、実装時に注意すべきことを紹介します。以下の2章立てとなっております。
1.コンポーネントによるレコードアクセス権限の違い
2.ユースケース:ユーザの会社に基づいてフローを分岐させる
1.コンポーネントによるレコードアクセス権限の違い
Virtual Agentの中でテーブルのレコードを取得する方法として、2種類のコンポーネントを使う方法が考えられます。一方で、これらのコンポーネントはレコードへのアクセス権限がそれぞれ異なります。
①ユーティリティ > ルックアップ:「ユーザ権限」に基づいてアクセス
②ユーティリティ > スクリプトアクション:「System権限」に基づいてアクセス
ルックアップのコンポーネントは、条件設定のレベルでレコード取得のノードを実装できるお手軽さがあります。その一方で、ユーザ権限でレコードアクセスできない場合には、スクリプトで実装する必要が有ります。
第2項では、私たちが実装で困った場面をもとに、スクリプトで実装する必要があるケースを1つ紹介します。
2.ユースケース:ユーザが所属する会社に基づいて、フローを分岐させる
第2項では、レコードの取得に関して、スクリプトを使用して実装する必要が有るケースを1つ紹介します。ここでは、以下の機能を実装することを考えてみます。
★実装したい機能:ユーザが所属する会社に基づいて、フローを分岐させる
今回作成したサンプルフローの流れは下記の通りです。
1.ルックアップ/スクリプトのどちらで会社を取得するか選択
2.会社テーブルから操作ユーザの所属会社を取得(1.で選択した方法で取得)
3.取得した会社に基づいて、フローを分岐させる。
フローの詳細な実装方法は割愛します。
ここからはルックアップ・スクリプトアクションの両方で会社を分岐させた場合の動きを見ていきます。今回は下記のテストユーザを使用して、「テスト会社1」の分岐を通るかを見ていきます。※ロール無しのユーザ
2-1. OKなパターン:「ユーティリティ > スクリプトアクション」を使用して会社を分岐
まずは、スクリプトアクションのコンポーネントを使用して会社を分岐させてみます。
テストユーザでVirtual Agentで今回のテストシナリオを起動して、「スクリプトで会社を取得」を選択してみます。
無事、テスト会社1の分岐を通過させることができました。
スクリプトアクションを使用することで、System権限でテーブルにアクセスできます。ロールを持っていないユーザでも会社テーブルにアクセスして情報を取得することができました。
2-2. NGパターン:「ユーティリティ > ルックアップ」を使用して会社を分岐させる
次に、ルックアップを使用して会社を分岐させてみます。
テストユーザでVirtual Agentで今回のテストシナリオを起動して、「ルックアップで会社を取得」を選択してみます。
下記のチャットが表示され、分岐へ上手く進めませんでした。
「技術的な問題が発生しており、この会話を続けることができません。」
今回のテストユーザは、会社テーブルへのアクセス権限を持っていなかったため、ルックアップのノードで強制終了してしまいました。
このように、チャットボットの操作ユーザがテーブルへのアクセス権限を持たない場合、ルックアップコンポーネントではアクセスできないことが分かります。
おわりに
今回はルックアップ、スクリプトアクションの2種類のコンポーネントのテーブルアクセス権限の違いと、アクセス権限の違いによるユースケースを1つ紹介しました。
ルックアップは設定レベルでお手軽にテーブルの情報を取得できる一方で、操作ユーザのテーブルアクセス権限を考慮する必要があります。今回のように、ルックアップで上手く動作しない場合は、スクリプトアクションでの実装を試してみることを推奨します。
最後までお読みいただき、ありがとうございました。
三井情報株式会社
ソリューション技術本部
ITマネジメント技術部
第一技術室
野口 唯