共通レスポンス・コンポーネントのメタデータ・プロパティ

共通レスポンス・コンポーネントの「メタデータ」プロパティを使用して、ユーザーへのメッセージの表示方法を定義します。

メタデータを2つのレベルで定義します。ルート・レベルでは、コンポーネント自体に固有の出力とアクションを定義し、レスポンス・レベルでは、特にこのコンポーネントが出力するテキスト、リスト、カードまたはアタッチメント・メッセージの表示と動作を定義します。
metadata:
  responseItems:
  - text: "To which location do you want the pizza to be delivered?"
    type: "text"
    name: "What location"
    separateBubbles: true
  globalActions:
  - label: "Send Location"
    type: "location"
    name: "SendLocation"
プロパティ 説明 必須?
responseItems レスポンス・アイテムのリストであり、それぞれがチャット・クライアントに送信される新しいメッセージ(iteratorVariableプロパティまたはiteratorVariableプロパティとiteratorExpressionプロパティの組合せを使用してレスポンス・アイテムに対して反復を設定した場合は、複数のメッセージ)になります。これらのレスポンス・アイテムを次の値を使用して定義します:
  • text— 通常はボタンとして表示されるボタンのリストを含めることができるテキスト・バブル(textプロパティ)。

    コンポジット・バッグ・エンティティの場合(つまり、variableプロパティによってコンポジット・バッグ・エンティティ変数が指定されます)、現在のエンティティの値に対してFreeMarker式のプロンプトを使用できます(“${system.entityToResolve.value.prompt}”)。

  • cards— 水平方向または垂直方向にスクロールする一連のカード。

  • attachment— ユーザーがアップロードまたはダウンロードできます。

  • editForm— 対話形式。
  • form
  • dataSet
はい
globalActions グローバル・アクションのリスト。レスポンス・アイテムのいずれかに固有ではないことを意味します。これらのアクションは、通常はチャット・ウィンドウの下部に表示されます。たとえば、Facebook Messengerでは、これらのオプションはクイック返信と呼ばれます。 いいえ
keywords ユーザーが入力したキーワードを対応するポストバック・ペイロードに一致させるキーワードのリスト。キーワードは、アクション・ボタンが適切にレンダリングされないテキストのみのチャネルをサポートします。 いいえ
テキスト、カード、アタッチメント・メッセージなどの様々なレスポンス・アイテムについてもメタデータを構成します。
プロパティ 説明 必須?
type メッセージ・フォーマットを決定するレスポンス・アイテムのタイプ。メッセージは、textattachmentまたはcardsとして設定できます。 はい
name 内部的に使用されるレスポンス・アイテムの名前。実行時には使用されません。 いいえ
iteratorVariable 変数要素を反復することで、複数のテキスト、アタッチメントまたはキーワード・アイテムをレスポンスに動的に追加します。 いいえ
iteratorExpression iteratorVariableプロパティで指定された変数内にネストされた配列の値を表示するために使用されるFreeMarker式。

たとえば、iteratorVariableプロパティの値を"team"に設定し、その変数に値を表示するmembersという要素がある場合、式${team.value.members}を使用します。

いいえ
visible ユーザー入力およびチャネルごとにメッセージの表示方法を決定します。「可視プロパティ」を参照してください。 いいえ
rangeStart iteratorVariableを指定した場合、rangeStartプロパティをrangeSizeプロパティと組み合せて指定することによって、レスポンス・アイテムのサブセットをスタンプ・アウトできます。ハードコードされた値を入力するか、範囲開始を保持するダイアログ・フロー変数を参照するFreeMarker式を使用できます。rangeStart変数を使用することにより、参照オプションのペイロードでrangeStart変数を設定して、次のデータ・セットにページングできます。CrcPizzaBotのOrderPizza状態で、rangeStartおよびrangeSizeプロパティの例を確認できます。 いいえ
rangeSize iteratorVariableおよびrangeStartプロパティで指定されたように表示されるレスポンス・アイテムの数。 いいえ
channelCustomProperties チャネル特有の機能をトリガーするプロパティのリスト。これらの機能はプラットフォーム固有であるため、共通レスポンス・コンポーネントの外部であり、したがって、コンポーネントのルート・レベルまたはレスポンス・アイテム・レベルのプロパティによって制御できません。このプロパティの例は、CrcPizzaBotのOrderPizza状態にあります。
channelCustomProperties:
          - channel: "facebook"
            properties:
              top_element_style: "large"
channelCustomPropertiesの使用および各チャネルで使用可能なプロパティの詳細は、チャネル固有の拡張機能を参照してください。
いいえ

キーワード・メタデータ・プロパティ

キーワードおよびラベルのプロパティを定義することで、アクションのショートカットを作成できます。たとえば、ユーザーがSmallに対してSを入力できるようにします。
keywords_crc_list.pngの説明が続きます

次のスニペットは、PizzaSizeエンティティに対して定義された値のリストを保持するpizzaSize変数からキーワードのセットを生成する方法を示しています。
      
responseItems:         
- type: "text"  
  text: "What size of pizza do you want?" 
  actions: 
  - label: "(${enumValue[0]?upper_case})${enumValue?keep_after(enumValue[0])}"
    type: "postback"
    keyword: "${enumValue[0]?upper_case},${(enumValue?index)+1}"
    payload: 
      variables: 
        pizzaSize: "${enumValue}" 
    iteratorVariable: "pizzaSize.type.enumValues"
プロパティ 説明 必須?
keyword payloadプロパティによって定義されたポストバック・ペイロードをトリガーするキーワードのリスト。FreeMarker式を使用すると、interatorVariableプロパティによって値リスト・エンティティから生成されるキーワードを、typeおよびenumValuesプロパティを使用して返すことができます(iteratorVariable: "pizzaSize.type.enumValues")。 はい
label アクションのラベル。テキスト文字列またはApache FreeMarker式です。たとえば、2文字のキーワードを示す式は次のようになります:

label: "(${enumValue[0]?upper_case}${enumValue[1]?upper_case})${enumValue?keep_after(enumValue[1])}"

多言語サポートの場合は、リソース・バンドルを参照するApache FreeMarker式を使用します。
いいえ
skipAutoNumber デジタル・アシスタントまたはスキル・レベルで「カードでの自動採番の有効化」が設定されている場合に、キー・アイテムの自動採番を抑制するには、trueに設定します。 いいえ
visible ユーザー入力およびチャネルごとにテキスト・メッセージの表示方法を決定します。「visibleプロパティ」を参照してください。 いいえ
iteratorVariable 指定された変数に格納されているアイテムを反復して、複数のキーワードを動的に追加します。たとえば、iteratorVariable: "pizzaSize.type.enumValues"です。 いいえ
iteratorExpression iteratorVariableプロパティで指定された変数内にネストされた配列の値を表示するために使用されるFreeMarker式。

たとえば、iteratorVariableプロパティの値を"team"に設定し、その変数に値を表示するmembersという要素がある場合、式${team.value.members}を使用します。

payload ポストバック・ペイロード。次のプロパティがあります。
  • action—ターゲット・アクション。
  • <variable names> - 変数の値を設定します。
これらのプロパティの少なくとも1つを定義する必要があります。ペイロード・プロパティを参照してください。
 

メッセージからのキーワードの抽出

ユーザーが番号を入力するとコンポーネントはポストバックをトリガーしますが、First,let's try the 1st itemなど、より幅広い入力をサポートするようにスキルを拡張できます。これを行うには、キーワード・フレーズの配列変数を作成します(first1stonesecond2ndtwoなど)。

次に、メタデータのkeywordプロパティで変数を参照します。たとえば、ピザを注文する際のフローは次のようになります。
- keyword: "${pizzas.name},<#if pizzas?index <KEYWORDS_VAR.value?size>${numberKeywords.value[pizzas?index].keywords}</#if>,<#if pizzas?index==cardsRangeStart?number+[cardsRangeStart?number+3,pizzaCount.value?number-cardsRangeStart?number-1]?min>last</#if>"
この定義では、lastというキーワードは現在の範囲開始に基づいています。これは、顧客がmoreを入力した回数に基づいて、現在表示されている最後のピザに設定されます。

