スクリプトノードでは、ダイアログタスクにJavaScriptのコードを書くことができます。スクリプトノードを使用して、以下のアクションを実行できます。
- APIコールを実行する前に、ユーザーの入力パラメータを操作します。
- ダイアログを続行する前に、APIレスポンスペイロードからパラメータを操作します。
- カスタムエラーメッセージをユーザーに表示します。
- 複雑なビジネスルールに基づいて意思決定を行います。
ボットビルダーでダイアログをテストすると、スクリプトノードエラーが スクリプトノードのエラーダイアログに行番号と列番号、関連するContextオブジェクトとともに表示されます。次の図のように、スクリプトノードのエラー ダイアログで直接スクリプトを更新したりテストしたりすることができます。
スクリプトノードのセットアップ
ダイアログタスクにおけるスクリプトノードのセットアップは、以下の手順で行います。
セットアップ
ダイアログタスクにおけるスクリプトノードのセットアップは、以下の手順で行います。メモ:プラットフォームのv9.0以降では、スクリプトノードはボットアクションノードの下に分類されます。ボットアクションノードの詳細はこちらをクリックしてください。
ノードの追加
- ダイアログタスクを開き、スクリプトノードを追加します。
- スクリプトノードを指定された場所に追加します。ノードの追加手順についてはこちらをご参照ください。
- 「スクリプト」ウィンドウは、デフォルトではコンポーネントプロパティタブが選択された状態で表示されます。
- 接続プロパティを設定できます。詳細はこちらをご参照ください。
ノードの設定
コンポーネントプロパティ
メモ:これらのセクションでセットアップまたは編集した設定は、このノードを使用する他のすべてのダイアログタスクに反映されます。
- コンポーネントプロパティタブの一般設定セクションで、スクリプトノードの名前と表示名を入力します。ノード名では、スペースを含めることはできません。
- スクリプトの定義セクションでスクリプトの定義をクリックして、JavaScriptを追加します。
- スクリプトの追加ダイアログボックスでJavaScriptを入力して、保存をクリックします。JavaScriptのコード例については、以下をご覧ください。
- 可変ネームスペースセクションでは、可変ネームスペースを関連付けてこのノードとその遷移を実行します。このオプションは、可変ネームスペースがボットに対して有効になっている場合にのみ表示されます。タスクレベルの設定を使用するか、またはこのノード用にカスタマイズできます。詳細情報は、ネームスペースの管理をご参照ください。
JavaScriptの例
JavaScriptを使用して、APIコールの前後でデータを処理して、ダイアログタスクをカスタマイズすることができます。例:ダイアログのタスクフローを指示。Contextオブジェクトの先行入力機能を使用して、次の図のように動的変数を特定して選択することができます。詳細情報は、コンテキストオブジェクトをご参照ください。 
データの操作
JavaScript では、セッション変数を使用してセッションデータからデータを取得することができます。例として、context.session.UserContext.identitiesを使用して、ユーザーIDを手にいれ(GET)、次の例に示すように、そのデータをcontextに入力する(PUT)ことができます。
var x = context.session.UserContext.identities;
var isEmailFound = false;
for (var i = 0; i < x.length; i++) {
if (x[i].type === "mapped") {
var identity = x[i].val;
var arr = identity.split("/");
var pattern = /^cs/i;
var result = arr[0].match(pattern);
if (result) {
isEmailFound = true;
context.UserSession.put("rtmEmail", arr[1], '20000');
}
}
}
...
詳細については、タスクのセッション変数とコンテキスト変数の使用をご参照ください。
取り扱い条件
以下のコード例は、IDが提供されない場合に、サービスノードの応答本文からContextオブジェクト変数を使用して、顧客IDを返します。 data.results
var data = context.getcontactsService.response.body;
if (data & amp; & amp; typeof(data.results) != 'undefined') {
context.customerID = data.results.customerId;
} else {
context.customerID = context.Usersession.customerID;
}
取り扱いフロー
次のスクリプトノードのコード例では、Contextオブジェクト変数を使用して、選択した口座の種類の制限を超過しない銀行送金額を検証しています。
var valid = 0;
var i = 0;
while (context.accdata.length - i) {
if (context.accdata[i].accountType == context.entities.FromAccountName) {
if ((context.accdata[i].amount - context.entities.Amount) < 0) { valid = 3; } else { if (context.entities.Amount > context.accdata[i].transferLimit) {
valid = 0;
} else {
valid = 2;
}
}
}
i++;
}
context.canProceed = valid;