その他のタスク
ここでは、ユーザー認証、自動採番、リソース・バンドル、入力フォームの作成、カスタム・パラメータの作成、フローのインポートとエクスポートなど、Visual Flow Designerの他の様々なタスクに関するいくつかのトピックを示します。
ユーザー認可
フロー内の特定の時点で、ユーザー認可を適用できます。
これは、次を実行して実現します:
- 認可を強制する状態で、「承認が必要」プロパティを
True
に設定します。 このプロパティは、状態プロパティ・インスペクタの「一般」タブにあります。このような状態に達したユーザーがまだ認可されていない場合、OAuth状態を使用した認可が起動され、認可が必要な状態がフローによって起動されます。
- 認可コンポーネントを作成し、フロー「ユーザーを認可」標準遷移イベントにマップします:
- フローを選択し、フロー「フロー」タブを選択します。
- フローの「イベント」タイルをダブルクリックして展開します。
- 「ユーザーを認可」タイルの上にマウスを置き、表示される省略記号(…)ボタンをクリックし、「状態の追加」を選択します。
- テンプレート・ピッカーの「セキュリティ」カテゴリから、コンポーネントを選択し、状態の名前を指定して、「挿入」をクリックします。
使用可能な各テンプレートの詳細は、「セキュリティ・テンプレート」を参照してください。
- コンポーネント・プロパティ・インスペクタで、コンポーネント・プロパティとその遷移アクションを構成します。
レスポンス・アイテムの自動採番
自動採番機能を使用すると、ボタンのプリフィクスと、レスポンス内の番号付きのオプションをリストできます。
ユーザーがタッチ・ジェスチャを使用できない場合でも、数値を入力することでボタンのポストバック・アクションをトリガーできます。 この機能は、特にテキスト・チャネルに役立ちます。
自動採番はスキル・レベルで構成します。
自動採番を構成するには:
- スキルの左側のナビゲーションで、
を選択します。
- 「構成」タブを選択します。
- 「タスク・フローでのポストバック処理での自動採番の有効化」の値を設定します。
すべてのチャネルの自動採番を有効にする場合は、値を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式で参照されるリソース・バンドルを選択するのに役立ちます。ユーザー入力フォーム・メッセージ
ダイアログ・フローでは、入力フォームを作成することもできます。
入力フォームは、ユーザー情報を収集する最も迅速でエラーの少ない方法である場合があります。 スキルは、ユーザーを一連の質問の対象にするのではなく、テキスト入力フィールド、時間ピッカー、日付ピッカー、切替えスイッチなどの入力要素を含むフォームを送信することで、有効な入力を提供するようにユーザーをガイドできます。
「
図editable-form-example.pngの説明」
- 「状態の追加」ダイアログで、「ユーザー・メッセージング」 > 「表およびフォームの作成」を選択します。 次に、「入力フォームの作成」を選択します。
- フォームのレイアウト、アクションおよび「編集可能フィールドと読取り専用フィールド」を作成するには、最初に
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
レスポンス・タイプのテンプレートに関する注意事項を次に示します:
items
、actions
およびchannelCustomProperties
に提供されるプロパティは、すべてeditFormMessagePayload
オブジェクトに固有です。 特に、このペイロードには、ユーザーが受信した入力フォーム・メッセージの全体的なレイアウト、フォーム・フィールド(「読取り専用および編集可能」)、およびプラットフォーム固有のUIレンダリングおよびフォーム送信動作のチャネル固有のカスタマイズの説明が含まれています。- テンプレートは、各アイテムおよび
actions
ノード内で、ユーザー入力を保持するsubmittedFields
というフロー・レベルの変数を参照します。 これは、ダイアログ・フローにinputForm状態を追加したときに生成されるマップ変数です。ノート:
必要に応じて、個々の変数またはコンポジット・バッグ変数をsubmittedFields
変数のかわりに参照できます。 items
:- テンプレートには、編集可能なフィールド(単一選択フィールドと複数選択フィールド、日付と時間ピッカー、数値入力フィールドおよびトグル・スイッチ)のプロパティが用意されていますが、テキストのアイテムやリンク読取り専用要素を追加することもできます。
- 編集可能なフィールドは、
autoSubmit
プロパティを含む共通プロパティのセットを共有します。 これはオプションのプロパティですが、これを有効にすると(autoSubmit: true
)フォームは、ユーザーがフォーム全体を実際に送信する前にフィールド値を送信できます。 このプロパティは、フォーム内の相互依存フィールドに使用できます。 たとえば、あるフィールドの表示が別のフィールドに入力された値に依存する場合、またはあるフィールドの値セットによって別のフィールドに許可される入力が制限される場合に、このプロパティを設定できます。ノート:
Microsoft TeamsはautoSubmit
をサポートしていません。 - オプションの
clientErrorMessage
プロパティは、クライアント側の検証が制限されている場合、またはクライアント側の検証が失敗した場合に表示されるフィールド固有のエラー・メッセージを設定します。 たとえば、Slackチャネルを介して送信されたメッセージの場合、このプロパティがサポートされるのは、フォームが会話ページ内にある場合のみです。 フォーム・メッセージがモーダル・ダイアログにある場合は表示されません。ノート:
このプロパティは、主にMicrosoft Teamsアダプティブ・カードを対象としており、フィールド・レベルの様々なエラーに対して1つのメッセージの使用を制限します。
actions
- このノード内では、テンプレートは、FormSubmissionMessagePayload
を介してユーザー入力を発行する「フォーム提出」アクションを記述します。channelCustomProperties
- マルチ・モード・エクスペリエンスをサポートし、ユーザーがフォームを送信する前にテキストと音声の組合せを使用してフォーム・フィールドに入力する可能性があるため、テンプレートには、新しい入力フォームを会話に追加するかわりに、現在の入力フォーム・メッセージを更新するようにクライアント・チャネルに指示するreplaceMessage
プロパティ構成が含まれます。
入力フォーム・フィールド
要素 | 例 | サンプル・コード: マップ変数(submittedFields) | 編集可能? |
---|---|---|---|
単一選択リスト | 事前定義済リストからアイテムを検索および選択できます。 このコンポーネントは、ユーザーが問い合せて選択できるオプションのリストとしてスタイル設定できます。 |
|
はい |
複数選択リスト | 複数の選択をサポートするリスト。 このコンポーネントは、ユーザーがフィルタして選択できるピック・リストとして、または一連のチェック・ボックスとしてスタイル設定できます。 |
|
はい |
時間ピッカー | ユーザーは、指定した範囲内の時間値を入力できます。 コンポーネントのmaxTime およびminTime プロパティは、ユーザー入力を検証します。 |
|
はい |
Date Picker | ユーザーが日、月および年を選択できるドロップダウン・カレンダがあるフィールド。 コンポーネントのmaxDate およびminDate プロパティは、ユーザー入力を検証します。 |
|
はい |
数値入力 | ユーザーによる数値入力を許可します。 minValue およびmaxValue プロパティは、ユーザー入力を検証します。 |
|
はい |
テキスト入力 | テキスト値を入力できます。 |
|
はい |
Toggle | 2つのオプションのトグル・スイッチ(またはチャネルに応じてラジオ・ボタン・グループ)を表示します。 |
|
はい |
テキスト | 読取り専用インライン・テキスト |
|
No - 読取り専用 |
リンク | インライン・リンク |
|
No - 読取り専用 |
アクション | 「アクション」タイプのいずれか(リンク、ボタンまたはアイコン)。 | 次のスニペットでは、selectedOrder 変数の値がitem 行の値でスロットされると、アクション・リンクがレンダリングされます。
|
No - 読取り専用 |
カスタム・パラメータ
スキルでは、ダイアログ・フローから参照する顧客パラメータを定義できます。
スキルを公開した後に、これらのパラメータの値を変更できます(ただし、他のパラメータ詳細の変更や、パラメータの追加または削除はできません)。
カスタム・パラメータは、ダイアログ・フロー定義で使用するためにskill.system.config
変数として公開されます。 たとえば、faHostName
という名前のカスタム・パラメータには、次の式でアクセスします:
${skill.system.config.faHostName}
スキルを追加するデジタル・アシスタントのスキル・パラメータに値を設定できるようにする場合は、da.
でパラメータ名を設定します(ドット(.)を含む)。 たとえば、ホスト名のパラメータの名前としてda.faHostName
を使用できます。
この方法を使用すると、複数のスキルで同じ名前のパラメータを定義し、それらのスキルすべてをデジタル・アシスタントに追加して、共有パラメータの値をデジタル・アシスタントの1つの場所に設定できます。
カスタム・コンポーネントからパラメータにアクセスするには、カスタム・コンポーネントで入力パラメータを定義し、スキル・パラメータの値をそれに渡します。
ノート:
can'tは、カスタム・パラメータ(またはダイアログ・フローまたはカスタム・コンポーネントで直接skill.system.config
というプレフィクスが付いたその他の変数)の値を設定します。
カスタム・パラメータの作成
をクリックしてサイド・メニューを開き、「開発」>「スキル」を選択し、スキルを選択します。
- スキルの左側のナビゲーションで、
をクリックします。
- 「Configuration」タブをクリックします。
- 「新規パラメータ」をクリックし、表示されるダイアログのフィールドに入力します。
セキュア・パラメータ
スキルがパラメータに依存しており、そのスキルまたはスキルのバージョンまたはクローンを開発している他のユーザーにその値を表示しない場合は、そのパラメータをセキュア・パラメータとして指定できます。 スキルの設定ページにナビゲートしたユーザーは、パラメータの名前を表示できますが、値は表示できません。
スキルをエクスポートする場合、パラメータの値はエクスポートに含まれません。
セキュア・パラメータを作成するには:
- 「パラメータの作成」ダイアログで、「タイプ」ドロップダウンから「保護」を選択します。
公開済スキルでのカスタム・パラメータの値の変更
スキルを公開すると、カスタム・パラメータを追加または削除することはできませんが、その値は変更できます。 そのように行うには:
-
をクリックしてサイド・メニューを開き、「開発」>「スキル」を選択し、スキルを選択します。
-
スキルの左側のナビゲーションで、
をクリックします。
- 「構成」タブを選択します。
-
パラメータを選択し、「編集」をクリックして更新された値を入力します。
ノート:
da.
で開始されるパラメータを持つスキルをデジタル・アシスタントに追加し、そのデジタル・アシスタントで使用される値を更新する場合は、「デジタル・アシスタント」に更新する必要があります。 そうしないと、デジタル・アシスタントにパラメータを追加したときの値がデジタル・アシスタントで使用されたままになります。 スキルの値を変更すると、そのスキルがスタンドアロンで使用されている場合、または後で別のデジタル・アシスタントに追加されている場合にのみ、そのスキルに影響します。
Digital Assistantのパラメータの値の設定
スキルが公開されてデジタル・アシスタントに追加されたら、da.
がプレフィクスとして付加されたスキル・パラメータ(ピリオド(.)を含む)のデジタル・アシスタントで値を設定できます。
デジタル・アシスタントで同じ名前の"da.
"パラメータが複数のスキルで定義されている場合、そのパラメータの値はデジタル・アシスタントのスキル間で共有されます。
デジタル・アシスタントのパラメータの値を設定するには:
をクリックしてサイド・メニューを開き、「開発>デジタル・アシスタント」を選択して、デジタル・アシスタントを選択します。
- デジタル・アシスタントの左側のナビゲーションで、
をクリックします。
- パラメータを使用するスキルの1つを選択します。
- ページのパラメータ・セクションまでスクロールして、パラメータの値を入力します。
更新されたパラメータ値は、そのパラメータを使用するすべてのスキルに適用されます。
インポートおよびエクスポート・フロー
「ビジュアル・モード」ダイアログ・フローは、「詳細」メニューから「インポート・フロー」および「選択したフローのエクスポート」オプションを使用してインポートおよびエクスポートできます。
エクスポート・フロー
-Flow
(PizzaSkill-pizza.ans.proc.veggiePizza-Flow.yaml
など)が付加されます。 YAML構文は、YAMLモードで作成されたスキル用に記述されたOBotMLではなく、ビジュアル・ダイアログ・モードに準拠しています。 フローをエクスポートする場合、このドキュメントのみをエクスポートします。 参照されている場合でも、次の依存関係は伴いません。
- セキュリティ・コンポーネントの状態によって参照されるセキュリティ・サービス。
- 様々なサービス統合状態のサービス
- 翻訳サービス
- インテント、エンティティ、リソース・バンドル
- 参照タスク・フロー
ノート:
メイン・フロー以外のすべてのフローをエクスポートできます。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ドキュメントをアップロードできます。
ただし、YAMLを編集するのではなく、フロー(「メニュー」 > 「選択したフローの複製」)を複製することもできます。name: "WineryChats" trackingId: "D6BFE43B-D774-412A-91F6-4582D04B3375" type: "task" ...

