2016-08-11 6 views
1

私はMSボットフレームワークを使用していますが、私は単なるシナリオの代わりに分岐できるダイアログを処理するボットを構築しようとしています。Microsoftボットフレームワークで分岐ダイアログを作成する方法

たとえば、最初のメッセージでボットはユーザーに質問します。答えに応じて、3つの子ダイアログの1つが起動し、ユーザーの入力に応じて子ダイアログが起動されます。

だから私はこのような何かを探しています:Microsoftが提供する例はどちらか平坦である

if (userAnswer == "option 1") { 
    LaunchSupportDialog(); 
} 
else { 
    LaunchNewOrderDialog(); 
} 

(サンドイッチの注文を処理することができます例えばボット、枝せず、連続して各ステップを実行する)、またはここで、ブランチングはユーザーの意図に基づいてLUISによって自動的に行われます。

私はもっとスマートなものを探していますので、私はちょうどそのような方法やクラスを見逃しているようです。

ドキュメントの状態:アクティブなダイアログのスタックの

明示的な管理は、明示的に大きな会話に ダイアログを構成する、 IDialogStack.CallとIDialogStack.Doneによって可能です。 Fluent Chainメソッドを使用してアクティブなダイアログのスタックを暗黙的に 管理することもできます。

ただし、新しいIDialogStackオブジェクトを作成する方法や、明示的に.Call()または.Done()を呼び出す方法や、そのためのChainクラスメソッドを使用した例は見つかりませんでした。

答えて

2

1つのオプションは、分岐のためにSwitch構造を提供するチェーンを使用することです。

IDialog<string> MyDialog = 
    Chain 
    .PostToChain() 
    .Switch(
     new Case<string, IDialog<string>>(userAnswer => userAnswer == "option 1", (ctx, _) => Option1Dialog), 
     Chain.Default<string, IDialog<string>>((ctx, _) => DefaultDialog)) 
    .Unwrap() 
    .Select(dialogResult => $"The result is: {dialogResult}") 
    .PostToUser(); 

この例では、ユーザからのメッセージを待つメッセージ(Option1Dialog又はDefaultDialog、タイプIDialog<string>の両方)に応じてダイアログを開始し、ダイアログ結果を変換し、それをユーザに送り返します。

詳細については、ドキュメントのthisを参照してください(残念ながら、例はあまりありません)。

関連する問題