機械翻訳について

その他のタスク

ここでは、ユーザー認証、自動採番、リソース・バンドル、入力フォームの作成、カスタム・パラメータの作成、フローのインポートとエクスポートなど、Visual Flow Designerの他の様々なタスクに関するいくつかのトピックを示します。

ユーザー認可

フロー内の特定の時点で、ユーザー認可を適用できます。

これは、次を実行して実現します:

  1. 認可を強制する状態で、「承認が必要」プロパティをTrueに設定します。 このプロパティは、状態プロパティ・インスペクタの「一般」タブにあります。

    このような状態に達したユーザーがまだ認可されていない場合、OAuth状態を使用した認可が起動され、認可が必要な状態がフローによって起動されます。

  2. 認可コンポーネントを作成し、フロー「ユーザーを認可」標準遷移イベントにマップします:
    1. フローを選択し、フロー「フロー」タブを選択します。
    2. フローの「イベント」タイルをダブルクリックして展開します。
    3. 「ユーザーを認可」タイルの上にマウスを置き、表示される省略記号(…)ボタンをクリックし、「状態の追加」を選択します。
    4. テンプレート・ピッカーの「セキュリティ」カテゴリから、コンポーネントを選択し、状態の名前を指定して、「挿入」をクリックします。

      使用可能な各テンプレートの詳細は、「セキュリティ・テンプレート」を参照してください。

    5. コンポーネント・プロパティ・インスペクタで、コンポーネント・プロパティとその遷移アクションを構成します。

レスポンス・アイテムの自動採番

自動採番機能を使用すると、ボタンのプリフィクスと、レスポンス内の番号付きのオプションをリストできます。

ユーザーがタッチ・ジェスチャを使用できない場合でも、数値を入力することでボタンのポストバック・アクションをトリガーできます。 この機能は、特にテキスト・チャネルに役立ちます。

自動採番はスキル・レベルで構成します。

自動採番を構成するには:

  1. スキルの左側のナビゲーションで、「設定」アイコンを選択します。
  2. 「構成」タブを選択します。
  3. 「タスク・フローでのポストバック処理での自動採番の有効化」の値を設定します。

    すべてのチャネルの自動採番を有効にする場合は、値をtrueに設定します。

    特定のチャネルの自動採番のみをオンにする場合は、どのチャネルが自動採番を取得するかを決定する式を指定します。 たとえば、Twilioチャネルの自動採番のみを有効にするには、次のように入力します:

    ${(system.channelType=='twilio')?then('true','false')}

ユーザー・プロンプト数の制限

ユーザーがダイアログ・フローのステップで立ち往生しないようにするには、そのコンポーネントを構成して、ユーザーにプロンプトを繰り返す回数を制限します。

maxPromptsプロパティは、共通レスポンス・コンポーネントが入力値をvariableプロパティによって参照されるエンティティまたは入力タイプに定義されているいずれの値にも一致できない場合に、ユーザーにプロンプトを表示できる回数を制限します。 このプロパティを使用すると、ユーザーが無効な値を繰り返し入力したときにダイアログが循環しないようにできます。 プロンプトの最大数は、整数を使用して設定できます。 この制限に達する前にユーザーが有効な値を入力した場合、ダイアログは次の状態に移行します。 それ以外の場合、ダイアログはcancelアクションによって定義された状態に遷移します。

リソース・バンドルとビジュアル・フロー・デザイナ

リソース・バンドルを使用して、ダイアログ・フローに追加するユーザー表示の文字列を格納できます。

リソース・バンドル・メッセージ・キーは、変数rbを介して参照します。 単純なリソース・バンドル・メッセージへの参照は、次の2つの形式のいずれかになります:

  • ${skill.system.rb.RB_ENTRY_NAME}
  • ${rb.RB_ENTRY_NAME}
リソース・バンドル・エントリ自体の作成や複雑なメッセージ形式の使用に関する情報など、リソース・バンドルの詳細は、「スキルのリソース・バンドル」を参照してください。

ヒント:

自動補完は、Apache FreeMarker式で参照されるリソース・バンドルを選択するのに役立ちます。

リソース・バンドル・エントリの変更

  1. スキルで、リソース・バンドル・アイコンをクリックして「リソース・バンドル」を開きます。
  2. 「構成」タブを選択します。
  3. 「フィルタ」フィールドを使用して、更新するエントリに移動します。
  4. キーの値の上にマウスを置き、表示される編集アイコンを選択します。
  5. 「テキスト」フィールドに、更新されたメッセージを入力します。
  6. 「エントリの更新」をクリックします。

