CognigyScript
CognigyScriptはJavaScriptのスーパーセットで、テキストとJSON内のInputオブジェクトとContextオブジェクトにアクセスできます。
CognigyScriptを使用すると、高性能なスクリプトを実行して、クライアントに返したい応答を作成することができます。
テキスト内では、{{ }}
タグ内にCognigyScriptを記述します。例: {{input.text}}
CognigyScriptは基本的にJavaScriptですが、公開されている変数を介してCognigyオブジェクトにアクセスすることができます:
変数 | 説明 | 例 |
input | Inputオブジェクト | {{input.text}} |
context | Contextオブジェクト | {{context.selectedHotel}} |
profile | Contact Profileオブジェクト | {{profile.firstname}} |
Node引数
CognigyScript機能へのアクセスは、引数の種別によって異なります。
テキスト引数の場合
Cognigy Flow Nodeのテキスト引数内では、CognigyScriptは{{ }}
タグを使用して記述されます。記述されると評価されます。これは、入力フィールドの上にあるCognigyScript
というラベルで示されます。
無効な式は空文字列を返します
式が無効な場合、空文字列が返されます。
例 {{input.text.toUpperCase()}}
はクライアントが送信したテキストをすべて大文字で返します。
型の保持 Node引数のCognigyScriptは、型を強制的に保持しない限り、常に文字列として返されます。これを行うには、スクリプトに .preserveType()
を追加します。
例 {{context.anObject.preserveType()}}
はanObject
が何であれ、例えばJavaScript Objectを返します。
JSON引数の場合
JSON引数の中では、特別な表記 { "$cs": { "script": "x", "type": "t"}}"
を使用してCognigyScriptを実行できます。スクリプトと戻り値の型を指定できます。特殊な記法では、型を定義することができます。例えば、文字列 “6 “を数値に変換したり、オブジェクトを文字列に変換したりします。
タイピング例
{
"customer_orders": {
"$cs": {
"script": "context.orders",
"type": "object"
}
}
}
インラインCognigyScriptの例
{
"customer_orders": "{{context.orders}}"
}
これは、Contextからordersオブジェクトを取得し、customer_orders
に割り当てようとします。context.ordersが存在しない場合、”customer_orders “キーは単にスキップされます。
IF条件とSWITCHオペランド
また、CognigyScriptは{{ }}
タグなしで記述されます。標準的なJavaScriptと同じように評価されます。これは入力フィールドの上にCognigyScript (direct)
というラベルで示されます。
例
context.orders === 3
という条件は、コンテキスト
に格納されている orders 変数が 3
に等しい場合、true
と評価されます。
Code Nodes(コードノード)
Code Nodes内では{{ }}タグを使う必要はありません。input
、context
、profile
、actions
変数はデフォルトで公開され、_
と moment
も公開されます。
例
const ordercount = context.orders;
switch(ordercount) {
case 0:
input.ordertext = "You ordered no items";
actions.output('Hello', {'action': 1}); // outputs the text 'hello' with data {'action': 1}
break;
case 1:
input.ordertext = "You ordered one item";
break;
default:
input.ordertext = "You ordered many items";
}
Cognigyオブジェクトの寿命
下の図は、さまざまなCognigyオブジェクトの寿命を示しています。Inputオブジェクト(input)は新しいユーザー入力(新しいフロー実行)ごとに新しく作成され、Contextオブジェクト(context)はトーク全体にわたり保存され、Profileオブジェクト(profile)は永久に保存されます。つまり、永続化したいユーザーに関する情報(ユーザー名など)は、Profileオブジェクトに格納される必要があります。