visibleプロパティ

オプションのvisibleプロパティを使用して、ユーザー入力およびチャネルに従って表示を設定します。
プロパティ 説明 必須?
expression テキスト、カードまたはアタッチメントを条件付きで表示または非表示にするApache FreeMarkerディレクティブ。たとえば、CrcPizzaBotのOrderPizza状態は、""<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"を使用します いいえ
channels:
 include:
 exclude:
includeおよびexcludeの場合は、テキスト、カードまたはアタッチメントを表示(include)または非表示(exclude)にする対象のチャネル・タイプのカンマ区切りリストを入力します。有効なチャネル値:
  • facebook

  • webhook

  • websdk

  • androidsdk

  • iossdk

  • twilio

  • slack

  • msteams

  • cortana

  • test

metadata:
  responseItems:
  - type: "text"
    text: "This text is only shown in Facebook Messenger"
    visible:
      channels:
        include: "facebook"             
  - type: "text"
    text: "This text is NOT shown in Facebook Messenger and Twilio"
    visible:
      channels:
        exclude: "facebook, twilio"
    actions:
    - label: "This action is only shown on web channel"
      type: "postback"
      payload:
        action: "someAction"
      visible:
        channels:
          include: "websdk"
いいえ
onInvalidUserInput ユーザーが有効な入力を行ったとき(value=false)またはユーザーが無効な入力を行ったとき(value=true)に、テキスト・アイテムまたはアタッチメントを表示するブール・フラグ。 いいえ
onDisambiguation trueの場合、あいまい性解消プロンプトが表示されるときのレスポンス・アイテム、カードまたはアクションのみが表示されます。 いいえ
entitiesToResolve このプロパティを使用して、コンポジット・バッグ・アイテムごとにカスタマイズされたメッセージを作成します。レスポンス・アイテムを表示(include)または非表示(exclude)にするコンポジット・バッグ・アイテム名のカンマ区切りリストを追加します。
visible:
           entitiesToResolve:
           include: "Amount"
いいえ

アクション・メタデータ・プロパティ

カードまたはリストのアクション、レスポンス・タイプ、またはコンポーネントのグローバル・アクション(Facebookのクイック返信アクションなど)を定義できます。アタッチメント・メッセージに対するアクションは構成できません。

プロパティ 説明 必須?
type アクション・タイプ:
  • postback - 状態、アクションおよび変数を含むJSONオブジェクトを返します。

  • share—メッセンジャ・クライアントで共有ダイアログを開き、ユーザーが友人とメッセージ・バブルを共有できるようにします。

  • call—ペイロードで指定されている電話番号を呼び出します。

  • url—ペイロードで指定されているURLをブラウザで開きます。Facebook Messengerの場合、webview_height_ratiomessenger_extensionsおよびfallback_urlを使用して、channelCustomPropertiesプロパティを指定できます。

  • location—現在のロケーションを送信します。Facebook Messengerでは、現在のロケーションはテキストまたはカード・レスポンスに対してサポートされていません。クイック返信の使用でのみサポートされています。詳細は、Facebook Messenger Platformのドキュメントを参照してください。

はい
label アクションのラベル。このラベルをローカライズするには、FreeMarker式を使用してボットのリソース・バンドル内のエンティティを参照します。 はい
iteratorVariable このオプションは、指定された変数に格納されているアイテムを反復して、複数のアクションを追加します。このプロパティは、共有アクションおよびロケーション・アクションでは使用できません。 いいえ
iteratorExpression iteratorVariableプロパティで指定された変数内にネストされた配列の値を表示するために使用されるFreeMarker式。

たとえば、iteratorVariableプロパティの値を"team"に設定し、その変数に値を表示するmembersという要素がある場合、式${team.value.members}を使用します。

いいえ
imageUrl アクションを識別するアイコンに対して使用するイメージのURL。このプロパティを使用して、Facebookのクイック返信ボタン(これはグローバル・アクションです)のアイコンを表示できます。 いいえ
skipAutoNumbering trueに設定すると、このプロパティによって個々のポストバック・アクションは自動採番の適用から除外されます。このプロパティは、テキストまたはカード・レスポンスに対して使用できます。 いいえ
channelCustomProperties 標準のアクション・プロパティによって制御されないチャネル固有の機能をトリガーするプロパティのリスト。例は、CrcPizzaBotのOrderPizza状態にあります。 いいえ
name デジタル・アシスタント・プラットフォームでのアクションを識別する名前。この名前は内部的に使用され、メッセージには表示されません。 いいえ
visible ユーザー入力およびチャネルごとにアタッチメントの表示方法を決定します。「可視プロパティ」を参照してください。 いいえ
payload callurlおよびpostbackレスポンス・アイテムのペイロード・オブジェクト。ペイロード・プロパティを参照してください。 いいえ

ペイロード・プロパティ

プロパティ 説明 必須?
action ユーザーがこのアクションを選択するとトリガーされるaction遷移。 いいえ
variables アクション・タイプをpostbackに設定し、変数に対して指定されたペイロード・プロパティを追加した場合に、変数の値を設定します。ユーザーがアクションをタップすると、変数はこのプロパティで指定された値に設定されます。 いいえ
url ユーザーがこのアクションをタップしたときに開くWebサイトのURL。 このプロパティは、urlアクション・タイプに必要です。
phoneNumber ユーザーがこのアクションをタップしたときに呼び出される電話番号。 このプロパティは、callアクション・タイプに必要です。

テキストのみのチャネルで非ポストバック・アクションをレンダリングする方法

共通レスポンス・コンポーネントのこれらのアクション・メタデータ・プロパティに注意する事項があります。

  • テキストのみのチャネルでハイパーリンクがサポートされている場合、グローバル・アクション・タイプがurlまたはcallのときは、ボタンのかわりにハイパーリンクを使用できます。

  • shareおよびlocationアクション・タイプは、無視されるかレンダリングされません。

ヒント:

urlcallのような非ポストバック・アクションには採番できません。これらはダイアログ・エンジンに渡されず、したがってキーワードによってトリガーできないためです。その結果、2つのタイプのアクションを混在させると、一部のオプションのみに番号が付けられるため、ボットのメッセージの整合性が取れなくなります。
非ポストバックおよびポストバックの採番の実行時のイメージ。
SDKを使用して、ポストバックの自動採番を無効にすることで、より一貫性のある出力を作成できます。例:
{
  "type": "text",
  "text": "Please choose one of the following options",
  "actions": [
    {
      "type": "url",
      "label": "Check out our website",
      "url": "http://www.oracle.com"
    },
    {
      "type": "postback",
      "label": "<#if autoNumberPostbackActions.value>Enter 1 to Order pizza<#else>Order Pizza<#if>"
      "skipAutoNumber": true
      "keyword": "1"
      "postback": { ...}
    }
  ]
}

テキスト・レスポンス・アイテム

共通レスポンス・コンポーネントのテキスト・レスポンス・アイテムのプロパティを次に示します。

プロパティ 説明 必須?
text ユーザーに入力を求めるテキスト。 はい
iteratorExpression iteratorVariableプロパティで指定された変数内にネストされた配列の値を表示するために使用されるFreeMarker式。

たとえば、iteratorVariableプロパティの値を"team"に設定し、その変数に値を表示するmembersという要素がある場合、式${team.value.members}を使用します。

 
iteratorVariable 変数要素を反復することで、複数のテキスト、アタッチメントまたはキーワード・アイテムをレスポンスに動的に追加します。 いいえ
footerText メッセージの下部に表示されるテキスト(テキスト・アクションおよびボタン・アクションがある場合は両方の下)。フッターを追加して、テキストのみのチャネルでの出力を拡張します。フッターで説明されているように、FreeMarker式を使用して、テキストのみのチャネルのフッター・テキストに条件を設定できます。 いいえ
separateBubbles このプロパティは、iteratorVariableプロパティも定義する場合に定義できます。このプロパティをtrueに設定すると、CrcPizzaBotのShowMenuおよびOrderPizza状態のPizzasやPastasのように、各テキスト・アイテムは個別のメッセージとして送信されます。falseに設定すると、1つのテキスト・メッセージ(各テキスト・アイテムが新しい行で開始されるメッセージ)が送信されます。 いいえ
visible ユーザー入力およびチャネルごとにテキスト・メッセージの表示方法を決定します。「可視プロパティ」を参照してください。 いいえ
actions ポストバック・アクション。テキストのみのサポートの場合は、キーワードを定義できます。 いいえ
アクションを含むテキスト・レスポンスの例を確認する場合は、CrcPizzaBotのshowMenu状態のメタデータを参照してください:

