複数回答出力コントロール
ユーザー入力を取得するために複数のステップを使用するコントロールを実装します。
マルチ出力コントロールのコンテキストデータを構成するには、次の API を使用します。
一般的なユースケース
- ピッカーのページネーションを実現する:次に進む/前に戻るためのボタンに基づいて着信時に更新された page_no、pagination_length が、送信時に読み取られます。
- 日付ピッカーの段階的な応答 (例:年、月、日の順に選択)。
次の API は、着信トランスフォーマーと送信トランスフォーマーでのみ使用できます。
sn_cs.VASystemObject.setProviderUserContext( key, contextData, providerAppId, providerUserId);
sn_cs.VASystemObject.getProviderUserContext(key, providerAppId, providerUserId);
sn_cs.VASystemObject.removeProviderUserContext(key, providerAppId, providerUserId);
sn_cs.VASystemObject.removeAllProviderUserContext(providerAppId, providerUserId)ピッカーコントロールの送信トランスフォーマーは、現在のページの詳細をユーザー contextData に保存できます。
var paginationData = {
"page_index": 1,
"pagination_length": 2
}
};
sn_cs.VASystemObject.setProviderUserContext("picker_pagination", paginationData, providerAppId, providerUserId, );ピッカーコントロールの着信トランスフォーマーは、現在のページの詳細をユーザー contextData から取得できます。
var paginationData = sn_cs.VASystemObject.getProviderUserContext("picker_pagination", providerAppId, providerUserId);ピッカーコントロールの送信トランスフォーマーのコード例
(function execute(inputs, outputs) {
var control = inputs.rich_control;
var payload = inputs.payload;
var appId = payload.appId;
var userId = payload.userId;
var paginationData = sn_cs.VASystemObject.getProviderUserContext('picker_control', appId, userId);
paginationData = JSON.parse(paginationData);
//First time when the outbound picker is called when selecting the topic.
if (paginationData == null) {
paginationData = {
'page_index': 1,
'pagination_length': 5
};
sn_cs.VASystemObject.setProviderUserContext('picker_control', paginationData, appId, userId);
}
var page_index = paginationData['page_index'];
var pagination_length = paginationData['pagination_length'];
var start = (page_index - 1) * pagination_length;
var end = page_index * pagination_length;
if (control['options']) {
var options = control['options'];
var optionsLength = options.length;
if (end > optionsLength)
end = optionsLength;
var picker = control["label"] + ":";
if (start > 0)
picker += "\n" + "*" + ": " + "prev";
for (var x = start; x < end; x++) {
gs.log("here " + x + " : " + options[x]);
picker += "\n" + (x + 1) + ": " + options[x].label;
}
if (end < optionsLength)
picker += "\n" + "#" + ": " + "next";
}
outputs.text_message = picker;
})(inputs, outputs);
Example Picker Control Inbound Tranformer
(function execute(inputs, outputs) {
var request_context = inputs.request_context;
var rich_control = inputs.rich_control;
var appId = request_context.appId;
var userId = request_context.userId;
var selectedValue = request_context["typed_value"];
var result = {};
result["value"] = "";
result["search_text"] = selectedValue;
var options = rich_control['options'];
var paginationData = sn_cs.VASystemObject.getProviderUserContext('picker_control', appId, userId);
paginationData = JSON.parse(paginationData);
switch (selectedValue) {
case 'prev': {
--paginationData["page_index"];
result["send_prev_control"] = true;
}
break;
case 'next': {
++paginationData["page_index"];
result["send_prev_control"] = true;
}
break;
default: {
var selectedIndex = Number(selectedValue) - 1;
if (paginationData["page_index"] != undefined && paginationData["pagination_length"] != undefined) {
var highestOptionInPage = paginationData["page_index"] * paginationData["pagination_length"];
if (selectedIndex >= 0 && selectedIndex < highestOptionInPage) {
var selectedOption = options[selectedIndex];
result["value"] = selectedOption.value;
result["search_text"] = "";
}
} else {
var selectedOption = options[selectedIndex];
result["value"] = selectedOption.value;
result["search_text"] = "";
}
}
}
sn_cs.VASystemObject.setProviderUserContext('picker_control', paginationData, appId, userId);
outputs.result = result;
})(inputs, outputs);