次の API を使って、Chatbot の会話の
コンテキストの値を管理できます。特定の会話またはすべてのアクティブな会話のコンテキストの値を取得、追加、更新するための API メソッドがあります。
会話内で保持すべき値が必要になるたびにサービスを呼び出す必要がなくなり、便利です。たとえば、ユーザーアカウントに関するデータ (名前、ID、その他の必要な情報) などは、1 つの会話に固有のものです。また、会話をしている間は、サービスを呼び出したり、ユーザーに入力を求めたりすることなく保持しておく必要があります。
すべての会話で共通の情報もあります。たとえば、人間へのフォールバックについて、コンテキストパラメーターを変更すると、すべての Chatbot の動作に影響する可能性があります。この例では、サポートを提供できる人間の担当者が接続している場合に限り、人間と会話するという選択肢を提示できます。人間と会話することが可能かどうか調べるために、接続している担当者の数を返すサービスを呼び出さなくて済むように、すべての会話のコンテキストに対するグローバルの値を設定できます。それらの担当者のステータスが変化したときに、サービスを呼び出す必要はありません。
特定の会話のコンテキストの値を取得します。
&ParameterValue = Chatbot.Context.GetUserContextValue(&Instance, &UserGuid, &Parameter, &Messages)
入力値の説明:
&Instance
文字のパラメーターで、
Conversational Flows オブジェクト名です。
&UserGuid
GUID 変数で、Chatbot のユーザーを示します。Data フォルダ (
Chatbot ジェネレーターのリソースの CommonChatbots モジュールの下) にある GetUserId プロシージャーを参照してください。ハードコーディングされたサンプルユーザーを割り当てる例が含まれています。
&Parameter
文字の値です。
&ParameterValue
文字の値です。
&Messages
Messages データタイプです。「
Chatbot ジェネレーターの一般的なエラーと解決方法」で &Messages パラメーターを取ることができる値についての詳細を参照してください。
特定の会話のコンテキストの値を設定します。
Chatbot.Context.SetUserContextValue(&Instance, &UserGuid, &Parameter, &ParameterValue)
注: SetUserContextValue は Conversational オブジェクト内では使用できません。
特定の会話のコンテキストのコンテンツをすべてクリアします。
Chatbot.Context.CleanUserContext(&Instance, &UserGuid)
例 1
ログイン時にユーザーのプロファイル情報 (名前、住所、電話番号など) を取得できます。また、それらの情報をユーザーのコンテキストに設定できます。
情報は必要に応じて後で取得することもできます。たとえば
Conversational オブジェクトで取得します。
例 2
ユーザーのコンテキストのパラメーターを取得することで、あるフローから別のフローへと情報を渡すことができます。たとえば、フローの中でユーザー識別子を要求する
ユーザー入力があるとします。別のフローの
Conversational オブジェクトで、必要に応じてその情報を取得できます。
&ParameterValue = Chatbot.Context.GetUserContextValue(&Instance, &UserGuid, !"UserIdentification",&Messages)
すべての会話に対して設定されたコンテキストの値を取得します。
&ParameterValue = Chatbot.Context.GetContextValue(&Instance, &Parameter, &Messages)
すべての会話に対してコンテキストの値を設定します。
Chatbot.Context.SetContextValue(&Instance, &Parameter, &ParameterValue)
すべての会話のコンテキストのコンテンツをすべてクリアします。
Chatbot.Context.CleanContext(&Instance)
アクティビティまたは旅行用の無料のチケットについて、利用可能な数量をユーザーが尋ねる
フローがあるとします。
ユーザーへの応答は、利用可能な数量になります。
その情報はバックエンドから呼び出される Web サービスを通じて更新されます。次のコードが実行されます:
&Instance = !"Citizen"
Chatbot.Context.SetContextValue(&Instance, !"quota", &value)
フローの
Conversational オブジェクトでは、"a の値が取得され、出力パラメーターとして返されます:
&Instance = !"Citizen"
&Parameter = !"quota"
"a = Chatbot.Context.GetContextValue(&Instance, &Parameter, &Messages)
<Rules>
parm(out:"a);
コンテキスト情報は GXChatMessage テーブルに格納されます。このテーブルは、Chatbot ジェネレーターによって (
リソースの一部として) 既定で提供されます。ユーザーは CommonChatbots モジュールで 2 つのプロシージャー (GetContext および SetContext) を利用できます。これらのプロシージャーによって、テーブルに格納されたコンテキストを取得/更新できます。これらのプロシージャーは編集可能であるため、データの格納の仕方を変えることができます。
グローバルのコンテキスト情報はキャッシュで処理されます。会話がまだ存在しないユーザーについてのユーザー情報も同様です。たとえば、ユーザーがログインしてユーザーのプロファイルデータを取得した場合、ユーザーがチャットをまだ開始していなくても、その情報をコンテキストに格納できます。