CognigyScript

CognigyScriptはJavaScriptのスーパーセットで、テキストとJSON内のInputオブジェクトとContextオブジェクトにアクセスできます。

CognigyScriptを使用すると、高性能なスクリプトを実行して、クライアントに返したい応答を作成することができます。

テキスト内では、{{ }}タグ内にCognigyScriptを記述します。例: {{input.text}}

CognigyScriptは基本的にJavaScriptですが、公開されている変数を介してCognigyオブジェクトにアクセスすることができます:

変数説明
inputInputオブジェクト{{input.text}}
contextContextオブジェクト{{context.selectedHotel}}
profileContact 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内では{{ }}タグを使う必要はありません。inputcontextprofileactions変数はデフォルトで公開され、_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オブジェクトに格納される必要があります。

Cognigyオブジェクトの寿命