text_response_rt_output.pngの説明が続きます

postbackはアクションとして指定されるため、スキルでは、最新のメッセージから選択するのではなく古いメッセージからアイテムを選択するなど、予期しないユーザー動作を処理できます。
metadata:
  responseItems:
    - type: "text"
      text: "Hello ${profile.firstName}, this is our menu today:"
      footerText: "${(textOnly.value=='true')?then('Enter number to make your choice','')}"
      name: "hello"
      separateBubbles: true
      actions:
        - label: "Pizzas"
          type: "postback"
          keyword: "${numberKeywords.value[0].keywords}"
          payload:
            action: "pizza"
          name: "Pizzas"
        - label: "Pastas"
          keyword: "${numberKeywords.value[1].keywords}"
          type: "postback"
          payload:
            action: "pasta"
          name: "Pastas"

カード・レスポンス・アイテム

共通レスポンス・コンポーネントのカード・レスポンス・アイテムのプロパティを次に示します。

プロパティ 説明 必須?
cardLayout カード・レイアウト: horizontal (デフォルト)およびvertical はい
headerText ヘッダー・テキストたとえば、headerText: "<#if cardsRangeStart?number == 0>Here are our pizzas you can order today:<#else>Some more pizzas for you:</#if>"です。 いいえ
title カード・タイトル はい
description カードの説明。サブタイトルとして表示されます。 いいえ
imageUrl サブタイトルの下に表示されるイメージのURL。 いいえ
cardUrl WebサイトのURL。カードにハイパーリンクとして表示され、これをユーザーがタップして開きます。 いいえ
iteratorExpression iteratorVariableプロパティで指定された変数内にネストされた配列の値を表示するために使用されるFreeMarker式。

たとえば、iteratorVariableプロパティの値を"team"に設定し、その変数に値を表示するmembersという要素がある場合、式${team.value.members}を使用します。

 
iteratorVariable このプロパティに対して指定した変数に格納されているアイテムを反復することで、複数のカードをレスポンスに動的に追加します。変数を文字列として定義しますが、イテレータ変数として使用される場合はJSON配列が保持されます。配列のオブジェクト内のプロパティは、${iteratorVarName.propertyName}のような式で参照できます。たとえば、pizzasというイテレータ変数では、ピザのnameプロパティは式${pizzas.name}を使用して参照できます。 いいえ
rangeStart iteratorVariableを指定した場合、rangeStartプロパティをrangeSizeプロパティと組み合せて指定することによって、カードのサブセットをスタンプ・アウトできます。ハードコードされた値を入力するか、範囲開始を保持する変数を参照するFreeMarker式を使用できます。rangeStart変数を使用することにより、参照オプションのペイロードでrangeStart変数を設定して、次のデータ・セットにページングできます。 いいえ
rangeSize iteratorVariableおよびrangeStartプロパティで指定されたように表示されるカードの数。 いいえ
visible ユーザー入力およびチャネルごとにアクション・ラベルのレンダリング方法を決定します。「可視プロパティ」を参照してください。 いいえ

特定のカードに固有のアクションのセット、またはカード・リストの最後にアタッチされるアクションのリストを割り当てることができます。

次のスニペットに示すように、CrcPizzaBotのOrderPizza状態には、カード・レスポンス・アイテムの定義が含まれています:
responseItems:
  - type: "cards"
    headerText: "<#if cardsRangeStart?number == 0>Here are our pizzas you can order today:<#else>Some more pizzas for you:</#if>"
    cardLayout: "vertical"
    name: "PizzaCards"
    actions:
      - label: "More Pizzas"
        keyword: "more"
        type: "postback"
        skipAutoNumber: true
        visible:
          expression: "<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"
        payload:
          action: "more"
          variables:
            cardsRangeStart: "${cardsRangeStart?number+4}"
        name: "More"
    cards:
      - title: "${(textOnly=='true')?then((pizzas?index+1)+'. ','')}${pizzas.name}"
        description: "${pizzas.description}"
        imageUrl: "${pizzas.image}"
        name: "PizzaCard"
        iteratorVariable: "pizzas"
        rangeStart: "${cardsRangeStart}"
        rangeSize: "4"
        actions:
          - label: "Order Now"
            type: "postback"
            payload:
              action: "order"
              variables:
                orderedPizza: "${pizzas.name}"
                orderedPizzaImage: "${pizzas.image}"
            name: "Order"
            visible:
              expression: "${(textOnly=='true')?then('false','true')}"

テキストのみのチャネルでカードをレンダリングする方法

一般的なレスポンス・コンポーネントは、レスポンスをカードとしてレンダリングします。スキルがテキストのみのチャネルで実行されると、カード・レスポンス・アイテムの一部のプロパティは、異なる動作をします。次の点に注意してください。

  • 垂直方向または水平方向のスクロール(cardLayoutオプションによって設定される動作)はありません。すべてのカードは1つのメッセージ・バブル内にレンダリングされます。これにはヘッダーとフッターが含まれる場合があります。カードのtitleプロパティとdescriptionプロパティは、改行文字によって区切られます。カードのtitleプロパティには番号を付けることができます。

  • ハイパーリンクは、テキストのみのチャネルでもサポートされます。改行文字で区切られたtitleプロパティとdescriptionプロパティに加えて、cardUrlプロパティ用に構成されたアドレスがバブル内にレンダリングされます。

  • imageURLプロパティによって指定されたイメージがレンダリングされます。

  • アクション・ボタンのラベル・テキストが表示されます(ボタン自体はレンダリングされません)。ユーザーがテキストを入力することもできますが、自動採番が有効になっている場合は、利便性を高めるために対応する番号を入力することもできます。

default_card_text_only.pngの説明が続きます

キーワードを使用したテキストのみのチャネルでのカードの最適化

ほとんどのカードには、単一アクション(CRCPizzaBotの「Order Now」ボタンなど)とグローバル・アクション(カルーセルに次のカードをロードする「More」など)があります。テキストのみのチャネルでカードをレンダリングする方法に示すように、スキルがSMSチャネル/テキストのみのチャネルで実行される場合は、各アクションのラベルに自動的に番号が付けられます。これらのチャネルでは、カード・セットは1つのバブル内に表示されるため、長くなり、読みにくくなる場合があります。これを回避するには、アクション・ラベルには関連付けられていないが、ユーザー・キーワード(123cheesemoreなど)によって実行されるポストバック・アクションを構成します。


cards_text_only.pngの説明が続きます

これらの一般的なガイドラインを使用してスキルがテキストのみのチャネルで実行される場合は、アクション・ラベルを非表示にできます。

metadataプロパティの場合:
  • keywordsプロパティを定義します。次のCRCPizzaBotスニペットでは、キーワード・プロパティに設定された${pizza.name}式によって、各ピザ名のキーワードが定義されます:
    
    metadata:
      keywords:
        - keyword: "${pizzas.name},<#if pizzas?index <numberKeywords.value?size>${numberKeywords.value[pizzas?index].keywords}</#if>,<#if pizzas?index==cardsRangeStart?number+[cardsRangeStart?number+3,pizzaCount.value?number-cardsRangeStart?number-1]?min>last</#if>"
          visible:
            expression: "${textOnly.value}"
    ...

    これらのキーワードは、textOnlyがtrueの場合にのみ追加されます。

