ダイナミック・オプション
オプション応答では、選択項目のリストが顧客に示されます。 動的設定を使用すると、毎回異なるオプションからリストを生成することができます。
動的オプションは、変数に格納されたデータに基づいて生成されます。 ソース変数には値の配列を格納する必要があり、各値は顧客に提示されるオプションの 1 つを表します。 配列の項目は、文字列や数値のような単純な値(たとえば「[ "Raleigh", "Boston", "New York" ])でも、複合JSONオブジェクトでもかまいません。
動的オプションの一般的なシナリオは、カスタム拡張を使用してコールした 外部 API から配列が返される場合です。 たとえば、カスタム拡張機能を使用して、顧客のアカウントに関連付けられたクレジットカードのリストを取得することができます。 そして、ダイナミックオプションを使って、会話中にどのカードを使うかを顧客に尋ねることができます。 (カスタムエクステンションの詳細については、カスタムエクステンションの呼び出しを参照してください)
あなたのアクションは、式を使用してソース変数に入力することもできます。 例えば、顧客が購入を決定した商品を含むショッピングカートを構築するためにセッション変数を使うかもしれません。 カートから商品を削除するアクションは、顧客が削除する商品を選択できるように、カート内の商品を表示する動的オプションを使用することができます。 (変数値に対する式の使用についての詳細は、セッション変数に値を割り当てる式を使用するを参照してください)
動的オプションの定義
動的オプションの顧客対応を定義するには
ステップで、Define customer responseをクリックします。
オプションの応答タイプを選択します。
ダイナミックのトグルをクリックする。
ソース変数フィールドで、動的オプションを定義する配列を含む変数(例えば、前のステップで呼び出したカスタム拡張機能からの応答を含む変数)を選択します。
オプション: Optionフィールドに、ソース配列の項目をリストされるオプションにマップする式を記述します。 この式は、配列の各項目を顧客に表示される意味のある値に変換するテンプレートの役割を果たします。 この式では、動的変数「
${item}」を使って項目を表す。状況によっては、式を指定する必要はない:
配列の項目が文字列や整数などの単純な値の場合、各項目の値は自動的にオプションとして表示されます。 しかし、より意味のあるものにするために項目を操作したり、再フォーマットしたりする場合は、マッピングを定義した方がよい。 例えば、'
"Part #" + ${item}表現を使って、'Part #12345フォーマットで部品番号を表示することができる。配列のアイテムが JSON オブジェクトの場合、デフォルトのマッピングでは '
labelというプロパティを探し、その値 (もし存在すれば) をオプションとして使用します。 項目に 'labelプロパティが含まれていない場合、または 'labelプロパティの値をオプションとして使用したくない場合は、マッピングを指定する式を記述する必要があります。 ドット記法を使用すると、JSONパスを使用してオブジェクト内のプロパティを参照することができます(たとえば、'${item}.name)。
オプションオプションが顧客の望むものでない場合、'
None of the aboveような静的な選択肢を含めるには、フォールバックオプションを追加するをクリックします。 そして、この静的オプションを条件とするステップを追加して、さらなる支援を提供することができる。 条件を追加するには、'${step_id}.value == "None of the above"ような式を記述する。
マッピングの例
里親募集中のペットのリストを表示し、より詳しい情報を見るためにペットを選択するよう顧客に促すアクションを作りたいとします。 ソース変数には、以下の形式のカスタム拡張子からの配列が格納される:
[
{
"id": "123",
"name": "Casey",
"breed": "Shetland sheepdog",
"age": 3
},
{
"id": "987",
"name": "Phoebe",
"breed": "chihuahua",
"age": 7
}
]
項目のスキーマには 'labelプロパティが含まれていないため、デフォルトのマッピングは使用できません。 その代わりに、式を使用して、複数の異なるプロパティから取得したデータを含む複雑なラベルを作成することができます。 たとえば、'${item}.name + " (" + ${item}.breed + ", age " + ${item}.age + ")"式を使ってオプション・ラベルを定義する:

式メソッドを使えば、ソース変数の値をさまざまな方法で操作できることを覚えておいてほしい。 例えば、顧客が支払いのためにクレジットカードを選択するアクションがあるかもしれませんが、セキュリティ上の理由からカード番号全体を表示したくありません。 substring()メソッドを使って、各カード番号の下4桁だけを含む式を書くこともできる(例えば'"Card ending in " + ${item}.card_number.substring(16, 20))。
選択された項目を参照する
顧客が動的に生成されたオプションの1つを選択した後、おそらく後続のステップで選択されたアイテムを参照する必要があるでしょう。
顧客の応答を表すアクション変数を参照する場合、デフォルトでは選択されたオプションの値が使用されます。 しかし、状況によっては、顧客にオプションを表示するのに使われたのと同じ値を使いたくないこともあるでしょう。 その代わりに、一意な識別子や、選択されたオプションを明確に識別する他のプロパティを使用する必要があるかもしれません。
例えば、顧客が詳細情報を表示するペットを選択した場合、ペットの名前、年齢、犬種が一意でない可能性があるため、おそらく一意の識別子(この例では「idプロパティ)を使用してデータベースに問い合わせる必要があります。 または、下4桁しか表示されないオプションから顧客がクレジットカードを選択している場合、口座の詳細にアクセスしたり、取引を完了したりするには、完全なクレジットカード番号を使用する必要があります。
このような状況では、選択された項目の元のプロパティにアクセスする式を書くことができます:
顧客が動的オプションから選択するステップの後に来るステップを作成または編集します。
変数値セクションで、セッション変数に値を代入する式を書く。 (詳細については、セッション変数に値を代入する式を使用するを参照してください)
式エディタで、ドル記号(
$)を入力し、顧客がダイナミック・オプションを選択したステップを選択します。選択された項目を表すにはプロパティ名「
item使い、そのプロパティにアクセスするにはドット記法を使う。 例えば、次の式は、前のステップで選択された項目の「idプロパティにアクセスする:${step_331}.item.id複雑な式を使用して、選択された項目の複数のプロパティを使用して値を構築することができます。 例えば、'
${step_123}.item.firstname + " " + ${step_123}.item.lastnameような式を使って、その人のフルネームを構築することができる。 式を使用して、必要なアクションを完了するために必要な任意の形式で値を定義します。