タスクを定義すると、ボットプラットフォームが提供するセッション変数や、定義したカスタム変数にアクセスすることができ、変数のスコープを定義するコンテキストの利用も可能になります。
たとえば、APIリクエストによっては、リクエストが実行される前にセッション変数を設定する必要があったり、ダイアログタスクコンポーネントが次のノードに移行するためにセッション変数を取得する必要がある場合があります。さらに、ダイアログタスクは追加のシステム変数でcontext
オブジェクトを取得することができます。詳細については、コンテキストオブジェクトを参照してください。
タスクのJavaScriptを定義するコンテキストとセッション変数、およびユーザープロンプトエディタをJavaScriptタブから使用することができます。
セッション変数
このセクションでは、カスタムJavaScriptコードでタスクに使用できるコンテキスト変数とその範囲について説明します。
各コンテキストタイプのキー/値のペアをGETまたはPUTするJavaScriptの構文は次のとおりです。
"EnterpriseContext" : { "get" : function(key){...},//get the specified key "put" : function(key, value, ttl){...} //put the value at the key for the specified ttl, ttl is in minutes }, "BotContext" : { "get" : function(key){...},//get the specified key "put" : function(key, value, ttl){...} //put the value at the key for the specified ttl, ttl is in minutes }, "UserContext" : { "get" : function(key){...},//get the specified key }, "UserSession" : { "get" : function(key){...},//get the specified key "put" : function(key, value, ttl){...} //put the value at the key for the specified ttl, ttl is in minutes }, "BotUserSession" : { "get" : function(key){...},//get the specified key "put" : function(key, value, ttl){...} //put the value at the key for the specified ttl, ttl is in minutes }
例:
BotContext.put("topicSessionVariable","music",2000); UserSession.put("firstName","Mary",20000); UserContext.get("firstName");
コンテキストタイプ
ボットプラットフォームでは、以下のタイプのコンテキスト変数が使用可能です。
- EnterpriseContext – 企業内のすべてのボットおよびユーザーが利用可能なキーと値のペア。たとえば、GitHubボットでは、ユーザーは1つ以上のエンタープライズリポジトリにアクセスする必要があります。リポジトリデータをGitrepository (Enterprise Context) として保持するには、次の JavaScript コードを使用します。
var userRepository = { "title": _labels_[repository], "value": repository }; EnterpriseContext.put('Gitrepository', userRepository, 200000);
- BotContext – この特定のボットのすべてのユーザーが利用可能なキー/値のペア。たとえば、ユーザーの場所によって、セッションにかかる金融取引のデフォルト通貨を設定する場合などがあります。デフォルトの通貨データをcurrency (Bot Context)として、以下のJavaScriptコードで永続化することができます。
var defaultCurrency = { TODO Custom JavaScript for location-based currency } BotContext.put('currency', defaultCurrency, 200000);
- UserContext – すべてのユーザー向けボットが利用可能なキーと値のペア。これらのキーは読み取り専用で、システムからユーザーデータとして提供されます。
-
- UserContext.get(“_id”) – Kore.aiのユーザーID。
- UserContext.get(“emailId”) – ユーザーIDに関連付けられたメールアドレス。
- UserContext.get(“lastName”) – ユーザーの名字。
- UserContext.get(“firstName”) – ユーザーの名前。
- UserContext.get(“profImage”) – ユーザーの画像またはアバターのファイル名。
- UserContext.get(“profColor”) – ユーザーのアカウントカラー。
- UserContext.get(“activationStatus”) – ユーザーのアカウントの状態。
- UserContext.get(“jTitle”) – ユーザーのタイトル (定義されている場合)。
- UserContext.get(“orgId”) – ユーザーアカウントの組織ID (定義されている場合)。
- UserContext.get(“identities”) – 代替ユーザーID (定義されている場合)。
たとえば、2つの
UserContext
変数からのGETに基づいて、キーがfullName
として定義されているUserSession
変数を使用して、セッションに値をPUTすることができます。var name = UserContext.get("firstName")+UserContext.get("lastName"); UserSession.put("fullName") = name;
-
- UserSession – 企業内のすべてのボットに対して、この特定のユーザーに対して定義できるキー/値のペア。商業、交通、宅配サービスに利用されるユーザーの自宅住所など、すべてのボットが利用できるようにユーザーの位置情報を保存する場合があります。たとえば、以下のJavaScriptコードを使用して、デフォルトの位置情報をHomeLocation (UserSession)として永続化することができます。
var location = { "title": labels[location], "value": { "latitude": location.latitude, "longitude": request.location.longitude } }; UserSession.put('HomeLocation', location, '20000');
- BotUserSession – 特定のユーザーの入力に基づいて、特定のボットに定義できるキー/値のペア。ボットの1つ以上のタスクに対して、ユーザーの位置情報を永続化する場合があります。旅行ボットの場合、ユーザーは同一の自宅と目的地の住所に基づいてフライトやホテルを予約することができます。たとえば、以下のJavaScriptコードを使用して、デフォルトの自宅と目的地のデータをHomeLocation (BotUserSession)やDestinationLocation (BotUserSession)として永続化することができます。
var homelocation = { "title": labels[request.sourceLocation], "value": { "latitude": request.sourceLocation.latitude, "longitude": request.sourceLocation.longitude } }; BotUserSession.put('HomeLocation', homelocation, '20000'); var destlocation = { "title": labels[request.destLocation], "value": { "latitude": request.destLocation.latitude, "longitude": request.destLocation.longitude } }; BotUserSession.put('DestinationLocation', destlocation, '20000’);
スタンダードキー
セッションキーとコンテキストキーに加えて、再利用可能なデータ向けのKore.ai変数プレースホルダがあります。次のいずれかを選択します。
- _labels_ – GUIDの代わりにフレンドリーラベルを返すために使用します。たとえば、WebサービスAPIからユーザーデータを要求された場合、プロジェクトやワークスペースのIDはGUIDとして返されます。
_labels_
キーを使用して、GUIDの代わりにGUIDのユーザーフレンドリーな名前をエンドユーザーに表示することができます。Kore.aiでは、ドロップダウンコントロールは_labels_
キーに対するレスポンスを次の例のように保存します。{ "_labels_": { "15379386734832": "roadlabs.com", "26377329985341": "Test Project", "workspace": "roadlabs.com", "project": "Test Project" }, "_fields_": { "workspace": "15379386734832", "project": "26377329985341" } }
レスポンスでの
_labels_
キーの使用については、次のとおりです。print('<a href="https://app.asana.com/0/' + workspace.id + '/' + id + '/f" target="_blank">' + title + '</a> in workspace '+_labels_[workspace.id]);
- _tenant_ – 定義済みの企業のテナントを返すために使用します。たとえば、JIRAにはkoreteam, in https://koreteam.atlassian.net/browse/BBF-3265のようなURLのテナントが必要です。
_tenant_
キーを使用して、以下のようなタスクレスポンスでリンクを構築することができます。var title = request.fields.issuetype.name + ' <a href ="https://' + _tenant_ + '/browse/' + response.key + '" target = "_blank">' + request.fields.summary + '</a> has been created.';
- _fields_ – ペイロードレスポンスに関係のないエンドユーザーによって提供されるアクションタスクのフィールド入力を返すために使用されます。たとえば、JIRAアクションタスクでは、エンドユーザーはワークスペース名の入力を求められます。次のように
_fields_
キーを使用してエンドユーザーの入力を保存することができます。_fields_["workspace"]
- _last_run – 2016-03-05T12:44:38+00:00のように、ISO 8601形式を使用するWebサービスポーリングの協定世界時データタイムスタンプを返すために使用します。たとえば、Webサービスリクエストがペイロードレスポンス内のすべてのアクティビティを返す場合、
_last_run
キーを使用して、_last_run
の値の前後に表示される結果をフィルタリングすることができます。