cardメタデータの場合:
  • titleプロパティを定義します。次のスニペットでは、式でFreeMarkerのindex変数を使用して、タイトルの前に番号を付けます(textOnly変数値がtrueの場合は、${pizzas.name}によって返されます)。つまり、顧客がmoreを入力すると、スキルによって、番号5 (rangeSize: "4")で始まる次のピザ・セットを含む別のメッセージ・バブルがロードされます。
    cards:
            - title: "${(textOnly=='true')?then((pizzas?index+1)+'. ','')}${pizzas.name}"
              description: "${pizzas.description}"
              imageUrl: "${pizzas.image}"
              name: "PizzaCard"
              iteratorVariable: "pizzas"
              rangeStart: "${cardsRangeStart}"
              rangeSize: "4"
  • 次のスニペットでは、textOnly変数値がfalseの場合にのみカード・アクション("Order"および"More Pizzas")が表示されます:
            - label: "More Pizzas"
              keyword: "more"
              type: "postback"
              skipAutoNumber: true
              visible:
                expression: "<#if cardsRangeStart?number+4 < pizzas.value?size && textOnly=='false'>true<#else>false</#if>"
  • textOnly変数値がtrueの場合にのみ表示されるフッターを追加します。
    footerText: "<#if textOnly=='true'>Enter a pizza number to make your choice<#if cardsRangeStart?number+4 < pizzas.value?size>, or type 'more' to see more pizzas</#if></#if>"

アタッチメント・レスポンス・アイテム

attachmentレスポンス・アイテムには、次のプロパティが含まれます。

プロパティ 説明 必須?
attachmentType アタッチメントのタイプ: imageaudiovideoおよびfile はい
attachmentURL アタッチメントのダウンロードURLまたはソース。 はい
CrcPizzaBotのConfirmation状態では、アタッチメント・レスポンス・アイテムを使用して、オーダーのピクチャ(メニューで示されたアイテムとは異なるもの)を表示します。
metadata:
  responseItems:
  - text: "Thank you for your order, your ${pizzaSize} ${orderedPizza} pizza\
      \ will be delivered in 30 minutes at GPS position ${location.value.latitude},${location.value.longitude}!"
    type: "text"
    name: "conf"
    separateBubbles: true
  - type: "attachment"
    attachmentType: "image"
    name: "image"
    attachmentUrl: "${orderedPizzaImage}"

アクション

アクションは、ユーザーが選択できる内容を表します。
名前 説明 タイプ 必須?
type アクション・タイプ string はい
label アクションの説明的なラベル。 string labelまたはimageUrlを少なくとも1つ含める必要があります。
imageUrl アクションのイメージ string 少なくとも1つのlabelまたはimageUrlプロパティを含める必要があります。
style ボタンのレンダリング・スタイル "primary", "danger", "default" いいえ
displayType アクション要素のタイプのレンダリング(ボタン、リンクまたはアイコン) "button", "link", "icon" いいえ
channelExtensions アクションに関連付けられたチャネル固有の拡張プロパティ JSONObject いいえ

フィールド

Field要素には、次のプロパティが含まれます。
名前 説明 タイプ 必須?
displayType フィールド・タイプ String いいえ
label フィールド・ラベル String はい
channelExtensions チャネル固有の拡張プロパティのセット。 Map<ChannelType, JSONObject> いいえ
marginTop 同じ列のこのフィールドと前のフィールドの間の垂直方向のスペースの量。使用可能な値は、nonemedium (デフォルト)およびlargeです。 String いいえ
labelFontSize フィールド・ラベルに使用するフォント・サイズ。使用可能な値は、smallmedium (デフォルト)およびlargeです。 String いいえ
labelFontWeight フィールド・ラベルに使用されるフォントの太さ。使用可能な値は、lightmedium (デフォルト)および太字です。 String いいえ
displayInTable dataSetレスポンス・アイテムで表レイアウトにフィールドを条件付きで含めることができるブール型FreeMarker式。 String いいえ(デフォルトはtrue)
displayInForm editFormレスポンス・アイテムまたはdataSetレスポンス・アイテムのフォーム・レイアウトにフィールドを条件付きで含めることができるブール型FreeMarker式 String いいえ(デフォルトはtrue)

ReadOnlyフィールド

読取り専用フィールドを表します。すべての読取り専用フィールドは、Fieldプロパティを継承し、次の追加プロパティを持ちます。
名前 説明 タイプ 必須?
value フィールドの値。 string はい
width 表レイアウトでフィールドが占める合計使用可能幅の推奨パーセント。 数値 いいえ
alignment 表の列内の値の位置合せ。デフォルトの配置はrightです。 "left""center"および"right" いいえ
ノート

Oracle Digital Assistantのリリース23.06では、メッセージ・ペイロードで受信された場合でも、読取り専用フィールドは入力フォーム内でレンダリングされません。
TextField
TextField要素は、すべてのReadOnlyフィールド・プロパティを継承します。この要素のdisplayType"text"です。これには、次の追加プロパティがあります。
名前 説明 タイプ 必須?
truncateAt 長いテキストが切り捨てられ、値が切り捨てられたことを示す省略記号が追加される位置。 整数 いいえ
fontSize field値に使用されるフォント・サイズ。使用可能な値は、smallmedium (デフォルト)およびlargeです。 文字列 いいえ
fontWeight field値に使用されるフォントの太さ。使用可能な値は、light、medium (デフォルト)およびboldです。 文字列 いいえ
LinkField
LinkField要素は、すべてのReadOnlyフィールド・プロパティを継承します。これには、次の追加プロパティがあります。
名前 説明 タイプ 必須?
linkLabel ハイパーリンクに使用されるラベル 文字列 いいえ
imageUrl クリック時にリンクを開くイメージのURL。 文字列 いいえ
MediaField
MediaField要素は、すべてのReadOnlyフィールド・プロパティを継承します。これには、次の追加プロパティがあります。
名前 説明 タイプ 必須?
mediaType フィールド・メディア・タイプ("video""audio""image") String はい
ActionField
ActionField要素は、すべてのReadOnlyフィールド・プロパティを継承します。これには、次の追加プロパティがあります。
名前 説明 タイプ 必須?
action ユーザーがアクションボタンをクリックしたときに実行されるアクション。 アクション はい

フォーム

フィールドの配列とタイトルを表します。
名前 説明 タイプ 必須?
title フォーム・レイアウトの上に表示されるタイトル 文字列 いいえ
fields フォーム内の読取り専用フィールドのリスト リスト<ReadOnlyField> はい
formRows フォームに表示される行のリスト。 リスト<FormRow>  
actions アクションのリスト リスト<アクション> いいえ
selectAction フォームが選択されたときに実行されるアクション。ユーザーがフォームの上にカーソルを置くと、アクションのラベルがツールチップとして表示されます(チャネルでサポートされている場合)。 アクション いいえ
channelExtensions メッセージに関連付けられたチャネル固有の拡張プロパティ JSONObject いいえ

FormRow

名前 説明 タイプ 必須?
columns フォーム行に表示される列のリスト。 リスト<> はい
selectAction フォームが選択されたときに実行されるアクション。ユーザーがフォームにカーソルを置くと、アクションのラベルがツールチップとして表示されます(チャネルでサポートされている場合)。 アクション いいえ
separator このプロパティをtrueに設定すると、フォーム行のコンテンツの上にセパレータ行を挿入します。 Boolean いいえ
channelExtensions メッセージに関連付けられたチャネル固有の拡張プロパティ JSONObject いいえ

名前 説明 タイプ 必須?
fields 列内に垂直に表示されるフィールドのリスト。列がForm内のFormRowで使用される場合、これらのフィールドはReadOnlyFieldインスタンスである必要があります。FormRowEditFormMessagePayload内で使用されている場合、フィールドは読取り専用フィールドと編集可能フィールドの両方にできます。 リスト<フィールド> はい
verticalAlignment 同じフォーム行の他のカラムに対するカラムの垂直配置。 文字列 いいえ
width フォーム行内の列の幅を決定します。使用可能な値は、auto (デフォルト)およびstretchです。stretchに設定すると、自動幅の列がレンダリングされた後、列には残りのすべての幅が使用されます。stretchに設定された列が複数ある場合は、残りの幅を均等に分割します。 文字列 いいえ
channelExtensions メッセージに関連付けられたチャネル固有の拡張プロパティ JSONObject いいえ

editFormレスポンス・アイテム