ユーザー入力フォーム・メッセージ

ダイアログ・フローでは、入力フォームを作成することもできます。

入力フォームは、ユーザー情報を収集する最も迅速でエラーの少ない方法である場合があります。 スキルは、ユーザーを一連の質問の対象にするのではなく、テキスト入力フィールド、時間ピッカー、日付ピッカー、切替えスイッチなどの入力要素を含むフォームを送信することで、有効な入力を提供するようにユーザーをガイドできます。
editable-form-example.pngの説明は以下のとおりです
図editable-form-example.pngの説明

会話フローが入力フォームを含むメッセージを呼び出す場合は、inputForm状態を追加することで、メッセージを挿入できます:
  1. 「状態の追加」ダイアログで、「ユーザー・メッセージング」 > 「表およびフォームの作成」を選択します。 次に、「入力フォームの作成」を選択します。
  2. フォームのレイアウト、アクションおよび「編集可能フィールドと読取り専用フィールド」を作成するには、最初にEdit Response Itemsをクリックし、次にResponseItemsメタデータ・テンプレートを編集します。 この場合、テンプレートはeditFormレスポンス・アイテム用です。
    responseItems:
      - type: editForm
        title: Input Form
        formColumns: 2
        items:
          - autoSubmit: false
            displayType: textInput
            defaultValue: "${(submittedFields.value.myText)!''}"
            multiLine: false
            minLength: 5
            name: myText
            label: Text
            placeholder: Enter free text
            clientErrorMessage: Field is required and must be between 5 and 50 characters
            required: true
            maxLength: 50
          - validationRegularExpression: "^[a-zA-Z\\s]*$"
            autoSubmit: false
            displayType: textInput
            defaultValue: "${(submittedFields.value.myTextArea)!''}"
            multiLine: true
            name: myTextArea
            label: Text Area
            placeholder: Enter free text
            clientErrorMessage: Numbers are not allowed
          - autoSubmit: false
            displayType: datePicker
            minDate: "1970-01-01"
            defaultValue: "${(submittedFields.value.myDate)!''}"
            name: myDate
            maxDate: "${.now?iso_utc[0..9]}"
            label: Date
            placeholder: Pick a date in the past
            clientErrorMessage: Date is required and must be in the past.
            required: true
          - autoSubmit: false
            maxTime: "12:00"
            displayType: timePicker
            minTime: "00:00"
            defaultValue: "${(submittedFields.value.myTime)!''}"
            name: myTime
            label: Time
            placeholder: Pick a time in the morning
            clientErrorMessage: Time must be in the morning.
            required: false
          - autoSubmit: false
            displayType: numberInput
            minValue: 5
            maxValue: 500
            defaultValue: "${(submittedFields.value.myNumber)!''}"
            name: myNumber
            label: Number
            placeholder: Enter a number between 5 and 500
            clientErrorMessage: Number is required and must be between 5 and 500.
            required: true
          - autoSubmit: false
            displayType: singleSelect
            defaultValue: "${(submittedFields.value.mySingleSelect)!''}"
            name: mySingleSelect
            options:
              - label: Label 1
                value: Value 1
              - label: Label 2
                value: Value 2
              - label: Label 3
                value: Value 3
            layoutStyle: list
            label: Single Select
            clientErrorMessage: Field is required
            required: true
          - autoSubmit: false
            displayType: multiSelect
            defaultValue: "${(submittedFields.value.myMultiSelect?join(','))!''}"
            name: myMultiSelect
            options:
              - label: Label 1
                value: Value 1
              - label: Label 2
                value: Value 2
              - label: Label 3
                value: Value 3
            layoutStyle: list
            label: Multi Select
            clientErrorMessage: Field is required
            required: true
          - displayType: toggle
            defaultValue: "${(submittedFields.value.myToggle)!'true'}"
            name: myToggle
            labelOn: "Yes"
            label: Toggle
            valueOff: "false"
            labelOff: "No"
            valueOn: "true"
        actions:
          - label: Submit
            type: submitForm
        channelCustomProperties:
          - channel: "${system.channelType}"
            properties:
              replaceMessage: "${system.message.messagePayload.type == 'formSubmission'}"

Forms Metadataテンプレートの編集