このレスポンス・アイテムは、チャネルを介してクライアントにリレーされるEditFormMessagePayloadを形成します。
名前 説明 タイプ 必須?
type レスポンス・アイテム・タイプ。 editform はい
title フォーム・タイトル 文字列 いいえ
items 読取り専用および編集可能なフィールドのリスト。 リスト<field> はい
formColumns フォーム・レイアウトに使用される列数。デフォルトは1列です。 Integer いいえ
actions カード関連のアクションのリスト。 リスト<Action> いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

textInputフィールド

自由形式テキストを入力するためのフィールド。このフィールドの最小文字数と最大文字数を設定し、正規表現を使用して強制的に書式設定できます。

このスニペットは、生成されたsubmittedFields変数(マップ)を参照してユーザー入力を収集する方法を示しています。
      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Description)!''}"
        minLength: 10
        name: Description
        label: Description
        placeholder: What is the expense justification?
        clientErrorMessage: "Description must be 10 characters minimum, 50 characters maximum."
        maxLength: 50
        required: true
      - displayType: textInput
        multiLine: true
        defaultValue: "${(submittedFields.value.Notes)!''}"
        minLength: 10
        name: Notes
        inputStyle: email
        label: Notes
        placeholder: Expense notes (optional)
        maxLength: 50
        required: false
このスニペットは、コンポジット・バッグ変数を参照してユーザー入力を収集する方法を示しています。
ノート

参照されるコンポジット・バッグ・アイテムにはSTRINGを指定できます。
      - displayType: textInput
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Tip'])!''}"
        defaultValue: "${(expense.value.Tip.originalString)!''}"
        displayInForm: "${(((expense.value.TipIncluded.yesno)!'') == 'NO')?then(true, false)}"
        name: Tip
        label: Tip
        placeholder: Enter the tip
        clientErrorMessage: Tip is required
        required: true