editFormレスポンス・タイプのテンプレートに関する注意事項を次に示します:
  • itemsactionsおよびchannelCustomPropertiesに提供されるプロパティは、すべてeditFormMessagePayloadオブジェクトに固有です。 特に、このペイロードには、ユーザーが受信した入力フォーム・メッセージの全体的なレイアウト、フォーム・フィールド(「読取り専用および編集可能」)、およびプラットフォーム固有のUIレンダリングおよびフォーム送信動作のチャネル固有のカスタマイズの説明が含まれています。
  • テンプレートは、各アイテムおよびactionsノード内で、ユーザー入力を保持するsubmittedFieldsというフロー・レベルの変数を参照します。 これは、ダイアログ・フローにinputForm状態を追加したときに生成されるマップ変数です。

    ノート:

    必要に応じて、個々の変数またはコンポジット・バッグ変数をsubmittedFields変数のかわりに参照できます。
  • items:
    • テンプレートには、編集可能なフィールド(単一選択フィールドと複数選択フィールド、日付と時間ピッカー、数値入力フィールドおよびトグル・スイッチ)のプロパティが用意されていますが、テキストのアイテムやリンク読取り専用要素を追加することもできます。
    • 編集可能なフィールドは、autoSubmitプロパティを含む共通プロパティのセットを共有します。 これはオプションのプロパティですが、これを有効にすると(autoSubmit: true)フォームは、ユーザーがフォーム全体を実際に送信する前にフィールド値を送信できます。 このプロパティは、フォーム内の相互依存フィールドに使用できます。 たとえば、あるフィールドの表示が別のフィールドに入力された値に依存する場合、またはあるフィールドの値セットによって別のフィールドに許可される入力が制限される場合に、このプロパティを設定できます。

      ノート:

      Microsoft TeamsはautoSubmitをサポートしていません。
    • オプションのclientErrorMessageプロパティは、クライアント側の検証が制限されている場合、またはクライアント側の検証が失敗した場合に表示されるフィールド固有のエラー・メッセージを設定します。 たとえば、Slackチャネルを介して送信されたメッセージの場合、このプロパティがサポートされるのは、フォームが会話ページ内にある場合のみです。 フォーム・メッセージがモーダル・ダイアログにある場合は表示されません。

      ノート:

      このプロパティは、主にMicrosoft Teamsアダプティブ・カードを対象としており、フィールド・レベルの様々なエラーに対して1つのメッセージの使用を制限します。
  • actions - このノード内では、テンプレートは、FormSubmissionMessagePayloadを介してユーザー入力を発行する「フォーム提出」アクションを記述します。
  • channelCustomProperties - マルチ・モード・エクスペリエンスをサポートし、ユーザーがフォームを送信する前にテキストと音声の組合せを使用してフォーム・フィールドに入力する可能性があるため、テンプレートには、新しい入力フォームを会話に追加するかわりに、現在の入力フォーム・メッセージを更新するようにクライアント・チャネルに指示するreplaceMessageプロパティ構成が含まれます。

入力フォーム・フィールド