名前 説明 タイプ 必須?
displayType フィールド・タイプ textInput (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label フィールド・ラベル 文字列 いいえ
defaultValue 初期値。テンプレートのFreeMarker式では、参照されるバッグ・アイテム(myTextで表される)に値("${(submittedFields.value.myText)!''}")がない場合、値は文字列になります。 文字列 いいえ
validationRegularExpression テキスト入力の形式を指定する正規表現。 文字列 いいえ
multiline このプロパティをtrueに設定すると、ユーザーは複数行のテキストを入力できます。 Boolean いいえ
minlength フィールドの検証に必要な最小文字数。入力する文字数が少なすぎると、エラー・メッセージが表示されます。 Integer いいえ
maxLength 文字の最大数または制限。 Integer いいえ
inputStyle クライアントに適用されている形式。書式は次のとおりです。
  • text
  • email
  • url
  • tel
  • password
このプロパティが定義されていない場合、デフォルトの書式はテキストです。
文字列 いいえ
placeholder このフィールドの使用方法を説明するヒント。このテキストは、ユーザーが入力をまだ入力していない場合に表示されます。例:
What is the expense justification? Enter between 10 and 50 characters.
文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

datePickerフィールド

ユーザーが日、月および年を選択できるようにするドロップダウン・カレンダを含むフィールド。コンポーネントのmaxDateおよびminDateプロパティは、ユーザー入力を検証します。
ノート

Slackチャネルでは、この最小値と最大値の検証はサポートされていません。
このコード・スニペットは、生成されたsubmittedFields変数(マップ)を使用してユーザー入力を取得する方法を示しています。
 - displayType: datePicker
        defaultValue: "${(submittedFields.value.Date)!''}"
        name: Date
        maxDate: "${.now?iso_utc[0..9]}"
        label: Expense Date
        placeholder: Pick a date in the past
        clientErrorMessage: Expense date is required and must be in the past.
        required: true
このスニペットは、コンポジット・バッグ変数を参照してユーザー入力を取得する方法を示しています。
     - displayType: datePicker
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Date'])!''}"
        defaultValue: "${(expense.value.Date.date?number_to_date?iso_utc)!''}"
        name: Date
        maxDate: "${.now?iso_utc[0..9]}"
        label: Expense Date
        placeholder: Pick a date in the past
        clientErrorMessage: Expense date is required and must be in the past.
        required: true
名前 説明 タイプ 必須?
displayType フィールド・タイプ datePicker (文字列) はい
id 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label わかりやすいラベル。 文字列 いいえ
defaultValue フィールドのデフォルト値(YYYY-MM-DDの書式)。このテンプレートは、参照されるコンポジット・バッグ・アイテム(myDateで表される)がnull値の場合に空の文字列を返すApache FreeMarker式としてこの文字列を定義します。
"${(submittedFields1.value.myDate)!''}"
文字列 いいえ
minDate 許容日数範囲内の最初の日付。Slackチャネルは、このクライアント側検証をサポートしていません。 文字列 いいえ
maxDate 許容日数範囲内の最終日。テンプレートでは、この文字列を現在日("${.now?iso_utc[0..9]}")として定義します。Slackチャネルは、このクライアント側検証をサポートしていません。 文字列 いいえ
placeholder ユーザーが日付をまだ選択していない場合に表示される予想入力の摘要。 文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

timePickerフィールド

ユーザーは、指定した範囲内の時間値を入力できます。コンポーネントのmaxTimeおよびminTimeプロパティは、ユーザー入力を検証します。
ノート

Slackチャネルは、最小値と最大値の検証をサポートしていません。
時間ピッカー・フィールドは、24時間形式で値を読み書きします。クライアント・チャネルの表示形式では、AM/PM表示で12時間形式を使用できますが、常に24時間形式の時間をライトバックする必要があります。
次のスニペットは、生成されたsubmittedFields変数(マップ)を使用してユーザー入力を取得する方法を示しています。
      - displayType: timePicker
        defaultValue: "${(submittedFields.value.Time.value?time.xs?string['hh:mm a'])!''}"
        maxTime: "23:00"
        minTime: "13:00"
        name: Time
        label: Expense Time
        placeholder: What time was the expense?
        clientErrorMessage: This time is outside the limits.
        required: true
名前 説明 タイプ 必須?
displayType フィールド・タイプ timePicker (文字列) はい
id 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label 時間選択パラメータを説明するラベル。 文字列 はい
defaultValue このフィールドの初期値(24時間形式)。このテンプレートは、参照されるコンポジット・バッグ・アイテム(myTimeで表される)がnull値の場合に空の文字列を返すApache FreeMarker式としてこの文字列を定義します。
"${(submittedFields.value.myTime)!''}"
文字列 いいえ
minTime 24時間形式でHH:MMとして入力された、最も早い許容時間を定義します。例、 00:00 文字列 いいえ
maxTime HH:MMとして24時間形式で入力された、最遅許容時間を定義します。例: 13:00 文字列 いいえ
placeholder 入力のヒント。テンプレートごとに、placeholderの例はPick a time in the morningで、00:00および12:00のテンプレートの例minTimeおよびmaxTime値を反映しています。 文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。たとえば、Time must be in the morningです。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

numberInputフィールド

指定された範囲内の数値入力を収集します。
      - displayType: numberInput
        minValue: 5
        serverErrorMessage: "${(amountError.value)!''}"
        maxValue: 500
        defaultValue: "${(submittedFields.value.Amount)!''}"
        name: Amount
        label: Amount
        placeholder: Enter the expense amount (do not include currency symbol)
        clientErrorMessage: Amount is required and must be between 5 and 500 characters
名前 説明 タイプ 必須?
displayType フィールド・タイプ numberInput (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label ユーザーが必要とする日付値のわかりやすいラベル。 文字列 いいえ
defaultValue 初期値。テンプレートでは、この文字列をApache FreeMarker式として定義し、参照されるコンポジット・バッグ・アイテム(myNumberで表される)がnull値の場合に空の文字列を返します。"${(submittedFields.value.myNumber)!''}" 文字列 いいえ
maxvalue 許容される最大の数値。Slackチャネルは、最小値または最大値の検証をサポートしていません。 Integer いいえ
minvalue 最小許容数 Integer いいえ
placeholder フィールドの使用方法を説明するヒント。このテキストは、ユーザーがまだ番号を入力していない場合に表示されます。 文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

singleSelectフィールド

ユーザーは、事前定義済リストから単一の値を選択できます。このコントロールは、ユーザーが問合せおよび選択できるリストとして、またはラジオ・ボタンのセットとしてスタイル設定できます。この要素にはチャネル固有のレンダリングがあります。
  • Microsoft Teamsチャネルでは、適応型カードではラジオ・ボタンがサポートされていないため、この要素は常にリストとしてレンダリングされます(layoutStyleradioGroupに設定されている場合でも)。
  • Slackチャネルでは、10を超えるオプションがある場合、この要素はラジオ・グループではなくリストとしてレンダリングされます。
次のスニペットは、生成されたsubmittedFields変数(マップ変数)を使用したリストの移入を示しています
 - displayType: singleSelect
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Expense Type
        placeholder: Select expense type
        clientErrorMessage: Expense type is required
        required: true

ヒント:

clientErrorMessageはオプション属性ですが、Microsoft Teamsチャネルで実行されているスキルに対して定義することをお薦めします。Adaptive Cardsでは、クライアント側の検証が失敗してもメッセージは生成されないためです。
次のスニペットは、コンポジット・バッグ・エンティティを参照してリストを移入する方法を示しています。
     - autoSubmit: true
        displayType: singleSelect
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Type'])!''}"
        defaultValue: "${(expense.value.Type.value)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Expense Type
        placeholder: Select expense type
        clientErrorMessage: Expense type is required
        required: true
名前 説明 タイプ 必須?
displayType フィールド・タイプ singleSelect (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label 単一選択リストの内容を説明するフィールド・ラベル・テキスト。 文字列 はい
defaultValue デフォルトで選択されています。テンプレートでは、この文字列値をApache FreeMarker式として定義し、参照されるコンポジット・バッグ・アイテム(mySingleSelect)で表される)がNULL値の場合に空の文字列を返します。"${(submittedFields.value.mySingleSelect)!''}" 文字列 いいえ
options 使用可能なオプションの配列。テンプレートでは、これらのオプションを静的に個々のlabelおよびvalueペアと文字列値を使用して定義しますが、iteratorVariableおよびiteratorExpressionプロパティを使用して選択オプションを動的に移入できます。
        defaultValue: "${(submittedFields.value.Type)!''}"
        name: Type
        options:
          - iteratorVariable: option
            iteratorExpression: "${expenseType.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
このスニペットでは、typeおよびenumプロパティによって返される経費タイプ値は、split組込みを使用してリスト内で順序付けされます。
リスト<オプション> はい
layoutStyle フォームでの単一選択オプションのレイアウト方法。リスト(layoutStyle: list)またはラジオ・ボタン(layoutStyle: radioGroup)としてグループ化できます。 文字列  
placeholder フィールドの使用方法を説明するヒント。これは、ユーザーがまだ選択を行っていない場合に表示されます。例:
label: 
        placeholder: Select an expense type. You can pick only one.
このプレースホルダは、リスト・レイアウトのレンダリングにのみ表示されます。
文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

multiSelectフィールド

ユーザーは、事前定義済リストから1つ以上の値を選択できます。これは、ユーザーが問合せできるピック・リストとして、または一連のチェック・ボックスとしてスタイル設定できます。この要素にはチャネル固有のレンダリングがあります。
  • Microsoft Teamsチャネルでは、適応型カードでは複数選択チェック・ボックスがサポートされていないため、この要素は常にリストとしてレンダリングされます(layoutStylecheckboxesに設定されている場合でも)。
  • Slackチャネルでは、10を超えるオプションがある場合、この要素は複数選択チェック・ボックスのセットではなくリストとしてレンダリングされます。
このスニペットは、生成されたsubmittedFields変数(マップ)を参照してリストを移入する方法を示しています。
 - displayType: multiSelect
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Attendees
        placeholder: Select one or more attendees

このスニペットは、リストに移入するコンポジット・バッグ・エンティティの参照を示しています。
     - displayType: multiSelect
        serverErrorMessage: "${(system.entityToResolve.value.validationErrors['Attendees'])!''}"
        displayInForm: "${(((expense.value.Type.value)!'') == 'Meal')?then(true, false)}"
        defaultValue: "${(expense.value.Attendees?map(a -> a.value)?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
        layoutStyle: list
        label: Attendees
        placeholder: Select attendees
        clientErrorMessage: Attendees are required when expense type is a Meal
        required: true
名前 説明 タイプ 必須?
displayType フィールド・タイプ multiselect (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label multiSelectリストの内容を説明するフィールド・ラベル。 文字列 はい
defaultValue デフォルトで選択されています。このテンプレートは、参照されるコンポジット・バッグ・アイテム(myMultiSelectで表される)がnull値の場合に空の文字列を返すApache FreeMarker式としてこの文字列を定義します。
"${(submittedFields.value.myMultiSelect?join(','))!''}"
List<String> いいえ
options 使用可能なオプションの配列。テンプレートでは、これらのオプションを静的に個々のlabelおよびvalueペアと文字列値を使用して定義しますが、iteratorVariableおよびiteratorExpressionプロパティを使用して選択オプションを動的に移入できます。
        defaultValue: "${(submittedFields.value.Attendees?join(','))!''}"
        name: Attendees
        options:
          - iteratorVariable: option
            iteratorExpression: "${attendee.type.enumValues?split(',')}"
            label: "${option}"
            value: "${option}"
List<option> はい
placeholder フィールドの使用方法を説明するヒント。ユーザーが何も選択していない場合に表示されます。
label: Attendees
        placeholder: Select one or more attendees
このプレースホルダは、リスト・レイアウトに対してのみ表示されます。チェックボックス・レイアウトでは使用できません。
文字列 いいえ
layoutStyle multiSelectオプションのレイアウト。オプションは、listおよびcheckboxesです。 文字列 いいえ
autoSubmit trueに設定すると、ユーザーがフィールドに値を入力したときにフォームが一部送信されます。FormSubmissionMessagePayloadでは、partialSubmitFieldは、autoSubmittrueに設定されているフィールドの名前に設定されます。条件に依存するフィールドに自動送信を構成することをお薦めします。たとえば、あるフィールドを別のフィールドの値に基づいて表示または非表示にする場合、またはあるフィールドの許容値が別のフィールドの値セットに依存する場合は、このプロパティを設定します。他のフィールドが依存するフィールドを自動送信することで、依存フィールドに対する関連する変更でフォームを即時に更新できます。 文字列 いいえ
required フォーム提出でこのフィールドにユーザー入力が必要かどうか boolean いいえ
clientErrorMessage クライアント側の検証が失敗したときに、一部のクライアント(MS Teams、Apple Business Messaging)で使用されるメッセージ。Slackでは、このプロパティは、編集可能なフォームが会話ページ内に表示される場合にのみ使用されます。モーダル・ダイアログには表示されません。 文字列 いいえ
serverErrorMessage フォーム・フィールド値のサーバー側検証が失敗したときにクライアントに送信されるエラー・メッセージ。このソートのサーバー側のエラーが発生した場合は、最後のフォーム・メッセージを置換する必要があることを示すchannelExtensionsプロパティを構成して、現在のフォーム・メッセージを会話に追加された新しいメッセージではなく置換することをお薦めします。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

トグル・フィールド

2つのオプションのスイッチを示します。Slackチャネルでは、このコントロールはチェック・ボックスとしてレンダリングされます。
ノート

Slackチャネルでは、この要素はラジオ・ボタンのペアとしてレンダリングされます。
このスニペットは、生成されたsubmittedForms変数(マップ)を参照してユーザー入力を取得する方法を示しています。
      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
このスニペットは、コンポジット・バッグ変数を参照してユーザー入力を取得する方法を示しています。
      - autoSubmit: true
        displayType: toggle
        defaultValue: "${(expense.value.TipIncluded.yesno)!'YES'}"
        name: TipIncluded
        labelOn: "Yes"
        label: Tip Included?
        valueOff: "NO"
        labelOff: "No"
        required: false
        valueOn: "YES"
名前 説明 タイプ 必須?
displayType フィールド・タイプ toggle (文字列) はい
id 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
label トグルがオンになったときに何が起こるかを示すラベル。 文字列 はい
defaultValue 初期値。トグルを最初にオンにする場合は、これをvalueOnの値に設定します。テンプレートでは、この文字列をApache FreeMarker式として定義し、参照されるコンポジット・バッグ・アイテム( myToggleで表される)がnull値の場合にトグルを切り替えます。
"${(submittedFields.value.myToggle)!'true'}"
文字列 はい
valueOff トグルがオフになったときの値。テンプレートごとのデフォルト値はfalse (valueOff: "false")です。 文字列 はい
valueOn トグルがオンのときの値。テンプレートのデフォルト値はtrue (value On: "true")です。 文字列 はい
labelOn トグルの位置のラベル 文字列 いいえ
labelOff トグルのオフ位置のラベル。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

テキスト・フィールド

フィールド要素には、次のプロパティが含まれます。
名前 説明 タイプ 必須?
displayType 要素タイプです。 text (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
value フィールドのRAW値 文字列 はい
width アイテムがテーブル・レイアウトで占める合計使用可能幅の割合。100から指定された幅の項目を差し引いた残りの幅は、幅を指定せずに項目に均等に分割されます。 Integer いいえ
alignment 値と表の列の位置合せ。 leftcenterおよびright。デフォルトはrightです。 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

リンク・フィールド

フィールド要素には、次のプロパティが含まれます。
名前 説明 タイプ 必須?
displayType フィールド・タイプ link (文字列) はい
name 入力フォーム内のフィールドの一意の名前。この名前は、実行時に識別子として使用されます。 文字列 はい
value URLアドレス。例: http:www.oracle.com 文字列 はい
width アイテムがテーブル・レイアウトで占める合計使用可能幅の割合。100から指定された幅の項目を差し引いた残りの幅は、幅を指定せずに項目に均等に分割されます。 Integer いいえ
alignment 値と表の列の位置合せ。指定可能な値は、leftcenterおよびrightです。デフォルトはrightです。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ

EditFormMessagePayload

このペイロードは、チャネルに送信される編集可能なフォームを定義します。
名前 説明 タイプ 必須?
type メッセージ・ペイロード・タイプ。 editForm (文字列) はい
headerText フォームの上に表示されるヘッダー・テキスト。 文字列 いいえ
footerText フォームおよびアクションの下に表示されますが、グローバル・アクションの上に表示されます。 文字列 いいえ
title フォーム・タイトル 文字列 いいえ
formRows フォームに表示される行のリスト。 リスト<FormRow> いいえ
fields 読取り専用および編集可能なフィールドのリスト。 リスト<field> はい
formColumns フォーム・レイアウトに使用される列数。デフォルトは1列です。 Integer いいえ
actions アクションのリスト。 リスト<Action> いいえ
globalActions グローバル・アクションのリスト。これらのアクションのレンダリングはチャネル固有です。たとえば、Facebookのアクションはreply_actionsによってレンダリングされます。 リスト<Action> いいえ
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ
フィールドの自動送信
フィールドのautoSubmitプロパティがtrueに設定されている場合、クライアントは、これまでに入力された有効なフィールド値、または自動発行フィールドの値のみを含むsubmittedFieldマップを含むFormSubmissionMessagePayloadを送信します(実装はチャネル固有です)。まだ設定されていないフィールド(必須かどうかに関係なく)、またはクライアント側の検証に違反するフィールドは、submittedFieldマップに含まれません。自動発行フィールド自体に無効な値が含まれている場合、FormSubmissionMessagePayloadは送信されず、かわりにクライアント・エラー・メッセージが表示されます。
ノート

Microsoft Teamsでは自動発行はサポートされていません。

SubmitFormAction

名前 説明 タイプ 必須?
type アクション・タイプ submitForm (文字列) はい
postback ポストバック・ペイロード。ナビゲーションをトリガーするアクション・プロパティを含めることができます。このプロパティの値は、FormSubmissionMessagePayloadポストバック・オブジェクトから取得することをお薦めします。 JSONObject いいえ
variable 送信された値を格納する変数の名前。これらの値はFormSubmissionMessagePayloadにあります。 文字列 いいえ
processingMethod 送信されたフィールド値に対してエンティティの変換コンポーネントで使用される処理手順。これをFormSubmissionMessagePayloadに設定できますが、次のように設定することもできます:
  • mapVariable
  • separateVariables
  • compositeBag
.
文字列 はい
label 表示アクションのラベル。 文字列 はい – label値またはimageUrl値を少なくとも1つ指定する必要があります。
imageUrl 表示アクションのイメージ。 文字列 少なくとも1つのlabelまたはimageUrl値を指定する必要があります。
channelExtensions チャネル固有の拡張プロパティのセット。たとえば、Facebook Messengerの最大高さを設定できます。 マップ<ChannelType, JSONObject> いいえ
FormSubmissionMessagePayload
このペイロードは、ユーザーがSubmitFormActionボタンをクリックしてフォームを送信すると、チャネルによってODAパイプラインに戻ります。これには、次のプロパティがあります。
名前 説明 タイプ 必須?
type ペイロードのタイプ。 "formSubmission" (文字列値) はい
submittedFields 送信されたフィールド値のキーと値のペア。キーは、フィールドの名前(ID)です。 マップ<文字列、オブジェクト> はい
postback ポストバック・ペイロード。ナビゲーションをトリガーするアクション・プロパティが含まれる場合があります。値はSubmitFormActionから取得することをお薦めします。 JSONObject いいえ
partialSubmitField 部分フォーム提出をトリガーするフィールドの名前。自動送信が有効になっているフィールド(autoSubmit: true)は、フォームの一部の送信をトリガーできます 文字列 いいえ

入力フォームの更新

エンド・ユーザーがフォームを送信するとき、フィールドのautosubmittrueに設定されているか、ユーザーがsubmitFormアクション・ボタンをタップしたために、ユーザーがすべての必須情報を指定しなかった場合、または一部のフィールド値に無効な値が含まれている場合があります。このような場合、ダイアログ・エンジンは新しいEditFormMessagePayloadを送信します。ただし、そのメッセージは前のフォーム・メッセージを置き換える必要があります。前のフォーム・メッセージを置換するようにクライアント・チャネルに指示するには、会話に新しいフォーム・メッセージを追加するかわりに、チャネル拡張プロパティreplaceMessageを次のように構成します。
- channel: ${system.channelType}
  properties:
    replaceMessage: "${system.message.messagePayload.type == 'formSubmission'}"
実行時に、このプロパティは、共通レスポンス・コンポーネント・ペイロードのルート・レベルのchannelExtensions要素に追加されます。
...,
"channelExtensions": { "replaceMessage": "true"}

TableMessagePayload

データを表形式およびフォーム形式で表示します。
名前 説明 タイプ 必須?
type メッセージ・ペイロード・タイプ "table" はい
headings 表列ヘッダーのリスト リスト<TableHeading> はい
rows 表の行のリスト リスト<> はい
forms フォームのリスト リスト はい
formColumns フォーム・レイアウトで使用される列数。デフォルトは1です。 Integer はい
paginationInfo 前または次のセット・ボタンのレンダリングに使用できるページ区切り情報 PaginationInfo はい

Row

名前 説明 タイプ 必須?
fields 読取り専用フィールドのリスト リスト<ReadOnlyフィールド> はい
selectAction フォームが選択されたときに実行されるアクション。ユーザーがフォームにカーソルを置くと、アクションのラベルがツールチップとして表示されます(チャネルでサポートされている場合)。 アクション いいえ
channelExtensions メッセージに関連付けられたチャネル固有の拡張プロパティ マップ<ChannelType>、JSONObject いいえ

TableHeading

表見出しには、次のプロパティが含まれます。
名前 説明 タイプ 必須?
label ヘッダー・ラベル 文字列 はい
width 見出しのラベル幅 文字列 いいえ
alignment 列値(leftrightまたはcenter)の配置。デフォルトはrightです。 文字列 いいえ
channelExtensions チャネル固有の拡張プロパティのセット。
Map<ChannelType>, JSONObject>
いいえ

PaginationInfo

TableFormおよびTable-Formオブジェクト内の結果のページング情報を表します。

名前 説明 タイプ 必須?
totalCount 合計結果数 数値 はい
rangeSize 1ページ当たりの結果の範囲サイズ 数値 はい
status ページング・ステータス・メッセージ string はい
currentRangeSize 結果のキュレント範囲のサイズ 数値 はい
rangeStart 結果の現在の範囲の開始オフセット 数値 はい
nextRangeSize 結果の次の範囲のサイズ 数値 はい
hasPrevious 前の結果セットがあるかどうかを示します boolean はい
hasNext 次の結果セットがあるかどうかを示します boolean はい

tableFormMessageLayout

データを表形式およびフォーム形式で表示します。
名前 説明 タイプ 必須?
type メッセージ・ペイロード・タイプ "tableForm" はい
headings 表列ヘッダーのリスト リスト<TableHeading> はい
rows 表の行のリスト リスト<> はい
forms フォームのリスト リスト はい
formColumns フォーム・レイアウトで使用される列数。デフォルトは1です。 Integer はい
showFormButtonLabel 特定の行のフォーム・レイアウトの表示に使用されるボタンのラベル。 文字列 はい
paginationInfo 前または次のセット・ボタンのレンダリングに使用できるページ区切り情報 PaginationInfo はい

dataSetレスポンス・アイテム

dataSetレスポンス・アイテムを使用すると、表およびフォームを作成できます。次のプロパティーが含まれています。

プロパティ 説明 必須?
layout dataSetのレンダリングに使用されるレイアウト・スタイル。使用可能な値は、tableformおよびtableFormです。 はい
formColumns フォーム・レイアウトでのアイテムのレンダリングに使用される列の数。レイアウトがformまたは tableFormの場合にのみ適用されます。デフォルトは1です。 いいえ
showFormButtonLabel フォーム・ダイアログをtableFormレイアウト・スタイルで開くために使用するラベル。現在、Slackチャネルでのみ使用されています。その他のチャネルでは、フォーム・レイアウトに追加のアイテムを表示するための表の行の拡張がサポートされています。 いいえ
data dataSetでデータ・エントリを定義するために使用されます。DataSet data Propertiesを参照してください。 はい

DataSetデータ・プロパティ

dataSetレスポンス・アイテムのdataプロパティには、次のサブプロパティが含まれます。

プロパティ 説明 必須?
iteratorExpression 反復するエントリのリストを返すFreemarker式を定義し、複数のデータ・エントリをdataSetに動的に追加できるようにします。 いいえ
iteratorVariable 反復処理されるデータ・エントリのリスト内の現在のデータ・エントリを参照するために使用できるイテレータ変数の名前を指定します。 いいえ
rangeSize iteratorExpressionおよびiteratorVariableプロパティを指定したときに一度に表示されるデータ・エントリの数。 いいえ
visible ユーザー入力およびチャネルごとにメッセージの表示方法を決定します。「可視プロパティ」を参照してください。 いいえ
formTitle SlackチャネルのtableFormレイアウトのフォーム・ダイアログに使用されるタイトル。デフォルトは、View detailsです。 いいえ
items データ入力ごとに表示されるデータ項目。DataSet Data Item Propertiesを参照してください。 はい

DataSetデータ・アイテムのプロパティ

プロパティ 説明 必須?
width アイテムがテーブル・レイアウトで使用する合計使用可能幅の割合(整数で表現)です。100から指定された幅の項目を差し引いた残りの幅は、幅を指定せずに項目に均等に分割されます。 いいえ
alignment 値と表の列の位置合せ。使用可能な値は、leftcenterおよびrightです。デフォルトはleftです。 いいえ
displayType アイテムの表示タイプ。使用可能な値は、textおよびlinkです。デフォルトはtextです。 いいえ
linkLabel 表示タイプがlinkに設定されている場合にハイパーリンクに使用されるラベル。デフォルトは、アイテムのvalueプロパティの値です。 いいえ
displayInTable アイテムを表の列として表示するかどうかを定義します。このプロパティは、tableFormレイアウトでのみ適用可能です。デフォルトはfalseです。 いいえ
displayInForm フォームのフィールドとしてアイテムを表示するかどうかを定義します。このプロパティは、tableFormレイアウトでのみ適用可能です。デフォルトはfalseです。 いいえ
label データ・アイテムのラベル。 はい
value データ・アイテムの値。 はい

system.entityToResolve変数

system.entityToResolve変数は、エンティティの解決コンポーネントおよび共通レスポンス・コンポーネントによって実行されるエンティティ解決プロセスの現在のステータスに関する情報を提供します。メッセージをカスタマイズする場合は、通常、共通レスポンス・コンポーネントのメタデータでこの変数値のプロパティを参照します。これを使用して、エンティティのエラー・メッセージのロジックや、エンティティの解決および共通レスポンス・コンポーネントに属する様々なプロパティのロジックを定義できます。現在のエンティティ値を返すには、次のプロパティを追加します:
  • userInput
  • prompt
  • promptCount
  • updatedEntities
  • outOfOrderMatches
  • disambiguationValues
  • enumValues
  • needShowMoreButton
  • rangeStartVar
  • nextRangeStart
FreeMarker式のプロパティは、prompterrorMessage、検証ルールなどのバッグ・アイテム・プロパティを使用することもできます。
この変数を使用してエンティティのエラー・メッセージで現在のユーザー入力を返す例を次に示します:
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
様々なsystem.entityToResolve定義の使用例を次に示します。その中に、textプロパティに対して定義されたメッセージがあります。これは、Apache FreeMarkerのlistディレクティブおよびupdatedEntitiesプロパティを使用して、以前に設定したエンティティ値に対する更新を確認します。
    metadata:
      responseItems:        
      - type: "text" 
        text: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
      - type: "text" 
        text: "${system.entityToResolve.value.prompt}"
        actions:
        - label: "${enumValue}"
          type: "postback"
          iteratorVariable: "system.entityToResolve.value.enumValues"
グローバル・アクションの場合、この変数でneedShowMoreButtonrangeStartVarおよびnextRangeStartプロパティを使用して「さらに表示」グローバル・アクションが制御されます:
        globalActions: 
        - label: "Show More"
          type: "postback" 
          visible:
            expression: "${system.entityToResolve.value.needShowMoreButton}"
          payload:
            action: "system.showMore"
            variables: 
              ${system.entityToResolve.value.rangeStartVar}: ${system.entityToResolve.value.nextRangeStart} 
        - label: "Cancel"
          type: "postback" 
          visible:
            onInvalidUserInput: true
          payload:
            action: "cancel"
「さらに表示」ラベルには、system.showMore (action: "system.showMore")が含まれている必要があります。そうしないと、機能しません。

ユーザー・メッセージの検証

共通レスポンス・コンポーネントは、variableプロパティに対して設定される、ユーザーが入力したフリー・テキスト値を検証します。たとえば、variableプロパティがプリミティブ型(string、 boolean、 float、 double)として定義されている場合、これらのコンポーネントは値をプリミティブ型の1つと照合しようとします。variableプロパティがエンティティ・タイプの変数に対して定義されている場合、これらのコンポーネントはNLPエンジンをコールして、値をエンティティのいずれかに解決します。ただし、これらのコンポーネントが値を検証できない場合、ボットはエラー・メッセージを表示できます。

message_validation.pngの説明が続きます

system.invalidUserInput変数を参照することで、条件付きエラー・メッセージをボットの返信に追加できます。この変数はブールであるため、FreeMarkerのifディレクティブとともに条件として使用して、ユーザーが無効な値を入力した場合にのみメッセージを表示できます。それ以外の場合、メッセージは表示されません。ifディレクティブによって評価されるFreeMarkerテンプレート内にこの変数を条件として追加することにより、次のスニペットで参照されるCrcPizzaBotのAskPizzaSize状態がこれを示しています。trueに設定されているため、ユーザーが無効な値を入力したときに、ボットはエラー・メッセージを標準メッセージ(What size do you want?)に追加します。
metadata:
  responseItems:
  - type: "text"
    text: "<#if system.invalidUserInput == 'true'>Invalid size, please try again.\
      \ </#if>What size do you want?"
    name: "What size"
    separateBubbles: true