要素 サンプル・コード: マップ変数(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
はい
複数選択リスト 複数の選択をサポートするリスト。 このコンポーネントは、ユーザーがフィルタして選択できるピック・リストとして、または一連のチェック・ボックスとしてスタイル設定できます。

 - 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 attendees
はい
時間ピッカー ユーザーは、指定した範囲内の時間値を入力できます。 コンポーネントのmaxTimeおよびminTimeプロパティは、ユーザー入力を検証します。

      - 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
はい
Date Picker ユーザーが日、月および年を選択できるドロップダウン・カレンダがあるフィールド。 コンポーネントのmaxDateおよびminDateプロパティは、ユーザー入力を検証します。

 - 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
はい
数値入力 ユーザーによる数値入力を許可します。 minValueおよびmaxValueプロパティは、ユーザー入力を検証します。

     - displayType: numberInput
        minValue: 5
        serverErrorMessage: "${(amountError.value)!''}"
        maxValue: 500
        defaultValue: "${(submittedFields.value.Amount)!''}"
        name: Amount
        label: Amount
        placeholder: Enter expense amount
        clientErrorMessage: Amount is required and must be between 5 and 500.
        required: true
はい
テキスト入力 テキスト値を入力できます。

      - 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
はい
Toggle 2つのオプションのトグル・スイッチ(またはチャネルに応じてラジオ・ボタン・グループ)を表示します。

      - displayType: toggle
        defaultValue: "false"
        name: TipIncluded
        labelOn: Tip
        label: Tip Included?
        valueOff: "false"
        labelOff: No Tip
        valueOn: "true"
はい
テキスト 読取り専用インライン・テキスト

      - displayType: text
        alignment: left
        value: Read our expenses policy.
No - 読取り専用
リンク インライン・リンク

      - displayType: link
        alignment: left
        value: "http:www.oracle.com"
No - 読取り専用
アクション 「アクション」タイプのいずれか(リンク、ボタンまたはアイコン)。 次のスニペットでは、selectedOrder変数の値がitem行の値でスロットされると、アクション・リンクがレンダリングされます。
- displayType: action
  action:
    displayType: link
    payload:
      variables:
        selectedOrder: "${item.SO_CUSTOMER_PO_NUMBER}"
        action: order
       label: "${item.SO_CUSTOMER_PO_NUMBER}"
       type: postback
       label: CUSTOMER PO NUMBER
No - 読取り専用

カスタム・パラメータ

スキルでは、ダイアログ・フローから参照する顧客パラメータを定義できます。

スキルを公開した後に、これらのパラメータの値を変更できます(ただし、他のパラメータ詳細の変更や、パラメータの追加または削除はできません)。

カスタム・パラメータは、ダイアログ・フロー定義で使用するためにskill.system.config変数として公開されます。 たとえば、faHostNameという名前のカスタム・パラメータには、次の式でアクセスします:

${skill.system.config.faHostName}

スキルを追加するデジタル・アシスタントのスキル・パラメータに値を設定できるようにする場合は、da.でパラメータ名を設定します(ドット(.)を含む)。 たとえば、ホスト名のパラメータの名前としてda.faHostNameを使用できます。

この方法を使用すると、複数のスキルで同じ名前のパラメータを定義し、それらのスキルすべてをデジタル・アシスタントに追加して、共有パラメータの値をデジタル・アシスタントの1つの場所に設定できます。

カスタム・コンポーネントからパラメータにアクセスするには、カスタム・コンポーネントで入力パラメータを定義し、スキル・パラメータの値をそれに渡します。

ノート:

can'tは、カスタム・パラメータ(またはダイアログ・フローまたはカスタム・コンポーネントで直接skill.system.configというプレフィクスが付いたその他の変数)の値を設定します。

カスタム・パラメータの作成

  1. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「開発」>「スキル」を選択し、スキルを選択します。
  2. スキルの左側のナビゲーションで、設定アイコンをクリックします。
  3. 「Configuration」タブをクリックします。
  4. 「新規パラメータ」をクリックし、表示されるダイアログのフィールドに入力します。

セキュア・パラメータ

スキルがパラメータに依存しており、そのスキルまたはスキルのバージョンまたはクローンを開発している他のユーザーにその値を表示しない場合は、そのパラメータをセキュア・パラメータとして指定できます。 スキルの設定ページにナビゲートしたユーザーは、パラメータの名前を表示できますが、値は表示できません。

スキルをエクスポートする場合、パラメータの値はエクスポートに含まれません。

セキュア・パラメータを作成するには:

  • 「パラメータの作成」ダイアログで、「タイプ」ドロップダウンから「保護」を選択します。

公開済スキルでのカスタム・パラメータの値の変更

スキルを公開すると、カスタム・パラメータを追加または削除することはできませんが、その値は変更できます。 そのように行うには:

  1. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「開発」>「スキル」を選択し、スキルを選択します。

  2. スキルの左側のナビゲーションで、設定アイコンをクリックします。

  3. 「構成」タブを選択します。
  4. パラメータを選択し、「編集」をクリックして更新された値を入力します。

ノート:

da.で開始されるパラメータを持つスキルをデジタル・アシスタントに追加し、そのデジタル・アシスタントで使用される値を更新する場合は、「デジタル・アシスタント」に更新する必要があります。 そうしないと、デジタル・アシスタントにパラメータを追加したときの値がデジタル・アシスタントで使用されたままになります。 スキルの値を変更すると、そのスキルがスタンドアロンで使用されている場合、または後で別のデジタル・アシスタントに追加されている場合にのみ、そのスキルに影響します。

Digital Assistantのパラメータの値の設定

スキルが公開されてデジタル・アシスタントに追加されたら、da.がプレフィクスとして付加されたスキル・パラメータ(ピリオド(.)を含む)のデジタル・アシスタントで値を設定できます。

デジタル・アシスタントで同じ名前の"da."パラメータが複数のスキルで定義されている場合、そのパラメータの値はデジタル・アシスタントのスキル間で共有されます。

デジタル・アシスタントのパラメータの値を設定するには:

  1. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「開発>デジタル・アシスタント」を選択して、デジタル・アシスタントを選択します。
  2. デジタル・アシスタントの左側のナビゲーションで、スキル・アイコンをクリックします。
  3. パラメータを使用するスキルの1つを選択します。
  4. ページのパラメータ・セクションまでスクロールして、パラメータの値を入力します。

    更新されたパラメータ値は、そのパラメータを使用するすべてのスキルに適用されます。

インポートおよびエクスポート・フロー

「ビジュアル・モード」ダイアログ・フローは、「詳細」メニューから「インポート・フロー」および「選択したフローのエクスポート」オプションを使用してインポートおよびエクスポートできます。



エクスポート・フロー

最初にフローを選択し、「詳細」 > 「選択したフローのエクスポート」をクリックして、フローをエクスポートできます。 エクスポートされたダイアログ・フローは、ダイアログのYAML表現です。 このドキュメントは、スキルおよびフローの名前が付けられ、-Flow (PizzaSkill-pizza.ans.proc.veggiePizza-Flow.yamlなど)が付加されます。 YAML構文は、YAMLモードで作成されたスキル用に記述されたOBotMLではなく、ビジュアル・ダイアログ・モードに準拠しています。 フローをエクスポートする場合、このドキュメントのみをエクスポートします。 参照されている場合でも、次の依存関係は伴いません。
  • セキュリティ・コンポーネントの状態によって参照されるセキュリティ・サービス。
  • 様々なサービス統合状態のサービス
  • 翻訳サービス
  • インテント、エンティティ、リソース・バンドル
  • 参照タスク・フロー
インポート時に、スキルにすでに参照されているアーティファクトがある場合、フローは適切に実行されます。 そうしないと、インポートによって検証エラーがスローされます。

ノート:

メイン・フロー以外のすべてのフローをエクスポートできます。
ビジュアル・ダイアログ・モードのYAML表現の例を次に示します:
name: "WineryChats"
trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375"
type: "task"
version: "2.0"
interface:
  returnActions:
  - "done"
variables:
- name: "redWineCard"
  type: "map"
  system: false
defaultTransitions:
  actions:
    system.outOfOrderMessage: "outOfOrderMessageHandler"
    system.startTaskFlow: "buildRedWineMenu"
states:
  buildRedWineMenu:
    component: "System.SetVariable"
    properties:
      variable: "redWineCard"
      value: 
        Cabernet Sauvignon:
          image: "https://cdn.pixabay.com/photo/2016/05/24/16/16/wine-1412603__340.jpg"
          price: 35
          description: "Flavor of dark fruits like black cherry and blackberry along with a warm spice, vanilla and black pepper"
          title: "Cabernet Sauvignon"
...

インポート・フロー

フローをインポートするには、「詳細」 > 「インポート・フロー」をクリックし、ビジュアル・ダイアログ・モード用にフォーマットされたYAMLドキュメントを参照して選択します。 これらのフローは、ダイアログ・フローのエクスポート時に生成されるYAMLドキュメント(名前が<skill name> - <flow name> -Flow.yaml のもの)、またはビジュアル・ダイアログ・モードを使用して構築されたスキルのエクスポートされたZIPファイルのdialogsフォルダにあるYAMLファイルです。 OBotMLドキュメントを直接インポートすることはできません。 最初にスキルをmigrateする必要があります。

インポートできるフローにはいくつかの例外があります。
  • メイン・フロー(ビジュアル・ダイアログ・モード・スキルのエクスポートされたZIPファイルのdialogsフォルダにあるSystem.MainFlow.yamlファイル)はインポートできません。
  • スキルまたはインスタンスにすでに存在するフローはインポートできません。 フローがすでに存在する場合は、nameノードの値を変更することでYAMLドキュメントをアップロードできます。
    name: "WineryChats"
    trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375"
    type: "task"
    ...
    ただし、YAMLを編集するのではなく、フロー(「メニュー」 > 「選択したフローの複製」)を複製することもできます。
フローは、エンティティ、インテント、リソース・バンドル、スキルに存在しないバックエンド・サービスなどのアーティファクトを参照する場合でも、正常にインポートできます。 ただし、これらのインポートは検証errorsこれは警告アイコンのイメージです。になります。 検証エラーのリストを取得するには、インポート後に表示されるエラー・メッセージで「検証結果の表示」をクリックします。
これはインポート・フロー検証エラー・メッセージのイメージです。